Properly check if a CMPZ node is in fact comparing against zero
[oota-llvm.git] / lib / Target / ARM / ARMISelLowering.cpp
index 51f8d562fe112ad88c34a2108774f77d9b936ca5..3c99675a473caa632dbbaaf9a992cffa2e86b86c 100644 (file)
@@ -10398,6 +10398,12 @@ SDValue ARMTargetLowering::PerformCMOVToBFICombine(SDNode *CMOV, SelectionDAG &D
   auto CC = CCNode->getAPIntValue().getLimitedValue();
   SDValue CmpZ = CMOV->getOperand(4);
 
+  // The compare must be against zero.
+  SDValue Zero = CmpZ->getOperand(1);
+  if (!isa<ConstantSDNode>(Zero.getNode()) ||
+      !cast<ConstantSDNode>(Zero.getNode())->isNullValue())
+    return SDValue();
+
   assert(CmpZ->getOpcode() == ARMISD::CMPZ);
   SDValue And = CmpZ->getOperand(0);
   if (And->getOpcode() != ISD::AND)