Fixed vsqrt.ss intrinsic usage - order of input operands was wrong.
authorElena Demikhovsky <elena.demikhovsky@intel.com>
Tue, 29 Nov 2011 15:00:45 +0000 (15:00 +0000)
committerElena Demikhovsky <elena.demikhovsky@intel.com>
Tue, 29 Nov 2011 15:00:45 +0000 (15:00 +0000)
Added a test.
Thanks Bruno for reviewing the patch.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145403 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86InstrSSE.td
test/CodeGen/X86/avx-arith.ll

index 97737d1bbaf16876e2573c3e56439b456755084c..011d252ac78008e3fc3db876decafd35423af7cc 100644 (file)
@@ -2872,7 +2872,7 @@ multiclass sse1_fp_unop_s_avx<bits<8> opc, string OpcodeStr> {
                 !strconcat(OpcodeStr,
                            "ss\t{$src2, $src1, $dst|$dst, $src1, $src2}"), []>;
   def SSm_Int : SSI<opc, MRMSrcMem, (outs VR128:$dst),
-                (ins ssmem:$src1, VR128:$src2),
+                (ins VR128:$src1, ssmem:$src2),
                 !strconcat(OpcodeStr,
                            "ss\t{$src2, $src1, $dst|$dst, $src1, $src2}"), []>;
 }
index 59988ca8b68d27071214491aaec34c565ae376d8..4aa337033df62c460a4c8f38aef797ba3a8407af 100644 (file)
@@ -259,3 +259,14 @@ define <4 x i64> @mul-v4i64(<4 x i64> %i, <4 x i64> %j) nounwind readnone {
   ret <4 x i64> %x
 }
 
+declare <4 x float> @llvm.x86.sse.sqrt.ss(<4 x float>) nounwind readnone
+
+define <4 x float> @int_sqrt_ss() {
+; CHECK: int_sqrt_ss
+; CHECK: vsqrtss
+ %x0 = load float addrspace(1)* undef, align 8
+ %x1 = insertelement <4 x float> undef, float %x0, i32 0
+ %x2 = call <4 x float> @llvm.x86.sse.sqrt.ss(<4 x float> %x1) nounwind
+ ret <4 x float> %x2
+}
+