[SystemZ] Properly check number of operands in getCmpOpsType()
authorJonas Paulsson <paulsson@linux.vnet.ibm.com>
Wed, 3 May 2017 13:33:45 +0000 (13:33 +0000)
committerJonas Paulsson <paulsson@linux.vnet.ibm.com>
Wed, 3 May 2017 13:33:45 +0000 (13:33 +0000)
It is needed to check that the number of operands are 2 when
finding the case of a logic combination, e.g. 'and' of two compares.

Review: Ulrich Weigand
llvm-svn: 302022

llvm/lib/Target/SystemZ/SystemZTargetTransformInfo.cpp

index d286158..f56b238 100644 (file)
@@ -530,9 +530,10 @@ static Type *getCmpOpsType(const Instruction *I, unsigned VF = 1) {
   if (CmpInst *CI = dyn_cast<CmpInst>(I->getOperand(0)))
     OpTy = CI->getOperand(0)->getType();
   else if (Instruction *LogicI = dyn_cast<Instruction>(I->getOperand(0)))
-    if (CmpInst *CI0 = dyn_cast<CmpInst>(LogicI->getOperand(0)))
-      if (isa<CmpInst>(LogicI->getOperand(1)))
-        OpTy = CI0->getOperand(0)->getType();
+    if (LogicI->getNumOperands() == 2)
+      if (CmpInst *CI0 = dyn_cast<CmpInst>(LogicI->getOperand(0)))
+        if (isa<CmpInst>(LogicI->getOperand(1)))
+          OpTy = CI0->getOperand(0)->getType();
 
   if (OpTy != nullptr) {
     if (VF == 1) {