summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Scalar/SCCP.cpp
diff options
context:
space:
mode:
authorRobert Bocchino <bocchino@illinois.edu>2006-01-10 19:05:05 +0000
committerRobert Bocchino <bocchino@illinois.edu>2006-01-10 19:05:05 +0000
commitbd518d153b86d7e23078736e4b584beb1b209245 (patch)
tree275475e536228d9514531fc7a434b41a07e474dd /llvm/lib/Transforms/Scalar/SCCP.cpp
parent2c966e7617185bd7057e37445435febd86e5805a (diff)
downloadbcm5719-llvm-bd518d153b86d7e23078736e4b584beb1b209245.tar.gz
bcm5719-llvm-bd518d153b86d7e23078736e4b584beb1b209245.zip
Added lower packed support for the extractelement operation.
llvm-svn: 25180
Diffstat (limited to 'llvm/lib/Transforms/Scalar/SCCP.cpp')
-rw-r--r--llvm/lib/Transforms/Scalar/SCCP.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Scalar/SCCP.cpp b/llvm/lib/Transforms/Scalar/SCCP.cpp
index 491ca73fa3b..1a76eb5e5e8 100644
--- a/llvm/lib/Transforms/Scalar/SCCP.cpp
+++ b/llvm/lib/Transforms/Scalar/SCCP.cpp
@@ -322,6 +322,7 @@ private:
void visitSelectInst(SelectInst &I);
void visitBinaryOperator(Instruction &I);
void visitShiftInst(ShiftInst &I) { visitBinaryOperator(I); }
+ void visitExtractElementInst(ExtractElementInst &I);
// Instructions that cannot be folded away...
void visitStoreInst (Instruction &I);
@@ -728,6 +729,17 @@ void SCCPSolver::visitBinaryOperator(Instruction &I) {
}
}
+void SCCPSolver::visitExtractElementInst(ExtractElementInst &I) {
+ LatticeVal &ValState = getValueState(I.getOperand(0));
+ LatticeVal &IdxState = getValueState(I.getOperand(1));
+
+ if (ValState.isOverdefined() || IdxState.isOverdefined())
+ markOverdefined(&I);
+ else if(ValState.isConstant() && IdxState.isConstant())
+ markConstant(&I, ConstantExpr::getExtractElement(ValState.getConstant(),
+ IdxState.getConstant()));
+}
+
// Handle getelementptr instructions... if all operands are constants then we
// can turn this into a getelementptr ConstantExpr.
//
OpenPOWER on IntegriCloud