]> granicus.if.org Git - llvm/commitdiff
[X86][MCU] Minor bug fix for r293469 + test case
authorAsaf Badouh <asaf.badouh@intel.com>
Mon, 30 Jan 2017 13:14:37 +0000 (13:14 +0000)
committerAsaf Badouh <asaf.badouh@intel.com>
Mon, 30 Jan 2017 13:14:37 +0000 (13:14 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@293478 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86ISelLowering.cpp
test/CodeGen/X86/select.ll

index 8a43771d85d54a8a2a6804deb0d73bb4961948a0..b3ae9d767efb9c010777429a9d6fb0d84ee56fb3 100644 (file)
@@ -17395,7 +17395,7 @@ SDValue X86TargetLowering::LowerSELECT(SDValue Op, SelectionDAG &DAG) const {
               DAG.getNode(ISD::ANY_EXTEND, DL, VT, CmpOp0.getOperand(0)),
               DAG.getConstant(1, DL, VT));
         else
-          Neg = Cmp;
+          Neg = CmpOp0;
         SDValue Mask = DAG.getNode(ISD::SUB, DL, VT, DAG.getConstant(0, DL, VT),
                                    Neg); // -(and (x, 0x1))
         SDValue And = DAG.getNode(ISD::AND, DL, VT, Mask, Src1); // Mask & z
index caf9d2384f2936dba6f71214d96a48ae6076e44b..e6cce778b218341824ddaae3e73f37a4e317676e 100644 (file)
@@ -678,3 +678,17 @@ entry:
  %1 = select i1 %cmp10, i32 %A, i32 %0
  ret i32 %1
 }
+
+define i32 @select_or_1(i32 %A, i32 %B, i32 %cond) {
+; CHECK-LABEL: select_or_1:
+; MCU:    andl $1, %ecx
+; MCU-NEXT:    negl %ecx
+; MCU-NEXT:    andl %edx, %ecx
+; MCU-NEXT:    orl %ecx, %eax
+entry:
+ %and = and i32 %cond, 1
+ %cmp10 = icmp eq i32 %and, 0
+ %0 = or i32 %B, %A
+ %1 = select i1 %cmp10, i32 %A, i32 %0
+ ret i32 %1
+}
\ No newline at end of file