diff --git a/include/llvm/IR/Instructions.h b/include/llvm/IR/Instructions.h index 131de3db3c5..9e861568551 100644 --- a/include/llvm/IR/Instructions.h +++ b/include/llvm/IR/Instructions.h @@ -2234,7 +2234,7 @@ class PHINode : public Instruction { : Instruction(Ty, Instruction::PHI, nullptr, 0, InsertBefore), ReservedSpace(NumReservedValues) { setName(NameStr); - OperandList = allocHungoffUses(ReservedSpace); + allocHungoffUses(ReservedSpace); } PHINode(Type *Ty, unsigned NumReservedValues, const Twine &NameStr, @@ -2242,14 +2242,14 @@ class PHINode : public Instruction { : Instruction(Ty, Instruction::PHI, nullptr, 0, InsertAtEnd), ReservedSpace(NumReservedValues) { setName(NameStr); - OperandList = allocHungoffUses(ReservedSpace); + allocHungoffUses(ReservedSpace); } protected: // allocHungoffUses - this is more complicated than the generic // User::allocHungoffUses, because we have to allocate Uses for the incoming // values and pointers to the incoming blocks, all in one allocation. - Use *allocHungoffUses(unsigned N) { - return User::allocHungoffUses(N, /* IsPhi */ true); + void allocHungoffUses(unsigned N) { + User::allocHungoffUses(N, /* IsPhi */ true); } PHINode *clone_impl() const override; diff --git a/include/llvm/IR/User.h b/include/llvm/IR/User.h index 998e93a6a94..997e484ea4b 100644 --- a/include/llvm/IR/User.h +++ b/include/llvm/IR/User.h @@ -57,7 +57,7 @@ protected: /// (with bottom bit set) to the User. /// \param IsPhi identifies callers which are phi nodes and which need /// N BasicBlock* allocated along with N - Use *allocHungoffUses(unsigned N, bool IsPhi = false); + void allocHungoffUses(unsigned N, bool IsPhi = false); /// \brief Grow the number of hung off uses. Note that allocHungoffUses /// should be called if there are no uses. diff --git a/lib/IR/Instructions.cpp b/lib/IR/Instructions.cpp index 5fb51156638..73b966f808e 100644 --- a/lib/IR/Instructions.cpp +++ b/lib/IR/Instructions.cpp @@ -85,9 +85,9 @@ const char *SelectInst::areInvalidOperands(Value *Op0, Value *Op1, Value *Op2) { //===----------------------------------------------------------------------===// PHINode::PHINode(const PHINode &PN) - : Instruction(PN.getType(), Instruction::PHI, - allocHungoffUses(PN.getNumOperands()), PN.getNumOperands()), - ReservedSpace(PN.getNumOperands()) { + : Instruction(PN.getType(), Instruction::PHI, nullptr, PN.getNumOperands()), + ReservedSpace(PN.getNumOperands()) { + allocHungoffUses(PN.getNumOperands()); std::copy(PN.op_begin(), PN.op_end(), op_begin()); std::copy(PN.block_begin(), PN.block_end(), block_begin()); SubclassOptionalData = PN.SubclassOptionalData; @@ -168,9 +168,10 @@ LandingPadInst::LandingPadInst(Type *RetTy, Value *PersonalityFn, } LandingPadInst::LandingPadInst(const LandingPadInst &LP) - : Instruction(LP.getType(), Instruction::LandingPad, - allocHungoffUses(LP.getNumOperands()), LP.getNumOperands()), - ReservedSpace(LP.getNumOperands()) { + : Instruction(LP.getType(), Instruction::LandingPad, nullptr, + LP.getNumOperands()), + ReservedSpace(LP.getNumOperands()) { + allocHungoffUses(LP.getNumOperands()); Use *OL = OperandList, *InOL = LP.OperandList; for (unsigned I = 0, E = ReservedSpace; I != E; ++I) OL[I] = InOL[I]; @@ -198,7 +199,7 @@ void LandingPadInst::init(Value *PersFn, unsigned NumReservedValues, const Twine &NameStr) { ReservedSpace = NumReservedValues; NumOperands = 1; - OperandList = allocHungoffUses(ReservedSpace); + allocHungoffUses(ReservedSpace); Op<0>() = PersFn; setName(NameStr); setCleanup(false); @@ -3262,7 +3263,7 @@ void SwitchInst::init(Value *Value, BasicBlock *Default, unsigned NumReserved) { assert(Value && Default && NumReserved); ReservedSpace = NumReserved; NumOperands = 2; - OperandList = allocHungoffUses(ReservedSpace); + allocHungoffUses(ReservedSpace); Op<0>() = Value; Op<1>() = Default; @@ -3371,8 +3372,8 @@ void IndirectBrInst::init(Value *Address, unsigned NumDests) { "Address of indirectbr must be a pointer"); ReservedSpace = 1+NumDests; NumOperands = 1; - OperandList = allocHungoffUses(ReservedSpace); - + allocHungoffUses(ReservedSpace); + Op<0>() = Address; } @@ -3403,9 +3404,9 @@ IndirectBrInst::IndirectBrInst(Value *Address, unsigned NumCases, } IndirectBrInst::IndirectBrInst(const IndirectBrInst &IBI) - : TerminatorInst(Type::getVoidTy(IBI.getContext()), Instruction::IndirectBr, - allocHungoffUses(IBI.getNumOperands()), - IBI.getNumOperands()) { + : TerminatorInst(Type::getVoidTy(IBI.getContext()), Instruction::IndirectBr, + nullptr, IBI.getNumOperands()) { + allocHungoffUses(IBI.getNumOperands()); Use *OL = OperandList, *InOL = IBI.OperandList; for (unsigned i = 0, E = IBI.getNumOperands(); i != E; ++i) OL[i] = InOL[i]; diff --git a/lib/IR/User.cpp b/lib/IR/User.cpp index 8035989f1dc..d6593520477 100644 --- a/lib/IR/User.cpp +++ b/lib/IR/User.cpp @@ -40,7 +40,7 @@ void User::replaceUsesOfWith(Value *From, Value *To) { // User allocHungoffUses Implementation //===----------------------------------------------------------------------===// -Use *User::allocHungoffUses(unsigned N, bool IsPhi) { +void User::allocHungoffUses(unsigned N, bool IsPhi) { // Allocate the array of Uses, followed by a pointer (with bottom bit set) to // the User. size_t size = N * sizeof(Use) + sizeof(Use::UserRef); @@ -49,11 +49,9 @@ Use *User::allocHungoffUses(unsigned N, bool IsPhi) { Use *Begin = static_cast(::operator new(size)); Use *End = Begin + N; (void) new(End) Use::UserRef(const_cast(this), 1); - Use *Uses = Use::initTags(Begin, End); - OperandList = Uses; + OperandList = Use::initTags(Begin, End); // Tag this operand list as being a hung off. HasHungOffUses = true; - return Uses; } void User::growHungoffUses(unsigned NewNumUses, bool IsPhi) {