From 3c4e38e4116965e9ec153a848ec2caa746c69177 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sun, 30 Aug 2009 06:27:41 +0000 Subject: [PATCH] add a new InstCombineWorklist::AddValue method that works even if the operand is not an instruction. Simplify most uses of AddOperandsToWorkList to use AddValue and inline it into the one remaining callsite. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80488 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../Scalar/InstructionCombining.cpp | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/lib/Transforms/Scalar/InstructionCombining.cpp b/lib/Transforms/Scalar/InstructionCombining.cpp index 21ad2550327..dc20b7a443d 100644 --- a/lib/Transforms/Scalar/InstructionCombining.cpp +++ b/lib/Transforms/Scalar/InstructionCombining.cpp @@ -94,6 +94,11 @@ namespace { Worklist.push_back(I); } + void AddValue(Value *V) { + if (Instruction *I = dyn_cast(V)) + Add(I); + } + // Remove - remove I from the worklist if it exists. void Remove(Instruction *I) { DenseMap::iterator It = WorklistMap.find(I); @@ -151,15 +156,6 @@ namespace { LLVMContext *Context; LLVMContext *getContext() const { return Context; } - /// AddOperandsToWorkList - When an instruction is simplified, add operands - /// to the work lists because they might get more simplified now. - /// - void AddOperandsToWorkList(Instruction &I) { - for (User::op_iterator i = I.op_begin(), e = I.op_end(); i != e; ++i) - if (Instruction *Op = dyn_cast(*i)) - Worklist.Add(Op); - } - public: virtual bool runOnFunction(Function &F); @@ -331,8 +327,11 @@ namespace { assert(I.use_empty() && "Cannot erase instruction that is used!"); // Make sure that we reprocess all operands now that we reduced their // use counts. - if (I.getNumOperands() < 8) - AddOperandsToWorkList(I); + if (I.getNumOperands() < 8) { + for (User::op_iterator i = I.op_begin(), e = I.op_end(); i != e; ++i) + if (Instruction *Op = dyn_cast(*i)) + Worklist.Add(Op); + } Worklist.Remove(&I); I.eraseFromParent(); return 0; // Don't do anything with FI @@ -3247,7 +3246,7 @@ Instruction *InstCombiner::visitSRem(BinaryOperator &I) { (isa(RHSNeg) && cast(RHSNeg)->getValue().isStrictlyPositive())) { // X % -Y -> X % Y - AddOperandsToWorkList(I); + Worklist.AddValue(I.getOperand(1)); I.setOperand(1, RHSNeg); return &I; } @@ -3285,7 +3284,7 @@ Instruction *InstCombiner::visitSRem(BinaryOperator &I) { Constant *NewRHSV = ConstantVector::get(Elts); if (NewRHSV != RHSV) { - AddOperandsToWorkList(I); + Worklist.AddValue(I.getOperand(1)); I.setOperand(1, NewRHSV); return &I; } @@ -6884,7 +6883,6 @@ Instruction *InstCombiner::visitICmpInstWithInstAndIntCst(ICmpInst &ICI, LHSI->setOperand(1, NewAndCST); LHSI->setOperand(0, Shift->getOperand(0)); Worklist.Add(Shift); // Shift is dead. - AddOperandsToWorkList(ICI); return &ICI; } } @@ -7914,7 +7912,6 @@ Instruction *InstCombiner::PromoteCastOfAllocation(BitCastInst &CI, // things that used it to use the new cast. This will also hack on CI, but it // will die soon. else if (!AI.hasOneUse()) { - AddOperandsToWorkList(AI); // New is the allocation instruction, pointer typed. AI is the original // allocation instruction, also pointer typed. Thus, cast to use is BitCast. CastInst *NewCast = new BitCastInst(New, AI.getType(), "tmpcast"); @@ -12401,7 +12398,7 @@ Instruction *InstCombiner::visitExtractElementInst(ExtractElementInst &EI) { // be the same value, extract from the pre-inserted value instead. if (isa(IE->getOperand(2)) && isa(EI.getOperand(1))) { - AddOperandsToWorkList(EI); + Worklist.AddValue(EI.getOperand(0)); EI.setOperand(0, IE->getOperand(0)); return &EI; } -- 2.34.1