From fb242b6edc3d92daf49c7d5b2c19d81447aa61bc Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 16 Apr 2003 22:40:51 +0000 Subject: [PATCH] Change the interface to constant expressions to allow automatic folding git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5793 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Constants.h | 12 +++++++----- lib/Transforms/IPO/FunctionResolution.cpp | 2 +- lib/Transforms/Scalar/InstructionCombining.cpp | 2 +- lib/VMCore/Constants.cpp | 11 +++++------ 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/include/llvm/Constants.h b/include/llvm/Constants.h index f7690439b3d..396a5ca0930 100644 --- a/include/llvm/Constants.h +++ b/include/llvm/Constants.h @@ -476,17 +476,19 @@ protected: ~ConstantExpr() {} public: - // Static methods to construct a ConstantExpr of different kinds. + // Static methods to construct a ConstantExpr of different kinds. Note that + // these methods can return a constant of an arbitrary type, because they will + // attempt to fold the constant expression into something simple if they can. /// Cast constant expr - static ConstantExpr *getCast(Constant *C, const Type *Ty); + static Constant *getCast(Constant *C, const Type *Ty); /// Binary constant expr - Use with binary operators... - static ConstantExpr *get(unsigned Opcode, Constant *C1, Constant *C2); + static Constant *get(unsigned Opcode, Constant *C1, Constant *C2); /// Getelementptr form... - static ConstantExpr *getGetElementPtr(Constant *C, - const std::vector &IdxList); + static Constant *getGetElementPtr(Constant *C, + const std::vector &IdxList); /// isNullValue - Return true if this is the value that would be returned by /// getNullValue. diff --git a/lib/Transforms/IPO/FunctionResolution.cpp b/lib/Transforms/IPO/FunctionResolution.cpp index 734b62b9dc2..932cdf46e89 100644 --- a/lib/Transforms/IPO/FunctionResolution.cpp +++ b/lib/Transforms/IPO/FunctionResolution.cpp @@ -207,7 +207,7 @@ static bool ResolveGlobalVariables(Module &M, std::vector Args; Args.push_back(Constant::getNullValue(Type::LongTy)); Args.push_back(Constant::getNullValue(Type::LongTy)); - ConstantExpr *Replacement = + Constant *Replacement = ConstantExpr::getGetElementPtr(ConstantPointerRef::get(Concrete), Args); for (unsigned i = 0; i != Globals.size(); ++i) diff --git a/lib/Transforms/Scalar/InstructionCombining.cpp b/lib/Transforms/Scalar/InstructionCombining.cpp index 38494f206d1..70fc952891f 100644 --- a/lib/Transforms/Scalar/InstructionCombining.cpp +++ b/lib/Transforms/Scalar/InstructionCombining.cpp @@ -1011,7 +1011,7 @@ Instruction *InstCombiner::visitGetElementPtrInst(GetElementPtrInst &GEP) { Indices.push_back(cast(*I)); if (I == E) { // If they are all constants... - ConstantExpr *CE = + Constant *CE = ConstantExpr::getGetElementPtr(ConstantPointerRef::get(GV), Indices); // Replace all uses of the GEP with the new constexpr... diff --git a/lib/VMCore/Constants.cpp b/lib/VMCore/Constants.cpp index 84f2566e468..27c48c87748 100644 --- a/lib/VMCore/Constants.cpp +++ b/lib/VMCore/Constants.cpp @@ -418,7 +418,7 @@ void ConstantPointerRef::replaceUsesOfWithOnConstant(Value *From, Value *To) { void ConstantExpr::replaceUsesOfWithOnConstant(Value *From, Value *To) { assert(isa(To) && "Cannot make Constant refer to non-constant!"); - ConstantExpr *Replacement = 0; + Constant *Replacement = 0; if (getOpcode() == Instruction::GetElementPtr) { std::vector Indices; Constant *Pointer = cast(getOperand(0)); @@ -635,8 +635,7 @@ void ConstantPointerRef::destroyConstant() { typedef pair > ExprMapKeyType; static ValueMap ExprConstants; -ConstantExpr *ConstantExpr::getCast(Constant *C, const Type *Ty) { - +Constant *ConstantExpr::getCast(Constant *C, const Type *Ty) { // Look up the constant in the table first to ensure uniqueness vector argVec(1, C); const ExprMapKeyType &Key = make_pair(Instruction::Cast, argVec); @@ -649,7 +648,7 @@ ConstantExpr *ConstantExpr::getCast(Constant *C, const Type *Ty) { return Result; } -ConstantExpr *ConstantExpr::get(unsigned Opcode, Constant *C1, Constant *C2) { +Constant *ConstantExpr::get(unsigned Opcode, Constant *C1, Constant *C2) { // Look up the constant in the table first to ensure uniqueness vector argVec(1, C1); argVec.push_back(C2); const ExprMapKeyType &Key = make_pair(Opcode, argVec); @@ -670,8 +669,8 @@ ConstantExpr *ConstantExpr::get(unsigned Opcode, Constant *C1, Constant *C2) { return Result; } -ConstantExpr *ConstantExpr::getGetElementPtr(Constant *C, - const std::vector &IdxList) { +Constant *ConstantExpr::getGetElementPtr(Constant *C, + const std::vector &IdxList){ const Type *Ty = C->getType(); // Look up the constant in the table first to ensure uniqueness