summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2003-04-16 22:40:51 +0000
committerChris Lattner <sabre@nondot.org>2003-04-16 22:40:51 +0000
commit46b3d30bf63fa1e48c1109a38d9ad9cada23bd20 (patch)
tree48e3da615f6d871fde7d07341f3b85a05d3c1aa3 /llvm
parenta9a988005b50c2445d4a687b202c0251ac4b4780 (diff)
downloadbcm5719-llvm-46b3d30bf63fa1e48c1109a38d9ad9cada23bd20.tar.gz
bcm5719-llvm-46b3d30bf63fa1e48c1109a38d9ad9cada23bd20.zip
Change the interface to constant expressions to allow automatic folding
llvm-svn: 5793
Diffstat (limited to 'llvm')
-rw-r--r--llvm/include/llvm/Constants.h12
-rw-r--r--llvm/lib/Transforms/IPO/FunctionResolution.cpp2
-rw-r--r--llvm/lib/Transforms/Scalar/InstructionCombining.cpp2
-rw-r--r--llvm/lib/VMCore/Constants.cpp11
4 files changed, 14 insertions, 13 deletions
diff --git a/llvm/include/llvm/Constants.h b/llvm/include/llvm/Constants.h
index f7690439b3d..396a5ca0930 100644
--- a/llvm/include/llvm/Constants.h
+++ b/llvm/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<Constant*> &IdxList);
+ static Constant *getGetElementPtr(Constant *C,
+ const std::vector<Constant*> &IdxList);
/// isNullValue - Return true if this is the value that would be returned by
/// getNullValue.
diff --git a/llvm/lib/Transforms/IPO/FunctionResolution.cpp b/llvm/lib/Transforms/IPO/FunctionResolution.cpp
index 734b62b9dc2..932cdf46e89 100644
--- a/llvm/lib/Transforms/IPO/FunctionResolution.cpp
+++ b/llvm/lib/Transforms/IPO/FunctionResolution.cpp
@@ -207,7 +207,7 @@ static bool ResolveGlobalVariables(Module &M,
std::vector<Constant*> 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/llvm/lib/Transforms/Scalar/InstructionCombining.cpp b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp
index 38494f206d1..70fc952891f 100644
--- a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp
+++ b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp
@@ -1011,7 +1011,7 @@ Instruction *InstCombiner::visitGetElementPtrInst(GetElementPtrInst &GEP) {
Indices.push_back(cast<Constant>(*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/llvm/lib/VMCore/Constants.cpp b/llvm/lib/VMCore/Constants.cpp
index 84f2566e468..27c48c87748 100644
--- a/llvm/lib/VMCore/Constants.cpp
+++ b/llvm/lib/VMCore/Constants.cpp
@@ -418,7 +418,7 @@ void ConstantPointerRef::replaceUsesOfWithOnConstant(Value *From, Value *To) {
void ConstantExpr::replaceUsesOfWithOnConstant(Value *From, Value *To) {
assert(isa<Constant>(To) && "Cannot make Constant refer to non-constant!");
- ConstantExpr *Replacement = 0;
+ Constant *Replacement = 0;
if (getOpcode() == Instruction::GetElementPtr) {
std::vector<Constant*> Indices;
Constant *Pointer = cast<Constant>(getOperand(0));
@@ -635,8 +635,7 @@ void ConstantPointerRef::destroyConstant() {
typedef pair<unsigned, vector<Constant*> > ExprMapKeyType;
static ValueMap<const ExprMapKeyType, ConstantExpr> 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<Constant*> 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<Constant*> 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<Constant*> &IdxList) {
+Constant *ConstantExpr::getGetElementPtr(Constant *C,
+ const std::vector<Constant*> &IdxList){
const Type *Ty = C->getType();
// Look up the constant in the table first to ensure uniqueness
OpenPOWER on IntegriCloud