aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNadav Rotem <nadav.rotem@intel.com>2012-07-16 18:34:53 +0000
committerNadav Rotem <nadav.rotem@intel.com>2012-07-16 18:34:53 +0000
commit7ee0e5ae6093dba18ecc5eaafb91e8fa82f4c409 (patch)
treea0ea68dae4d656b5bdb1b54ffff831937a155665
parentb1162b8d4be6680c9f2c9f3124ce279876e2bb15 (diff)
downloadexternal_llvm-7ee0e5ae6093dba18ecc5eaafb91e8fa82f4c409.zip
external_llvm-7ee0e5ae6093dba18ecc5eaafb91e8fa82f4c409.tar.gz
external_llvm-7ee0e5ae6093dba18ecc5eaafb91e8fa82f4c409.tar.bz2
Make ComputeDemandedBits return a deterministic result when computing an AssertZext value.
In the added testcase the constant 55 was behind an AssertZext of type i1, and ComputeDemandedBits reported that some of the bits were both known to be one and known to be zero. Together with Michael Kuperstein <michael.m.kuperstein@intel.com> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160305 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/CodeGen/SelectionDAG/SelectionDAG.cpp1
-rw-r--r--test/CodeGen/X86/2012-07-16-fp2ui-i1.ll12
2 files changed, 13 insertions, 0 deletions
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
index 3947648..cfe7170 100644
--- a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -1965,6 +1965,7 @@ void SelectionDAG::ComputeMaskedBits(SDValue Op, APInt &KnownZero,
APInt InMask = APInt::getLowBitsSet(BitWidth, VT.getSizeInBits());
ComputeMaskedBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1);
KnownZero |= (~InMask);
+ KnownOne &= (~KnownZero);
return;
}
case ISD::FGETSIGN:
diff --git a/test/CodeGen/X86/2012-07-16-fp2ui-i1.ll b/test/CodeGen/X86/2012-07-16-fp2ui-i1.ll
new file mode 100644
index 0000000..17533a1
--- /dev/null
+++ b/test/CodeGen/X86/2012-07-16-fp2ui-i1.ll
@@ -0,0 +1,12 @@
+; RUN: llc < %s -march=x86-64 -mcpu=corei7
+
+define void @autogen_SD3100() {
+BB:
+ %FC123 = fptoui float 0x40693F5D00000000 to i1
+ br i1 %FC123, label %V, label %W
+
+V:
+ ret void
+W:
+ ret void
+}