diff options
| author | Chris Lattner <sabre@nondot.org> | 2009-11-10 01:08:51 +0000 | 
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2009-11-10 01:08:51 +0000 | 
| commit | fb7f87d5a37d96b6b6940a8cfc69b1511316311c (patch) | |
| tree | 4f5c635455faad1e3e79d5878675376a9100390a /llvm/lib/Analysis | |
| parent | b40d3f76a01406b9f21de5e73aa0ff0274b8e96c (diff) | |
| download | bcm5719-llvm-fb7f87d5a37d96b6b6940a8cfc69b1511316311c.tar.gz bcm5719-llvm-fb7f87d5a37d96b6b6940a8cfc69b1511316311c.zip | |
add a new SimplifyInstruction API, which is like ConstantFoldInstruction, 
except that the result may not be a constant.  Switch jump threading to 
use it so that it gets things like (X & 0) -> 0, which occur when phi preds
are deleted and the remaining phi pred was a zero.
llvm-svn: 86637
Diffstat (limited to 'llvm/lib/Analysis')
| -rw-r--r-- | llvm/lib/Analysis/InstructionSimplify.cpp | 20 | 
1 files changed, 20 insertions, 0 deletions
| diff --git a/llvm/lib/Analysis/InstructionSimplify.cpp b/llvm/lib/Analysis/InstructionSimplify.cpp index 3c1529ce6df..6953f16dc92 100644 --- a/llvm/lib/Analysis/InstructionSimplify.cpp +++ b/llvm/lib/Analysis/InstructionSimplify.cpp @@ -291,3 +291,23 @@ Value *llvm::SimplifyCmpInst(unsigned Predicate, Value *LHS, Value *RHS,    return SimplifyFCmpInst(Predicate, LHS, RHS, TD);  } + +/// 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) { +  switch (I->getOpcode()) { +  default: +    return ConstantFoldInstruction(I, TD); +  case Instruction::And: +    return SimplifyAndInst(I->getOperand(0), I->getOperand(1), TD); +  case Instruction::Or: +    return SimplifyOrInst(I->getOperand(0), I->getOperand(1), TD); +  case Instruction::ICmp: +    return SimplifyICmpInst(cast<ICmpInst>(I)->getPredicate(), +                            I->getOperand(0), I->getOperand(1), TD); +  case Instruction::FCmp: +    return SimplifyFCmpInst(cast<FCmpInst>(I)->getPredicate(), +                            I->getOperand(0), I->getOperand(1), TD); +  } +} + | 

