From 30f809196362b497eef743ef60acd0724e97654b Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Tue, 25 Aug 2009 22:29:08 +0000 Subject: [PATCH] Use covariant return types for Instruction::clone, and eliminate the forms of ExtractElementInst and InsertElementInst that are equivalent to clone. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80041 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/InstrTypes.h | 2 +- include/llvm/Instructions.h | 33 +++++++++++++-------------------- lib/VMCore/Instructions.cpp | 24 ++++++++++++------------ 3 files changed, 26 insertions(+), 33 deletions(-) diff --git a/include/llvm/InstrTypes.h b/include/llvm/InstrTypes.h index 9b59c80326e..c9a6ac3aa96 100644 --- a/include/llvm/InstrTypes.h +++ b/include/llvm/InstrTypes.h @@ -53,7 +53,7 @@ protected: virtual void setSuccessorV(unsigned idx, BasicBlock *B) = 0; public: - virtual Instruction *clone(LLVMContext &Context) const = 0; + virtual TerminatorInst *clone(LLVMContext &Context) const = 0; /// getNumSuccessors - Return the number of successors that this terminator /// has. diff --git a/include/llvm/Instructions.h b/include/llvm/Instructions.h index 5163342f332..4da87d1b06b 100644 --- a/include/llvm/Instructions.h +++ b/include/llvm/Instructions.h @@ -78,7 +78,7 @@ public: unsigned getAlignment() const { return (1u << SubclassData) >> 1; } void setAlignment(unsigned Align); - virtual Instruction *clone(LLVMContext &Context) const = 0; + virtual AllocationInst *clone(LLVMContext &Context) const = 0; // Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const AllocationInst *) { return true; } @@ -1276,10 +1276,6 @@ class ExtractElementInst : public Instruction { ExtractElementInst(Value *Vec, Value *Idx, const Twine &NameStr, BasicBlock *InsertAtEnd); public: - static ExtractElementInst *Create(const ExtractElementInst &EE) { - return Create(EE.getOperand(0), EE.getOperand(1)); - } - static ExtractElementInst *Create(Value *Vec, Value *Idx, const Twine &NameStr = "", Instruction *InsertBefore = 0) { @@ -1330,9 +1326,6 @@ class InsertElementInst : public Instruction { InsertElementInst(Value *Vec, Value *NewElt, Value *Idx, const Twine &NameStr, BasicBlock *InsertAtEnd); public: - static InsertElementInst *Create(const InsertElementInst &IE) { - return Create(IE.getOperand(0), IE.getOperand(1), IE.getOperand(2)); - } static InsertElementInst *Create(Value *Vec, Value *NewElt, Value *Idx, const Twine &NameStr = "", Instruction *InsertBefore = 0) { @@ -2638,7 +2631,7 @@ public: ); /// @brief Clone an identical TruncInst - virtual CastInst *clone(LLVMContext &Context) const; + virtual TruncInst *clone(LLVMContext &Context) const; /// @brief Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const TruncInst *) { return true; } @@ -2674,7 +2667,7 @@ public: ); /// @brief Clone an identical ZExtInst - virtual CastInst *clone(LLVMContext &Context) const; + virtual ZExtInst *clone(LLVMContext &Context) const; /// @brief Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const ZExtInst *) { return true; } @@ -2710,7 +2703,7 @@ public: ); /// @brief Clone an identical SExtInst - virtual CastInst *clone(LLVMContext &Context) const; + virtual SExtInst *clone(LLVMContext &Context) const; /// @brief Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const SExtInst *) { return true; } @@ -2746,7 +2739,7 @@ public: ); /// @brief Clone an identical FPTruncInst - virtual CastInst *clone(LLVMContext &Context) const; + virtual FPTruncInst *clone(LLVMContext &Context) const; /// @brief Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const FPTruncInst *) { return true; } @@ -2782,7 +2775,7 @@ public: ); /// @brief Clone an identical FPExtInst - virtual CastInst *clone(LLVMContext &Context) const; + virtual FPExtInst *clone(LLVMContext &Context) const; /// @brief Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const FPExtInst *) { return true; } @@ -2818,7 +2811,7 @@ public: ); /// @brief Clone an identical UIToFPInst - virtual CastInst *clone(LLVMContext &Context) const; + virtual UIToFPInst *clone(LLVMContext &Context) const; /// @brief Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const UIToFPInst *) { return true; } @@ -2854,7 +2847,7 @@ public: ); /// @brief Clone an identical SIToFPInst - virtual CastInst *clone(LLVMContext &Context) const; + virtual SIToFPInst *clone(LLVMContext &Context) const; /// @brief Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const SIToFPInst *) { return true; } @@ -2890,7 +2883,7 @@ public: ); /// @brief Clone an identical FPToUIInst - virtual CastInst *clone(LLVMContext &Context) const; + virtual FPToUIInst *clone(LLVMContext &Context) const; /// @brief Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const FPToUIInst *) { return true; } @@ -2926,7 +2919,7 @@ public: ); /// @brief Clone an identical FPToSIInst - virtual CastInst *clone(LLVMContext &Context) const; + virtual FPToSIInst *clone(LLVMContext &Context) const; /// @brief Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const FPToSIInst *) { return true; } @@ -2962,7 +2955,7 @@ public: ); /// @brief Clone an identical IntToPtrInst - virtual CastInst *clone(LLVMContext &Context) const; + virtual IntToPtrInst *clone(LLVMContext &Context) const; // Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const IntToPtrInst *) { return true; } @@ -2998,7 +2991,7 @@ public: ); /// @brief Clone an identical PtrToIntInst - virtual CastInst *clone(LLVMContext &Context) const; + virtual PtrToIntInst *clone(LLVMContext &Context) const; // Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const PtrToIntInst *) { return true; } @@ -3034,7 +3027,7 @@ public: ); /// @brief Clone an identical BitCastInst - virtual CastInst *clone(LLVMContext &Context) const; + virtual BitCastInst *clone(LLVMContext &Context) const; // Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const BitCastInst *) { return true; } diff --git a/lib/VMCore/Instructions.cpp b/lib/VMCore/Instructions.cpp index 12a4045a14e..122569ddaed 100644 --- a/lib/VMCore/Instructions.cpp +++ b/lib/VMCore/Instructions.cpp @@ -2933,73 +2933,73 @@ StoreInst *StoreInst::clone(LLVMContext&) const { return New; } -CastInst *TruncInst::clone(LLVMContext&) const { +TruncInst *TruncInst::clone(LLVMContext&) const { TruncInst *New = new TruncInst(getOperand(0), getType()); New->SubclassOptionalData = SubclassOptionalData; return New; } -CastInst *ZExtInst::clone(LLVMContext&) const { +ZExtInst *ZExtInst::clone(LLVMContext&) const { ZExtInst *New = new ZExtInst(getOperand(0), getType()); New->SubclassOptionalData = SubclassOptionalData; return New; } -CastInst *SExtInst::clone(LLVMContext&) const { +SExtInst *SExtInst::clone(LLVMContext&) const { SExtInst *New = new SExtInst(getOperand(0), getType()); New->SubclassOptionalData = SubclassOptionalData; return New; } -CastInst *FPTruncInst::clone(LLVMContext&) const { +FPTruncInst *FPTruncInst::clone(LLVMContext&) const { FPTruncInst *New = new FPTruncInst(getOperand(0), getType()); New->SubclassOptionalData = SubclassOptionalData; return New; } -CastInst *FPExtInst::clone(LLVMContext&) const { +FPExtInst *FPExtInst::clone(LLVMContext&) const { FPExtInst *New = new FPExtInst(getOperand(0), getType()); New->SubclassOptionalData = SubclassOptionalData; return New; } -CastInst *UIToFPInst::clone(LLVMContext&) const { +UIToFPInst *UIToFPInst::clone(LLVMContext&) const { UIToFPInst *New = new UIToFPInst(getOperand(0), getType()); New->SubclassOptionalData = SubclassOptionalData; return New; } -CastInst *SIToFPInst::clone(LLVMContext&) const { +SIToFPInst *SIToFPInst::clone(LLVMContext&) const { SIToFPInst *New = new SIToFPInst(getOperand(0), getType()); New->SubclassOptionalData = SubclassOptionalData; return New; } -CastInst *FPToUIInst::clone(LLVMContext&) const { +FPToUIInst *FPToUIInst::clone(LLVMContext&) const { FPToUIInst *New = new FPToUIInst(getOperand(0), getType()); New->SubclassOptionalData = SubclassOptionalData; return New; } -CastInst *FPToSIInst::clone(LLVMContext&) const { +FPToSIInst *FPToSIInst::clone(LLVMContext&) const { FPToSIInst *New = new FPToSIInst(getOperand(0), getType()); New->SubclassOptionalData = SubclassOptionalData; return New; } -CastInst *PtrToIntInst::clone(LLVMContext&) const { +PtrToIntInst *PtrToIntInst::clone(LLVMContext&) const { PtrToIntInst *New = new PtrToIntInst(getOperand(0), getType()); New->SubclassOptionalData = SubclassOptionalData; return New; } -CastInst *IntToPtrInst::clone(LLVMContext&) const { +IntToPtrInst *IntToPtrInst::clone(LLVMContext&) const { IntToPtrInst *New = new IntToPtrInst(getOperand(0), getType()); New->SubclassOptionalData = SubclassOptionalData; return New; } -CastInst *BitCastInst::clone(LLVMContext&) const { +BitCastInst *BitCastInst::clone(LLVMContext&) const { BitCastInst *New = new BitCastInst(getOperand(0), getType()); New->SubclassOptionalData = SubclassOptionalData; return New; -- 2.34.1