Make ComputeDemandedBits return a deterministic result when computing an AssertZext...
authorNadav Rotem <nadav.rotem@intel.com>
Mon, 16 Jul 2012 18:34:53 +0000 (18:34 +0000)
committerNadav Rotem <nadav.rotem@intel.com>
Mon, 16 Jul 2012 18:34:53 +0000 (18:34 +0000)
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

lib/CodeGen/SelectionDAG/SelectionDAG.cpp
test/CodeGen/X86/2012-07-16-fp2ui-i1.ll [new file with mode: 0644]

index 3947648e6a729f4baf0a9d95a34b8e84daadad21..cfe71708fe042fd798bc237bb5e3b0d86ce03e54 100644 (file)
@@ -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 (file)
index 0000000..17533a1
--- /dev/null
@@ -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
+}