diff options
Diffstat (limited to 'lib/VMCore')
-rw-r--r-- | lib/VMCore/AutoUpgrade.cpp | 15 | ||||
-rw-r--r-- | lib/VMCore/BasicBlock.cpp | 10 | ||||
-rw-r--r-- | lib/VMCore/Constants.cpp | 47 | ||||
-rw-r--r-- | lib/VMCore/Core.cpp | 10 | ||||
-rw-r--r-- | lib/VMCore/Function.cpp | 2 | ||||
-rw-r--r-- | lib/VMCore/Instructions.cpp | 16 | ||||
-rw-r--r-- | lib/VMCore/Module.cpp | 4 |
7 files changed, 75 insertions, 29 deletions
diff --git a/lib/VMCore/AutoUpgrade.cpp b/lib/VMCore/AutoUpgrade.cpp index 343a4b6..2fb0e80 100644 --- a/lib/VMCore/AutoUpgrade.cpp +++ b/lib/VMCore/AutoUpgrade.cpp @@ -216,7 +216,7 @@ void llvm::UpgradeIntrinsicCall(CallInst *CI, Function *NewFn) { return; } - switch(NewFn->getIntrinsicID()) { + switch (NewFn->getIntrinsicID()) { default: assert(0 && "Unknown function for CallInst upgrade."); case Intrinsic::x86_mmx_psll_d: case Intrinsic::x86_mmx_psll_q: @@ -237,8 +237,8 @@ void llvm::UpgradeIntrinsicCall(CallInst *CI, Function *NewFn) { Operands[1] = BC; // Construct a new CallInst - CallInst *NewCI = new CallInst(NewFn, Operands, Operands+2, - "upgraded."+CI->getName(), CI); + CallInst *NewCI = CallInst::Create(NewFn, Operands, Operands+2, + "upgraded."+CI->getName(), CI); NewCI->setTailCall(CI->isTailCall()); NewCI->setCallingConv(CI->getCallingConv()); @@ -254,14 +254,14 @@ void llvm::UpgradeIntrinsicCall(CallInst *CI, Function *NewFn) { } case Intrinsic::ctlz: case Intrinsic::ctpop: - case Intrinsic::cttz: + case Intrinsic::cttz: { // Build a small vector of the 1..(N-1) operands, which are the // parameters. SmallVector<Value*, 8> Operands(CI->op_begin()+1, CI->op_end()); // Construct a new CallInst - CallInst *NewCI = new CallInst(NewFn, Operands.begin(), Operands.end(), - "upgraded."+CI->getName(), CI); + CallInst *NewCI = CallInst::Create(NewFn, Operands.begin(), Operands.end(), + "upgraded."+CI->getName(), CI); NewCI->setTailCall(CI->isTailCall()); NewCI->setCallingConv(CI->getCallingConv()); @@ -287,7 +287,8 @@ void llvm::UpgradeIntrinsicCall(CallInst *CI, Function *NewFn) { // Clean up the old call now that it has been completely upgraded. CI->eraseFromParent(); - break; + } + break; } } diff --git a/lib/VMCore/BasicBlock.cpp b/lib/VMCore/BasicBlock.cpp index 1288fdf..16aa7fa 100644 --- a/lib/VMCore/BasicBlock.cpp +++ b/lib/VMCore/BasicBlock.cpp @@ -35,6 +35,10 @@ namespace { /// DummyInst - An instance of this class is used to mark the end of the /// instruction list. This is not a real instruction. struct VISIBILITY_HIDDEN DummyInst : public Instruction { + // allocate space for exactly zero operands + void *operator new(size_t s) { + return User::operator new(s, 0); + } DummyInst() : Instruction(Type::VoidTy, OtherOpsEnd, 0, 0) { // This should not be garbage monitored. LeakDetector::removeGarbageObject(this); @@ -71,7 +75,7 @@ template class SymbolTableListTraits<Instruction, BasicBlock>; BasicBlock::BasicBlock(const std::string &Name, Function *NewParent, BasicBlock *InsertBefore, BasicBlock *Dest) - : User(Type::LabelTy, Value::BasicBlockVal, &unwindDest, 0), Parent(0) { + : User(Type::LabelTy, Value::BasicBlockVal, &unwindDest, 0/*FIXME*/), Parent(0) { // Make sure that we get added to a function LeakDetector::addGarbageObject(this); @@ -283,14 +287,14 @@ BasicBlock *BasicBlock::splitBasicBlock(iterator I, const std::string &BBName) { assert(I != InstList.end() && "Trying to get me to create degenerate basic block!"); - BasicBlock *New = new BasicBlock(BBName, getParent(), getNext()); + BasicBlock *New = new(0/*FIXME*/) BasicBlock(BBName, getParent(), getNext()); // Move all of the specified instructions from the original basic block into // the new basic block. New->getInstList().splice(New->end(), this->getInstList(), I, end()); // Add a branch instruction to the newly formed basic block. - new BranchInst(New, this); + BranchInst::Create(New, this); // Now we must loop through all of the successors of the New block (which // _were_ the successors of the 'this' block), and update any PHI nodes in diff --git a/lib/VMCore/Constants.cpp b/lib/VMCore/Constants.cpp index 470e247..78d24ef 100644 --- a/lib/VMCore/Constants.cpp +++ b/lib/VMCore/Constants.cpp @@ -410,8 +410,13 @@ namespace { /// UnaryConstantExpr - This class is private to Constants.cpp, and is used /// behind the scenes to implement unary constant exprs. class VISIBILITY_HIDDEN UnaryConstantExpr : public ConstantExpr { + void *operator new(size_t, unsigned); // DO NOT IMPLEMENT Use Op; public: + // allocate space for exactly one operand + void *operator new(size_t s) { + return User::operator new(s, 1); + } UnaryConstantExpr(unsigned Opcode, Constant *C, const Type *Ty) : ConstantExpr(Ty, Opcode, &Op, 1), Op(C, this) {} }; @@ -419,8 +424,13 @@ public: /// BinaryConstantExpr - This class is private to Constants.cpp, and is used /// behind the scenes to implement binary constant exprs. class VISIBILITY_HIDDEN BinaryConstantExpr : public ConstantExpr { + void *operator new(size_t, unsigned); // DO NOT IMPLEMENT Use Ops[2]; public: + // allocate space for exactly two operands + void *operator new(size_t s) { + return User::operator new(s, 2); + } BinaryConstantExpr(unsigned Opcode, Constant *C1, Constant *C2) : ConstantExpr(C1->getType(), Opcode, Ops, 2) { Ops[0].init(C1, this); @@ -431,8 +441,13 @@ public: /// SelectConstantExpr - This class is private to Constants.cpp, and is used /// behind the scenes to implement select constant exprs. class VISIBILITY_HIDDEN SelectConstantExpr : public ConstantExpr { + void *operator new(size_t, unsigned); // DO NOT IMPLEMENT Use Ops[3]; public: + // allocate space for exactly three operands + void *operator new(size_t s) { + return User::operator new(s, 3); + } SelectConstantExpr(Constant *C1, Constant *C2, Constant *C3) : ConstantExpr(C2->getType(), Instruction::Select, Ops, 3) { Ops[0].init(C1, this); @@ -445,8 +460,13 @@ public: /// Constants.cpp, and is used behind the scenes to implement /// extractelement constant exprs. class VISIBILITY_HIDDEN ExtractElementConstantExpr : public ConstantExpr { + void *operator new(size_t, unsigned); // DO NOT IMPLEMENT Use Ops[2]; public: + // allocate space for exactly two operands + void *operator new(size_t s) { + return User::operator new(s, 2); + } ExtractElementConstantExpr(Constant *C1, Constant *C2) : ConstantExpr(cast<VectorType>(C1->getType())->getElementType(), Instruction::ExtractElement, Ops, 2) { @@ -459,8 +479,13 @@ public: /// Constants.cpp, and is used behind the scenes to implement /// insertelement constant exprs. class VISIBILITY_HIDDEN InsertElementConstantExpr : public ConstantExpr { + void *operator new(size_t, unsigned); // DO NOT IMPLEMENT Use Ops[3]; public: + // allocate space for exactly three operands + void *operator new(size_t s) { + return User::operator new(s, 3); + } InsertElementConstantExpr(Constant *C1, Constant *C2, Constant *C3) : ConstantExpr(C1->getType(), Instruction::InsertElement, Ops, 3) { @@ -474,8 +499,13 @@ public: /// Constants.cpp, and is used behind the scenes to implement /// shufflevector constant exprs. class VISIBILITY_HIDDEN ShuffleVectorConstantExpr : public ConstantExpr { + void *operator new(size_t, unsigned); // DO NOT IMPLEMENT Use Ops[3]; public: + // allocate space for exactly three operands + void *operator new(size_t s) { + return User::operator new(s, 3); + } ShuffleVectorConstantExpr(Constant *C1, Constant *C2, Constant *C3) : ConstantExpr(C1->getType(), Instruction::ShuffleVector, Ops, 3) { @@ -487,7 +517,7 @@ public: /// GetElementPtrConstantExpr - This class is private to Constants.cpp, and is /// used behind the scenes to implement getelementpr constant exprs. -struct VISIBILITY_HIDDEN GetElementPtrConstantExpr : public ConstantExpr { +class VISIBILITY_HIDDEN GetElementPtrConstantExpr : public ConstantExpr { GetElementPtrConstantExpr(Constant *C, const std::vector<Constant*> &IdxList, const Type *DestTy) : ConstantExpr(DestTy, Instruction::GetElementPtr, @@ -496,6 +526,11 @@ struct VISIBILITY_HIDDEN GetElementPtrConstantExpr : public ConstantExpr { for (unsigned i = 0, E = IdxList.size(); i != E; ++i) OperandList[i+1].init(IdxList[i], this); } +public: + static GetElementPtrConstantExpr *Create(Constant *C, const std::vector<Constant*> &IdxList, + const Type *DestTy) { + return new(IdxList.size() + 1/*FIXME*/) GetElementPtrConstantExpr(C, IdxList, DestTy); + } ~GetElementPtrConstantExpr() { delete [] OperandList; } @@ -505,6 +540,11 @@ struct VISIBILITY_HIDDEN GetElementPtrConstantExpr : public ConstantExpr { // behind the scenes to implement ICmp and FCmp constant expressions. This is // needed in order to store the predicate value for these instructions. struct VISIBILITY_HIDDEN CompareConstantExpr : public ConstantExpr { + void *operator new(size_t, unsigned); // DO NOT IMPLEMENT + // allocate space for exactly two operands + void *operator new(size_t s) { + return User::operator new(s, 2); + } unsigned short predicate; Use Ops[2]; CompareConstantExpr(Instruction::OtherOps opc, unsigned short pred, @@ -771,7 +811,8 @@ namespace llvm { template<class ConstantClass, class TypeClass, class ValType> struct VISIBILITY_HIDDEN ConstantCreator { static ConstantClass *create(const TypeClass *Ty, const ValType &V) { - return new ConstantClass(Ty, V); + unsigned FIXME; // = traits<ValType>::uses(V) + return new(FIXME) ConstantClass(Ty, V); } }; @@ -1433,7 +1474,7 @@ namespace llvm { V.operands[2]); if (V.opcode == Instruction::GetElementPtr) { std::vector<Constant*> IdxList(V.operands.begin()+1, V.operands.end()); - return new GetElementPtrConstantExpr(V.operands[0], IdxList, Ty); + return GetElementPtrConstantExpr::Create(V.operands[0], IdxList, Ty); } // The compare instructions are weird. We have to encode the predicate diff --git a/lib/VMCore/Core.cpp b/lib/VMCore/Core.cpp index c35c85d..8c9626a 100644 --- a/lib/VMCore/Core.cpp +++ b/lib/VMCore/Core.cpp @@ -670,8 +670,8 @@ void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, int IsConstant) { LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name, LLVMTypeRef FunctionTy) { - return wrap(new Function(unwrap<FunctionType>(FunctionTy), - GlobalValue::ExternalLinkage, Name, unwrap(M))); + return wrap(Function::Create(unwrap<FunctionType>(FunctionTy), + GlobalValue::ExternalLinkage, Name, unwrap(M))); } LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name) { @@ -864,14 +864,14 @@ LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB) { } LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef FnRef, const char *Name) { - return wrap(new BasicBlock(Name, unwrap<Function>(FnRef))); + return wrap(BasicBlock::Create(Name, unwrap<Function>(FnRef))); } LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBBRef, const char *Name) { BasicBlock *InsertBeforeBB = unwrap(InsertBeforeBBRef); - return wrap(new BasicBlock(Name, InsertBeforeBB->getParent(), - InsertBeforeBB)); + return wrap(BasicBlock::Create(Name, InsertBeforeBB->getParent(), + InsertBeforeBB)); } void LLVMDeleteBasicBlock(LLVMBasicBlockRef BBRef) { diff --git a/lib/VMCore/Function.cpp b/lib/VMCore/Function.cpp index 6fd3af4..302eff3 100644 --- a/lib/VMCore/Function.cpp +++ b/lib/VMCore/Function.cpp @@ -24,7 +24,7 @@ using namespace llvm; BasicBlock *ilist_traits<BasicBlock>::createSentinel() { - BasicBlock *Ret = new BasicBlock(); + BasicBlock *Ret = BasicBlock::Create(); // This should not be garbage monitored. LeakDetector::removeGarbageObject(Ret); return Ret; diff --git a/lib/VMCore/Instructions.cpp b/lib/VMCore/Instructions.cpp index 33ab1c6..ad99c78 100644 --- a/lib/VMCore/Instructions.cpp +++ b/lib/VMCore/Instructions.cpp @@ -2710,7 +2710,7 @@ bool GetResultInst::isValidOperands(const Value *Aggregate, unsigned Index) { // unit that uses these classes. GetElementPtrInst *GetElementPtrInst::clone() const { - return new GetElementPtrInst(*this); + return new(getNumOperands()) GetElementPtrInst(*this); } BinaryOperator *BinaryOperator::clone() const { @@ -2741,24 +2741,24 @@ CastInst *FPToSIInst::clone() const { return new FPToSIInst(*this); } CastInst *PtrToIntInst::clone() const { return new PtrToIntInst(*this); } CastInst *IntToPtrInst::clone() const { return new IntToPtrInst(*this); } CastInst *BitCastInst::clone() const { return new BitCastInst(*this); } -CallInst *CallInst::clone() const { return new CallInst(*this); } -SelectInst *SelectInst::clone() const { return new SelectInst(*this); } +CallInst *CallInst::clone() const { return new(getNumOperands()) CallInst(*this); } +SelectInst *SelectInst::clone() const { return new(getNumOperands()) SelectInst(*this); } VAArgInst *VAArgInst::clone() const { return new VAArgInst(*this); } ExtractElementInst *ExtractElementInst::clone() const { return new ExtractElementInst(*this); } InsertElementInst *InsertElementInst::clone() const { - return new InsertElementInst(*this); + return InsertElementInst::Create(*this); } ShuffleVectorInst *ShuffleVectorInst::clone() const { return new ShuffleVectorInst(*this); } PHINode *PHINode::clone() const { return new PHINode(*this); } -ReturnInst *ReturnInst::clone() const { return new ReturnInst(*this); } -BranchInst *BranchInst::clone() const { return new BranchInst(*this); } -SwitchInst *SwitchInst::clone() const { return new SwitchInst(*this); } -InvokeInst *InvokeInst::clone() const { return new InvokeInst(*this); } +ReturnInst *ReturnInst::clone() const { return new(getNumOperands()) ReturnInst(*this); } +BranchInst *BranchInst::clone() const { return new(getNumOperands()) BranchInst(*this); } +SwitchInst *SwitchInst::clone() const { return new(getNumOperands()) SwitchInst(*this); } +InvokeInst *InvokeInst::clone() const { return new(getNumOperands()) InvokeInst(*this); } UnwindInst *UnwindInst::clone() const { return new UnwindInst(); } UnreachableInst *UnreachableInst::clone() const { return new UnreachableInst();} GetResultInst *GetResultInst::clone() const { return new GetResultInst(*this); } diff --git a/lib/VMCore/Module.cpp b/lib/VMCore/Module.cpp index 864ec04..429cf1a 100644 --- a/lib/VMCore/Module.cpp +++ b/lib/VMCore/Module.cpp @@ -32,7 +32,7 @@ using namespace llvm; Function *ilist_traits<Function>::createSentinel() { FunctionType *FTy = FunctionType::get(Type::VoidTy, std::vector<const Type*>(), false); - Function *Ret = new Function(FTy, GlobalValue::ExternalLinkage); + Function *Ret = Function::Create(FTy, GlobalValue::ExternalLinkage); // This should not be garbage monitored. LeakDetector::removeGarbageObject(Ret); return Ret; @@ -149,7 +149,7 @@ Constant *Module::getOrInsertFunction(const std::string &Name, GlobalValue *F = dyn_cast_or_null<GlobalValue>(SymTab.lookup(Name)); if (F == 0) { // Nope, add it - Function *New = new Function(Ty, GlobalVariable::ExternalLinkage, Name); + Function *New = Function::Create(Ty, GlobalVariable::ExternalLinkage, Name); FunctionList.push_back(New); return New; // Return the new prototype. } |