Re-land r237175: [X86] Always return the sret parameter in eax/rax ...
[oota-llvm.git] / test / CodeGen / X86 / complex-fca.ll
index 8ad38a4ee5c03a3f7ec03557d4c059cebffef54b..78b27b7dc3f516b924972bb3ec23cb0546b1f0c9 100644 (file)
@@ -1,17 +1,21 @@
-; RUN: llc < %s -march=x86 | grep mov | count 2
-
-; Skip this on Windows as there is no ccosl and sret behaves differently.
-; XFAIL: pc-win32
+; RUN: llc < %s -march=x86 | FileCheck %s
 
 define void @ccosl({ x86_fp80, x86_fp80 }* noalias sret %agg.result, { x86_fp80, x86_fp80 } %z) nounwind {
 entry:
-       %z8 = extractvalue { x86_fp80, x86_fp80 } %z, 0
-       %z9 = extractvalue { x86_fp80, x86_fp80 } %z, 1
-       %0 = fsub x86_fp80 0xK80000000000000000000, %z9
-       %insert = insertvalue { x86_fp80, x86_fp80 } undef, x86_fp80 %0, 0
-       %insert7 = insertvalue { x86_fp80, x86_fp80 } %insert, x86_fp80 %z8, 1
-       call void @ccoshl({ x86_fp80, x86_fp80 }* noalias sret %agg.result, { x86_fp80, x86_fp80 } %insert7) nounwind
-       ret void
+  %z8 = extractvalue { x86_fp80, x86_fp80 } %z, 0
+  %z9 = extractvalue { x86_fp80, x86_fp80 } %z, 1
+  %0 = fsub x86_fp80 0xK80000000000000000000, %z9
+  %insert = insertvalue { x86_fp80, x86_fp80 } undef, x86_fp80 %0, 0
+  %insert7 = insertvalue { x86_fp80, x86_fp80 } %insert, x86_fp80 %z8, 1
+  call void @ccoshl({ x86_fp80, x86_fp80 }* noalias sret %agg.result, { x86_fp80, x86_fp80 } %insert7) nounwind
+  ret void
 }
 
+; CHECK-LABEL: ccosl:
+; CHECK:         movl    {{[0-9]+}}(%esp), %[[sret_reg:[^ ]+]]
+; CHECK:         movl    %[[sret_reg]], (%esp)
+; CHECK:         calll   {{.*ccoshl.*}}
+; CHECK:         movl    %[[sret_reg]], %eax
+; CHECK:         retl
+
 declare void @ccoshl({ x86_fp80, x86_fp80 }* noalias sret, { x86_fp80, x86_fp80 }) nounwind