[InstCombine] foldShiftOfShiftedLogic - replace cast<BinaryOperator> with m_BinOp...
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Fri, 9 Oct 2020 13:09:52 +0000 (14:09 +0100)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Fri, 9 Oct 2020 13:10:12 +0000 (14:10 +0100)
Allows us to drop the !isa<ConstantExpr> check.

llvm/lib/Transforms/InstCombine/InstCombineShifts.cpp

index 8ddffe3..6ead851 100644 (file)
@@ -340,9 +340,9 @@ static Instruction *foldShiftOfShiftedLogic(BinaryOperator &I,
   // TODO: Remove the one-use check if the other logic operand (Y) is constant.
   Value *X, *Y;
   auto matchFirstShift = [&](Value *V) {
-    return !isa<ConstantExpr>(V) &&
+    BinaryOperator *BO;
+    return match(V, m_BinOp(BO)) && BO->getOpcode() == ShiftOpcode &&
            match(V, m_OneUse(m_Shift(m_Value(X), m_APInt(C0)))) &&
-           cast<BinaryOperator>(V)->getOpcode() == ShiftOpcode &&
            (*C0 + *C1).ult(Ty->getScalarSizeInBits());
   };