From: Sanjay Patel Date: Fri, 13 Oct 2017 16:43:58 +0000 (+0000) Subject: [InstCombine] rearrange code to remove repeated constant check; NFCI X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b245b723b9af12d85160f2e1232cd5fe65f10a95;p=llvm [InstCombine] rearrange code to remove repeated constant check; NFCI git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@315703 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/InstCombine/InstCombineAddSub.cpp b/lib/Transforms/InstCombine/InstCombineAddSub.cpp index e12bff01376..75cc683b7a6 100644 --- a/lib/Transforms/InstCombine/InstCombineAddSub.cpp +++ b/lib/Transforms/InstCombine/InstCombineAddSub.cpp @@ -950,13 +950,15 @@ static Value *checkForNegativeOperand(BinaryOperator &I, return nullptr; } -static Instruction *foldAddWithConstant(BinaryOperator &Add, - InstCombiner::BuilderTy &Builder) { +Instruction *InstCombiner::foldAddWithConstant(BinaryOperator &Add) { Value *Op0 = Add.getOperand(0), *Op1 = Add.getOperand(1); Constant *Op1C; if (!match(Op1, m_Constant(Op1C))) return nullptr; + if (Instruction *NV = foldOpWithConstantIntoOperand(Add)) + return NV; + Value *X; Type *Ty = Add.getType(); if (match(Op0, m_ZExt(m_Value(X))) && @@ -1037,7 +1039,7 @@ Instruction *InstCombiner::visitAdd(BinaryOperator &I) { if (Value *V = SimplifyUsingDistributiveLaws(I)) return replaceInstUsesWith(I, V); - if (Instruction *X = foldAddWithConstant(I, Builder)) + if (Instruction *X = foldAddWithConstant(I)) return X; // FIXME: This should be moved into the above helper function to allow these @@ -1085,10 +1087,6 @@ Instruction *InstCombiner::visitAdd(BinaryOperator &I) { } } - if (isa(RHS)) - if (Instruction *NV = foldOpWithConstantIntoOperand(I)) - return NV; - if (I.getType()->isIntOrIntVectorTy(1)) return BinaryOperator::CreateXor(LHS, RHS); diff --git a/lib/Transforms/InstCombine/InstCombineInternal.h b/lib/Transforms/InstCombine/InstCombineInternal.h index f1404facaf3..88ce4de31df 100644 --- a/lib/Transforms/InstCombine/InstCombineInternal.h +++ b/lib/Transforms/InstCombine/InstCombineInternal.h @@ -663,6 +663,8 @@ private: /// This is a convenience wrapper function for the above two functions. Instruction *foldOpWithConstantIntoOperand(BinaryOperator &I); + Instruction *foldAddWithConstant(BinaryOperator &Add); + /// \brief Try to rotate an operation below a PHI node, using PHI nodes for /// its operands. Instruction *FoldPHIArgOpIntoPHI(PHINode &PN);