Index: test/CodeGen/X86/invalid-gcc-snan-conversion.ll |
diff --git a/test/CodeGen/X86/invalid-gcc-snan-conversion.ll b/test/CodeGen/X86/invalid-gcc-snan-conversion.ll |
new file mode 100644 |
index 0000000000000000000000000000000000000000..416f0c0b83a1b67969e586cf273a51931a7eed70 |
--- /dev/null |
+++ b/test/CodeGen/X86/invalid-gcc-snan-conversion.ll |
@@ -0,0 +1,25 @@ |
+; If LLVM is built in Release mode with a buggy gcc under x86-32, it |
+; may transform 64-bit constants with a signaling NaN bit pattern into |
+; a quiet NaN bit pattern. See |
+; http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58416 |
+ |
+; RUN: llc -march=x86-64 < %s | FileCheck %s |
+ |
+define i32 @main() #0 { |
+entry: |
+ %retval = alloca i32, align 4 |
+ %tmp = alloca i64, align 8 |
+ store i32 0, i32* %retval |
+; -4503599627370495 == 0xfff0000000000001 |
+ store i64 -4503599627370495, i64* %tmp, align 8 |
+ %0 = load i64* %tmp, align 8 |
+ call void @Consume(i64 %0) |
+ ret i32 0 |
+} |
+ |
+; CHECK: main: |
+; make sure 0xfff0000000000001 didn't change to 0xfff8000000000001 |
+; CHECK: 0xFFF00000 |
+; CHECK-NOT: 0xFFF80000 |
+ |
+declare void @Consume(i64) #1 |