diff options
| author | Robert Bocchino <bocchino@illinois.edu> | 2006-01-10 19:05:05 +0000 | 
|---|---|---|
| committer | Robert Bocchino <bocchino@illinois.edu> | 2006-01-10 19:05:05 +0000 | 
| commit | bd518d153b86d7e23078736e4b584beb1b209245 (patch) | |
| tree | 275475e536228d9514531fc7a434b41a07e474dd /llvm/lib/Transforms/Scalar/SCCP.cpp | |
| parent | 2c966e7617185bd7057e37445435febd86e5805a (diff) | |
| download | bcm5719-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.cpp | 12 | 
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.  //  | 

