Changes in directory llvm/lib/VMCore:
ConstantFolding.cpp updated: 1.81 -> 1.82 ConstantFolding.h updated: 1.45 -> 1.46 Constants.cpp updated: 1.143 -> 1.144 --- Log message: Added constant folding support for the extractelement operation. --- Diffs of the changes: (+14 -0) ConstantFolding.cpp | 10 ++++++++++ ConstantFolding.h | 2 ++ Constants.cpp | 2 ++ 3 files changed, 14 insertions(+) Index: llvm/lib/VMCore/ConstantFolding.cpp diff -u llvm/lib/VMCore/ConstantFolding.cpp:1.81 llvm/lib/VMCore/ConstantFolding.cpp:1.82 --- llvm/lib/VMCore/ConstantFolding.cpp:1.81 Thu Jan 5 01:49:30 2006 +++ llvm/lib/VMCore/ConstantFolding.cpp Tue Jan 10 14:03:46 2006 @@ -724,6 +724,16 @@ return 0; } +Constant *llvm::ConstantFoldExtractElementInstruction(const Constant *Val, + const Constant *Idx) { + if (const ConstantPacked *CVal = dyn_cast<ConstantPacked>(Val)) { + if (const ConstantUInt *CIdx = dyn_cast<ConstantUInt>(Idx)) { + return const_cast<Constant*>(CVal->getOperand(CIdx->getValue())); + } + } + return 0; +} + /// isZeroSizedType - This type is zero sized if its an array or structure of /// zero sized types. The only leaf zero sized type is an empty structure. static bool isMaybeZeroSizedType(const Type *Ty) { Index: llvm/lib/VMCore/ConstantFolding.h diff -u llvm/lib/VMCore/ConstantFolding.h:1.45 llvm/lib/VMCore/ConstantFolding.h:1.46 --- llvm/lib/VMCore/ConstantFolding.h:1.45 Thu Apr 21 18:46:51 2005 +++ llvm/lib/VMCore/ConstantFolding.h Tue Jan 10 14:03:46 2006 @@ -31,6 +31,8 @@ Constant *ConstantFoldSelectInstruction(const Constant *Cond, const Constant *V1, const Constant *V2); + Constant *ConstantFoldExtractElementInstruction(const Constant *Val, + const Constant *Idx); Constant *ConstantFoldBinaryInstruction(unsigned Opcode, const Constant *V1, const Constant *V2); Constant *ConstantFoldGetElementPtr(const Constant *C, Index: llvm/lib/VMCore/Constants.cpp diff -u llvm/lib/VMCore/Constants.cpp:1.143 llvm/lib/VMCore/Constants.cpp:1.144 --- llvm/lib/VMCore/Constants.cpp:1.143 Tue Jan 10 13:05:24 2006 +++ llvm/lib/VMCore/Constants.cpp Tue Jan 10 14:03:46 2006 @@ -1403,6 +1403,8 @@ Constant *ConstantExpr::getExtractElementTy(const Type *ReqTy, Constant *Val, Constant *Idx) { + if (Constant *FC = ConstantFoldExtractElementInstruction(Val, Idx)) + return FC; // Fold a few common cases... // Look up the constant in the table first to ensure uniqueness std::vector<Constant*> ArgVec(1, Val); ArgVec.push_back(Idx); _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits