diff options
| author | Evan Cheng <evan.cheng@apple.com> | 2007-02-19 19:23:41 +0000 |
|---|---|---|
| committer | Evan Cheng <evan.cheng@apple.com> | 2007-02-19 19:23:41 +0000 |
| commit | 0a02f827671d4c520f85b8155db5d7173f72e100 (patch) | |
| tree | 7889b3953a1d610850db63150edd790317e899de /llvm/lib/VMCore | |
| parent | 887ae70af56c60318946e4e695612e3b3fc74f58 (diff) | |
| download | bcm5719-llvm-0a02f827671d4c520f85b8155db5d7173f72e100.tar.gz bcm5719-llvm-0a02f827671d4c520f85b8155db5d7173f72e100.zip | |
Temporarily reverting the patch. It's breaking llvm-gcc build.
llvm-svn: 34423
Diffstat (limited to 'llvm/lib/VMCore')
| -rw-r--r-- | llvm/lib/VMCore/Constants.cpp | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/llvm/lib/VMCore/Constants.cpp b/llvm/lib/VMCore/Constants.cpp index c89609ec9fd..ab2d2732fd1 100644 --- a/llvm/lib/VMCore/Constants.cpp +++ b/llvm/lib/VMCore/Constants.cpp @@ -22,7 +22,6 @@ #include "llvm/Support/Debug.h" #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/MathExtras.h" -#include "llvm/ADT/SmallVector.h" #include <algorithm> #include <map> using namespace llvm; @@ -483,14 +482,13 @@ ConstantExpr::getWithOperandReplaced(unsigned OpNo, Constant *Op) const { Op2 = (OpNo == 2) ? Op : getOperand(2); return ConstantExpr::getShuffleVector(Op0, Op1, Op2); case Instruction::GetElementPtr: { - SmallVector<Constant*, 8> Ops; - Ops.resize(getNumOperands()); + std::vector<Constant*> Ops; for (unsigned i = 1, e = getNumOperands(); i != e; ++i) - Ops[i] = getOperand(i); + Ops.push_back(getOperand(i)); if (OpNo == 0) - return ConstantExpr::getGetElementPtr(Op, &Ops[0], Ops.size()); + return ConstantExpr::getGetElementPtr(Op, Ops); Ops[OpNo-1] = Op; - return ConstantExpr::getGetElementPtr(getOperand(0), &Ops[0], Ops.size()); + return ConstantExpr::getGetElementPtr(getOperand(0), Ops); } default: assert(getNumOperands() == 2 && "Must be binary operator?"); @@ -537,8 +535,10 @@ getWithOperands(const std::vector<Constant*> &Ops) const { return ConstantExpr::getExtractElement(Ops[0], Ops[1]); case Instruction::ShuffleVector: return ConstantExpr::getShuffleVector(Ops[0], Ops[1], Ops[2]); - case Instruction::GetElementPtr: - return ConstantExpr::getGetElementPtr(Ops[0], &Ops[1], Ops.size()-1); + case Instruction::GetElementPtr: { + std::vector<Constant*> ActualOps(Ops.begin()+1, Ops.end()); + return ConstantExpr::getGetElementPtr(Ops[0], ActualOps); + } case Instruction::ICmp: case Instruction::FCmp: return ConstantExpr::getCompare(getPredicate(), Ops[0], Ops[1]); @@ -1578,10 +1578,16 @@ Constant *ConstantExpr::getBitCast(Constant *C, const Type *DstTy) { Constant *ConstantExpr::getSizeOf(const Type *Ty) { // sizeof is implemented as: (ulong) gep (Ty*)null, 1 - Constant *GEPIdx = ConstantInt::get(Type::Int32Ty, 1); - Constant *GEP = - getGetElementPtr(getNullValue(PointerType::get(Ty)), &GEPIdx, 1); - return getCast(Instruction::PtrToInt, GEP, Type::Int64Ty); + return getCast(Instruction::PtrToInt, getGetElementPtr(getNullValue( + PointerType::get(Ty)), std::vector<Constant*>(1, + ConstantInt::get(Type::Int32Ty, 1))), Type::Int64Ty); +} + +Constant *ConstantExpr::getPtrPtrFromArrayPtr(Constant *C) { + // pointer from array is implemented as: getelementptr arr ptr, 0, 0 + static std::vector<Constant*> Indices(2, ConstantInt::get(Type::Int32Ty, 0)); + + return ConstantExpr::getGetElementPtr(C, Indices); } Constant *ConstantExpr::getTy(const Type *ReqTy, unsigned Opcode, @@ -2023,7 +2029,7 @@ void ConstantExpr::replaceUsesOfWithOnConstant(Value *From, Value *ToV, Constant *Replacement = 0; if (getOpcode() == Instruction::GetElementPtr) { - SmallVector<Constant*, 8> Indices; + std::vector<Constant*> Indices; Constant *Pointer = getOperand(0); Indices.reserve(getNumOperands()-1); if (Pointer == From) Pointer = To; @@ -2033,8 +2039,7 @@ void ConstantExpr::replaceUsesOfWithOnConstant(Value *From, Value *ToV, if (Val == From) Val = To; Indices.push_back(Val); } - Replacement = ConstantExpr::getGetElementPtr(Pointer, - &Indices[0], Indices.size()); + Replacement = ConstantExpr::getGetElementPtr(Pointer, Indices); } else if (isCast()) { assert(getOperand(0) == From && "Cast only has one use!"); Replacement = ConstantExpr::getCast(getOpcode(), To, getType()); |

