Move all inline-asm-fpstack tests to a single file.
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Mon, 27 Jun 2011 17:27:37 +0000 (17:27 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Mon, 27 Jun 2011 17:27:37 +0000 (17:27 +0000)
Also fix some of the tests that were actually testing wrong behavior -
An input operand in {st} is only popped by the inline asm when {st} is
also in the clobber list.

The original bug reports all had ~{st} clobbers as they should.

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

test/CodeGen/X86/inline-asm-fpstack.ll
test/CodeGen/X86/inline-asm-fpstack2.ll [deleted file]
test/CodeGen/X86/inline-asm-fpstack3.ll [deleted file]
test/CodeGen/X86/inline-asm-fpstack4.ll [deleted file]
test/CodeGen/X86/inline-asm-fpstack5.ll [deleted file]

index 6348fcaf7a07b14f364dc06bc58b8c1b18a5d398..d15f7ff1cc6b012b5d7b368a25d7dfe1a191198d 100644 (file)
@@ -26,7 +26,7 @@ define double @test2() {
 ; CHECK-NOT: fstp
 ; CHECK: ret
 define void @test3(x86_fp80 %X) {
-        call void asm sideeffect "frob ", "{st(0)},~{dirflag},~{fpsr},~{flags}"( x86_fp80 %X)
+        call void asm sideeffect "frob ", "{st(0)},~{st},~{dirflag},~{fpsr},~{flags}"( x86_fp80 %X)
         ret void
 }
 
@@ -37,7 +37,7 @@ define void @test3(x86_fp80 %X) {
 ; CHECK-NOT: fstp
 ; CHECK: ret
 define void @test4(double %X) {
-        call void asm sideeffect "frob ", "{st(0)},~{dirflag},~{fpsr},~{flags}"( double %X)
+        call void asm sideeffect "frob ", "{st(0)},~{st},~{dirflag},~{fpsr},~{flags}"( double %X)
         ret void
 }
 
@@ -49,7 +49,7 @@ define void @test4(double %X) {
 ; CHECK: ret
 define void @test5(double %X) {
         %Y = fadd double %X, 123.0
-        call void asm sideeffect "frob ", "{st(0)},~{dirflag},~{fpsr},~{flags}"( double %Y)
+        call void asm sideeffect "frob ", "{st(0)},~{st},~{dirflag},~{fpsr},~{flags}"( double %Y)
         ret void
 }
 
@@ -86,3 +86,77 @@ entry:
        ret void
 }
 
+; PR4185
+; Passing a non-killed value to asm in {st}.
+; Make sure it is duped before.
+; asm kills st(0), so we shouldn't pop anything
+; CHECK: testPR4185
+; CHECK: fld %st(0)
+; CHECK: fistpl
+; CHECK-NOT: fstp
+; CHECK: fistpl
+; CHECK-NOT: fstp
+; CHECK: ret
+; A valid alternative would be to remat the constant pool load before each
+; inline asm.
+define void @testPR4185() {
+return:
+       call void asm sideeffect "fistpl $0", "{st},~{st}"(double 1.000000e+06)
+       call void asm sideeffect "fistpl $0", "{st},~{st}"(double 1.000000e+06)
+       ret void
+}
+
+; PR4459
+; The return value from ceil must be duped before being consumed by asm.
+; CHECK: testPR4459
+; CHECK: ceil
+; CHECK: fld %st(0)
+; CHECK-NOT: fxch
+; CHECK: fistpl
+; CHECK-NOT: fxch
+; CHECK: fstpt
+; CHECK: test
+define void @testPR4459(x86_fp80 %a) {
+entry:
+       %0 = call x86_fp80 @ceil(x86_fp80 %a)
+       call void asm sideeffect "fistpl $0", "{st},~{st}"( x86_fp80 %0)
+       call void @test3(x86_fp80 %0 )
+        ret void
+}
+declare x86_fp80 @ceil(x86_fp80)
+
+; PR4484
+; test1 leaves a value on the stack that is needed after the asm.
+; CHECK: testPR4484
+; CHECK: test1
+; CHECK-NOT: fstp
+; Load %a from stack after ceil
+; CHECK: fldt
+; CHECK-NOT: fxch
+; CHECK: fistpl
+; CHECK-NOT: fstp
+; Set up call to test.
+; CHECK: fstpt
+; CHECK: test
+define void @testPR4484(x86_fp80 %a) {
+entry:
+       %0 = call x86_fp80 @test1()
+       call void asm sideeffect "fistpl $0", "{st},~{st}"(x86_fp80 %a)
+       call void @test3(x86_fp80 %0)
+       ret void
+}
+
+; PR4485
+; CHECK: testPR4485
+define void @testPR4485(x86_fp80* %a) {
+entry:
+       %0 = load x86_fp80* %a, align 16
+       %1 = fmul x86_fp80 %0, 0xK4006B400000000000000
+       %2 = fmul x86_fp80 %1, 0xK4012F424000000000000
+       tail call void asm sideeffect "fistpl $0", "{st},~{st}"(x86_fp80 %2)
+       %3 = load x86_fp80* %a, align 16
+       %4 = fmul x86_fp80 %3, 0xK4006B400000000000000
+       %5 = fmul x86_fp80 %4, 0xK4012F424000000000000
+       tail call void asm sideeffect "fistpl $0", "{st},~{st}"(x86_fp80 %5)
+       ret void
+}
diff --git a/test/CodeGen/X86/inline-asm-fpstack2.ll b/test/CodeGen/X86/inline-asm-fpstack2.ll
deleted file mode 100644 (file)
index 78037e0..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-; RUN: llc < %s -march=x86 | FileCheck %s
-; PR4185
-
-; Passing a non-killed value to asm in {st}.
-; Make sure it is duped before.
-; asm kills st(0), so we shouldn't pop anything
-; CHECK: fld %st(0)
-; CHECK: fistpl
-; CHECK-NOT: fstp
-; CHECK: fistpl
-; CHECK-NOT: fstp
-; CHECK: ret
-define void @test() {
-return:
-       call void asm sideeffect "fistpl $0", "{st}"(double 1.000000e+06)
-       call void asm sideeffect "fistpl $0", "{st}"(double 1.000000e+06)
-       ret void
-}
-
-; A valid alternative would be to remat the constant pool load before each
-; inline asm.
diff --git a/test/CodeGen/X86/inline-asm-fpstack3.ll b/test/CodeGen/X86/inline-asm-fpstack3.ll
deleted file mode 100644 (file)
index a609681..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-; RUN: llc < %s -march=x86 | FileCheck %s
-; PR4459
-
-; The return value from ceil must be duped before being consumed by asm.
-; CHECK: ceil
-; CHECK: fld %st(0)
-; CHECK-NOT: fxch
-; CHECK: fistpl
-; CHECK-NOT: fxch
-; CHECK: fstpt
-; CHECK: test
-define void @test2(x86_fp80 %a) {
-entry:
-       %0 = call x86_fp80 @ceil(x86_fp80 %a)
-       call void asm sideeffect "fistpl $0", "{st}"( x86_fp80 %0)
-       call void @test(x86_fp80 %0 )
-        ret void
-}
-declare x86_fp80 @ceil(x86_fp80)
-declare void @test(x86_fp80)
diff --git a/test/CodeGen/X86/inline-asm-fpstack4.ll b/test/CodeGen/X86/inline-asm-fpstack4.ll
deleted file mode 100644 (file)
index ec572b4..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-; RUN: llc < %s -march=x86 | FileCheck %s
-; PR4484
-
-; ceil leaves a value on the stack that is needed after the asm.
-; CHECK: ceil
-; CHECK-NOT: fstp
-; Load %a from stack after ceil
-; CHECK: fldt
-; CHECK-NOT: fxch
-; CHECK: fistpl
-; CHECK-NOT: fstp
-; Set up call to test.
-; CHECK: fstpt
-; CHECK: test
-define void @test2(x86_fp80 %a) {
-entry:
-       %0 = call x86_fp80 @ceil()
-       call void asm sideeffect "fistpl $0", "{st},~{st}"(x86_fp80 %a)
-       call void @test(x86_fp80 %0)
-       ret void
-}
-
-declare x86_fp80 @ceil()
-declare void @test(x86_fp80)
diff --git a/test/CodeGen/X86/inline-asm-fpstack5.ll b/test/CodeGen/X86/inline-asm-fpstack5.ll
deleted file mode 100644 (file)
index 8b219cf..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-; RUN: llc < %s -march=x86
-; PR4485
-
-define void @test(x86_fp80* %a) {
-entry:
-       %0 = load x86_fp80* %a, align 16
-       %1 = fmul x86_fp80 %0, 0xK4006B400000000000000
-       %2 = fmul x86_fp80 %1, 0xK4012F424000000000000
-       tail call void asm sideeffect "fistpl $0", "{st},~{st}"(x86_fp80 %2)
-       %3 = load x86_fp80* %a, align 16
-       %4 = fmul x86_fp80 %3, 0xK4006B400000000000000
-       %5 = fmul x86_fp80 %4, 0xK4012F424000000000000
-       tail call void asm sideeffect "fistpl $0", "{st},~{st}"(x86_fp80 %5)
-       ret void
-}