[llvm] r240588 - Devirtualize Instruction::clone_impl
Pete Cooper
peter_cooper at apple.com
Wed Jun 24 13:31:43 PDT 2015
Apologies, this had a much better commit message but i must have messed up a rebase or —amend.
Ultimately this does what the subject says. It removes virtual/override from Instruction::clone_impl.
To give a few more details, users still call Instruction::clone(), but this now dispatches to subclass::cloneImpl().
The renaming was done as I was touching every line anyway, and this now matches Metadata and our naming conventions don’t typically allow _ anyway.
For UserOp1 and UserOp2 opcodes, unfortunately this meant providing a default cloneImpl in Instruction, but this will error out if anyone actually calls it.
Thanks,
Pete
> On Jun 24, 2015, at 1:22 PM, Pete Cooper <peter_cooper at apple.com> wrote:
>
> Author: pete
> Date: Wed Jun 24 15:22:23 2015
> New Revision: 240588
>
> URL: http://llvm.org/viewvc/llvm-project?rev=240588&view=rev
> Log:
> Devirtualize Instruction::clone_impl
>
> Modified:
> llvm/trunk/include/llvm/IR/InstrTypes.h
> llvm/trunk/include/llvm/IR/Instruction.h
> llvm/trunk/include/llvm/IR/Instructions.h
> llvm/trunk/lib/IR/Instruction.cpp
> llvm/trunk/lib/IR/Instructions.cpp
>
> Modified: llvm/trunk/include/llvm/IR/InstrTypes.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/InstrTypes.h?rev=240588&r1=240587&r2=240588&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/IR/InstrTypes.h (original)
> +++ llvm/trunk/include/llvm/IR/InstrTypes.h Wed Jun 24 15:22:23 2015
> @@ -139,7 +139,11 @@ protected:
> const Twine &Name, Instruction *InsertBefore);
> BinaryOperator(BinaryOps iType, Value *S1, Value *S2, Type *Ty,
> const Twine &Name, BasicBlock *InsertAtEnd);
> - BinaryOperator *clone_impl() const override;
> +
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> + BinaryOperator *cloneImpl() const;
> +
> public:
> // allocate space for exactly two operands
> void *operator new(size_t s) {
>
> Modified: llvm/trunk/include/llvm/IR/Instruction.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/Instruction.h?rev=240588&r1=240587&r2=240588&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/IR/Instruction.h (original)
> +++ llvm/trunk/include/llvm/IR/Instruction.h Wed Jun 24 15:22:23 2015
> @@ -509,8 +509,10 @@ protected:
> Instruction *InsertBefore = nullptr);
> Instruction(Type *Ty, unsigned iType, Use *Ops, unsigned NumOps,
> BasicBlock *InsertAtEnd);
> - virtual Instruction *clone_impl() const = 0;
>
> +private:
> + /// Create a copy of this instruction.
> + Instruction *cloneImpl() const;
> };
>
> inline Instruction *ilist_traits<Instruction>::createSentinel() const {
>
> Modified: llvm/trunk/include/llvm/IR/Instructions.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/Instructions.h?rev=240588&r1=240587&r2=240588&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/IR/Instructions.h (original)
> +++ llvm/trunk/include/llvm/IR/Instructions.h Wed Jun 24 15:22:23 2015
> @@ -76,7 +76,10 @@ class AllocaInst : public UnaryInstructi
> Type *AllocatedType;
>
> protected:
> - AllocaInst *clone_impl() const override;
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> + AllocaInst *cloneImpl() const;
> +
> public:
> explicit AllocaInst(Type *Ty, Value *ArraySize = nullptr,
> const Twine &Name = "",
> @@ -173,7 +176,10 @@ private:
> class LoadInst : public UnaryInstruction {
> void AssertOK();
> protected:
> - LoadInst *clone_impl() const override;
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> + LoadInst *cloneImpl() const;
> +
> public:
> LoadInst(Value *Ptr, const Twine &NameStr, Instruction *InsertBefore);
> LoadInst(Value *Ptr, const Twine &NameStr, BasicBlock *InsertAtEnd);
> @@ -310,7 +316,10 @@ class StoreInst : public Instruction {
> void *operator new(size_t, unsigned) = delete;
> void AssertOK();
> protected:
> - StoreInst *clone_impl() const override;
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> + StoreInst *cloneImpl() const;
> +
> public:
> // allocate space for exactly two operands
> void *operator new(size_t s) {
> @@ -436,7 +445,10 @@ class FenceInst : public Instruction {
> void *operator new(size_t, unsigned) = delete;
> void Init(AtomicOrdering Ordering, SynchronizationScope SynchScope);
> protected:
> - FenceInst *clone_impl() const override;
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> + FenceInst *cloneImpl() const;
> +
> public:
> // allocate space for exactly zero operands
> void *operator new(size_t s) {
> @@ -505,7 +517,10 @@ class AtomicCmpXchgInst : public Instruc
> AtomicOrdering SuccessOrdering, AtomicOrdering FailureOrdering,
> SynchronizationScope SynchScope);
> protected:
> - AtomicCmpXchgInst *clone_impl() const override;
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> + AtomicCmpXchgInst *cloneImpl() const;
> +
> public:
> // allocate space for exactly three operands
> void *operator new(size_t s) {
> @@ -658,7 +673,10 @@ DEFINE_TRANSPARENT_OPERAND_ACCESSORS(Ato
> class AtomicRMWInst : public Instruction {
> void *operator new(size_t, unsigned) = delete;
> protected:
> - AtomicRMWInst *clone_impl() const override;
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> + AtomicRMWInst *cloneImpl() const;
> +
> public:
> /// This enumeration lists the possible modifications atomicrmw can make. In
> /// the descriptions, 'p' is the pointer to the instruction's memory location,
> @@ -827,7 +845,10 @@ class GetElementPtrInst : public Instruc
> const Twine &NameStr, BasicBlock *InsertAtEnd);
>
> protected:
> - GetElementPtrInst *clone_impl() const override;
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> + GetElementPtrInst *cloneImpl() const;
> +
> public:
> static GetElementPtrInst *Create(Type *PointeeType, Value *Ptr,
> ArrayRef<Value *> IdxList,
> @@ -1078,8 +1099,11 @@ class ICmpInst: public CmpInst {
> }
>
> protected:
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> /// \brief Clone an identical ICmpInst
> - ICmpInst *clone_impl() const override;
> + ICmpInst *cloneImpl() const;
> +
> public:
> /// \brief Constructor with insert-before-instruction semantics.
> ICmpInst(
> @@ -1210,8 +1234,11 @@ public:
> /// \brief Represents a floating point comparison operator.
> class FCmpInst: public CmpInst {
> protected:
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> /// \brief Clone an identical FCmpInst
> - FCmpInst *clone_impl() const override;
> + FCmpInst *cloneImpl() const;
> +
> public:
> /// \brief Constructor with insert-before-instruction semantics.
> FCmpInst(
> @@ -1350,7 +1377,10 @@ class CallInst : public Instruction {
> Instruction *InsertBefore);
> CallInst(Value *F, const Twine &NameStr, BasicBlock *InsertAtEnd);
> protected:
> - CallInst *clone_impl() const override;
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> + CallInst *cloneImpl() const;
> +
> public:
> static CallInst *Create(Value *Func,
> ArrayRef<Value *> Args,
> @@ -1687,7 +1717,10 @@ class SelectInst : public Instruction {
> setName(NameStr);
> }
> protected:
> - SelectInst *clone_impl() const override;
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> + SelectInst *cloneImpl() const;
> +
> public:
> static SelectInst *Create(Value *C, Value *S1, Value *S2,
> const Twine &NameStr = "",
> @@ -1742,7 +1775,9 @@ DEFINE_TRANSPARENT_OPERAND_ACCESSORS(Sel
> ///
> class VAArgInst : public UnaryInstruction {
> protected:
> - VAArgInst *clone_impl() const override;
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> + VAArgInst *cloneImpl() const;
>
> public:
> VAArgInst(Value *List, Type *Ty, const Twine &NameStr = "",
> @@ -1782,7 +1817,9 @@ class ExtractElementInst : public Instru
> ExtractElementInst(Value *Vec, Value *Idx, const Twine &NameStr,
> BasicBlock *InsertAtEnd);
> protected:
> - ExtractElementInst *clone_impl() const override;
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> + ExtractElementInst *cloneImpl() const;
>
> public:
> static ExtractElementInst *Create(Value *Vec, Value *Idx,
> @@ -1843,7 +1880,9 @@ class InsertElementInst : public Instruc
> InsertElementInst(Value *Vec, Value *NewElt, Value *Idx,
> const Twine &NameStr, BasicBlock *InsertAtEnd);
> protected:
> - InsertElementInst *clone_impl() const override;
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> + InsertElementInst *cloneImpl() const;
>
> public:
> static InsertElementInst *Create(Value *Vec, Value *NewElt, Value *Idx,
> @@ -1896,7 +1935,9 @@ DEFINE_TRANSPARENT_OPERAND_ACCESSORS(Ins
> ///
> class ShuffleVectorInst : public Instruction {
> protected:
> - ShuffleVectorInst *clone_impl() const override;
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> + ShuffleVectorInst *cloneImpl() const;
>
> public:
> // allocate space for exactly three operands
> @@ -1997,7 +2038,9 @@ class ExtractValueInst : public UnaryIns
> return User::operator new(s, 1);
> }
> protected:
> - ExtractValueInst *clone_impl() const override;
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> + ExtractValueInst *cloneImpl() const;
>
> public:
> static ExtractValueInst *Create(Value *Agg,
> @@ -2111,7 +2154,10 @@ class InsertValueInst : public Instructi
> InsertValueInst(Value *Agg, Value *Val, unsigned Idx,
> const Twine &NameStr, BasicBlock *InsertAtEnd);
> protected:
> - InsertValueInst *clone_impl() const override;
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> + InsertValueInst *cloneImpl() const;
> +
> public:
> // allocate space for exactly two operands
> void *operator new(size_t s) {
> @@ -2252,7 +2298,10 @@ protected:
> User::allocHungoffUses(N, /* IsPhi */ true);
> }
>
> - PHINode *clone_impl() const override;
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> + PHINode *cloneImpl() const;
> +
> public:
> /// Constructors - NumReservedValues is a hint for the number of incoming
> /// edges that this phi node will have (use 0 if you really have no idea).
> @@ -2445,7 +2494,10 @@ private:
> const Twine &NameStr, BasicBlock *InsertAtEnd);
>
> protected:
> - LandingPadInst *clone_impl() const override;
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> + LandingPadInst *cloneImpl() const;
> +
> public:
> /// Constructors - NumReservedClauses is a hint for the number of incoming
> /// clauses that this landingpad will have (use 0 if you really have no idea).
> @@ -2538,7 +2590,10 @@ private:
> ReturnInst(LLVMContext &C, Value *retVal, BasicBlock *InsertAtEnd);
> explicit ReturnInst(LLVMContext &C, BasicBlock *InsertAtEnd);
> protected:
> - ReturnInst *clone_impl() const override;
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> + ReturnInst *cloneImpl() const;
> +
> public:
> static ReturnInst* Create(LLVMContext &C, Value *retVal = nullptr,
> Instruction *InsertBefore = nullptr) {
> @@ -2610,7 +2665,10 @@ class BranchInst : public TerminatorInst
> BranchInst(BasicBlock *IfTrue, BasicBlock *IfFalse, Value *Cond,
> BasicBlock *InsertAtEnd);
> protected:
> - BranchInst *clone_impl() const override;
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> + BranchInst *cloneImpl() const;
> +
> public:
> static BranchInst *Create(BasicBlock *IfTrue,
> Instruction *InsertBefore = nullptr) {
> @@ -2717,7 +2775,10 @@ class SwitchInst : public TerminatorInst
> SwitchInst(Value *Value, BasicBlock *Default, unsigned NumCases,
> BasicBlock *InsertAtEnd);
> protected:
> - SwitchInst *clone_impl() const override;
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> + SwitchInst *cloneImpl() const;
> +
> public:
>
> // -2
> @@ -3022,7 +3083,10 @@ class IndirectBrInst : public Terminator
> /// autoinserts at the end of the specified BasicBlock.
> IndirectBrInst(Value *Address, unsigned NumDests, BasicBlock *InsertAtEnd);
> protected:
> - IndirectBrInst *clone_impl() const override;
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> + IndirectBrInst *cloneImpl() const;
> +
> public:
> static IndirectBrInst *Create(Value *Address, unsigned NumDests,
> Instruction *InsertBefore = nullptr) {
> @@ -3129,7 +3193,10 @@ class InvokeInst : public TerminatorInst
> ArrayRef<Value *> Args, unsigned Values,
> const Twine &NameStr, BasicBlock *InsertAtEnd);
> protected:
> - InvokeInst *clone_impl() const override;
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> + InvokeInst *cloneImpl() const;
> +
> public:
> static InvokeInst *Create(Value *Func,
> BasicBlock *IfNormal, BasicBlock *IfException,
> @@ -3424,7 +3491,10 @@ class ResumeInst : public TerminatorInst
> explicit ResumeInst(Value *Exn, Instruction *InsertBefore=nullptr);
> ResumeInst(Value *Exn, BasicBlock *InsertAtEnd);
> protected:
> - ResumeInst *clone_impl() const override;
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> + ResumeInst *cloneImpl() const;
> +
> public:
> static ResumeInst *Create(Value *Exn, Instruction *InsertBefore = nullptr) {
> return new(1) ResumeInst(Exn, InsertBefore);
> @@ -3473,7 +3543,9 @@ DEFINE_TRANSPARENT_OPERAND_ACCESSORS(Res
> class UnreachableInst : public TerminatorInst {
> void *operator new(size_t, unsigned) = delete;
> protected:
> - UnreachableInst *clone_impl() const override;
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> + UnreachableInst *cloneImpl() const;
>
> public:
> // allocate space for exactly zero operands
> @@ -3505,8 +3577,10 @@ private:
> /// \brief This class represents a truncation of integer types.
> class TruncInst : public CastInst {
> protected:
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> /// \brief Clone an identical TruncInst
> - TruncInst *clone_impl() const override;
> + TruncInst *cloneImpl() const;
>
> public:
> /// \brief Constructor with insert-before-instruction semantics
> @@ -3541,8 +3615,10 @@ public:
> /// \brief This class represents zero extension of integer types.
> class ZExtInst : public CastInst {
> protected:
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> /// \brief Clone an identical ZExtInst
> - ZExtInst *clone_impl() const override;
> + ZExtInst *cloneImpl() const;
>
> public:
> /// \brief Constructor with insert-before-instruction semantics
> @@ -3577,8 +3653,10 @@ public:
> /// \brief This class represents a sign extension of integer types.
> class SExtInst : public CastInst {
> protected:
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> /// \brief Clone an identical SExtInst
> - SExtInst *clone_impl() const override;
> + SExtInst *cloneImpl() const;
>
> public:
> /// \brief Constructor with insert-before-instruction semantics
> @@ -3613,8 +3691,10 @@ public:
> /// \brief This class represents a truncation of floating point types.
> class FPTruncInst : public CastInst {
> protected:
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> /// \brief Clone an identical FPTruncInst
> - FPTruncInst *clone_impl() const override;
> + FPTruncInst *cloneImpl() const;
>
> public:
> /// \brief Constructor with insert-before-instruction semantics
> @@ -3649,8 +3729,10 @@ public:
> /// \brief This class represents an extension of floating point types.
> class FPExtInst : public CastInst {
> protected:
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> /// \brief Clone an identical FPExtInst
> - FPExtInst *clone_impl() const override;
> + FPExtInst *cloneImpl() const;
>
> public:
> /// \brief Constructor with insert-before-instruction semantics
> @@ -3685,8 +3767,10 @@ public:
> /// \brief This class represents a cast unsigned integer to floating point.
> class UIToFPInst : public CastInst {
> protected:
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> /// \brief Clone an identical UIToFPInst
> - UIToFPInst *clone_impl() const override;
> + UIToFPInst *cloneImpl() const;
>
> public:
> /// \brief Constructor with insert-before-instruction semantics
> @@ -3721,8 +3805,10 @@ public:
> /// \brief This class represents a cast from signed integer to floating point.
> class SIToFPInst : public CastInst {
> protected:
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> /// \brief Clone an identical SIToFPInst
> - SIToFPInst *clone_impl() const override;
> + SIToFPInst *cloneImpl() const;
>
> public:
> /// \brief Constructor with insert-before-instruction semantics
> @@ -3757,8 +3843,10 @@ public:
> /// \brief This class represents a cast from floating point to unsigned integer
> class FPToUIInst : public CastInst {
> protected:
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> /// \brief Clone an identical FPToUIInst
> - FPToUIInst *clone_impl() const override;
> + FPToUIInst *cloneImpl() const;
>
> public:
> /// \brief Constructor with insert-before-instruction semantics
> @@ -3793,8 +3881,10 @@ public:
> /// \brief This class represents a cast from floating point to signed integer.
> class FPToSIInst : public CastInst {
> protected:
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> /// \brief Clone an identical FPToSIInst
> - FPToSIInst *clone_impl() const override;
> + FPToSIInst *cloneImpl() const;
>
> public:
> /// \brief Constructor with insert-before-instruction semantics
> @@ -3845,8 +3935,10 @@ public:
> BasicBlock *InsertAtEnd ///< The block to insert the instruction into
> );
>
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> /// \brief Clone an identical IntToPtrInst
> - IntToPtrInst *clone_impl() const override;
> + IntToPtrInst *cloneImpl() const;
>
> /// \brief Returns the address space of this instruction's pointer type.
> unsigned getAddressSpace() const {
> @@ -3869,8 +3961,10 @@ public:
> /// \brief This class represents a cast from a pointer to an integer
> class PtrToIntInst : public CastInst {
> protected:
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> /// \brief Clone an identical PtrToIntInst
> - PtrToIntInst *clone_impl() const override;
> + PtrToIntInst *cloneImpl() const;
>
> public:
> /// \brief Constructor with insert-before-instruction semantics
> @@ -3917,8 +4011,10 @@ public:
> /// \brief This class represents a no-op cast from one type to another.
> class BitCastInst : public CastInst {
> protected:
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> /// \brief Clone an identical BitCastInst
> - BitCastInst *clone_impl() const override;
> + BitCastInst *cloneImpl() const;
>
> public:
> /// \brief Constructor with insert-before-instruction semantics
> @@ -3954,8 +4050,10 @@ public:
> /// one address space to another.
> class AddrSpaceCastInst : public CastInst {
> protected:
> + // Note: Instruction needs to be a friend here to call cloneImpl.
> + friend class Instruction;
> /// \brief Clone an identical AddrSpaceCastInst
> - AddrSpaceCastInst *clone_impl() const override;
> + AddrSpaceCastInst *cloneImpl() const;
>
> public:
> /// \brief Constructor with insert-before-instruction semantics
>
> Modified: llvm/trunk/lib/IR/Instruction.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Instruction.cpp?rev=240588&r1=240587&r2=240588&view=diff
> ==============================================================================
> --- llvm/trunk/lib/IR/Instruction.cpp (original)
> +++ llvm/trunk/lib/IR/Instruction.cpp Wed Jun 24 15:22:23 2015
> @@ -534,8 +534,23 @@ bool Instruction::isNilpotent(unsigned O
> return Opcode == Xor;
> }
>
> +Instruction *Instruction::cloneImpl() const {
> + llvm_unreachable("Subclass of Instruction failed to implement cloneImpl");
> +}
> +
> Instruction *Instruction::clone() const {
> - Instruction *New = clone_impl();
> + Instruction *New = nullptr;
> + switch (getOpcode()) {
> + default:
> + llvm_unreachable("Unhandled Opcode.");
> +#define HANDLE_INST(num, opc, clas) \
> + case Instruction::opc: \
> + New = cast<clas>(this)->cloneImpl(); \
> + break;
> +#include "llvm/IR/Instruction.def"
> +#undef HANDLE_INST
> + }
> +
> New->SubclassOptionalData = SubclassOptionalData;
> if (!hasMetadata())
> return New;
>
> Modified: llvm/trunk/lib/IR/Instructions.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Instructions.cpp?rev=240588&r1=240587&r2=240588&view=diff
> ==============================================================================
> --- llvm/trunk/lib/IR/Instructions.cpp (original)
> +++ llvm/trunk/lib/IR/Instructions.cpp Wed Jun 24 15:22:23 2015
> @@ -3448,55 +3448,55 @@ void IndirectBrInst::setSuccessorV(unsig
> }
>
> //===----------------------------------------------------------------------===//
> -// clone_impl() implementations
> +// cloneImpl() implementations
> //===----------------------------------------------------------------------===//
>
> // Define these methods here so vtables don't get emitted into every translation
> // unit that uses these classes.
>
> -GetElementPtrInst *GetElementPtrInst::clone_impl() const {
> +GetElementPtrInst *GetElementPtrInst::cloneImpl() const {
> return new (getNumOperands()) GetElementPtrInst(*this);
> }
>
> -BinaryOperator *BinaryOperator::clone_impl() const {
> +BinaryOperator *BinaryOperator::cloneImpl() const {
> return Create(getOpcode(), Op<0>(), Op<1>());
> }
>
> -FCmpInst* FCmpInst::clone_impl() const {
> +FCmpInst *FCmpInst::cloneImpl() const {
> return new FCmpInst(getPredicate(), Op<0>(), Op<1>());
> }
>
> -ICmpInst* ICmpInst::clone_impl() const {
> +ICmpInst *ICmpInst::cloneImpl() const {
> return new ICmpInst(getPredicate(), Op<0>(), Op<1>());
> }
>
> -ExtractValueInst *ExtractValueInst::clone_impl() const {
> +ExtractValueInst *ExtractValueInst::cloneImpl() const {
> return new ExtractValueInst(*this);
> }
>
> -InsertValueInst *InsertValueInst::clone_impl() const {
> +InsertValueInst *InsertValueInst::cloneImpl() const {
> return new InsertValueInst(*this);
> }
>
> -AllocaInst *AllocaInst::clone_impl() const {
> +AllocaInst *AllocaInst::cloneImpl() const {
> AllocaInst *Result = new AllocaInst(getAllocatedType(),
> (Value *)getOperand(0), getAlignment());
> Result->setUsedWithInAlloca(isUsedWithInAlloca());
> return Result;
> }
>
> -LoadInst *LoadInst::clone_impl() const {
> +LoadInst *LoadInst::cloneImpl() const {
> return new LoadInst(getOperand(0), Twine(), isVolatile(),
> getAlignment(), getOrdering(), getSynchScope());
> }
>
> -StoreInst *StoreInst::clone_impl() const {
> +StoreInst *StoreInst::cloneImpl() const {
> return new StoreInst(getOperand(0), getOperand(1), isVolatile(),
> getAlignment(), getOrdering(), getSynchScope());
>
> }
>
> -AtomicCmpXchgInst *AtomicCmpXchgInst::clone_impl() const {
> +AtomicCmpXchgInst *AtomicCmpXchgInst::cloneImpl() const {
> AtomicCmpXchgInst *Result =
> new AtomicCmpXchgInst(getOperand(0), getOperand(1), getOperand(2),
> getSuccessOrdering(), getFailureOrdering(),
> @@ -3506,7 +3506,7 @@ AtomicCmpXchgInst *AtomicCmpXchgInst::cl
> return Result;
> }
>
> -AtomicRMWInst *AtomicRMWInst::clone_impl() const {
> +AtomicRMWInst *AtomicRMWInst::cloneImpl() const {
> AtomicRMWInst *Result =
> new AtomicRMWInst(getOperation(),getOperand(0), getOperand(1),
> getOrdering(), getSynchScope());
> @@ -3514,120 +3514,113 @@ AtomicRMWInst *AtomicRMWInst::clone_impl
> return Result;
> }
>
> -FenceInst *FenceInst::clone_impl() const {
> +FenceInst *FenceInst::cloneImpl() const {
> return new FenceInst(getContext(), getOrdering(), getSynchScope());
> }
>
> -TruncInst *TruncInst::clone_impl() const {
> +TruncInst *TruncInst::cloneImpl() const {
> return new TruncInst(getOperand(0), getType());
> }
>
> -ZExtInst *ZExtInst::clone_impl() const {
> +ZExtInst *ZExtInst::cloneImpl() const {
> return new ZExtInst(getOperand(0), getType());
> }
>
> -SExtInst *SExtInst::clone_impl() const {
> +SExtInst *SExtInst::cloneImpl() const {
> return new SExtInst(getOperand(0), getType());
> }
>
> -FPTruncInst *FPTruncInst::clone_impl() const {
> +FPTruncInst *FPTruncInst::cloneImpl() const {
> return new FPTruncInst(getOperand(0), getType());
> }
>
> -FPExtInst *FPExtInst::clone_impl() const {
> +FPExtInst *FPExtInst::cloneImpl() const {
> return new FPExtInst(getOperand(0), getType());
> }
>
> -UIToFPInst *UIToFPInst::clone_impl() const {
> +UIToFPInst *UIToFPInst::cloneImpl() const {
> return new UIToFPInst(getOperand(0), getType());
> }
>
> -SIToFPInst *SIToFPInst::clone_impl() const {
> +SIToFPInst *SIToFPInst::cloneImpl() const {
> return new SIToFPInst(getOperand(0), getType());
> }
>
> -FPToUIInst *FPToUIInst::clone_impl() const {
> +FPToUIInst *FPToUIInst::cloneImpl() const {
> return new FPToUIInst(getOperand(0), getType());
> }
>
> -FPToSIInst *FPToSIInst::clone_impl() const {
> +FPToSIInst *FPToSIInst::cloneImpl() const {
> return new FPToSIInst(getOperand(0), getType());
> }
>
> -PtrToIntInst *PtrToIntInst::clone_impl() const {
> +PtrToIntInst *PtrToIntInst::cloneImpl() const {
> return new PtrToIntInst(getOperand(0), getType());
> }
>
> -IntToPtrInst *IntToPtrInst::clone_impl() const {
> +IntToPtrInst *IntToPtrInst::cloneImpl() const {
> return new IntToPtrInst(getOperand(0), getType());
> }
>
> -BitCastInst *BitCastInst::clone_impl() const {
> +BitCastInst *BitCastInst::cloneImpl() const {
> return new BitCastInst(getOperand(0), getType());
> }
>
> -AddrSpaceCastInst *AddrSpaceCastInst::clone_impl() const {
> +AddrSpaceCastInst *AddrSpaceCastInst::cloneImpl() const {
> return new AddrSpaceCastInst(getOperand(0), getType());
> }
>
> -CallInst *CallInst::clone_impl() const {
> +CallInst *CallInst::cloneImpl() const {
> return new(getNumOperands()) CallInst(*this);
> }
>
> -SelectInst *SelectInst::clone_impl() const {
> +SelectInst *SelectInst::cloneImpl() const {
> return SelectInst::Create(getOperand(0), getOperand(1), getOperand(2));
> }
>
> -VAArgInst *VAArgInst::clone_impl() const {
> +VAArgInst *VAArgInst::cloneImpl() const {
> return new VAArgInst(getOperand(0), getType());
> }
>
> -ExtractElementInst *ExtractElementInst::clone_impl() const {
> +ExtractElementInst *ExtractElementInst::cloneImpl() const {
> return ExtractElementInst::Create(getOperand(0), getOperand(1));
> }
>
> -InsertElementInst *InsertElementInst::clone_impl() const {
> +InsertElementInst *InsertElementInst::cloneImpl() const {
> return InsertElementInst::Create(getOperand(0), getOperand(1), getOperand(2));
> }
>
> -ShuffleVectorInst *ShuffleVectorInst::clone_impl() const {
> +ShuffleVectorInst *ShuffleVectorInst::cloneImpl() const {
> return new ShuffleVectorInst(getOperand(0), getOperand(1), getOperand(2));
> }
>
> -PHINode *PHINode::clone_impl() const {
> - return new PHINode(*this);
> -}
> +PHINode *PHINode::cloneImpl() const { return new PHINode(*this); }
>
> -LandingPadInst *LandingPadInst::clone_impl() const {
> +LandingPadInst *LandingPadInst::cloneImpl() const {
> return new LandingPadInst(*this);
> }
>
> -ReturnInst *ReturnInst::clone_impl() const {
> +ReturnInst *ReturnInst::cloneImpl() const {
> return new(getNumOperands()) ReturnInst(*this);
> }
>
> -BranchInst *BranchInst::clone_impl() const {
> +BranchInst *BranchInst::cloneImpl() const {
> return new(getNumOperands()) BranchInst(*this);
> }
>
> -SwitchInst *SwitchInst::clone_impl() const {
> - return new SwitchInst(*this);
> -}
> +SwitchInst *SwitchInst::cloneImpl() const { return new SwitchInst(*this); }
>
> -IndirectBrInst *IndirectBrInst::clone_impl() const {
> +IndirectBrInst *IndirectBrInst::cloneImpl() const {
> return new IndirectBrInst(*this);
> }
>
> -
> -InvokeInst *InvokeInst::clone_impl() const {
> +InvokeInst *InvokeInst::cloneImpl() const {
> return new(getNumOperands()) InvokeInst(*this);
> }
>
> -ResumeInst *ResumeInst::clone_impl() const {
> - return new(1) ResumeInst(*this);
> -}
> +ResumeInst *ResumeInst::cloneImpl() const { return new (1) ResumeInst(*this); }
>
> -UnreachableInst *UnreachableInst::clone_impl() const {
> +UnreachableInst *UnreachableInst::cloneImpl() const {
> LLVMContext &Context = getContext();
> return new UnreachableInst(Context);
> }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list