From 4e282decf3960bfa6b1fe3fd77bb51ff96121515 Mon Sep 17 00:00:00 2001 From: Owen Anderson Date: Thu, 16 Sep 2010 20:51:41 +0000 Subject: Revert r114097, adding back in the assertion against replacing an Instruction by itself. Now that CorrelatedValuePropagation is more careful not to call SimplifyInstructionsInBlock() on an unreachable block, the issue has been fixed at a higher level. Add a big warning to SimplifyInstructionsInBlock() to hopefully prevent this in the future. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114117 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Analysis/InstructionSimplify.cpp | 35 +++++++++++------------------------ 1 file changed, 11 insertions(+), 24 deletions(-) (limited to 'lib') diff --git a/lib/Analysis/InstructionSimplify.cpp b/lib/Analysis/InstructionSimplify.cpp index 5bc117d..b49b4d0 100644 --- a/lib/Analysis/InstructionSimplify.cpp +++ b/lib/Analysis/InstructionSimplify.cpp @@ -423,44 +423,31 @@ Value *llvm::SimplifyCmpInst(unsigned Predicate, Value *LHS, Value *RHS, /// SimplifyInstruction - See if we can compute a simplified version of this /// instruction. If not, this returns null. Value *llvm::SimplifyInstruction(Instruction *I, const TargetData *TD) { - Value *Ret = 0; switch (I->getOpcode()) { default: return ConstantFoldInstruction(I, TD); case Instruction::Add: - Ret = SimplifyAddInst(I->getOperand(0), I->getOperand(1), - cast(I)->hasNoSignedWrap(), - cast(I)->hasNoUnsignedWrap(), TD); - break; + return SimplifyAddInst(I->getOperand(0), I->getOperand(1), + cast(I)->hasNoSignedWrap(), + cast(I)->hasNoUnsignedWrap(), TD); case Instruction::And: - Ret = SimplifyAndInst(I->getOperand(0), I->getOperand(1), TD); - break; + return SimplifyAndInst(I->getOperand(0), I->getOperand(1), TD); case Instruction::Or: - Ret = SimplifyOrInst(I->getOperand(0), I->getOperand(1), TD); - break; + return SimplifyOrInst(I->getOperand(0), I->getOperand(1), TD); case Instruction::ICmp: - Ret = SimplifyICmpInst(cast(I)->getPredicate(), - I->getOperand(0), I->getOperand(1), TD); - break; + return SimplifyICmpInst(cast(I)->getPredicate(), + I->getOperand(0), I->getOperand(1), TD); case Instruction::FCmp: - Ret = SimplifyFCmpInst(cast(I)->getPredicate(), - I->getOperand(0), I->getOperand(1), TD); - break; + return SimplifyFCmpInst(cast(I)->getPredicate(), + I->getOperand(0), I->getOperand(1), TD); case Instruction::Select: - Ret = SimplifySelectInst(I->getOperand(0), I->getOperand(1), + return SimplifySelectInst(I->getOperand(0), I->getOperand(1), I->getOperand(2), TD); - break; case Instruction::GetElementPtr: { SmallVector Ops(I->op_begin(), I->op_end()); - Ret = SimplifyGEPInst(&Ops[0], Ops.size(), TD); - break; + return SimplifyGEPInst(&Ops[0], Ops.size(), TD); } } - - // It is possible, in situations involving unreachable loops, to - // have a replacement that, through recursive simplification, ends up - // simplifying to itself. - return Ret != I ? Ret : 0; } /// ReplaceAndSimplifyAllUses - Perform From->replaceAllUsesWith(To) and then -- cgit v1.1