summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis/ConstantFolding.cpp
diff options
context:
space:
mode:
authorFrits van Bommel <fvbommel@gmail.com>2010-11-29 20:36:52 +0000
committerFrits van Bommel <fvbommel@gmail.com>2010-11-29 20:36:52 +0000
commita98214de10fd911aa5a8e3282f4ff90f25ec91cb (patch)
tree48ca7174ea70de7903841cadffacc1c26b15e9d5 /llvm/lib/Analysis/ConstantFolding.cpp
parent4921b1132005973b35660320f26add05953dae56 (diff)
downloadbcm5719-llvm-a98214de10fd911aa5a8e3282f4ff90f25ec91cb.tar.gz
bcm5719-llvm-a98214de10fd911aa5a8e3282f4ff90f25ec91cb.zip
Teach ConstantFoldInstruction() how to fold insertvalue and extractvalue.
llvm-svn: 120316
Diffstat (limited to 'llvm/lib/Analysis/ConstantFolding.cpp')
-rw-r--r--llvm/lib/Analysis/ConstantFolding.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/llvm/lib/Analysis/ConstantFolding.cpp b/llvm/lib/Analysis/ConstantFolding.cpp
index a5804208c46..70ee9ddfa60 100644
--- a/llvm/lib/Analysis/ConstantFolding.cpp
+++ b/llvm/lib/Analysis/ConstantFolding.cpp
@@ -740,7 +740,18 @@ Constant *llvm::ConstantFoldInstruction(Instruction *I, const TargetData *TD) {
if (const LoadInst *LI = dyn_cast<LoadInst>(I))
return ConstantFoldLoadInst(LI, TD);
-
+
+ if (InsertValueInst *IVI = dyn_cast<InsertValueInst>(I))
+ return ConstantExpr::getInsertValue(
+ cast<Constant>(IVI->getAggregateOperand()),
+ cast<Constant>(IVI->getInsertedValueOperand()),
+ IVI->idx_begin(), IVI->getNumIndices());
+
+ if (ExtractValueInst *EVI = dyn_cast<ExtractValueInst>(I))
+ return ConstantExpr::getExtractValue(
+ cast<Constant>(EVI->getAggregateOperand()),
+ EVI->idx_begin(), EVI->getNumIndices());
+
return ConstantFoldInstOperands(I->getOpcode(), I->getType(),
Ops.data(), Ops.size(), TD);
}
OpenPOWER on IntegriCloud