diff options
author | dim <dim@FreeBSD.org> | 2014-11-24 18:43:37 +0000 |
---|---|---|
committer | dim <dim@FreeBSD.org> | 2014-11-24 18:43:37 +0000 |
commit | 82ca21468e7fe6a5112961ba86434579bed3f204 (patch) | |
tree | c2772f1f62ff857fee7802d46eb79f45d45d6d54 /contrib/llvm/patches/patch-r271597-clang-r217410-i386-garbage-float.diff | |
parent | 6148c19c738a92f344008aa3f88f4e008bada0ee (diff) | |
download | FreeBSD-src-82ca21468e7fe6a5112961ba86434579bed3f204.zip FreeBSD-src-82ca21468e7fe6a5112961ba86434579bed3f204.tar.gz |
Cleanup patch set, and update README.TXT. Add three new patches.
Diffstat (limited to 'contrib/llvm/patches/patch-r271597-clang-r217410-i386-garbage-float.diff')
-rw-r--r-- | contrib/llvm/patches/patch-r271597-clang-r217410-i386-garbage-float.diff | 64 |
1 files changed, 0 insertions, 64 deletions
diff --git a/contrib/llvm/patches/patch-r271597-clang-r217410-i386-garbage-float.diff b/contrib/llvm/patches/patch-r271597-clang-r217410-i386-garbage-float.diff deleted file mode 100644 index c16279a..0000000 --- a/contrib/llvm/patches/patch-r271597-clang-r217410-i386-garbage-float.diff +++ /dev/null @@ -1,64 +0,0 @@ -Pull in r217410 from upstream llvm trunk (by Bob Wilson): - - Set trunc store action to Expand for all X86 targets. - - When compiling without SSE2, isTruncStoreLegal(F64, F32) would return - Legal, whereas with SSE2 it would return Expand. And since the Target - doesn't seem to actually handle a truncstore for double -> float, it - would just output a store of a full double in the space for a float - hence overwriting other bits on the stack. - - Patch by Luqman Aden! - -This should fix clang -O0 on i386 assigning garbage to floats, in -certain scenarios. - -Introduced here: http://svnweb.freebsd.org/changeset/base/271597 - -Index: lib/Target/X86/X86ISelLowering.cpp -=================================================================== ---- lib/Target/X86/X86ISelLowering.cpp (revision 208032) -+++ lib/Target/X86/X86ISelLowering.cpp (working copy) -@@ -300,6 +300,8 @@ void X86TargetLowering::resetOperationActions() { - setTruncStoreAction(MVT::i32, MVT::i8 , Expand); - setTruncStoreAction(MVT::i16, MVT::i8, Expand); - -+ setTruncStoreAction(MVT::f64, MVT::f32, Expand); -+ - // SETOEQ and SETUNE require checking two conditions. - setCondCodeAction(ISD::SETOEQ, MVT::f32, Expand); - setCondCodeAction(ISD::SETOEQ, MVT::f64, Expand); -@@ -1011,8 +1013,6 @@ void X86TargetLowering::resetOperationActions() { - AddPromotedToType (ISD::SELECT, VT, MVT::v2i64); - } - -- setTruncStoreAction(MVT::f64, MVT::f32, Expand); -- - // Custom lower v2i64 and v2f64 selects. - setOperationAction(ISD::LOAD, MVT::v2f64, Legal); - setOperationAction(ISD::LOAD, MVT::v2i64, Legal); -Index: test/CodeGen/X86/dont-trunc-store-double-to-float.ll -=================================================================== ---- test/CodeGen/X86/dont-trunc-store-double-to-float.ll (revision 0) -+++ test/CodeGen/X86/dont-trunc-store-double-to-float.ll (working copy) -@@ -0,0 +1,20 @@ -+; RUN: llc -march=x86 < %s | FileCheck %s -+ -+; CHECK-LABEL: @bar -+; CHECK: movl $1074339512, -+; CHECK: movl $1374389535, -+; CHECK: movl $1078523331, -+define void @bar() unnamed_addr { -+entry-block: -+ %a = alloca double -+ %b = alloca float -+ -+ store double 3.140000e+00, double* %a -+ %0 = load double* %a -+ -+ %1 = fptrunc double %0 to float -+ -+ store float %1, float* %b -+ -+ ret void -+} |