Home | History | Annotate | Download | only in IR
      1 //===-- llvm/Instructions.h - Instruction subclass definitions --*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file exposes the class definitions of all of the subclasses of the
     11 // Instruction class.  This is meant to be an easy way to get access to all
     12 // instruction subclasses.
     13 //
     14 //===----------------------------------------------------------------------===//
     15 
     16 #ifndef LLVM_IR_INSTRUCTIONS_H
     17 #define LLVM_IR_INSTRUCTIONS_H
     18 
     19 #include "llvm/ADT/ArrayRef.h"
     20 #include "llvm/ADT/SmallVector.h"
     21 #include "llvm/ADT/STLExtras.h"
     22 #include "llvm/ADT/iterator_range.h"
     23 #include "llvm/IR/Attributes.h"
     24 #include "llvm/IR/CallingConv.h"
     25 #include "llvm/IR/DerivedTypes.h"
     26 #include "llvm/IR/Function.h"
     27 #include "llvm/IR/InstrTypes.h"
     28 #include "llvm/Support/AtomicOrdering.h"
     29 #include "llvm/Support/ErrorHandling.h"
     30 #include <iterator>
     31 
     32 namespace llvm {
     33 
     34 class APInt;
     35 class ConstantInt;
     36 class ConstantRange;
     37 class DataLayout;
     38 class LLVMContext;
     39 
     40 enum SynchronizationScope {
     41   SingleThread = 0,
     42   CrossThread = 1
     43 };
     44 
     45 //===----------------------------------------------------------------------===//
     46 //                                AllocaInst Class
     47 //===----------------------------------------------------------------------===//
     48 
     49 /// AllocaInst - an instruction to allocate memory on the stack
     50 ///
     51 class AllocaInst : public UnaryInstruction {
     52   Type *AllocatedType;
     53 
     54 protected:
     55   // Note: Instruction needs to be a friend here to call cloneImpl.
     56   friend class Instruction;
     57   AllocaInst *cloneImpl() const;
     58 
     59 public:
     60   explicit AllocaInst(Type *Ty, Value *ArraySize = nullptr,
     61                       const Twine &Name = "",
     62                       Instruction *InsertBefore = nullptr);
     63   AllocaInst(Type *Ty, Value *ArraySize,
     64              const Twine &Name, BasicBlock *InsertAtEnd);
     65 
     66   AllocaInst(Type *Ty, const Twine &Name, Instruction *InsertBefore = nullptr);
     67   AllocaInst(Type *Ty, const Twine &Name, BasicBlock *InsertAtEnd);
     68 
     69   AllocaInst(Type *Ty, Value *ArraySize, unsigned Align,
     70              const Twine &Name = "", Instruction *InsertBefore = nullptr);
     71   AllocaInst(Type *Ty, Value *ArraySize, unsigned Align,
     72              const Twine &Name, BasicBlock *InsertAtEnd);
     73 
     74   // Out of line virtual method, so the vtable, etc. has a home.
     75   ~AllocaInst() override;
     76 
     77   /// isArrayAllocation - Return true if there is an allocation size parameter
     78   /// to the allocation instruction that is not 1.
     79   ///
     80   bool isArrayAllocation() const;
     81 
     82   /// getArraySize - Get the number of elements allocated. For a simple
     83   /// allocation of a single element, this will return a constant 1 value.
     84   ///
     85   const Value *getArraySize() const { return getOperand(0); }
     86   Value *getArraySize() { return getOperand(0); }
     87 
     88   /// getType - Overload to return most specific pointer type
     89   ///
     90   PointerType *getType() const {
     91     return cast<PointerType>(Instruction::getType());
     92   }
     93 
     94   /// getAllocatedType - Return the type that is being allocated by the
     95   /// instruction.
     96   ///
     97   Type *getAllocatedType() const { return AllocatedType; }
     98   /// \brief for use only in special circumstances that need to generically
     99   /// transform a whole instruction (eg: IR linking and vectorization).
    100   void setAllocatedType(Type *Ty) { AllocatedType = Ty; }
    101 
    102   /// getAlignment - Return the alignment of the memory that is being allocated
    103   /// by the instruction.
    104   ///
    105   unsigned getAlignment() const {
    106     return (1u << (getSubclassDataFromInstruction() & 31)) >> 1;
    107   }
    108   void setAlignment(unsigned Align);
    109 
    110   /// isStaticAlloca - Return true if this alloca is in the entry block of the
    111   /// function and is a constant size.  If so, the code generator will fold it
    112   /// into the prolog/epilog code, so it is basically free.
    113   bool isStaticAlloca() const;
    114 
    115   /// \brief Return true if this alloca is used as an inalloca argument to a
    116   /// call.  Such allocas are never considered static even if they are in the
    117   /// entry block.
    118   bool isUsedWithInAlloca() const {
    119     return getSubclassDataFromInstruction() & 32;
    120   }
    121 
    122   /// \brief Specify whether this alloca is used to represent the arguments to
    123   /// a call.
    124   void setUsedWithInAlloca(bool V) {
    125     setInstructionSubclassData((getSubclassDataFromInstruction() & ~32) |
    126                                (V ? 32 : 0));
    127   }
    128 
    129   /// \brief Return true if this alloca is used as a swifterror argument to a
    130   /// call.
    131   bool isSwiftError() const {
    132     return getSubclassDataFromInstruction() & 64;
    133   }
    134 
    135   /// \brief Specify whether this alloca is used to represent a swifterror.
    136   void setSwiftError(bool V) {
    137     setInstructionSubclassData((getSubclassDataFromInstruction() & ~64) |
    138                                (V ? 64 : 0));
    139   }
    140 
    141   // Methods for support type inquiry through isa, cast, and dyn_cast:
    142   static inline bool classof(const Instruction *I) {
    143     return (I->getOpcode() == Instruction::Alloca);
    144   }
    145   static inline bool classof(const Value *V) {
    146     return isa<Instruction>(V) && classof(cast<Instruction>(V));
    147   }
    148 
    149 private:
    150   // Shadow Instruction::setInstructionSubclassData with a private forwarding
    151   // method so that subclasses cannot accidentally use it.
    152   void setInstructionSubclassData(unsigned short D) {
    153     Instruction::setInstructionSubclassData(D);
    154   }
    155 };
    156 
    157 //===----------------------------------------------------------------------===//
    158 //                                LoadInst Class
    159 //===----------------------------------------------------------------------===//
    160 
    161 /// LoadInst - an instruction for reading from memory.  This uses the
    162 /// SubclassData field in Value to store whether or not the load is volatile.
    163 ///
    164 class LoadInst : public UnaryInstruction {
    165   void AssertOK();
    166 
    167 protected:
    168   // Note: Instruction needs to be a friend here to call cloneImpl.
    169   friend class Instruction;
    170   LoadInst *cloneImpl() const;
    171 
    172 public:
    173   LoadInst(Value *Ptr, const Twine &NameStr, Instruction *InsertBefore);
    174   LoadInst(Value *Ptr, const Twine &NameStr, BasicBlock *InsertAtEnd);
    175   LoadInst(Type *Ty, Value *Ptr, const Twine &NameStr, bool isVolatile = false,
    176            Instruction *InsertBefore = nullptr);
    177   LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile = false,
    178            Instruction *InsertBefore = nullptr)
    179       : LoadInst(cast<PointerType>(Ptr->getType())->getElementType(), Ptr,
    180                  NameStr, isVolatile, InsertBefore) {}
    181   LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile,
    182            BasicBlock *InsertAtEnd);
    183   LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile, unsigned Align,
    184            Instruction *InsertBefore = nullptr)
    185       : LoadInst(cast<PointerType>(Ptr->getType())->getElementType(), Ptr,
    186                  NameStr, isVolatile, Align, InsertBefore) {}
    187   LoadInst(Type *Ty, Value *Ptr, const Twine &NameStr, bool isVolatile,
    188            unsigned Align, Instruction *InsertBefore = nullptr);
    189   LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile,
    190            unsigned Align, BasicBlock *InsertAtEnd);
    191   LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile, unsigned Align,
    192            AtomicOrdering Order, SynchronizationScope SynchScope = CrossThread,
    193            Instruction *InsertBefore = nullptr)
    194       : LoadInst(cast<PointerType>(Ptr->getType())->getElementType(), Ptr,
    195                  NameStr, isVolatile, Align, Order, SynchScope, InsertBefore) {}
    196   LoadInst(Type *Ty, Value *Ptr, const Twine &NameStr, bool isVolatile,
    197            unsigned Align, AtomicOrdering Order,
    198            SynchronizationScope SynchScope = CrossThread,
    199            Instruction *InsertBefore = nullptr);
    200   LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile,
    201            unsigned Align, AtomicOrdering Order,
    202            SynchronizationScope SynchScope,
    203            BasicBlock *InsertAtEnd);
    204 
    205   LoadInst(Value *Ptr, const char *NameStr, Instruction *InsertBefore);
    206   LoadInst(Value *Ptr, const char *NameStr, BasicBlock *InsertAtEnd);
    207   LoadInst(Type *Ty, Value *Ptr, const char *NameStr = nullptr,
    208            bool isVolatile = false, Instruction *InsertBefore = nullptr);
    209   explicit LoadInst(Value *Ptr, const char *NameStr = nullptr,
    210                     bool isVolatile = false,
    211                     Instruction *InsertBefore = nullptr)
    212       : LoadInst(cast<PointerType>(Ptr->getType())->getElementType(), Ptr,
    213                  NameStr, isVolatile, InsertBefore) {}
    214   LoadInst(Value *Ptr, const char *NameStr, bool isVolatile,
    215            BasicBlock *InsertAtEnd);
    216 
    217   /// isVolatile - Return true if this is a load from a volatile memory
    218   /// location.
    219   ///
    220   bool isVolatile() const { return getSubclassDataFromInstruction() & 1; }
    221 
    222   /// setVolatile - Specify whether this is a volatile load or not.
    223   ///
    224   void setVolatile(bool V) {
    225     setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) |
    226                                (V ? 1 : 0));
    227   }
    228 
    229   /// getAlignment - Return the alignment of the access that is being performed
    230   ///
    231   unsigned getAlignment() const {
    232     return (1 << ((getSubclassDataFromInstruction() >> 1) & 31)) >> 1;
    233   }
    234 
    235   void setAlignment(unsigned Align);
    236 
    237   /// Returns the ordering effect of this fence.
    238   AtomicOrdering getOrdering() const {
    239     return AtomicOrdering((getSubclassDataFromInstruction() >> 7) & 7);
    240   }
    241 
    242   /// Set the ordering constraint on this load. May not be Release or
    243   /// AcquireRelease.
    244   void setOrdering(AtomicOrdering Ordering) {
    245     setInstructionSubclassData((getSubclassDataFromInstruction() & ~(7 << 7)) |
    246                                ((unsigned)Ordering << 7));
    247   }
    248 
    249   SynchronizationScope getSynchScope() const {
    250     return SynchronizationScope((getSubclassDataFromInstruction() >> 6) & 1);
    251   }
    252 
    253   /// Specify whether this load is ordered with respect to all
    254   /// concurrently executing threads, or only with respect to signal handlers
    255   /// executing in the same thread.
    256   void setSynchScope(SynchronizationScope xthread) {
    257     setInstructionSubclassData((getSubclassDataFromInstruction() & ~(1 << 6)) |
    258                                (xthread << 6));
    259   }
    260 
    261   void setAtomic(AtomicOrdering Ordering,
    262                  SynchronizationScope SynchScope = CrossThread) {
    263     setOrdering(Ordering);
    264     setSynchScope(SynchScope);
    265   }
    266 
    267   bool isSimple() const { return !isAtomic() && !isVolatile(); }
    268   bool isUnordered() const {
    269     return (getOrdering() == AtomicOrdering::NotAtomic ||
    270             getOrdering() == AtomicOrdering::Unordered) &&
    271            !isVolatile();
    272   }
    273 
    274   Value *getPointerOperand() { return getOperand(0); }
    275   const Value *getPointerOperand() const { return getOperand(0); }
    276   static unsigned getPointerOperandIndex() { return 0U; }
    277 
    278   /// \brief Returns the address space of the pointer operand.
    279   unsigned getPointerAddressSpace() const {
    280     return getPointerOperand()->getType()->getPointerAddressSpace();
    281   }
    282 
    283   // Methods for support type inquiry through isa, cast, and dyn_cast:
    284   static inline bool classof(const Instruction *I) {
    285     return I->getOpcode() == Instruction::Load;
    286   }
    287   static inline bool classof(const Value *V) {
    288     return isa<Instruction>(V) && classof(cast<Instruction>(V));
    289   }
    290 
    291 private:
    292   // Shadow Instruction::setInstructionSubclassData with a private forwarding
    293   // method so that subclasses cannot accidentally use it.
    294   void setInstructionSubclassData(unsigned short D) {
    295     Instruction::setInstructionSubclassData(D);
    296   }
    297 };
    298 
    299 //===----------------------------------------------------------------------===//
    300 //                                StoreInst Class
    301 //===----------------------------------------------------------------------===//
    302 
    303 /// StoreInst - an instruction for storing to memory
    304 ///
    305 class StoreInst : public Instruction {
    306   void *operator new(size_t, unsigned) = delete;
    307   void AssertOK();
    308 
    309 protected:
    310   // Note: Instruction needs to be a friend here to call cloneImpl.
    311   friend class Instruction;
    312   StoreInst *cloneImpl() const;
    313 
    314 public:
    315   // allocate space for exactly two operands
    316   void *operator new(size_t s) {
    317     return User::operator new(s, 2);
    318   }
    319   StoreInst(Value *Val, Value *Ptr, Instruction *InsertBefore);
    320   StoreInst(Value *Val, Value *Ptr, BasicBlock *InsertAtEnd);
    321   StoreInst(Value *Val, Value *Ptr, bool isVolatile = false,
    322             Instruction *InsertBefore = nullptr);
    323   StoreInst(Value *Val, Value *Ptr, bool isVolatile, BasicBlock *InsertAtEnd);
    324   StoreInst(Value *Val, Value *Ptr, bool isVolatile,
    325             unsigned Align, Instruction *InsertBefore = nullptr);
    326   StoreInst(Value *Val, Value *Ptr, bool isVolatile,
    327             unsigned Align, BasicBlock *InsertAtEnd);
    328   StoreInst(Value *Val, Value *Ptr, bool isVolatile,
    329             unsigned Align, AtomicOrdering Order,
    330             SynchronizationScope SynchScope = CrossThread,
    331             Instruction *InsertBefore = nullptr);
    332   StoreInst(Value *Val, Value *Ptr, bool isVolatile,
    333             unsigned Align, AtomicOrdering Order,
    334             SynchronizationScope SynchScope,
    335             BasicBlock *InsertAtEnd);
    336 
    337   /// isVolatile - Return true if this is a store to a volatile memory
    338   /// location.
    339   ///
    340   bool isVolatile() const { return getSubclassDataFromInstruction() & 1; }
    341 
    342   /// setVolatile - Specify whether this is a volatile store or not.
    343   ///
    344   void setVolatile(bool V) {
    345     setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) |
    346                                (V ? 1 : 0));
    347   }
    348 
    349   /// Transparently provide more efficient getOperand methods.
    350   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
    351 
    352   /// getAlignment - Return the alignment of the access that is being performed
    353   ///
    354   unsigned getAlignment() const {
    355     return (1 << ((getSubclassDataFromInstruction() >> 1) & 31)) >> 1;
    356   }
    357 
    358   void setAlignment(unsigned Align);
    359 
    360   /// Returns the ordering effect of this store.
    361   AtomicOrdering getOrdering() const {
    362     return AtomicOrdering((getSubclassDataFromInstruction() >> 7) & 7);
    363   }
    364 
    365   /// Set the ordering constraint on this store.  May not be Acquire or
    366   /// AcquireRelease.
    367   void setOrdering(AtomicOrdering Ordering) {
    368     setInstructionSubclassData((getSubclassDataFromInstruction() & ~(7 << 7)) |
    369                                ((unsigned)Ordering << 7));
    370   }
    371 
    372   SynchronizationScope getSynchScope() const {
    373     return SynchronizationScope((getSubclassDataFromInstruction() >> 6) & 1);
    374   }
    375 
    376   /// Specify whether this store instruction is ordered with respect to all
    377   /// concurrently executing threads, or only with respect to signal handlers
    378   /// executing in the same thread.
    379   void setSynchScope(SynchronizationScope xthread) {
    380     setInstructionSubclassData((getSubclassDataFromInstruction() & ~(1 << 6)) |
    381                                (xthread << 6));
    382   }
    383 
    384   void setAtomic(AtomicOrdering Ordering,
    385                  SynchronizationScope SynchScope = CrossThread) {
    386     setOrdering(Ordering);
    387     setSynchScope(SynchScope);
    388   }
    389 
    390   bool isSimple() const { return !isAtomic() && !isVolatile(); }
    391   bool isUnordered() const {
    392     return (getOrdering() == AtomicOrdering::NotAtomic ||
    393             getOrdering() == AtomicOrdering::Unordered) &&
    394            !isVolatile();
    395   }
    396 
    397   Value *getValueOperand() { return getOperand(0); }
    398   const Value *getValueOperand() const { return getOperand(0); }
    399 
    400   Value *getPointerOperand() { return getOperand(1); }
    401   const Value *getPointerOperand() const { return getOperand(1); }
    402   static unsigned getPointerOperandIndex() { return 1U; }
    403 
    404   /// \brief Returns the address space of the pointer operand.
    405   unsigned getPointerAddressSpace() const {
    406     return getPointerOperand()->getType()->getPointerAddressSpace();
    407   }
    408 
    409   // Methods for support type inquiry through isa, cast, and dyn_cast:
    410   static inline bool classof(const Instruction *I) {
    411     return I->getOpcode() == Instruction::Store;
    412   }
    413   static inline bool classof(const Value *V) {
    414     return isa<Instruction>(V) && classof(cast<Instruction>(V));
    415   }
    416 
    417 private:
    418   // Shadow Instruction::setInstructionSubclassData with a private forwarding
    419   // method so that subclasses cannot accidentally use it.
    420   void setInstructionSubclassData(unsigned short D) {
    421     Instruction::setInstructionSubclassData(D);
    422   }
    423 };
    424 
    425 template <>
    426 struct OperandTraits<StoreInst> : public FixedNumOperandTraits<StoreInst, 2> {
    427 };
    428 
    429 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(StoreInst, Value)
    430 
    431 //===----------------------------------------------------------------------===//
    432 //                                FenceInst Class
    433 //===----------------------------------------------------------------------===//
    434 
    435 /// FenceInst - an instruction for ordering other memory operations
    436 ///
    437 class FenceInst : public Instruction {
    438   void *operator new(size_t, unsigned) = delete;
    439   void Init(AtomicOrdering Ordering, SynchronizationScope SynchScope);
    440 
    441 protected:
    442   // Note: Instruction needs to be a friend here to call cloneImpl.
    443   friend class Instruction;
    444   FenceInst *cloneImpl() const;
    445 
    446 public:
    447   // allocate space for exactly zero operands
    448   void *operator new(size_t s) {
    449     return User::operator new(s, 0);
    450   }
    451 
    452   // Ordering may only be Acquire, Release, AcquireRelease, or
    453   // SequentiallyConsistent.
    454   FenceInst(LLVMContext &C, AtomicOrdering Ordering,
    455             SynchronizationScope SynchScope = CrossThread,
    456             Instruction *InsertBefore = nullptr);
    457   FenceInst(LLVMContext &C, AtomicOrdering Ordering,
    458             SynchronizationScope SynchScope,
    459             BasicBlock *InsertAtEnd);
    460 
    461   /// Returns the ordering effect of this fence.
    462   AtomicOrdering getOrdering() const {
    463     return AtomicOrdering(getSubclassDataFromInstruction() >> 1);
    464   }
    465 
    466   /// Set the ordering constraint on this fence.  May only be Acquire, Release,
    467   /// AcquireRelease, or SequentiallyConsistent.
    468   void setOrdering(AtomicOrdering Ordering) {
    469     setInstructionSubclassData((getSubclassDataFromInstruction() & 1) |
    470                                ((unsigned)Ordering << 1));
    471   }
    472 
    473   SynchronizationScope getSynchScope() const {
    474     return SynchronizationScope(getSubclassDataFromInstruction() & 1);
    475   }
    476 
    477   /// Specify whether this fence orders other operations with respect to all
    478   /// concurrently executing threads, or only with respect to signal handlers
    479   /// executing in the same thread.
    480   void setSynchScope(SynchronizationScope xthread) {
    481     setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) |
    482                                xthread);
    483   }
    484 
    485   // Methods for support type inquiry through isa, cast, and dyn_cast:
    486   static inline bool classof(const Instruction *I) {
    487     return I->getOpcode() == Instruction::Fence;
    488   }
    489   static inline bool classof(const Value *V) {
    490     return isa<Instruction>(V) && classof(cast<Instruction>(V));
    491   }
    492 
    493 private:
    494   // Shadow Instruction::setInstructionSubclassData with a private forwarding
    495   // method so that subclasses cannot accidentally use it.
    496   void setInstructionSubclassData(unsigned short D) {
    497     Instruction::setInstructionSubclassData(D);
    498   }
    499 };
    500 
    501 //===----------------------------------------------------------------------===//
    502 //                                AtomicCmpXchgInst Class
    503 //===----------------------------------------------------------------------===//
    504 
    505 /// AtomicCmpXchgInst - an instruction that atomically checks whether a
    506 /// specified value is in a memory location, and, if it is, stores a new value
    507 /// there.  Returns the value that was loaded.
    508 ///
    509 class AtomicCmpXchgInst : public Instruction {
    510   void *operator new(size_t, unsigned) = delete;
    511   void Init(Value *Ptr, Value *Cmp, Value *NewVal,
    512             AtomicOrdering SuccessOrdering, AtomicOrdering FailureOrdering,
    513             SynchronizationScope SynchScope);
    514 
    515 protected:
    516   // Note: Instruction needs to be a friend here to call cloneImpl.
    517   friend class Instruction;
    518   AtomicCmpXchgInst *cloneImpl() const;
    519 
    520 public:
    521   // allocate space for exactly three operands
    522   void *operator new(size_t s) {
    523     return User::operator new(s, 3);
    524   }
    525   AtomicCmpXchgInst(Value *Ptr, Value *Cmp, Value *NewVal,
    526                     AtomicOrdering SuccessOrdering,
    527                     AtomicOrdering FailureOrdering,
    528                     SynchronizationScope SynchScope,
    529                     Instruction *InsertBefore = nullptr);
    530   AtomicCmpXchgInst(Value *Ptr, Value *Cmp, Value *NewVal,
    531                     AtomicOrdering SuccessOrdering,
    532                     AtomicOrdering FailureOrdering,
    533                     SynchronizationScope SynchScope,
    534                     BasicBlock *InsertAtEnd);
    535 
    536   /// isVolatile - Return true if this is a cmpxchg from a volatile memory
    537   /// location.
    538   ///
    539   bool isVolatile() const {
    540     return getSubclassDataFromInstruction() & 1;
    541   }
    542 
    543   /// setVolatile - Specify whether this is a volatile cmpxchg.
    544   ///
    545   void setVolatile(bool V) {
    546      setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) |
    547                                 (unsigned)V);
    548   }
    549 
    550   /// Return true if this cmpxchg may spuriously fail.
    551   bool isWeak() const {
    552     return getSubclassDataFromInstruction() & 0x100;
    553   }
    554 
    555   void setWeak(bool IsWeak) {
    556     setInstructionSubclassData((getSubclassDataFromInstruction() & ~0x100) |
    557                                (IsWeak << 8));
    558   }
    559 
    560   /// Transparently provide more efficient getOperand methods.
    561   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
    562 
    563   /// Set the ordering constraint on this cmpxchg.
    564   void setSuccessOrdering(AtomicOrdering Ordering) {
    565     assert(Ordering != AtomicOrdering::NotAtomic &&
    566            "CmpXchg instructions can only be atomic.");
    567     setInstructionSubclassData((getSubclassDataFromInstruction() & ~0x1c) |
    568                                ((unsigned)Ordering << 2));
    569   }
    570 
    571   void setFailureOrdering(AtomicOrdering Ordering) {
    572     assert(Ordering != AtomicOrdering::NotAtomic &&
    573            "CmpXchg instructions can only be atomic.");
    574     setInstructionSubclassData((getSubclassDataFromInstruction() & ~0xe0) |
    575                                ((unsigned)Ordering << 5));
    576   }
    577 
    578   /// Specify whether this cmpxchg is atomic and orders other operations with
    579   /// respect to all concurrently executing threads, or only with respect to
    580   /// signal handlers executing in the same thread.
    581   void setSynchScope(SynchronizationScope SynchScope) {
    582     setInstructionSubclassData((getSubclassDataFromInstruction() & ~2) |
    583                                (SynchScope << 1));
    584   }
    585 
    586   /// Returns the ordering constraint on this cmpxchg.
    587   AtomicOrdering getSuccessOrdering() const {
    588     return AtomicOrdering((getSubclassDataFromInstruction() >> 2) & 7);
    589   }
    590 
    591   /// Returns the ordering constraint on this cmpxchg.
    592   AtomicOrdering getFailureOrdering() const {
    593     return AtomicOrdering((getSubclassDataFromInstruction() >> 5) & 7);
    594   }
    595 
    596   /// Returns whether this cmpxchg is atomic between threads or only within a
    597   /// single thread.
    598   SynchronizationScope getSynchScope() const {
    599     return SynchronizationScope((getSubclassDataFromInstruction() & 2) >> 1);
    600   }
    601 
    602   Value *getPointerOperand() { return getOperand(0); }
    603   const Value *getPointerOperand() const { return getOperand(0); }
    604   static unsigned getPointerOperandIndex() { return 0U; }
    605 
    606   Value *getCompareOperand() { return getOperand(1); }
    607   const Value *getCompareOperand() const { return getOperand(1); }
    608 
    609   Value *getNewValOperand() { return getOperand(2); }
    610   const Value *getNewValOperand() const { return getOperand(2); }
    611 
    612   /// \brief Returns the address space of the pointer operand.
    613   unsigned getPointerAddressSpace() const {
    614     return getPointerOperand()->getType()->getPointerAddressSpace();
    615   }
    616 
    617   /// \brief Returns the strongest permitted ordering on failure, given the
    618   /// desired ordering on success.
    619   ///
    620   /// If the comparison in a cmpxchg operation fails, there is no atomic store
    621   /// so release semantics cannot be provided. So this function drops explicit
    622   /// Release requests from the AtomicOrdering. A SequentiallyConsistent
    623   /// operation would remain SequentiallyConsistent.
    624   static AtomicOrdering
    625   getStrongestFailureOrdering(AtomicOrdering SuccessOrdering) {
    626     switch (SuccessOrdering) {
    627     default:
    628       llvm_unreachable("invalid cmpxchg success ordering");
    629     case AtomicOrdering::Release:
    630     case AtomicOrdering::Monotonic:
    631       return AtomicOrdering::Monotonic;
    632     case AtomicOrdering::AcquireRelease:
    633     case AtomicOrdering::Acquire:
    634       return AtomicOrdering::Acquire;
    635     case AtomicOrdering::SequentiallyConsistent:
    636       return AtomicOrdering::SequentiallyConsistent;
    637     }
    638   }
    639 
    640   // Methods for support type inquiry through isa, cast, and dyn_cast:
    641   static inline bool classof(const Instruction *I) {
    642     return I->getOpcode() == Instruction::AtomicCmpXchg;
    643   }
    644   static inline bool classof(const Value *V) {
    645     return isa<Instruction>(V) && classof(cast<Instruction>(V));
    646   }
    647 
    648 private:
    649   // Shadow Instruction::setInstructionSubclassData with a private forwarding
    650   // method so that subclasses cannot accidentally use it.
    651   void setInstructionSubclassData(unsigned short D) {
    652     Instruction::setInstructionSubclassData(D);
    653   }
    654 };
    655 
    656 template <>
    657 struct OperandTraits<AtomicCmpXchgInst> :
    658     public FixedNumOperandTraits<AtomicCmpXchgInst, 3> {
    659 };
    660 
    661 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(AtomicCmpXchgInst, Value)
    662 
    663 //===----------------------------------------------------------------------===//
    664 //                                AtomicRMWInst Class
    665 //===----------------------------------------------------------------------===//
    666 
    667 /// AtomicRMWInst - an instruction that atomically reads a memory location,
    668 /// combines it with another value, and then stores the result back.  Returns
    669 /// the old value.
    670 ///
    671 class AtomicRMWInst : public Instruction {
    672   void *operator new(size_t, unsigned) = delete;
    673 
    674 protected:
    675   // Note: Instruction needs to be a friend here to call cloneImpl.
    676   friend class Instruction;
    677   AtomicRMWInst *cloneImpl() const;
    678 
    679 public:
    680   /// This enumeration lists the possible modifications atomicrmw can make.  In
    681   /// the descriptions, 'p' is the pointer to the instruction's memory location,
    682   /// 'old' is the initial value of *p, and 'v' is the other value passed to the
    683   /// instruction.  These instructions always return 'old'.
    684   enum BinOp {
    685     /// *p = v
    686     Xchg,
    687     /// *p = old + v
    688     Add,
    689     /// *p = old - v
    690     Sub,
    691     /// *p = old & v
    692     And,
    693     /// *p = ~(old & v)
    694     Nand,
    695     /// *p = old | v
    696     Or,
    697     /// *p = old ^ v
    698     Xor,
    699     /// *p = old >signed v ? old : v
    700     Max,
    701     /// *p = old <signed v ? old : v
    702     Min,
    703     /// *p = old >unsigned v ? old : v
    704     UMax,
    705     /// *p = old <unsigned v ? old : v
    706     UMin,
    707 
    708     FIRST_BINOP = Xchg,
    709     LAST_BINOP = UMin,
    710     BAD_BINOP
    711   };
    712 
    713   // allocate space for exactly two operands
    714   void *operator new(size_t s) {
    715     return User::operator new(s, 2);
    716   }
    717   AtomicRMWInst(BinOp Operation, Value *Ptr, Value *Val,
    718                 AtomicOrdering Ordering, SynchronizationScope SynchScope,
    719                 Instruction *InsertBefore = nullptr);
    720   AtomicRMWInst(BinOp Operation, Value *Ptr, Value *Val,
    721                 AtomicOrdering Ordering, SynchronizationScope SynchScope,
    722                 BasicBlock *InsertAtEnd);
    723 
    724   BinOp getOperation() const {
    725     return static_cast<BinOp>(getSubclassDataFromInstruction() >> 5);
    726   }
    727 
    728   void setOperation(BinOp Operation) {
    729     unsigned short SubclassData = getSubclassDataFromInstruction();
    730     setInstructionSubclassData((SubclassData & 31) |
    731                                (Operation << 5));
    732   }
    733 
    734   /// isVolatile - Return true if this is a RMW on a volatile memory location.
    735   ///
    736   bool isVolatile() const {
    737     return getSubclassDataFromInstruction() & 1;
    738   }
    739 
    740   /// setVolatile - Specify whether this is a volatile RMW or not.
    741   ///
    742   void setVolatile(bool V) {
    743      setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) |
    744                                 (unsigned)V);
    745   }
    746 
    747   /// Transparently provide more efficient getOperand methods.
    748   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
    749 
    750   /// Set the ordering constraint on this RMW.
    751   void setOrdering(AtomicOrdering Ordering) {
    752     assert(Ordering != AtomicOrdering::NotAtomic &&
    753            "atomicrmw instructions can only be atomic.");
    754     setInstructionSubclassData((getSubclassDataFromInstruction() & ~(7 << 2)) |
    755                                ((unsigned)Ordering << 2));
    756   }
    757 
    758   /// Specify whether this RMW orders other operations with respect to all
    759   /// concurrently executing threads, or only with respect to signal handlers
    760   /// executing in the same thread.
    761   void setSynchScope(SynchronizationScope SynchScope) {
    762     setInstructionSubclassData((getSubclassDataFromInstruction() & ~2) |
    763                                (SynchScope << 1));
    764   }
    765 
    766   /// Returns the ordering constraint on this RMW.
    767   AtomicOrdering getOrdering() const {
    768     return AtomicOrdering((getSubclassDataFromInstruction() >> 2) & 7);
    769   }
    770 
    771   /// Returns whether this RMW is atomic between threads or only within a
    772   /// single thread.
    773   SynchronizationScope getSynchScope() const {
    774     return SynchronizationScope((getSubclassDataFromInstruction() & 2) >> 1);
    775   }
    776 
    777   Value *getPointerOperand() { return getOperand(0); }
    778   const Value *getPointerOperand() const { return getOperand(0); }
    779   static unsigned getPointerOperandIndex() { return 0U; }
    780 
    781   Value *getValOperand() { return getOperand(1); }
    782   const Value *getValOperand() const { return getOperand(1); }
    783 
    784   /// \brief Returns the address space of the pointer operand.
    785   unsigned getPointerAddressSpace() const {
    786     return getPointerOperand()->getType()->getPointerAddressSpace();
    787   }
    788 
    789   // Methods for support type inquiry through isa, cast, and dyn_cast:
    790   static inline bool classof(const Instruction *I) {
    791     return I->getOpcode() == Instruction::AtomicRMW;
    792   }
    793   static inline bool classof(const Value *V) {
    794     return isa<Instruction>(V) && classof(cast<Instruction>(V));
    795   }
    796 
    797 private:
    798   void Init(BinOp Operation, Value *Ptr, Value *Val,
    799             AtomicOrdering Ordering, SynchronizationScope SynchScope);
    800   // Shadow Instruction::setInstructionSubclassData with a private forwarding
    801   // method so that subclasses cannot accidentally use it.
    802   void setInstructionSubclassData(unsigned short D) {
    803     Instruction::setInstructionSubclassData(D);
    804   }
    805 };
    806 
    807 template <>
    808 struct OperandTraits<AtomicRMWInst>
    809     : public FixedNumOperandTraits<AtomicRMWInst,2> {
    810 };
    811 
    812 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(AtomicRMWInst, Value)
    813 
    814 //===----------------------------------------------------------------------===//
    815 //                             GetElementPtrInst Class
    816 //===----------------------------------------------------------------------===//
    817 
    818 // checkGEPType - Simple wrapper function to give a better assertion failure
    819 // message on bad indexes for a gep instruction.
    820 //
    821 inline Type *checkGEPType(Type *Ty) {
    822   assert(Ty && "Invalid GetElementPtrInst indices for type!");
    823   return Ty;
    824 }
    825 
    826 /// GetElementPtrInst - an instruction for type-safe pointer arithmetic to
    827 /// access elements of arrays and structs
    828 ///
    829 class GetElementPtrInst : public Instruction {
    830   Type *SourceElementType;
    831   Type *ResultElementType;
    832 
    833   void anchor() override;
    834 
    835   GetElementPtrInst(const GetElementPtrInst &GEPI);
    836   void init(Value *Ptr, ArrayRef<Value *> IdxList, const Twine &NameStr);
    837 
    838   /// Constructors - Create a getelementptr instruction with a base pointer an
    839   /// list of indices. The first ctor can optionally insert before an existing
    840   /// instruction, the second appends the new instruction to the specified
    841   /// BasicBlock.
    842   inline GetElementPtrInst(Type *PointeeType, Value *Ptr,
    843                            ArrayRef<Value *> IdxList, unsigned Values,
    844                            const Twine &NameStr, Instruction *InsertBefore);
    845   inline GetElementPtrInst(Type *PointeeType, Value *Ptr,
    846                            ArrayRef<Value *> IdxList, unsigned Values,
    847                            const Twine &NameStr, BasicBlock *InsertAtEnd);
    848 
    849 protected:
    850   // Note: Instruction needs to be a friend here to call cloneImpl.
    851   friend class Instruction;
    852   GetElementPtrInst *cloneImpl() const;
    853 
    854 public:
    855   static GetElementPtrInst *Create(Type *PointeeType, Value *Ptr,
    856                                    ArrayRef<Value *> IdxList,
    857                                    const Twine &NameStr = "",
    858                                    Instruction *InsertBefore = nullptr) {
    859     unsigned Values = 1 + unsigned(IdxList.size());
    860     if (!PointeeType)
    861       PointeeType =
    862           cast<PointerType>(Ptr->getType()->getScalarType())->getElementType();
    863     else
    864       assert(
    865           PointeeType ==
    866           cast<PointerType>(Ptr->getType()->getScalarType())->getElementType());
    867     return new (Values) GetElementPtrInst(PointeeType, Ptr, IdxList, Values,
    868                                           NameStr, InsertBefore);
    869   }
    870   static GetElementPtrInst *Create(Type *PointeeType, Value *Ptr,
    871                                    ArrayRef<Value *> IdxList,
    872                                    const Twine &NameStr,
    873                                    BasicBlock *InsertAtEnd) {
    874     unsigned Values = 1 + unsigned(IdxList.size());
    875     if (!PointeeType)
    876       PointeeType =
    877           cast<PointerType>(Ptr->getType()->getScalarType())->getElementType();
    878     else
    879       assert(
    880           PointeeType ==
    881           cast<PointerType>(Ptr->getType()->getScalarType())->getElementType());
    882     return new (Values) GetElementPtrInst(PointeeType, Ptr, IdxList, Values,
    883                                           NameStr, InsertAtEnd);
    884   }
    885 
    886   /// Create an "inbounds" getelementptr. See the documentation for the
    887   /// "inbounds" flag in LangRef.html for details.
    888   static GetElementPtrInst *CreateInBounds(Value *Ptr,
    889                                            ArrayRef<Value *> IdxList,
    890                                            const Twine &NameStr = "",
    891                                            Instruction *InsertBefore = nullptr){
    892     return CreateInBounds(nullptr, Ptr, IdxList, NameStr, InsertBefore);
    893   }
    894   static GetElementPtrInst *
    895   CreateInBounds(Type *PointeeType, Value *Ptr, ArrayRef<Value *> IdxList,
    896                  const Twine &NameStr = "",
    897                  Instruction *InsertBefore = nullptr) {
    898     GetElementPtrInst *GEP =
    899         Create(PointeeType, Ptr, IdxList, NameStr, InsertBefore);
    900     GEP->setIsInBounds(true);
    901     return GEP;
    902   }
    903   static GetElementPtrInst *CreateInBounds(Value *Ptr,
    904                                            ArrayRef<Value *> IdxList,
    905                                            const Twine &NameStr,
    906                                            BasicBlock *InsertAtEnd) {
    907     return CreateInBounds(nullptr, Ptr, IdxList, NameStr, InsertAtEnd);
    908   }
    909   static GetElementPtrInst *CreateInBounds(Type *PointeeType, Value *Ptr,
    910                                            ArrayRef<Value *> IdxList,
    911                                            const Twine &NameStr,
    912                                            BasicBlock *InsertAtEnd) {
    913     GetElementPtrInst *GEP =
    914         Create(PointeeType, Ptr, IdxList, NameStr, InsertAtEnd);
    915     GEP->setIsInBounds(true);
    916     return GEP;
    917   }
    918 
    919   /// Transparently provide more efficient getOperand methods.
    920   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
    921 
    922   // getType - Overload to return most specific sequential type.
    923   SequentialType *getType() const {
    924     return cast<SequentialType>(Instruction::getType());
    925   }
    926 
    927   Type *getSourceElementType() const { return SourceElementType; }
    928 
    929   void setSourceElementType(Type *Ty) { SourceElementType = Ty; }
    930   void setResultElementType(Type *Ty) { ResultElementType = Ty; }
    931 
    932   Type *getResultElementType() const {
    933     assert(ResultElementType ==
    934            cast<PointerType>(getType()->getScalarType())->getElementType());
    935     return ResultElementType;
    936   }
    937 
    938   /// \brief Returns the address space of this instruction's pointer type.
    939   unsigned getAddressSpace() const {
    940     // Note that this is always the same as the pointer operand's address space
    941     // and that is cheaper to compute, so cheat here.
    942     return getPointerAddressSpace();
    943   }
    944 
    945   /// getIndexedType - Returns the type of the element that would be loaded with
    946   /// a load instruction with the specified parameters.
    947   ///
    948   /// Null is returned if the indices are invalid for the specified
    949   /// pointer type.
    950   ///
    951   static Type *getIndexedType(Type *Ty, ArrayRef<Value *> IdxList);
    952   static Type *getIndexedType(Type *Ty, ArrayRef<Constant *> IdxList);
    953   static Type *getIndexedType(Type *Ty, ArrayRef<uint64_t> IdxList);
    954 
    955   inline op_iterator       idx_begin()       { return op_begin()+1; }
    956   inline const_op_iterator idx_begin() const { return op_begin()+1; }
    957   inline op_iterator       idx_end()         { return op_end(); }
    958   inline const_op_iterator idx_end()   const { return op_end(); }
    959 
    960   Value *getPointerOperand() {
    961     return getOperand(0);
    962   }
    963   const Value *getPointerOperand() const {
    964     return getOperand(0);
    965   }
    966   static unsigned getPointerOperandIndex() {
    967     return 0U;    // get index for modifying correct operand.
    968   }
    969 
    970   /// getPointerOperandType - Method to return the pointer operand as a
    971   /// PointerType.
    972   Type *getPointerOperandType() const {
    973     return getPointerOperand()->getType();
    974   }
    975 
    976   /// \brief Returns the address space of the pointer operand.
    977   unsigned getPointerAddressSpace() const {
    978     return getPointerOperandType()->getPointerAddressSpace();
    979   }
    980 
    981   /// GetGEPReturnType - Returns the pointer type returned by the GEP
    982   /// instruction, which may be a vector of pointers.
    983   static Type *getGEPReturnType(Value *Ptr, ArrayRef<Value *> IdxList) {
    984     return getGEPReturnType(
    985         cast<PointerType>(Ptr->getType()->getScalarType())->getElementType(),
    986         Ptr, IdxList);
    987   }
    988   static Type *getGEPReturnType(Type *ElTy, Value *Ptr,
    989                                 ArrayRef<Value *> IdxList) {
    990     Type *PtrTy = PointerType::get(checkGEPType(getIndexedType(ElTy, IdxList)),
    991                                    Ptr->getType()->getPointerAddressSpace());
    992     // Vector GEP
    993     if (Ptr->getType()->isVectorTy()) {
    994       unsigned NumElem = Ptr->getType()->getVectorNumElements();
    995       return VectorType::get(PtrTy, NumElem);
    996     }
    997     for (Value *Index : IdxList)
    998       if (Index->getType()->isVectorTy()) {
    999         unsigned NumElem = Index->getType()->getVectorNumElements();
   1000         return VectorType::get(PtrTy, NumElem);
   1001       }
   1002     // Scalar GEP
   1003     return PtrTy;
   1004   }
   1005 
   1006   unsigned getNumIndices() const {  // Note: always non-negative
   1007     return getNumOperands() - 1;
   1008   }
   1009 
   1010   bool hasIndices() const {
   1011     return getNumOperands() > 1;
   1012   }
   1013 
   1014   /// hasAllZeroIndices - Return true if all of the indices of this GEP are
   1015   /// zeros.  If so, the result pointer and the first operand have the same
   1016   /// value, just potentially different types.
   1017   bool hasAllZeroIndices() const;
   1018 
   1019   /// hasAllConstantIndices - Return true if all of the indices of this GEP are
   1020   /// constant integers.  If so, the result pointer and the first operand have
   1021   /// a constant offset between them.
   1022   bool hasAllConstantIndices() const;
   1023 
   1024   /// setIsInBounds - Set or clear the inbounds flag on this GEP instruction.
   1025   /// See LangRef.html for the meaning of inbounds on a getelementptr.
   1026   void setIsInBounds(bool b = true);
   1027 
   1028   /// isInBounds - Determine whether the GEP has the inbounds flag.
   1029   bool isInBounds() const;
   1030 
   1031   /// \brief Accumulate the constant address offset of this GEP if possible.
   1032   ///
   1033   /// This routine accepts an APInt into which it will accumulate the constant
   1034   /// offset of this GEP if the GEP is in fact constant. If the GEP is not
   1035   /// all-constant, it returns false and the value of the offset APInt is
   1036   /// undefined (it is *not* preserved!). The APInt passed into this routine
   1037   /// must be at least as wide as the IntPtr type for the address space of
   1038   /// the base GEP pointer.
   1039   bool accumulateConstantOffset(const DataLayout &DL, APInt &Offset) const;
   1040 
   1041   // Methods for support type inquiry through isa, cast, and dyn_cast:
   1042   static inline bool classof(const Instruction *I) {
   1043     return (I->getOpcode() == Instruction::GetElementPtr);
   1044   }
   1045   static inline bool classof(const Value *V) {
   1046     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   1047   }
   1048 };
   1049 
   1050 template <>
   1051 struct OperandTraits<GetElementPtrInst> :
   1052   public VariadicOperandTraits<GetElementPtrInst, 1> {
   1053 };
   1054 
   1055 GetElementPtrInst::GetElementPtrInst(Type *PointeeType, Value *Ptr,
   1056                                      ArrayRef<Value *> IdxList, unsigned Values,
   1057                                      const Twine &NameStr,
   1058                                      Instruction *InsertBefore)
   1059     : Instruction(getGEPReturnType(PointeeType, Ptr, IdxList), GetElementPtr,
   1060                   OperandTraits<GetElementPtrInst>::op_end(this) - Values,
   1061                   Values, InsertBefore),
   1062       SourceElementType(PointeeType),
   1063       ResultElementType(getIndexedType(PointeeType, IdxList)) {
   1064   assert(ResultElementType ==
   1065          cast<PointerType>(getType()->getScalarType())->getElementType());
   1066   init(Ptr, IdxList, NameStr);
   1067 }
   1068 GetElementPtrInst::GetElementPtrInst(Type *PointeeType, Value *Ptr,
   1069                                      ArrayRef<Value *> IdxList, unsigned Values,
   1070                                      const Twine &NameStr,
   1071                                      BasicBlock *InsertAtEnd)
   1072     : Instruction(getGEPReturnType(PointeeType, Ptr, IdxList), GetElementPtr,
   1073                   OperandTraits<GetElementPtrInst>::op_end(this) - Values,
   1074                   Values, InsertAtEnd),
   1075       SourceElementType(PointeeType),
   1076       ResultElementType(getIndexedType(PointeeType, IdxList)) {
   1077   assert(ResultElementType ==
   1078          cast<PointerType>(getType()->getScalarType())->getElementType());
   1079   init(Ptr, IdxList, NameStr);
   1080 }
   1081 
   1082 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(GetElementPtrInst, Value)
   1083 
   1084 //===----------------------------------------------------------------------===//
   1085 //                               ICmpInst Class
   1086 //===----------------------------------------------------------------------===//
   1087 
   1088 /// This instruction compares its operands according to the predicate given
   1089 /// to the constructor. It only operates on integers or pointers. The operands
   1090 /// must be identical types.
   1091 /// \brief Represent an integer comparison operator.
   1092 class ICmpInst: public CmpInst {
   1093   void anchor() override;
   1094 
   1095   void AssertOK() {
   1096     assert(getPredicate() >= CmpInst::FIRST_ICMP_PREDICATE &&
   1097            getPredicate() <= CmpInst::LAST_ICMP_PREDICATE &&
   1098            "Invalid ICmp predicate value");
   1099     assert(getOperand(0)->getType() == getOperand(1)->getType() &&
   1100           "Both operands to ICmp instruction are not of the same type!");
   1101     // Check that the operands are the right type
   1102     assert((getOperand(0)->getType()->isIntOrIntVectorTy() ||
   1103             getOperand(0)->getType()->isPtrOrPtrVectorTy()) &&
   1104            "Invalid operand types for ICmp instruction");
   1105   }
   1106 
   1107 protected:
   1108   // Note: Instruction needs to be a friend here to call cloneImpl.
   1109   friend class Instruction;
   1110   /// \brief Clone an identical ICmpInst
   1111   ICmpInst *cloneImpl() const;
   1112 
   1113 public:
   1114   /// \brief Constructor with insert-before-instruction semantics.
   1115   ICmpInst(
   1116     Instruction *InsertBefore,  ///< Where to insert
   1117     Predicate pred,  ///< The predicate to use for the comparison
   1118     Value *LHS,      ///< The left-hand-side of the expression
   1119     Value *RHS,      ///< The right-hand-side of the expression
   1120     const Twine &NameStr = ""  ///< Name of the instruction
   1121   ) : CmpInst(makeCmpResultType(LHS->getType()),
   1122               Instruction::ICmp, pred, LHS, RHS, NameStr,
   1123               InsertBefore) {
   1124 #ifndef NDEBUG
   1125   AssertOK();
   1126 #endif
   1127   }
   1128 
   1129   /// \brief Constructor with insert-at-end semantics.
   1130   ICmpInst(
   1131     BasicBlock &InsertAtEnd, ///< Block to insert into.
   1132     Predicate pred,  ///< The predicate to use for the comparison
   1133     Value *LHS,      ///< The left-hand-side of the expression
   1134     Value *RHS,      ///< The right-hand-side of the expression
   1135     const Twine &NameStr = ""  ///< Name of the instruction
   1136   ) : CmpInst(makeCmpResultType(LHS->getType()),
   1137               Instruction::ICmp, pred, LHS, RHS, NameStr,
   1138               &InsertAtEnd) {
   1139 #ifndef NDEBUG
   1140   AssertOK();
   1141 #endif
   1142   }
   1143 
   1144   /// \brief Constructor with no-insertion semantics
   1145   ICmpInst(
   1146     Predicate pred, ///< The predicate to use for the comparison
   1147     Value *LHS,     ///< The left-hand-side of the expression
   1148     Value *RHS,     ///< The right-hand-side of the expression
   1149     const Twine &NameStr = "" ///< Name of the instruction
   1150   ) : CmpInst(makeCmpResultType(LHS->getType()),
   1151               Instruction::ICmp, pred, LHS, RHS, NameStr) {
   1152 #ifndef NDEBUG
   1153   AssertOK();
   1154 #endif
   1155   }
   1156 
   1157   /// For example, EQ->EQ, SLE->SLE, UGT->SGT, etc.
   1158   /// @returns the predicate that would be the result if the operand were
   1159   /// regarded as signed.
   1160   /// \brief Return the signed version of the predicate
   1161   Predicate getSignedPredicate() const {
   1162     return getSignedPredicate(getPredicate());
   1163   }
   1164 
   1165   /// This is a static version that you can use without an instruction.
   1166   /// \brief Return the signed version of the predicate.
   1167   static Predicate getSignedPredicate(Predicate pred);
   1168 
   1169   /// For example, EQ->EQ, SLE->ULE, UGT->UGT, etc.
   1170   /// @returns the predicate that would be the result if the operand were
   1171   /// regarded as unsigned.
   1172   /// \brief Return the unsigned version of the predicate
   1173   Predicate getUnsignedPredicate() const {
   1174     return getUnsignedPredicate(getPredicate());
   1175   }
   1176 
   1177   /// This is a static version that you can use without an instruction.
   1178   /// \brief Return the unsigned version of the predicate.
   1179   static Predicate getUnsignedPredicate(Predicate pred);
   1180 
   1181   /// isEquality - Return true if this predicate is either EQ or NE.  This also
   1182   /// tests for commutativity.
   1183   static bool isEquality(Predicate P) {
   1184     return P == ICMP_EQ || P == ICMP_NE;
   1185   }
   1186 
   1187   /// isEquality - Return true if this predicate is either EQ or NE.  This also
   1188   /// tests for commutativity.
   1189   bool isEquality() const {
   1190     return isEquality(getPredicate());
   1191   }
   1192 
   1193   /// @returns true if the predicate of this ICmpInst is commutative
   1194   /// \brief Determine if this relation is commutative.
   1195   bool isCommutative() const { return isEquality(); }
   1196 
   1197   /// isRelational - Return true if the predicate is relational (not EQ or NE).
   1198   ///
   1199   bool isRelational() const {
   1200     return !isEquality();
   1201   }
   1202 
   1203   /// isRelational - Return true if the predicate is relational (not EQ or NE).
   1204   ///
   1205   static bool isRelational(Predicate P) {
   1206     return !isEquality(P);
   1207   }
   1208 
   1209   /// Initialize a set of values that all satisfy the predicate with C.
   1210   /// \brief Make a ConstantRange for a relation with a constant value.
   1211   static ConstantRange makeConstantRange(Predicate pred, const APInt &C);
   1212 
   1213   /// Exchange the two operands to this instruction in such a way that it does
   1214   /// not modify the semantics of the instruction. The predicate value may be
   1215   /// changed to retain the same result if the predicate is order dependent
   1216   /// (e.g. ult).
   1217   /// \brief Swap operands and adjust predicate.
   1218   void swapOperands() {
   1219     setPredicate(getSwappedPredicate());
   1220     Op<0>().swap(Op<1>());
   1221   }
   1222 
   1223   // Methods for support type inquiry through isa, cast, and dyn_cast:
   1224   static inline bool classof(const Instruction *I) {
   1225     return I->getOpcode() == Instruction::ICmp;
   1226   }
   1227   static inline bool classof(const Value *V) {
   1228     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   1229   }
   1230 };
   1231 
   1232 //===----------------------------------------------------------------------===//
   1233 //                               FCmpInst Class
   1234 //===----------------------------------------------------------------------===//
   1235 
   1236 /// This instruction compares its operands according to the predicate given
   1237 /// to the constructor. It only operates on floating point values or packed
   1238 /// vectors of floating point values. The operands must be identical types.
   1239 /// \brief Represents a floating point comparison operator.
   1240 class FCmpInst: public CmpInst {
   1241 protected:
   1242   // Note: Instruction needs to be a friend here to call cloneImpl.
   1243   friend class Instruction;
   1244   /// \brief Clone an identical FCmpInst
   1245   FCmpInst *cloneImpl() const;
   1246 
   1247 public:
   1248   /// \brief Constructor with insert-before-instruction semantics.
   1249   FCmpInst(
   1250     Instruction *InsertBefore, ///< Where to insert
   1251     Predicate pred,  ///< The predicate to use for the comparison
   1252     Value *LHS,      ///< The left-hand-side of the expression
   1253     Value *RHS,      ///< The right-hand-side of the expression
   1254     const Twine &NameStr = ""  ///< Name of the instruction
   1255   ) : CmpInst(makeCmpResultType(LHS->getType()),
   1256               Instruction::FCmp, pred, LHS, RHS, NameStr,
   1257               InsertBefore) {
   1258     assert(pred <= FCmpInst::LAST_FCMP_PREDICATE &&
   1259            "Invalid FCmp predicate value");
   1260     assert(getOperand(0)->getType() == getOperand(1)->getType() &&
   1261            "Both operands to FCmp instruction are not of the same type!");
   1262     // Check that the operands are the right type
   1263     assert(getOperand(0)->getType()->isFPOrFPVectorTy() &&
   1264            "Invalid operand types for FCmp instruction");
   1265   }
   1266 
   1267   /// \brief Constructor with insert-at-end semantics.
   1268   FCmpInst(
   1269     BasicBlock &InsertAtEnd, ///< Block to insert into.
   1270     Predicate pred,  ///< The predicate to use for the comparison
   1271     Value *LHS,      ///< The left-hand-side of the expression
   1272     Value *RHS,      ///< The right-hand-side of the expression
   1273     const Twine &NameStr = ""  ///< Name of the instruction
   1274   ) : CmpInst(makeCmpResultType(LHS->getType()),
   1275               Instruction::FCmp, pred, LHS, RHS, NameStr,
   1276               &InsertAtEnd) {
   1277     assert(pred <= FCmpInst::LAST_FCMP_PREDICATE &&
   1278            "Invalid FCmp predicate value");
   1279     assert(getOperand(0)->getType() == getOperand(1)->getType() &&
   1280            "Both operands to FCmp instruction are not of the same type!");
   1281     // Check that the operands are the right type
   1282     assert(getOperand(0)->getType()->isFPOrFPVectorTy() &&
   1283            "Invalid operand types for FCmp instruction");
   1284   }
   1285 
   1286   /// \brief Constructor with no-insertion semantics
   1287   FCmpInst(
   1288     Predicate pred, ///< The predicate to use for the comparison
   1289     Value *LHS,     ///< The left-hand-side of the expression
   1290     Value *RHS,     ///< The right-hand-side of the expression
   1291     const Twine &NameStr = "" ///< Name of the instruction
   1292   ) : CmpInst(makeCmpResultType(LHS->getType()),
   1293               Instruction::FCmp, pred, LHS, RHS, NameStr) {
   1294     assert(pred <= FCmpInst::LAST_FCMP_PREDICATE &&
   1295            "Invalid FCmp predicate value");
   1296     assert(getOperand(0)->getType() == getOperand(1)->getType() &&
   1297            "Both operands to FCmp instruction are not of the same type!");
   1298     // Check that the operands are the right type
   1299     assert(getOperand(0)->getType()->isFPOrFPVectorTy() &&
   1300            "Invalid operand types for FCmp instruction");
   1301   }
   1302 
   1303   /// @returns true if the predicate of this instruction is EQ or NE.
   1304   /// \brief Determine if this is an equality predicate.
   1305   static bool isEquality(Predicate Pred) {
   1306     return Pred == FCMP_OEQ || Pred == FCMP_ONE || Pred == FCMP_UEQ ||
   1307            Pred == FCMP_UNE;
   1308   }
   1309 
   1310   /// @returns true if the predicate of this instruction is EQ or NE.
   1311   /// \brief Determine if this is an equality predicate.
   1312   bool isEquality() const { return isEquality(getPredicate()); }
   1313 
   1314   /// @returns true if the predicate of this instruction is commutative.
   1315   /// \brief Determine if this is a commutative predicate.
   1316   bool isCommutative() const {
   1317     return isEquality() ||
   1318            getPredicate() == FCMP_FALSE ||
   1319            getPredicate() == FCMP_TRUE ||
   1320            getPredicate() == FCMP_ORD ||
   1321            getPredicate() == FCMP_UNO;
   1322   }
   1323 
   1324   /// @returns true if the predicate is relational (not EQ or NE).
   1325   /// \brief Determine if this a relational predicate.
   1326   bool isRelational() const { return !isEquality(); }
   1327 
   1328   /// Exchange the two operands to this instruction in such a way that it does
   1329   /// not modify the semantics of the instruction. The predicate value may be
   1330   /// changed to retain the same result if the predicate is order dependent
   1331   /// (e.g. ult).
   1332   /// \brief Swap operands and adjust predicate.
   1333   void swapOperands() {
   1334     setPredicate(getSwappedPredicate());
   1335     Op<0>().swap(Op<1>());
   1336   }
   1337 
   1338   /// \brief Methods for support type inquiry through isa, cast, and dyn_cast:
   1339   static inline bool classof(const Instruction *I) {
   1340     return I->getOpcode() == Instruction::FCmp;
   1341   }
   1342   static inline bool classof(const Value *V) {
   1343     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   1344   }
   1345 };
   1346 
   1347 //===----------------------------------------------------------------------===//
   1348 /// CallInst - This class represents a function call, abstracting a target
   1349 /// machine's calling convention.  This class uses low bit of the SubClassData
   1350 /// field to indicate whether or not this is a tail call.  The rest of the bits
   1351 /// hold the calling convention of the call.
   1352 ///
   1353 class CallInst : public Instruction,
   1354                  public OperandBundleUser<CallInst, User::op_iterator> {
   1355   AttributeSet AttributeList; ///< parameter attributes for call
   1356   FunctionType *FTy;
   1357   CallInst(const CallInst &CI);
   1358   void init(Value *Func, ArrayRef<Value *> Args,
   1359             ArrayRef<OperandBundleDef> Bundles, const Twine &NameStr) {
   1360     init(cast<FunctionType>(
   1361              cast<PointerType>(Func->getType())->getElementType()),
   1362          Func, Args, Bundles, NameStr);
   1363   }
   1364   void init(FunctionType *FTy, Value *Func, ArrayRef<Value *> Args,
   1365             ArrayRef<OperandBundleDef> Bundles, const Twine &NameStr);
   1366   void init(Value *Func, const Twine &NameStr);
   1367 
   1368   /// Construct a CallInst given a range of arguments.
   1369   /// \brief Construct a CallInst from a range of arguments
   1370   inline CallInst(FunctionType *Ty, Value *Func, ArrayRef<Value *> Args,
   1371                   ArrayRef<OperandBundleDef> Bundles, const Twine &NameStr,
   1372                   Instruction *InsertBefore);
   1373   inline CallInst(Value *Func, ArrayRef<Value *> Args,
   1374                   ArrayRef<OperandBundleDef> Bundles, const Twine &NameStr,
   1375                   Instruction *InsertBefore)
   1376       : CallInst(cast<FunctionType>(
   1377                      cast<PointerType>(Func->getType())->getElementType()),
   1378                  Func, Args, Bundles, NameStr, InsertBefore) {}
   1379 
   1380   inline CallInst(Value *Func, ArrayRef<Value *> Args, const Twine &NameStr,
   1381                   Instruction *InsertBefore)
   1382       : CallInst(Func, Args, None, NameStr, InsertBefore) {}
   1383 
   1384   /// Construct a CallInst given a range of arguments.
   1385   /// \brief Construct a CallInst from a range of arguments
   1386   inline CallInst(Value *Func, ArrayRef<Value *> Args,
   1387                   ArrayRef<OperandBundleDef> Bundles, const Twine &NameStr,
   1388                   BasicBlock *InsertAtEnd);
   1389 
   1390   explicit CallInst(Value *F, const Twine &NameStr,
   1391                     Instruction *InsertBefore);
   1392   CallInst(Value *F, const Twine &NameStr, BasicBlock *InsertAtEnd);
   1393 
   1394   friend class OperandBundleUser<CallInst, User::op_iterator>;
   1395   bool hasDescriptor() const { return HasDescriptor; }
   1396 
   1397 protected:
   1398   // Note: Instruction needs to be a friend here to call cloneImpl.
   1399   friend class Instruction;
   1400   CallInst *cloneImpl() const;
   1401 
   1402 public:
   1403   static CallInst *Create(Value *Func, ArrayRef<Value *> Args,
   1404                           ArrayRef<OperandBundleDef> Bundles = None,
   1405                           const Twine &NameStr = "",
   1406                           Instruction *InsertBefore = nullptr) {
   1407     return Create(cast<FunctionType>(
   1408                       cast<PointerType>(Func->getType())->getElementType()),
   1409                   Func, Args, Bundles, NameStr, InsertBefore);
   1410   }
   1411   static CallInst *Create(Value *Func, ArrayRef<Value *> Args,
   1412                           const Twine &NameStr,
   1413                           Instruction *InsertBefore = nullptr) {
   1414     return Create(cast<FunctionType>(
   1415                       cast<PointerType>(Func->getType())->getElementType()),
   1416                   Func, Args, None, NameStr, InsertBefore);
   1417   }
   1418   static CallInst *Create(FunctionType *Ty, Value *Func, ArrayRef<Value *> Args,
   1419                           const Twine &NameStr,
   1420                           Instruction *InsertBefore = nullptr) {
   1421     return new (unsigned(Args.size() + 1))
   1422         CallInst(Ty, Func, Args, None, NameStr, InsertBefore);
   1423   }
   1424   static CallInst *Create(FunctionType *Ty, Value *Func, ArrayRef<Value *> Args,
   1425                           ArrayRef<OperandBundleDef> Bundles = None,
   1426                           const Twine &NameStr = "",
   1427                           Instruction *InsertBefore = nullptr) {
   1428     const unsigned TotalOps =
   1429         unsigned(Args.size()) + CountBundleInputs(Bundles) + 1;
   1430     const unsigned DescriptorBytes = Bundles.size() * sizeof(BundleOpInfo);
   1431 
   1432     return new (TotalOps, DescriptorBytes)
   1433         CallInst(Ty, Func, Args, Bundles, NameStr, InsertBefore);
   1434   }
   1435   static CallInst *Create(Value *Func, ArrayRef<Value *> Args,
   1436                           ArrayRef<OperandBundleDef> Bundles,
   1437                           const Twine &NameStr, BasicBlock *InsertAtEnd) {
   1438     const unsigned TotalOps =
   1439         unsigned(Args.size()) + CountBundleInputs(Bundles) + 1;
   1440     const unsigned DescriptorBytes = Bundles.size() * sizeof(BundleOpInfo);
   1441 
   1442     return new (TotalOps, DescriptorBytes)
   1443         CallInst(Func, Args, Bundles, NameStr, InsertAtEnd);
   1444   }
   1445   static CallInst *Create(Value *Func, ArrayRef<Value *> Args,
   1446                           const Twine &NameStr, BasicBlock *InsertAtEnd) {
   1447     return new (unsigned(Args.size() + 1))
   1448         CallInst(Func, Args, None, NameStr, InsertAtEnd);
   1449   }
   1450   static CallInst *Create(Value *F, const Twine &NameStr = "",
   1451                           Instruction *InsertBefore = nullptr) {
   1452     return new(1) CallInst(F, NameStr, InsertBefore);
   1453   }
   1454   static CallInst *Create(Value *F, const Twine &NameStr,
   1455                           BasicBlock *InsertAtEnd) {
   1456     return new(1) CallInst(F, NameStr, InsertAtEnd);
   1457   }
   1458 
   1459   /// \brief Create a clone of \p CI with a different set of operand bundles and
   1460   /// insert it before \p InsertPt.
   1461   ///
   1462   /// The returned call instruction is identical \p CI in every way except that
   1463   /// the operand bundles for the new instruction are set to the operand bundles
   1464   /// in \p Bundles.
   1465   static CallInst *Create(CallInst *CI, ArrayRef<OperandBundleDef> Bundles,
   1466                           Instruction *InsertPt = nullptr);
   1467 
   1468   /// CreateMalloc - Generate the IR for a call to malloc:
   1469   /// 1. Compute the malloc call's argument as the specified type's size,
   1470   ///    possibly multiplied by the array size if the array size is not
   1471   ///    constant 1.
   1472   /// 2. Call malloc with that argument.
   1473   /// 3. Bitcast the result of the malloc call to the specified type.
   1474   static Instruction *CreateMalloc(Instruction *InsertBefore,
   1475                                    Type *IntPtrTy, Type *AllocTy,
   1476                                    Value *AllocSize, Value *ArraySize = nullptr,
   1477                                    Function* MallocF = nullptr,
   1478                                    const Twine &Name = "");
   1479   static Instruction *CreateMalloc(BasicBlock *InsertAtEnd,
   1480                                    Type *IntPtrTy, Type *AllocTy,
   1481                                    Value *AllocSize, Value *ArraySize = nullptr,
   1482                                    Function* MallocF = nullptr,
   1483                                    const Twine &Name = "");
   1484   static Instruction *CreateMalloc(Instruction *InsertBefore,
   1485                                    Type *IntPtrTy, Type *AllocTy,
   1486                                    Value *AllocSize, Value *ArraySize = nullptr,
   1487                                    ArrayRef<OperandBundleDef> Bundles = None,
   1488                                    Function* MallocF = nullptr,
   1489                                    const Twine &Name = "");
   1490   static Instruction *CreateMalloc(BasicBlock *InsertAtEnd,
   1491                                    Type *IntPtrTy, Type *AllocTy,
   1492                                    Value *AllocSize, Value *ArraySize = nullptr,
   1493                                    ArrayRef<OperandBundleDef> Bundles = None,
   1494                                    Function* MallocF = nullptr,
   1495                                    const Twine &Name = "");
   1496   /// CreateFree - Generate the IR for a call to the builtin free function.
   1497   static Instruction *CreateFree(Value *Source,
   1498                                  Instruction *InsertBefore);
   1499   static Instruction *CreateFree(Value *Source,
   1500                                  BasicBlock *InsertAtEnd);
   1501   static Instruction *CreateFree(Value *Source,
   1502                                  ArrayRef<OperandBundleDef> Bundles,
   1503                                  Instruction *InsertBefore);
   1504   static Instruction *CreateFree(Value *Source,
   1505                                  ArrayRef<OperandBundleDef> Bundles,
   1506                                  BasicBlock *InsertAtEnd);
   1507 
   1508   ~CallInst() override;
   1509 
   1510   FunctionType *getFunctionType() const { return FTy; }
   1511 
   1512   void mutateFunctionType(FunctionType *FTy) {
   1513     mutateType(FTy->getReturnType());
   1514     this->FTy = FTy;
   1515   }
   1516 
   1517   // Note that 'musttail' implies 'tail'.
   1518   enum TailCallKind { TCK_None = 0, TCK_Tail = 1, TCK_MustTail = 2,
   1519                       TCK_NoTail = 3 };
   1520   TailCallKind getTailCallKind() const {
   1521     return TailCallKind(getSubclassDataFromInstruction() & 3);
   1522   }
   1523   bool isTailCall() const {
   1524     unsigned Kind = getSubclassDataFromInstruction() & 3;
   1525     return Kind == TCK_Tail || Kind == TCK_MustTail;
   1526   }
   1527   bool isMustTailCall() const {
   1528     return (getSubclassDataFromInstruction() & 3) == TCK_MustTail;
   1529   }
   1530   bool isNoTailCall() const {
   1531     return (getSubclassDataFromInstruction() & 3) == TCK_NoTail;
   1532   }
   1533   void setTailCall(bool isTC = true) {
   1534     setInstructionSubclassData((getSubclassDataFromInstruction() & ~3) |
   1535                                unsigned(isTC ? TCK_Tail : TCK_None));
   1536   }
   1537   void setTailCallKind(TailCallKind TCK) {
   1538     setInstructionSubclassData((getSubclassDataFromInstruction() & ~3) |
   1539                                unsigned(TCK));
   1540   }
   1541 
   1542   /// Provide fast operand accessors
   1543   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   1544 
   1545   /// getNumArgOperands - Return the number of call arguments.
   1546   ///
   1547   unsigned getNumArgOperands() const {
   1548     return getNumOperands() - getNumTotalBundleOperands() - 1;
   1549   }
   1550 
   1551   /// getArgOperand/setArgOperand - Return/set the i-th call argument.
   1552   ///
   1553   Value *getArgOperand(unsigned i) const {
   1554     assert(i < getNumArgOperands() && "Out of bounds!");
   1555     return getOperand(i);
   1556   }
   1557   void setArgOperand(unsigned i, Value *v) {
   1558     assert(i < getNumArgOperands() && "Out of bounds!");
   1559     setOperand(i, v);
   1560   }
   1561 
   1562   /// \brief Return the iterator pointing to the beginning of the argument list.
   1563   op_iterator arg_begin() { return op_begin(); }
   1564 
   1565   /// \brief Return the iterator pointing to the end of the argument list.
   1566   op_iterator arg_end() {
   1567     // [ call args ], [ operand bundles ], callee
   1568     return op_end() - getNumTotalBundleOperands() - 1;
   1569   };
   1570 
   1571   /// \brief Iteration adapter for range-for loops.
   1572   iterator_range<op_iterator> arg_operands() {
   1573     return make_range(arg_begin(), arg_end());
   1574   }
   1575 
   1576   /// \brief Return the iterator pointing to the beginning of the argument list.
   1577   const_op_iterator arg_begin() const { return op_begin(); }
   1578 
   1579   /// \brief Return the iterator pointing to the end of the argument list.
   1580   const_op_iterator arg_end() const {
   1581     // [ call args ], [ operand bundles ], callee
   1582     return op_end() - getNumTotalBundleOperands() - 1;
   1583   };
   1584 
   1585   /// \brief Iteration adapter for range-for loops.
   1586   iterator_range<const_op_iterator> arg_operands() const {
   1587     return make_range(arg_begin(), arg_end());
   1588   }
   1589 
   1590   /// \brief Wrappers for getting the \c Use of a call argument.
   1591   const Use &getArgOperandUse(unsigned i) const {
   1592     assert(i < getNumArgOperands() && "Out of bounds!");
   1593     return getOperandUse(i);
   1594   }
   1595   Use &getArgOperandUse(unsigned i) {
   1596     assert(i < getNumArgOperands() && "Out of bounds!");
   1597     return getOperandUse(i);
   1598   }
   1599 
   1600   /// If one of the arguments has the 'returned' attribute, return its
   1601   /// operand value. Otherwise, return nullptr.
   1602   Value *getReturnedArgOperand() const;
   1603 
   1604   /// getCallingConv/setCallingConv - Get or set the calling convention of this
   1605   /// function call.
   1606   CallingConv::ID getCallingConv() const {
   1607     return static_cast<CallingConv::ID>(getSubclassDataFromInstruction() >> 2);
   1608   }
   1609   void setCallingConv(CallingConv::ID CC) {
   1610     auto ID = static_cast<unsigned>(CC);
   1611     assert(!(ID & ~CallingConv::MaxID) && "Unsupported calling convention");
   1612     setInstructionSubclassData((getSubclassDataFromInstruction() & 3) |
   1613                                (ID << 2));
   1614   }
   1615 
   1616   /// getAttributes - Return the parameter attributes for this call.
   1617   ///
   1618   const AttributeSet &getAttributes() const { return AttributeList; }
   1619 
   1620   /// setAttributes - Set the parameter attributes for this call.
   1621   ///
   1622   void setAttributes(const AttributeSet &Attrs) { AttributeList = Attrs; }
   1623 
   1624   /// addAttribute - adds the attribute to the list of attributes.
   1625   void addAttribute(unsigned i, Attribute::AttrKind Kind);
   1626 
   1627   /// addAttribute - adds the attribute to the list of attributes.
   1628   void addAttribute(unsigned i, StringRef Kind, StringRef Value);
   1629 
   1630   /// addAttribute - adds the attribute to the list of attributes.
   1631   void addAttribute(unsigned i, Attribute Attr);
   1632 
   1633   /// removeAttribute - removes the attribute from the list of attributes.
   1634   void removeAttribute(unsigned i, Attribute::AttrKind Kind);
   1635 
   1636   /// removeAttribute - removes the attribute from the list of attributes.
   1637   void removeAttribute(unsigned i, StringRef Kind);
   1638 
   1639   /// removeAttribute - removes the attribute from the list of attributes.
   1640   void removeAttribute(unsigned i, Attribute Attr);
   1641 
   1642   /// \brief adds the dereferenceable attribute to the list of attributes.
   1643   void addDereferenceableAttr(unsigned i, uint64_t Bytes);
   1644 
   1645   /// \brief adds the dereferenceable_or_null attribute to the list of
   1646   /// attributes.
   1647   void addDereferenceableOrNullAttr(unsigned i, uint64_t Bytes);
   1648 
   1649   /// \brief Determine whether this call has the given attribute.
   1650   bool hasFnAttr(Attribute::AttrKind Kind) const {
   1651     assert(Kind != Attribute::NoBuiltin &&
   1652            "Use CallInst::isNoBuiltin() to check for Attribute::NoBuiltin");
   1653     return hasFnAttrImpl(Kind);
   1654   }
   1655 
   1656   /// \brief Determine whether this call has the given attribute.
   1657   bool hasFnAttr(StringRef Kind) const {
   1658     return hasFnAttrImpl(Kind);
   1659   }
   1660 
   1661   /// \brief Determine whether the call or the callee has the given attributes.
   1662   bool paramHasAttr(unsigned i, Attribute::AttrKind Kind) const;
   1663 
   1664   /// \brief Get the attribute of a given kind at a position.
   1665   Attribute getAttribute(unsigned i, Attribute::AttrKind Kind) const;
   1666 
   1667   /// \brief Get the attribute of a given kind at a position.
   1668   Attribute getAttribute(unsigned i, StringRef Kind) const;
   1669 
   1670   /// \brief Return true if the data operand at index \p i has the attribute \p
   1671   /// A.
   1672   ///
   1673   /// Data operands include call arguments and values used in operand bundles,
   1674   /// but does not include the callee operand.  This routine dispatches to the
   1675   /// underlying AttributeList or the OperandBundleUser as appropriate.
   1676   ///
   1677   /// The index \p i is interpreted as
   1678   ///
   1679   ///  \p i == Attribute::ReturnIndex  -> the return value
   1680   ///  \p i in [1, arg_size + 1)  -> argument number (\p i - 1)
   1681   ///  \p i in [arg_size + 1, data_operand_size + 1) -> bundle operand at index
   1682   ///     (\p i - 1) in the operand list.
   1683   bool dataOperandHasImpliedAttr(unsigned i, Attribute::AttrKind Kind) const;
   1684 
   1685   /// \brief Extract the alignment for a call or parameter (0=unknown).
   1686   unsigned getParamAlignment(unsigned i) const {
   1687     return AttributeList.getParamAlignment(i);
   1688   }
   1689 
   1690   /// \brief Extract the number of dereferenceable bytes for a call or
   1691   /// parameter (0=unknown).
   1692   uint64_t getDereferenceableBytes(unsigned i) const {
   1693     return AttributeList.getDereferenceableBytes(i);
   1694   }
   1695 
   1696   /// \brief Extract the number of dereferenceable_or_null bytes for a call or
   1697   /// parameter (0=unknown).
   1698   uint64_t getDereferenceableOrNullBytes(unsigned i) const {
   1699     return AttributeList.getDereferenceableOrNullBytes(i);
   1700   }
   1701 
   1702   /// @brief Determine if the parameter or return value is marked with NoAlias
   1703   /// attribute.
   1704   /// @param n The parameter to check. 1 is the first parameter, 0 is the return
   1705   bool doesNotAlias(unsigned n) const {
   1706     return AttributeList.hasAttribute(n, Attribute::NoAlias);
   1707   }
   1708 
   1709   /// \brief Return true if the call should not be treated as a call to a
   1710   /// builtin.
   1711   bool isNoBuiltin() const {
   1712     return hasFnAttrImpl(Attribute::NoBuiltin) &&
   1713       !hasFnAttrImpl(Attribute::Builtin);
   1714   }
   1715 
   1716   /// \brief Return true if the call should not be inlined.
   1717   bool isNoInline() const { return hasFnAttr(Attribute::NoInline); }
   1718   void setIsNoInline() {
   1719     addAttribute(AttributeSet::FunctionIndex, Attribute::NoInline);
   1720   }
   1721 
   1722   /// \brief Return true if the call can return twice
   1723   bool canReturnTwice() const {
   1724     return hasFnAttr(Attribute::ReturnsTwice);
   1725   }
   1726   void setCanReturnTwice() {
   1727     addAttribute(AttributeSet::FunctionIndex, Attribute::ReturnsTwice);
   1728   }
   1729 
   1730   /// \brief Determine if the call does not access memory.
   1731   bool doesNotAccessMemory() const {
   1732     return hasFnAttr(Attribute::ReadNone);
   1733   }
   1734   void setDoesNotAccessMemory() {
   1735     addAttribute(AttributeSet::FunctionIndex, Attribute::ReadNone);
   1736   }
   1737 
   1738   /// \brief Determine if the call does not access or only reads memory.
   1739   bool onlyReadsMemory() const {
   1740     return doesNotAccessMemory() || hasFnAttr(Attribute::ReadOnly);
   1741   }
   1742   void setOnlyReadsMemory() {
   1743     addAttribute(AttributeSet::FunctionIndex, Attribute::ReadOnly);
   1744   }
   1745 
   1746   /// \brief Determine if the call does not access or only writes memory.
   1747   bool doesNotReadMemory() const {
   1748     return doesNotAccessMemory() || hasFnAttr(Attribute::WriteOnly);
   1749   }
   1750   void setDoesNotReadMemory() {
   1751     addAttribute(AttributeSet::FunctionIndex, Attribute::WriteOnly);
   1752   }
   1753 
   1754   /// @brief Determine if the call can access memmory only using pointers based
   1755   /// on its arguments.
   1756   bool onlyAccessesArgMemory() const {
   1757     return hasFnAttr(Attribute::ArgMemOnly);
   1758   }
   1759   void setOnlyAccessesArgMemory() {
   1760     addAttribute(AttributeSet::FunctionIndex, Attribute::ArgMemOnly);
   1761   }
   1762 
   1763   /// \brief Determine if the call cannot return.
   1764   bool doesNotReturn() const { return hasFnAttr(Attribute::NoReturn); }
   1765   void setDoesNotReturn() {
   1766     addAttribute(AttributeSet::FunctionIndex, Attribute::NoReturn);
   1767   }
   1768 
   1769   /// \brief Determine if the call cannot unwind.
   1770   bool doesNotThrow() const { return hasFnAttr(Attribute::NoUnwind); }
   1771   void setDoesNotThrow() {
   1772     addAttribute(AttributeSet::FunctionIndex, Attribute::NoUnwind);
   1773   }
   1774 
   1775   /// \brief Determine if the call cannot be duplicated.
   1776   bool cannotDuplicate() const {return hasFnAttr(Attribute::NoDuplicate); }
   1777   void setCannotDuplicate() {
   1778     addAttribute(AttributeSet::FunctionIndex, Attribute::NoDuplicate);
   1779   }
   1780 
   1781   /// \brief Determine if the call is convergent
   1782   bool isConvergent() const { return hasFnAttr(Attribute::Convergent); }
   1783   void setConvergent() {
   1784     addAttribute(AttributeSet::FunctionIndex, Attribute::Convergent);
   1785   }
   1786   void setNotConvergent() {
   1787     removeAttribute(AttributeSet::FunctionIndex,
   1788                     Attribute::get(getContext(), Attribute::Convergent));
   1789   }
   1790 
   1791   /// \brief Determine if the call returns a structure through first
   1792   /// pointer argument.
   1793   bool hasStructRetAttr() const {
   1794     if (getNumArgOperands() == 0)
   1795       return false;
   1796 
   1797     // Be friendly and also check the callee.
   1798     return paramHasAttr(1, Attribute::StructRet);
   1799   }
   1800 
   1801   /// \brief Determine if any call argument is an aggregate passed by value.
   1802   bool hasByValArgument() const {
   1803     return AttributeList.hasAttrSomewhere(Attribute::ByVal);
   1804   }
   1805 
   1806   /// getCalledFunction - Return the function called, or null if this is an
   1807   /// indirect function invocation.
   1808   ///
   1809   Function *getCalledFunction() const {
   1810     return dyn_cast<Function>(Op<-1>());
   1811   }
   1812 
   1813   /// getCalledValue - Get a pointer to the function that is invoked by this
   1814   /// instruction.
   1815   const Value *getCalledValue() const { return Op<-1>(); }
   1816         Value *getCalledValue()       { return Op<-1>(); }
   1817 
   1818   /// setCalledFunction - Set the function called.
   1819   void setCalledFunction(Value* Fn) {
   1820     setCalledFunction(
   1821         cast<FunctionType>(cast<PointerType>(Fn->getType())->getElementType()),
   1822         Fn);
   1823   }
   1824   void setCalledFunction(FunctionType *FTy, Value *Fn) {
   1825     this->FTy = FTy;
   1826     assert(FTy == cast<FunctionType>(
   1827                       cast<PointerType>(Fn->getType())->getElementType()));
   1828     Op<-1>() = Fn;
   1829   }
   1830 
   1831   /// isInlineAsm - Check if this call is an inline asm statement.
   1832   bool isInlineAsm() const {
   1833     return isa<InlineAsm>(Op<-1>());
   1834   }
   1835 
   1836   // Methods for support type inquiry through isa, cast, and dyn_cast:
   1837   static inline bool classof(const Instruction *I) {
   1838     return I->getOpcode() == Instruction::Call;
   1839   }
   1840   static inline bool classof(const Value *V) {
   1841     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   1842   }
   1843 
   1844 private:
   1845   template <typename AttrKind> bool hasFnAttrImpl(AttrKind A) const {
   1846     if (AttributeList.hasAttribute(AttributeSet::FunctionIndex, A))
   1847       return true;
   1848 
   1849     // Operand bundles override attributes on the called function, but don't
   1850     // override attributes directly present on the call instruction.
   1851     if (isFnAttrDisallowedByOpBundle(A))
   1852       return false;
   1853 
   1854     if (const Function *F = getCalledFunction())
   1855       return F->getAttributes().hasAttribute(AttributeSet::FunctionIndex, A);
   1856     return false;
   1857   }
   1858 
   1859   // Shadow Instruction::setInstructionSubclassData with a private forwarding
   1860   // method so that subclasses cannot accidentally use it.
   1861   void setInstructionSubclassData(unsigned short D) {
   1862     Instruction::setInstructionSubclassData(D);
   1863   }
   1864 };
   1865 
   1866 template <>
   1867 struct OperandTraits<CallInst> : public VariadicOperandTraits<CallInst, 1> {
   1868 };
   1869 
   1870 CallInst::CallInst(Value *Func, ArrayRef<Value *> Args,
   1871                    ArrayRef<OperandBundleDef> Bundles, const Twine &NameStr,
   1872                    BasicBlock *InsertAtEnd)
   1873     : Instruction(
   1874           cast<FunctionType>(cast<PointerType>(Func->getType())
   1875                                  ->getElementType())->getReturnType(),
   1876           Instruction::Call, OperandTraits<CallInst>::op_end(this) -
   1877                                  (Args.size() + CountBundleInputs(Bundles) + 1),
   1878           unsigned(Args.size() + CountBundleInputs(Bundles) + 1), InsertAtEnd) {
   1879   init(Func, Args, Bundles, NameStr);
   1880 }
   1881 
   1882 CallInst::CallInst(FunctionType *Ty, Value *Func, ArrayRef<Value *> Args,
   1883                    ArrayRef<OperandBundleDef> Bundles, const Twine &NameStr,
   1884                    Instruction *InsertBefore)
   1885     : Instruction(Ty->getReturnType(), Instruction::Call,
   1886                   OperandTraits<CallInst>::op_end(this) -
   1887                       (Args.size() + CountBundleInputs(Bundles) + 1),
   1888                   unsigned(Args.size() + CountBundleInputs(Bundles) + 1),
   1889                   InsertBefore) {
   1890   init(Ty, Func, Args, Bundles, NameStr);
   1891 }
   1892 
   1893 // Note: if you get compile errors about private methods then
   1894 //       please update your code to use the high-level operand
   1895 //       interfaces. See line 943 above.
   1896 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(CallInst, Value)
   1897 
   1898 //===----------------------------------------------------------------------===//
   1899 //                               SelectInst Class
   1900 //===----------------------------------------------------------------------===//
   1901 
   1902 /// SelectInst - This class represents the LLVM 'select' instruction.
   1903 ///
   1904 class SelectInst : public Instruction {
   1905   void init(Value *C, Value *S1, Value *S2) {
   1906     assert(!areInvalidOperands(C, S1, S2) && "Invalid operands for select");
   1907     Op<0>() = C;
   1908     Op<1>() = S1;
   1909     Op<2>() = S2;
   1910   }
   1911 
   1912   SelectInst(Value *C, Value *S1, Value *S2, const Twine &NameStr,
   1913              Instruction *InsertBefore)
   1914     : Instruction(S1->getType(), Instruction::Select,
   1915                   &Op<0>(), 3, InsertBefore) {
   1916     init(C, S1, S2);
   1917     setName(NameStr);
   1918   }
   1919   SelectInst(Value *C, Value *S1, Value *S2, const Twine &NameStr,
   1920              BasicBlock *InsertAtEnd)
   1921     : Instruction(S1->getType(), Instruction::Select,
   1922                   &Op<0>(), 3, InsertAtEnd) {
   1923     init(C, S1, S2);
   1924     setName(NameStr);
   1925   }
   1926 
   1927 protected:
   1928   // Note: Instruction needs to be a friend here to call cloneImpl.
   1929   friend class Instruction;
   1930   SelectInst *cloneImpl() const;
   1931 
   1932 public:
   1933   static SelectInst *Create(Value *C, Value *S1, Value *S2,
   1934                             const Twine &NameStr = "",
   1935                             Instruction *InsertBefore = nullptr) {
   1936     return new(3) SelectInst(C, S1, S2, NameStr, InsertBefore);
   1937   }
   1938   static SelectInst *Create(Value *C, Value *S1, Value *S2,
   1939                             const Twine &NameStr,
   1940                             BasicBlock *InsertAtEnd) {
   1941     return new(3) SelectInst(C, S1, S2, NameStr, InsertAtEnd);
   1942   }
   1943 
   1944   const Value *getCondition() const { return Op<0>(); }
   1945   const Value *getTrueValue() const { return Op<1>(); }
   1946   const Value *getFalseValue() const { return Op<2>(); }
   1947   Value *getCondition() { return Op<0>(); }
   1948   Value *getTrueValue() { return Op<1>(); }
   1949   Value *getFalseValue() { return Op<2>(); }
   1950 
   1951   void setCondition(Value *V) { Op<0>() = V; }
   1952   void setTrueValue(Value *V) { Op<1>() = V; }
   1953   void setFalseValue(Value *V) { Op<2>() = V; }
   1954 
   1955   /// areInvalidOperands - Return a string if the specified operands are invalid
   1956   /// for a select operation, otherwise return null.
   1957   static const char *areInvalidOperands(Value *Cond, Value *True, Value *False);
   1958 
   1959   /// Transparently provide more efficient getOperand methods.
   1960   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   1961 
   1962   OtherOps getOpcode() const {
   1963     return static_cast<OtherOps>(Instruction::getOpcode());
   1964   }
   1965 
   1966   // Methods for support type inquiry through isa, cast, and dyn_cast:
   1967   static inline bool classof(const Instruction *I) {
   1968     return I->getOpcode() == Instruction::Select;
   1969   }
   1970   static inline bool classof(const Value *V) {
   1971     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   1972   }
   1973 };
   1974 
   1975 template <>
   1976 struct OperandTraits<SelectInst> : public FixedNumOperandTraits<SelectInst, 3> {
   1977 };
   1978 
   1979 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(SelectInst, Value)
   1980 
   1981 //===----------------------------------------------------------------------===//
   1982 //                                VAArgInst Class
   1983 //===----------------------------------------------------------------------===//
   1984 
   1985 /// VAArgInst - This class represents the va_arg llvm instruction, which returns
   1986 /// an argument of the specified type given a va_list and increments that list
   1987 ///
   1988 class VAArgInst : public UnaryInstruction {
   1989 protected:
   1990   // Note: Instruction needs to be a friend here to call cloneImpl.
   1991   friend class Instruction;
   1992   VAArgInst *cloneImpl() const;
   1993 
   1994 public:
   1995   VAArgInst(Value *List, Type *Ty, const Twine &NameStr = "",
   1996              Instruction *InsertBefore = nullptr)
   1997     : UnaryInstruction(Ty, VAArg, List, InsertBefore) {
   1998     setName(NameStr);
   1999   }
   2000   VAArgInst(Value *List, Type *Ty, const Twine &NameStr,
   2001             BasicBlock *InsertAtEnd)
   2002     : UnaryInstruction(Ty, VAArg, List, InsertAtEnd) {
   2003     setName(NameStr);
   2004   }
   2005 
   2006   Value *getPointerOperand() { return getOperand(0); }
   2007   const Value *getPointerOperand() const { return getOperand(0); }
   2008   static unsigned getPointerOperandIndex() { return 0U; }
   2009 
   2010   // Methods for support type inquiry through isa, cast, and dyn_cast:
   2011   static inline bool classof(const Instruction *I) {
   2012     return I->getOpcode() == VAArg;
   2013   }
   2014   static inline bool classof(const Value *V) {
   2015     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   2016   }
   2017 };
   2018 
   2019 //===----------------------------------------------------------------------===//
   2020 //                                ExtractElementInst Class
   2021 //===----------------------------------------------------------------------===//
   2022 
   2023 /// ExtractElementInst - This instruction extracts a single (scalar)
   2024 /// element from a VectorType value
   2025 ///
   2026 class ExtractElementInst : public Instruction {
   2027   ExtractElementInst(Value *Vec, Value *Idx, const Twine &NameStr = "",
   2028                      Instruction *InsertBefore = nullptr);
   2029   ExtractElementInst(Value *Vec, Value *Idx, const Twine &NameStr,
   2030                      BasicBlock *InsertAtEnd);
   2031 
   2032 protected:
   2033   // Note: Instruction needs to be a friend here to call cloneImpl.
   2034   friend class Instruction;
   2035   ExtractElementInst *cloneImpl() const;
   2036 
   2037 public:
   2038   static ExtractElementInst *Create(Value *Vec, Value *Idx,
   2039                                    const Twine &NameStr = "",
   2040                                    Instruction *InsertBefore = nullptr) {
   2041     return new(2) ExtractElementInst(Vec, Idx, NameStr, InsertBefore);
   2042   }
   2043   static ExtractElementInst *Create(Value *Vec, Value *Idx,
   2044                                    const Twine &NameStr,
   2045                                    BasicBlock *InsertAtEnd) {
   2046     return new(2) ExtractElementInst(Vec, Idx, NameStr, InsertAtEnd);
   2047   }
   2048 
   2049   /// isValidOperands - Return true if an extractelement instruction can be
   2050   /// formed with the specified operands.
   2051   static bool isValidOperands(const Value *Vec, const Value *Idx);
   2052 
   2053   Value *getVectorOperand() { return Op<0>(); }
   2054   Value *getIndexOperand() { return Op<1>(); }
   2055   const Value *getVectorOperand() const { return Op<0>(); }
   2056   const Value *getIndexOperand() const { return Op<1>(); }
   2057 
   2058   VectorType *getVectorOperandType() const {
   2059     return cast<VectorType>(getVectorOperand()->getType());
   2060   }
   2061 
   2062   /// Transparently provide more efficient getOperand methods.
   2063   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   2064 
   2065   // Methods for support type inquiry through isa, cast, and dyn_cast:
   2066   static inline bool classof(const Instruction *I) {
   2067     return I->getOpcode() == Instruction::ExtractElement;
   2068   }
   2069   static inline bool classof(const Value *V) {
   2070     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   2071   }
   2072 };
   2073 
   2074 template <>
   2075 struct OperandTraits<ExtractElementInst> :
   2076   public FixedNumOperandTraits<ExtractElementInst, 2> {
   2077 };
   2078 
   2079 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(ExtractElementInst, Value)
   2080 
   2081 //===----------------------------------------------------------------------===//
   2082 //                                InsertElementInst Class
   2083 //===----------------------------------------------------------------------===//
   2084 
   2085 /// InsertElementInst - This instruction inserts a single (scalar)
   2086 /// element into a VectorType value
   2087 ///
   2088 class InsertElementInst : public Instruction {
   2089   InsertElementInst(Value *Vec, Value *NewElt, Value *Idx,
   2090                     const Twine &NameStr = "",
   2091                     Instruction *InsertBefore = nullptr);
   2092   InsertElementInst(Value *Vec, Value *NewElt, Value *Idx, const Twine &NameStr,
   2093                     BasicBlock *InsertAtEnd);
   2094 
   2095 protected:
   2096   // Note: Instruction needs to be a friend here to call cloneImpl.
   2097   friend class Instruction;
   2098   InsertElementInst *cloneImpl() const;
   2099 
   2100 public:
   2101   static InsertElementInst *Create(Value *Vec, Value *NewElt, Value *Idx,
   2102                                    const Twine &NameStr = "",
   2103                                    Instruction *InsertBefore = nullptr) {
   2104     return new(3) InsertElementInst(Vec, NewElt, Idx, NameStr, InsertBefore);
   2105   }
   2106   static InsertElementInst *Create(Value *Vec, Value *NewElt, Value *Idx,
   2107                                    const Twine &NameStr,
   2108                                    BasicBlock *InsertAtEnd) {
   2109     return new(3) InsertElementInst(Vec, NewElt, Idx, NameStr, InsertAtEnd);
   2110   }
   2111 
   2112   /// isValidOperands - Return true if an insertelement instruction can be
   2113   /// formed with the specified operands.
   2114   static bool isValidOperands(const Value *Vec, const Value *NewElt,
   2115                               const Value *Idx);
   2116 
   2117   /// getType - Overload to return most specific vector type.
   2118   ///
   2119   VectorType *getType() const {
   2120     return cast<VectorType>(Instruction::getType());
   2121   }
   2122 
   2123   /// Transparently provide more efficient getOperand methods.
   2124   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   2125 
   2126   // Methods for support type inquiry through isa, cast, and dyn_cast:
   2127   static inline bool classof(const Instruction *I) {
   2128     return I->getOpcode() == Instruction::InsertElement;
   2129   }
   2130   static inline bool classof(const Value *V) {
   2131     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   2132   }
   2133 };
   2134 
   2135 template <>
   2136 struct OperandTraits<InsertElementInst> :
   2137   public FixedNumOperandTraits<InsertElementInst, 3> {
   2138 };
   2139 
   2140 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(InsertElementInst, Value)
   2141 
   2142 //===----------------------------------------------------------------------===//
   2143 //                           ShuffleVectorInst Class
   2144 //===----------------------------------------------------------------------===//
   2145 
   2146 /// ShuffleVectorInst - This instruction constructs a fixed permutation of two
   2147 /// input vectors.
   2148 ///
   2149 class ShuffleVectorInst : public Instruction {
   2150 protected:
   2151   // Note: Instruction needs to be a friend here to call cloneImpl.
   2152   friend class Instruction;
   2153   ShuffleVectorInst *cloneImpl() const;
   2154 
   2155 public:
   2156   // allocate space for exactly three operands
   2157   void *operator new(size_t s) {
   2158     return User::operator new(s, 3);
   2159   }
   2160   ShuffleVectorInst(Value *V1, Value *V2, Value *Mask,
   2161                     const Twine &NameStr = "",
   2162                     Instruction *InsertBefor = nullptr);
   2163   ShuffleVectorInst(Value *V1, Value *V2, Value *Mask,
   2164                     const Twine &NameStr, BasicBlock *InsertAtEnd);
   2165 
   2166   /// isValidOperands - Return true if a shufflevector instruction can be
   2167   /// formed with the specified operands.
   2168   static bool isValidOperands(const Value *V1, const Value *V2,
   2169                               const Value *Mask);
   2170 
   2171   /// getType - Overload to return most specific vector type.
   2172   ///
   2173   VectorType *getType() const {
   2174     return cast<VectorType>(Instruction::getType());
   2175   }
   2176 
   2177   /// Transparently provide more efficient getOperand methods.
   2178   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   2179 
   2180   Constant *getMask() const {
   2181     return cast<Constant>(getOperand(2));
   2182   }
   2183 
   2184   /// getMaskValue - Return the index from the shuffle mask for the specified
   2185   /// output result.  This is either -1 if the element is undef or a number less
   2186   /// than 2*numelements.
   2187   static int getMaskValue(Constant *Mask, unsigned i);
   2188 
   2189   int getMaskValue(unsigned i) const {
   2190     return getMaskValue(getMask(), i);
   2191   }
   2192 
   2193   /// getShuffleMask - Return the full mask for this instruction, where each
   2194   /// element is the element number and undef's are returned as -1.
   2195   static void getShuffleMask(Constant *Mask, SmallVectorImpl<int> &Result);
   2196 
   2197   void getShuffleMask(SmallVectorImpl<int> &Result) const {
   2198     return getShuffleMask(getMask(), Result);
   2199   }
   2200 
   2201   SmallVector<int, 16> getShuffleMask() const {
   2202     SmallVector<int, 16> Mask;
   2203     getShuffleMask(Mask);
   2204     return Mask;
   2205   }
   2206 
   2207   // Methods for support type inquiry through isa, cast, and dyn_cast:
   2208   static inline bool classof(const Instruction *I) {
   2209     return I->getOpcode() == Instruction::ShuffleVector;
   2210   }
   2211   static inline bool classof(const Value *V) {
   2212     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   2213   }
   2214 };
   2215 
   2216 template <>
   2217 struct OperandTraits<ShuffleVectorInst> :
   2218   public FixedNumOperandTraits<ShuffleVectorInst, 3> {
   2219 };
   2220 
   2221 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(ShuffleVectorInst, Value)
   2222 
   2223 //===----------------------------------------------------------------------===//
   2224 //                                ExtractValueInst Class
   2225 //===----------------------------------------------------------------------===//
   2226 
   2227 /// ExtractValueInst - This instruction extracts a struct member or array
   2228 /// element value from an aggregate value.
   2229 ///
   2230 class ExtractValueInst : public UnaryInstruction {
   2231   SmallVector<unsigned, 4> Indices;
   2232 
   2233   ExtractValueInst(const ExtractValueInst &EVI);
   2234   void init(ArrayRef<unsigned> Idxs, const Twine &NameStr);
   2235 
   2236   /// Constructors - Create a extractvalue instruction with a base aggregate
   2237   /// value and a list of indices.  The first ctor can optionally insert before
   2238   /// an existing instruction, the second appends the new instruction to the
   2239   /// specified BasicBlock.
   2240   inline ExtractValueInst(Value *Agg,
   2241                           ArrayRef<unsigned> Idxs,
   2242                           const Twine &NameStr,
   2243                           Instruction *InsertBefore);
   2244   inline ExtractValueInst(Value *Agg,
   2245                           ArrayRef<unsigned> Idxs,
   2246                           const Twine &NameStr, BasicBlock *InsertAtEnd);
   2247 
   2248   // allocate space for exactly one operand
   2249   void *operator new(size_t s) { return User::operator new(s, 1); }
   2250 
   2251 protected:
   2252   // Note: Instruction needs to be a friend here to call cloneImpl.
   2253   friend class Instruction;
   2254   ExtractValueInst *cloneImpl() const;
   2255 
   2256 public:
   2257   static ExtractValueInst *Create(Value *Agg,
   2258                                   ArrayRef<unsigned> Idxs,
   2259                                   const Twine &NameStr = "",
   2260                                   Instruction *InsertBefore = nullptr) {
   2261     return new
   2262       ExtractValueInst(Agg, Idxs, NameStr, InsertBefore);
   2263   }
   2264   static ExtractValueInst *Create(Value *Agg,
   2265                                   ArrayRef<unsigned> Idxs,
   2266                                   const Twine &NameStr,
   2267                                   BasicBlock *InsertAtEnd) {
   2268     return new ExtractValueInst(Agg, Idxs, NameStr, InsertAtEnd);
   2269   }
   2270 
   2271   /// getIndexedType - Returns the type of the element that would be extracted
   2272   /// with an extractvalue instruction with the specified parameters.
   2273   ///
   2274   /// Null is returned if the indices are invalid for the specified type.
   2275   static Type *getIndexedType(Type *Agg, ArrayRef<unsigned> Idxs);
   2276 
   2277   typedef const unsigned* idx_iterator;
   2278   inline idx_iterator idx_begin() const { return Indices.begin(); }
   2279   inline idx_iterator idx_end()   const { return Indices.end(); }
   2280   inline iterator_range<idx_iterator> indices() const {
   2281     return make_range(idx_begin(), idx_end());
   2282   }
   2283 
   2284   Value *getAggregateOperand() {
   2285     return getOperand(0);
   2286   }
   2287   const Value *getAggregateOperand() const {
   2288     return getOperand(0);
   2289   }
   2290   static unsigned getAggregateOperandIndex() {
   2291     return 0U;                      // get index for modifying correct operand
   2292   }
   2293 
   2294   ArrayRef<unsigned> getIndices() const {
   2295     return Indices;
   2296   }
   2297 
   2298   unsigned getNumIndices() const {
   2299     return (unsigned)Indices.size();
   2300   }
   2301 
   2302   bool hasIndices() const {
   2303     return true;
   2304   }
   2305 
   2306   // Methods for support type inquiry through isa, cast, and dyn_cast:
   2307   static inline bool classof(const Instruction *I) {
   2308     return I->getOpcode() == Instruction::ExtractValue;
   2309   }
   2310   static inline bool classof(const Value *V) {
   2311     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   2312   }
   2313 };
   2314 
   2315 ExtractValueInst::ExtractValueInst(Value *Agg,
   2316                                    ArrayRef<unsigned> Idxs,
   2317                                    const Twine &NameStr,
   2318                                    Instruction *InsertBefore)
   2319   : UnaryInstruction(checkGEPType(getIndexedType(Agg->getType(), Idxs)),
   2320                      ExtractValue, Agg, InsertBefore) {
   2321   init(Idxs, NameStr);
   2322 }
   2323 ExtractValueInst::ExtractValueInst(Value *Agg,
   2324                                    ArrayRef<unsigned> Idxs,
   2325                                    const Twine &NameStr,
   2326                                    BasicBlock *InsertAtEnd)
   2327   : UnaryInstruction(checkGEPType(getIndexedType(Agg->getType(), Idxs)),
   2328                      ExtractValue, Agg, InsertAtEnd) {
   2329   init(Idxs, NameStr);
   2330 }
   2331 
   2332 //===----------------------------------------------------------------------===//
   2333 //                                InsertValueInst Class
   2334 //===----------------------------------------------------------------------===//
   2335 
   2336 /// InsertValueInst - This instruction inserts a struct field of array element
   2337 /// value into an aggregate value.
   2338 ///
   2339 class InsertValueInst : public Instruction {
   2340   SmallVector<unsigned, 4> Indices;
   2341 
   2342   void *operator new(size_t, unsigned) = delete;
   2343   InsertValueInst(const InsertValueInst &IVI);
   2344   void init(Value *Agg, Value *Val, ArrayRef<unsigned> Idxs,
   2345             const Twine &NameStr);
   2346 
   2347   /// Constructors - Create a insertvalue instruction with a base aggregate
   2348   /// value, a value to insert, and a list of indices.  The first ctor can
   2349   /// optionally insert before an existing instruction, the second appends
   2350   /// the new instruction to the specified BasicBlock.
   2351   inline InsertValueInst(Value *Agg, Value *Val,
   2352                          ArrayRef<unsigned> Idxs,
   2353                          const Twine &NameStr,
   2354                          Instruction *InsertBefore);
   2355   inline InsertValueInst(Value *Agg, Value *Val,
   2356                          ArrayRef<unsigned> Idxs,
   2357                          const Twine &NameStr, BasicBlock *InsertAtEnd);
   2358 
   2359   /// Constructors - These two constructors are convenience methods because one
   2360   /// and two index insertvalue instructions are so common.
   2361   InsertValueInst(Value *Agg, Value *Val, unsigned Idx,
   2362                   const Twine &NameStr = "",
   2363                   Instruction *InsertBefore = nullptr);
   2364   InsertValueInst(Value *Agg, Value *Val, unsigned Idx, const Twine &NameStr,
   2365                   BasicBlock *InsertAtEnd);
   2366 
   2367 protected:
   2368   // Note: Instruction needs to be a friend here to call cloneImpl.
   2369   friend class Instruction;
   2370   InsertValueInst *cloneImpl() const;
   2371 
   2372 public:
   2373   // allocate space for exactly two operands
   2374   void *operator new(size_t s) {
   2375     return User::operator new(s, 2);
   2376   }
   2377 
   2378   static InsertValueInst *Create(Value *Agg, Value *Val,
   2379                                  ArrayRef<unsigned> Idxs,
   2380                                  const Twine &NameStr = "",
   2381                                  Instruction *InsertBefore = nullptr) {
   2382     return new InsertValueInst(Agg, Val, Idxs, NameStr, InsertBefore);
   2383   }
   2384   static InsertValueInst *Create(Value *Agg, Value *Val,
   2385                                  ArrayRef<unsigned> Idxs,
   2386                                  const Twine &NameStr,
   2387                                  BasicBlock *InsertAtEnd) {
   2388     return new InsertValueInst(Agg, Val, Idxs, NameStr, InsertAtEnd);
   2389   }
   2390 
   2391   /// Transparently provide more efficient getOperand methods.
   2392   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   2393 
   2394   typedef const unsigned* idx_iterator;
   2395   inline idx_iterator idx_begin() const { return Indices.begin(); }
   2396   inline idx_iterator idx_end()   const { return Indices.end(); }
   2397   inline iterator_range<idx_iterator> indices() const {
   2398     return make_range(idx_begin(), idx_end());
   2399   }
   2400 
   2401   Value *getAggregateOperand() {
   2402     return getOperand(0);
   2403   }
   2404   const Value *getAggregateOperand() const {
   2405     return getOperand(0);
   2406   }
   2407   static unsigned getAggregateOperandIndex() {
   2408     return 0U;                      // get index for modifying correct operand
   2409   }
   2410 
   2411   Value *getInsertedValueOperand() {
   2412     return getOperand(1);
   2413   }
   2414   const Value *getInsertedValueOperand() const {
   2415     return getOperand(1);
   2416   }
   2417   static unsigned getInsertedValueOperandIndex() {
   2418     return 1U;                      // get index for modifying correct operand
   2419   }
   2420 
   2421   ArrayRef<unsigned> getIndices() const {
   2422     return Indices;
   2423   }
   2424 
   2425   unsigned getNumIndices() const {
   2426     return (unsigned)Indices.size();
   2427   }
   2428 
   2429   bool hasIndices() const {
   2430     return true;
   2431   }
   2432 
   2433   // Methods for support type inquiry through isa, cast, and dyn_cast:
   2434   static inline bool classof(const Instruction *I) {
   2435     return I->getOpcode() == Instruction::InsertValue;
   2436   }
   2437   static inline bool classof(const Value *V) {
   2438     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   2439   }
   2440 };
   2441 
   2442 template <>
   2443 struct OperandTraits<InsertValueInst> :
   2444   public FixedNumOperandTraits<InsertValueInst, 2> {
   2445 };
   2446 
   2447 InsertValueInst::InsertValueInst(Value *Agg,
   2448                                  Value *Val,
   2449                                  ArrayRef<unsigned> Idxs,
   2450                                  const Twine &NameStr,
   2451                                  Instruction *InsertBefore)
   2452   : Instruction(Agg->getType(), InsertValue,
   2453                 OperandTraits<InsertValueInst>::op_begin(this),
   2454                 2, InsertBefore) {
   2455   init(Agg, Val, Idxs, NameStr);
   2456 }
   2457 InsertValueInst::InsertValueInst(Value *Agg,
   2458                                  Value *Val,
   2459                                  ArrayRef<unsigned> Idxs,
   2460                                  const Twine &NameStr,
   2461                                  BasicBlock *InsertAtEnd)
   2462   : Instruction(Agg->getType(), InsertValue,
   2463                 OperandTraits<InsertValueInst>::op_begin(this),
   2464                 2, InsertAtEnd) {
   2465   init(Agg, Val, Idxs, NameStr);
   2466 }
   2467 
   2468 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(InsertValueInst, Value)
   2469 
   2470 //===----------------------------------------------------------------------===//
   2471 //                               PHINode Class
   2472 //===----------------------------------------------------------------------===//
   2473 
   2474 // PHINode - The PHINode class is used to represent the magical mystical PHI
   2475 // node, that can not exist in nature, but can be synthesized in a computer
   2476 // scientist's overactive imagination.
   2477 //
   2478 class PHINode : public Instruction {
   2479   void anchor() override;
   2480 
   2481   void *operator new(size_t, unsigned) = delete;
   2482   /// ReservedSpace - The number of operands actually allocated.  NumOperands is
   2483   /// the number actually in use.
   2484   unsigned ReservedSpace;
   2485   PHINode(const PHINode &PN);
   2486   // allocate space for exactly zero operands
   2487   void *operator new(size_t s) {
   2488     return User::operator new(s);
   2489   }
   2490   explicit PHINode(Type *Ty, unsigned NumReservedValues,
   2491                    const Twine &NameStr = "",
   2492                    Instruction *InsertBefore = nullptr)
   2493     : Instruction(Ty, Instruction::PHI, nullptr, 0, InsertBefore),
   2494       ReservedSpace(NumReservedValues) {
   2495     setName(NameStr);
   2496     allocHungoffUses(ReservedSpace);
   2497   }
   2498 
   2499   PHINode(Type *Ty, unsigned NumReservedValues, const Twine &NameStr,
   2500           BasicBlock *InsertAtEnd)
   2501     : Instruction(Ty, Instruction::PHI, nullptr, 0, InsertAtEnd),
   2502       ReservedSpace(NumReservedValues) {
   2503     setName(NameStr);
   2504     allocHungoffUses(ReservedSpace);
   2505   }
   2506 
   2507 protected:
   2508   // allocHungoffUses - this is more complicated than the generic
   2509   // User::allocHungoffUses, because we have to allocate Uses for the incoming
   2510   // values and pointers to the incoming blocks, all in one allocation.
   2511   void allocHungoffUses(unsigned N) {
   2512     User::allocHungoffUses(N, /* IsPhi */ true);
   2513   }
   2514 
   2515   // Note: Instruction needs to be a friend here to call cloneImpl.
   2516   friend class Instruction;
   2517   PHINode *cloneImpl() const;
   2518 
   2519 public:
   2520   /// Constructors - NumReservedValues is a hint for the number of incoming
   2521   /// edges that this phi node will have (use 0 if you really have no idea).
   2522   static PHINode *Create(Type *Ty, unsigned NumReservedValues,
   2523                          const Twine &NameStr = "",
   2524                          Instruction *InsertBefore = nullptr) {
   2525     return new PHINode(Ty, NumReservedValues, NameStr, InsertBefore);
   2526   }
   2527   static PHINode *Create(Type *Ty, unsigned NumReservedValues,
   2528                          const Twine &NameStr, BasicBlock *InsertAtEnd) {
   2529     return new PHINode(Ty, NumReservedValues, NameStr, InsertAtEnd);
   2530   }
   2531 
   2532   /// Provide fast operand accessors
   2533   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   2534 
   2535   // Block iterator interface. This provides access to the list of incoming
   2536   // basic blocks, which parallels the list of incoming values.
   2537 
   2538   typedef BasicBlock **block_iterator;
   2539   typedef BasicBlock * const *const_block_iterator;
   2540 
   2541   block_iterator block_begin() {
   2542     Use::UserRef *ref =
   2543       reinterpret_cast<Use::UserRef*>(op_begin() + ReservedSpace);
   2544     return reinterpret_cast<block_iterator>(ref + 1);
   2545   }
   2546 
   2547   const_block_iterator block_begin() const {
   2548     const Use::UserRef *ref =
   2549       reinterpret_cast<const Use::UserRef*>(op_begin() + ReservedSpace);
   2550     return reinterpret_cast<const_block_iterator>(ref + 1);
   2551   }
   2552 
   2553   block_iterator block_end() {
   2554     return block_begin() + getNumOperands();
   2555   }
   2556 
   2557   const_block_iterator block_end() const {
   2558     return block_begin() + getNumOperands();
   2559   }
   2560 
   2561   iterator_range<block_iterator> blocks() {
   2562     return make_range(block_begin(), block_end());
   2563   }
   2564 
   2565   iterator_range<const_block_iterator> blocks() const {
   2566     return make_range(block_begin(), block_end());
   2567   }
   2568 
   2569   op_range incoming_values() { return operands(); }
   2570 
   2571   const_op_range incoming_values() const { return operands(); }
   2572 
   2573   /// getNumIncomingValues - Return the number of incoming edges
   2574   ///
   2575   unsigned getNumIncomingValues() const { return getNumOperands(); }
   2576 
   2577   /// getIncomingValue - Return incoming value number x
   2578   ///
   2579   Value *getIncomingValue(unsigned i) const {
   2580     return getOperand(i);
   2581   }
   2582   void setIncomingValue(unsigned i, Value *V) {
   2583     assert(V && "PHI node got a null value!");
   2584     assert(getType() == V->getType() &&
   2585            "All operands to PHI node must be the same type as the PHI node!");
   2586     setOperand(i, V);
   2587   }
   2588   static unsigned getOperandNumForIncomingValue(unsigned i) {
   2589     return i;
   2590   }
   2591   static unsigned getIncomingValueNumForOperand(unsigned i) {
   2592     return i;
   2593   }
   2594 
   2595   /// getIncomingBlock - Return incoming basic block number @p i.
   2596   ///
   2597   BasicBlock *getIncomingBlock(unsigned i) const {
   2598     return block_begin()[i];
   2599   }
   2600 
   2601   /// getIncomingBlock - Return incoming basic block corresponding
   2602   /// to an operand of the PHI.
   2603   ///
   2604   BasicBlock *getIncomingBlock(const Use &U) const {
   2605     assert(this == U.getUser() && "Iterator doesn't point to PHI's Uses?");
   2606     return getIncomingBlock(unsigned(&U - op_begin()));
   2607   }
   2608 
   2609   /// getIncomingBlock - Return incoming basic block corresponding
   2610   /// to value use iterator.
   2611   ///
   2612   BasicBlock *getIncomingBlock(Value::const_user_iterator I) const {
   2613     return getIncomingBlock(I.getUse());
   2614   }
   2615 
   2616   void setIncomingBlock(unsigned i, BasicBlock *BB) {
   2617     assert(BB && "PHI node got a null basic block!");
   2618     block_begin()[i] = BB;
   2619   }
   2620 
   2621   /// addIncoming - Add an incoming value to the end of the PHI list
   2622   ///
   2623   void addIncoming(Value *V, BasicBlock *BB) {
   2624     if (getNumOperands() == ReservedSpace)
   2625       growOperands();  // Get more space!
   2626     // Initialize some new operands.
   2627     setNumHungOffUseOperands(getNumOperands() + 1);
   2628     setIncomingValue(getNumOperands() - 1, V);
   2629     setIncomingBlock(getNumOperands() - 1, BB);
   2630   }
   2631 
   2632   /// removeIncomingValue - Remove an incoming value.  This is useful if a
   2633   /// predecessor basic block is deleted.  The value removed is returned.
   2634   ///
   2635   /// If the last incoming value for a PHI node is removed (and DeletePHIIfEmpty
   2636   /// is true), the PHI node is destroyed and any uses of it are replaced with
   2637   /// dummy values.  The only time there should be zero incoming values to a PHI
   2638   /// node is when the block is dead, so this strategy is sound.
   2639   ///
   2640   Value *removeIncomingValue(unsigned Idx, bool DeletePHIIfEmpty = true);
   2641 
   2642   Value *removeIncomingValue(const BasicBlock *BB, bool DeletePHIIfEmpty=true) {
   2643     int Idx = getBasicBlockIndex(BB);
   2644     assert(Idx >= 0 && "Invalid basic block argument to remove!");
   2645     return removeIncomingValue(Idx, DeletePHIIfEmpty);
   2646   }
   2647 
   2648   /// getBasicBlockIndex - Return the first index of the specified basic
   2649   /// block in the value list for this PHI.  Returns -1 if no instance.
   2650   ///
   2651   int getBasicBlockIndex(const BasicBlock *BB) const {
   2652     for (unsigned i = 0, e = getNumOperands(); i != e; ++i)
   2653       if (block_begin()[i] == BB)
   2654         return i;
   2655     return -1;
   2656   }
   2657 
   2658   Value *getIncomingValueForBlock(const BasicBlock *BB) const {
   2659     int Idx = getBasicBlockIndex(BB);
   2660     assert(Idx >= 0 && "Invalid basic block argument!");
   2661     return getIncomingValue(Idx);
   2662   }
   2663 
   2664   /// hasConstantValue - If the specified PHI node always merges together the
   2665   /// same value, return the value, otherwise return null.
   2666   Value *hasConstantValue() const;
   2667 
   2668   /// hasConstantOrUndefValue - Whether the specified PHI node always merges
   2669   /// together the same value, assuming undefs are equal to a unique
   2670   /// non-undef value.
   2671   bool hasConstantOrUndefValue() const;
   2672 
   2673   /// Methods for support type inquiry through isa, cast, and dyn_cast:
   2674   static inline bool classof(const Instruction *I) {
   2675     return I->getOpcode() == Instruction::PHI;
   2676   }
   2677   static inline bool classof(const Value *V) {
   2678     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   2679   }
   2680 
   2681 private:
   2682   void growOperands();
   2683 };
   2684 
   2685 template <>
   2686 struct OperandTraits<PHINode> : public HungoffOperandTraits<2> {
   2687 };
   2688 
   2689 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(PHINode, Value)
   2690 
   2691 //===----------------------------------------------------------------------===//
   2692 //                           LandingPadInst Class
   2693 //===----------------------------------------------------------------------===//
   2694 
   2695 //===---------------------------------------------------------------------------
   2696 /// LandingPadInst - The landingpad instruction holds all of the information
   2697 /// necessary to generate correct exception handling. The landingpad instruction
   2698 /// cannot be moved from the top of a landing pad block, which itself is
   2699 /// accessible only from the 'unwind' edge of an invoke. This uses the
   2700 /// SubclassData field in Value to store whether or not the landingpad is a
   2701 /// cleanup.
   2702 ///
   2703 class LandingPadInst : public Instruction {
   2704   /// ReservedSpace - The number of operands actually allocated.  NumOperands is
   2705   /// the number actually in use.
   2706   unsigned ReservedSpace;
   2707   LandingPadInst(const LandingPadInst &LP);
   2708 
   2709 public:
   2710   enum ClauseType { Catch, Filter };
   2711 
   2712 private:
   2713   void *operator new(size_t, unsigned) = delete;
   2714   // Allocate space for exactly zero operands.
   2715   void *operator new(size_t s) {
   2716     return User::operator new(s);
   2717   }
   2718   void growOperands(unsigned Size);
   2719   void init(unsigned NumReservedValues, const Twine &NameStr);
   2720 
   2721   explicit LandingPadInst(Type *RetTy, unsigned NumReservedValues,
   2722                           const Twine &NameStr, Instruction *InsertBefore);
   2723   explicit LandingPadInst(Type *RetTy, unsigned NumReservedValues,
   2724                           const Twine &NameStr, BasicBlock *InsertAtEnd);
   2725 
   2726 protected:
   2727   // Note: Instruction needs to be a friend here to call cloneImpl.
   2728   friend class Instruction;
   2729   LandingPadInst *cloneImpl() const;
   2730 
   2731 public:
   2732   /// Constructors - NumReservedClauses is a hint for the number of incoming
   2733   /// clauses that this landingpad will have (use 0 if you really have no idea).
   2734   static LandingPadInst *Create(Type *RetTy, unsigned NumReservedClauses,
   2735                                 const Twine &NameStr = "",
   2736                                 Instruction *InsertBefore = nullptr);
   2737   static LandingPadInst *Create(Type *RetTy, unsigned NumReservedClauses,
   2738                                 const Twine &NameStr, BasicBlock *InsertAtEnd);
   2739 
   2740   /// Provide fast operand accessors
   2741   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   2742 
   2743   /// isCleanup - Return 'true' if this landingpad instruction is a
   2744   /// cleanup. I.e., it should be run when unwinding even if its landing pad
   2745   /// doesn't catch the exception.
   2746   bool isCleanup() const { return getSubclassDataFromInstruction() & 1; }
   2747 
   2748   /// setCleanup - Indicate that this landingpad instruction is a cleanup.
   2749   void setCleanup(bool V) {
   2750     setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) |
   2751                                (V ? 1 : 0));
   2752   }
   2753 
   2754   /// Add a catch or filter clause to the landing pad.
   2755   void addClause(Constant *ClauseVal);
   2756 
   2757   /// Get the value of the clause at index Idx. Use isCatch/isFilter to
   2758   /// determine what type of clause this is.
   2759   Constant *getClause(unsigned Idx) const {
   2760     return cast<Constant>(getOperandList()[Idx]);
   2761   }
   2762 
   2763   /// isCatch - Return 'true' if the clause and index Idx is a catch clause.
   2764   bool isCatch(unsigned Idx) const {
   2765     return !isa<ArrayType>(getOperandList()[Idx]->getType());
   2766   }
   2767 
   2768   /// isFilter - Return 'true' if the clause and index Idx is a filter clause.
   2769   bool isFilter(unsigned Idx) const {
   2770     return isa<ArrayType>(getOperandList()[Idx]->getType());
   2771   }
   2772 
   2773   /// getNumClauses - Get the number of clauses for this landing pad.
   2774   unsigned getNumClauses() const { return getNumOperands(); }
   2775 
   2776   /// reserveClauses - Grow the size of the operand list to accommodate the new
   2777   /// number of clauses.
   2778   void reserveClauses(unsigned Size) { growOperands(Size); }
   2779 
   2780   // Methods for support type inquiry through isa, cast, and dyn_cast:
   2781   static inline bool classof(const Instruction *I) {
   2782     return I->getOpcode() == Instruction::LandingPad;
   2783   }
   2784   static inline bool classof(const Value *V) {
   2785     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   2786   }
   2787 };
   2788 
   2789 template <>
   2790 struct OperandTraits<LandingPadInst> : public HungoffOperandTraits<1> {
   2791 };
   2792 
   2793 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(LandingPadInst, Value)
   2794 
   2795 //===----------------------------------------------------------------------===//
   2796 //                               ReturnInst Class
   2797 //===----------------------------------------------------------------------===//
   2798 
   2799 //===---------------------------------------------------------------------------
   2800 /// ReturnInst - Return a value (possibly void), from a function.  Execution
   2801 /// does not continue in this function any longer.
   2802 ///
   2803 class ReturnInst : public TerminatorInst {
   2804   ReturnInst(const ReturnInst &RI);
   2805 
   2806 private:
   2807   // ReturnInst constructors:
   2808   // ReturnInst()                  - 'ret void' instruction
   2809   // ReturnInst(    null)          - 'ret void' instruction
   2810   // ReturnInst(Value* X)          - 'ret X'    instruction
   2811   // ReturnInst(    null, Inst *I) - 'ret void' instruction, insert before I
   2812   // ReturnInst(Value* X, Inst *I) - 'ret X'    instruction, insert before I
   2813   // ReturnInst(    null, BB *B)   - 'ret void' instruction, insert @ end of B
   2814   // ReturnInst(Value* X, BB *B)   - 'ret X'    instruction, insert @ end of B
   2815   //
   2816   // NOTE: If the Value* passed is of type void then the constructor behaves as
   2817   // if it was passed NULL.
   2818   explicit ReturnInst(LLVMContext &C, Value *retVal = nullptr,
   2819                       Instruction *InsertBefore = nullptr);
   2820   ReturnInst(LLVMContext &C, Value *retVal, BasicBlock *InsertAtEnd);
   2821   explicit ReturnInst(LLVMContext &C, BasicBlock *InsertAtEnd);
   2822 
   2823 protected:
   2824   // Note: Instruction needs to be a friend here to call cloneImpl.
   2825   friend class Instruction;
   2826   ReturnInst *cloneImpl() const;
   2827 
   2828 public:
   2829   static ReturnInst* Create(LLVMContext &C, Value *retVal = nullptr,
   2830                             Instruction *InsertBefore = nullptr) {
   2831     return new(!!retVal) ReturnInst(C, retVal, InsertBefore);
   2832   }
   2833   static ReturnInst* Create(LLVMContext &C, Value *retVal,
   2834                             BasicBlock *InsertAtEnd) {
   2835     return new(!!retVal) ReturnInst(C, retVal, InsertAtEnd);
   2836   }
   2837   static ReturnInst* Create(LLVMContext &C, BasicBlock *InsertAtEnd) {
   2838     return new(0) ReturnInst(C, InsertAtEnd);
   2839   }
   2840   ~ReturnInst() override;
   2841 
   2842   /// Provide fast operand accessors
   2843   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   2844 
   2845   /// Convenience accessor. Returns null if there is no return value.
   2846   Value *getReturnValue() const {
   2847     return getNumOperands() != 0 ? getOperand(0) : nullptr;
   2848   }
   2849 
   2850   unsigned getNumSuccessors() const { return 0; }
   2851 
   2852   // Methods for support type inquiry through isa, cast, and dyn_cast:
   2853   static inline bool classof(const Instruction *I) {
   2854     return (I->getOpcode() == Instruction::Ret);
   2855   }
   2856   static inline bool classof(const Value *V) {
   2857     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   2858   }
   2859 
   2860 private:
   2861   BasicBlock *getSuccessorV(unsigned idx) const override;
   2862   unsigned getNumSuccessorsV() const override;
   2863   void setSuccessorV(unsigned idx, BasicBlock *B) override;
   2864 };
   2865 
   2866 template <>
   2867 struct OperandTraits<ReturnInst> : public VariadicOperandTraits<ReturnInst> {
   2868 };
   2869 
   2870 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(ReturnInst, Value)
   2871 
   2872 //===----------------------------------------------------------------------===//
   2873 //                               BranchInst Class
   2874 //===----------------------------------------------------------------------===//
   2875 
   2876 //===---------------------------------------------------------------------------
   2877 /// BranchInst - Conditional or Unconditional Branch instruction.
   2878 ///
   2879 class BranchInst : public TerminatorInst {
   2880   /// Ops list - Branches are strange.  The operands are ordered:
   2881   ///  [Cond, FalseDest,] TrueDest.  This makes some accessors faster because
   2882   /// they don't have to check for cond/uncond branchness. These are mostly
   2883   /// accessed relative from op_end().
   2884   BranchInst(const BranchInst &BI);
   2885   void AssertOK();
   2886   // BranchInst constructors (where {B, T, F} are blocks, and C is a condition):
   2887   // BranchInst(BB *B)                           - 'br B'
   2888   // BranchInst(BB* T, BB *F, Value *C)          - 'br C, T, F'
   2889   // BranchInst(BB* B, Inst *I)                  - 'br B'        insert before I
   2890   // BranchInst(BB* T, BB *F, Value *C, Inst *I) - 'br C, T, F', insert before I
   2891   // BranchInst(BB* B, BB *I)                    - 'br B'        insert at end
   2892   // BranchInst(BB* T, BB *F, Value *C, BB *I)   - 'br C, T, F', insert at end
   2893   explicit BranchInst(BasicBlock *IfTrue, Instruction *InsertBefore = nullptr);
   2894   BranchInst(BasicBlock *IfTrue, BasicBlock *IfFalse, Value *Cond,
   2895              Instruction *InsertBefore = nullptr);
   2896   BranchInst(BasicBlock *IfTrue, BasicBlock *InsertAtEnd);
   2897   BranchInst(BasicBlock *IfTrue, BasicBlock *IfFalse, Value *Cond,
   2898              BasicBlock *InsertAtEnd);
   2899 
   2900 protected:
   2901   // Note: Instruction needs to be a friend here to call cloneImpl.
   2902   friend class Instruction;
   2903   BranchInst *cloneImpl() const;
   2904 
   2905 public:
   2906   static BranchInst *Create(BasicBlock *IfTrue,
   2907                             Instruction *InsertBefore = nullptr) {
   2908     return new(1) BranchInst(IfTrue, InsertBefore);
   2909   }
   2910   static BranchInst *Create(BasicBlock *IfTrue, BasicBlock *IfFalse,
   2911                             Value *Cond, Instruction *InsertBefore = nullptr) {
   2912     return new(3) BranchInst(IfTrue, IfFalse, Cond, InsertBefore);
   2913   }
   2914   static BranchInst *Create(BasicBlock *IfTrue, BasicBlock *InsertAtEnd) {
   2915     return new(1) BranchInst(IfTrue, InsertAtEnd);
   2916   }
   2917   static BranchInst *Create(BasicBlock *IfTrue, BasicBlock *IfFalse,
   2918                             Value *Cond, BasicBlock *InsertAtEnd) {
   2919     return new(3) BranchInst(IfTrue, IfFalse, Cond, InsertAtEnd);
   2920   }
   2921 
   2922   /// Transparently provide more efficient getOperand methods.
   2923   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   2924 
   2925   bool isUnconditional() const { return getNumOperands() == 1; }
   2926   bool isConditional()   const { return getNumOperands() == 3; }
   2927 
   2928   Value *getCondition() const {
   2929     assert(isConditional() && "Cannot get condition of an uncond branch!");
   2930     return Op<-3>();
   2931   }
   2932 
   2933   void setCondition(Value *V) {
   2934     assert(isConditional() && "Cannot set condition of unconditional branch!");
   2935     Op<-3>() = V;
   2936   }
   2937 
   2938   unsigned getNumSuccessors() const { return 1+isConditional(); }
   2939 
   2940   BasicBlock *getSuccessor(unsigned i) const {
   2941     assert(i < getNumSuccessors() && "Successor # out of range for Branch!");
   2942     return cast_or_null<BasicBlock>((&Op<-1>() - i)->get());
   2943   }
   2944 
   2945   void setSuccessor(unsigned idx, BasicBlock *NewSucc) {
   2946     assert(idx < getNumSuccessors() && "Successor # out of range for Branch!");
   2947     *(&Op<-1>() - idx) = NewSucc;
   2948   }
   2949 
   2950   /// \brief Swap the successors of this branch instruction.
   2951   ///
   2952   /// Swaps the successors of the branch instruction. This also swaps any
   2953   /// branch weight metadata associated with the instruction so that it
   2954   /// continues to map correctly to each operand.
   2955   void swapSuccessors();
   2956 
   2957   // Methods for support type inquiry through isa, cast, and dyn_cast:
   2958   static inline bool classof(const Instruction *I) {
   2959     return (I->getOpcode() == Instruction::Br);
   2960   }
   2961   static inline bool classof(const Value *V) {
   2962     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   2963   }
   2964 
   2965 private:
   2966   BasicBlock *getSuccessorV(unsigned idx) const override;
   2967   unsigned getNumSuccessorsV() const override;
   2968   void setSuccessorV(unsigned idx, BasicBlock *B) override;
   2969 };
   2970 
   2971 template <>
   2972 struct OperandTraits<BranchInst> : public VariadicOperandTraits<BranchInst, 1> {
   2973 };
   2974 
   2975 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(BranchInst, Value)
   2976 
   2977 //===----------------------------------------------------------------------===//
   2978 //                               SwitchInst Class
   2979 //===----------------------------------------------------------------------===//
   2980 
   2981 //===---------------------------------------------------------------------------
   2982 /// Multiway switch
   2983 ///
   2984 class SwitchInst : public TerminatorInst {
   2985   void *operator new(size_t, unsigned) = delete;
   2986   unsigned ReservedSpace;
   2987   // Operand[0]    = Value to switch on
   2988   // Operand[1]    = Default basic block destination
   2989   // Operand[2n  ] = Value to match
   2990   // Operand[2n+1] = BasicBlock to go to on match
   2991   SwitchInst(const SwitchInst &SI);
   2992   void init(Value *Value, BasicBlock *Default, unsigned NumReserved);
   2993   void growOperands();
   2994   // allocate space for exactly zero operands
   2995   void *operator new(size_t s) {
   2996     return User::operator new(s);
   2997   }
   2998   /// Create a new switch instruction, specifying a value to switch on and a
   2999   /// default destination. The number of additional cases can be specified here
   3000   /// to make memory allocation more efficient. This constructor can also
   3001   /// auto-insert before another instruction.
   3002   SwitchInst(Value *Value, BasicBlock *Default, unsigned NumCases,
   3003              Instruction *InsertBefore);
   3004 
   3005   /// Create a new switch instruction, specifying a value to switch on and a
   3006   /// default destination. The number of additional cases can be specified here
   3007   /// to make memory allocation more efficient. This constructor also
   3008   /// auto-inserts at the end of the specified BasicBlock.
   3009   SwitchInst(Value *Value, BasicBlock *Default, unsigned NumCases,
   3010              BasicBlock *InsertAtEnd);
   3011 
   3012 protected:
   3013   // Note: Instruction needs to be a friend here to call cloneImpl.
   3014   friend class Instruction;
   3015   SwitchInst *cloneImpl() const;
   3016 
   3017 public:
   3018   // -2
   3019   static const unsigned DefaultPseudoIndex = static_cast<unsigned>(~0L-1);
   3020 
   3021   template <class SwitchInstTy, class ConstantIntTy, class BasicBlockTy>
   3022   class CaseIteratorT {
   3023   protected:
   3024     SwitchInstTy *SI;
   3025     unsigned Index;
   3026 
   3027   public:
   3028     typedef CaseIteratorT<SwitchInstTy, ConstantIntTy, BasicBlockTy> Self;
   3029 
   3030     /// Initializes case iterator for given SwitchInst and for given
   3031     /// case number.
   3032     CaseIteratorT(SwitchInstTy *SI, unsigned CaseNum) {
   3033       this->SI = SI;
   3034       Index = CaseNum;
   3035     }
   3036 
   3037     /// Initializes case iterator for given SwitchInst and for given
   3038     /// TerminatorInst's successor index.
   3039     static Self fromSuccessorIndex(SwitchInstTy *SI, unsigned SuccessorIndex) {
   3040       assert(SuccessorIndex < SI->getNumSuccessors() &&
   3041              "Successor index # out of range!");
   3042       return SuccessorIndex != 0 ?
   3043              Self(SI, SuccessorIndex - 1) :
   3044              Self(SI, DefaultPseudoIndex);
   3045     }
   3046 
   3047     /// Resolves case value for current case.
   3048     ConstantIntTy *getCaseValue() {
   3049       assert(Index < SI->getNumCases() && "Index out the number of cases.");
   3050       return reinterpret_cast<ConstantIntTy*>(SI->getOperand(2 + Index*2));
   3051     }
   3052 
   3053     /// Resolves successor for current case.
   3054     BasicBlockTy *getCaseSuccessor() {
   3055       assert((Index < SI->getNumCases() ||
   3056               Index == DefaultPseudoIndex) &&
   3057              "Index out the number of cases.");
   3058       return SI->getSuccessor(getSuccessorIndex());
   3059     }
   3060 
   3061     /// Returns number of current case.
   3062     unsigned getCaseIndex() const { return Index; }
   3063 
   3064     /// Returns TerminatorInst's successor index for current case successor.
   3065     unsigned getSuccessorIndex() const {
   3066       assert((Index == DefaultPseudoIndex || Index < SI->getNumCases()) &&
   3067              "Index out the number of cases.");
   3068       return Index != DefaultPseudoIndex ? Index + 1 : 0;
   3069     }
   3070 
   3071     Self operator++() {
   3072       // Check index correctness after increment.
   3073       // Note: Index == getNumCases() means end().
   3074       assert(Index+1 <= SI->getNumCases() && "Index out the number of cases.");
   3075       ++Index;
   3076       return *this;
   3077     }
   3078     Self operator++(int) {
   3079       Self tmp = *this;
   3080       ++(*this);
   3081       return tmp;
   3082     }
   3083     Self operator--() {
   3084       // Check index correctness after decrement.
   3085       // Note: Index == getNumCases() means end().
   3086       // Also allow "-1" iterator here. That will became valid after ++.
   3087       assert((Index == 0 || Index-1 <= SI->getNumCases()) &&
   3088              "Index out the number of cases.");
   3089       --Index;
   3090       return *this;
   3091     }
   3092     Self operator--(int) {
   3093       Self tmp = *this;
   3094       --(*this);
   3095       return tmp;
   3096     }
   3097     bool operator==(const Self& RHS) const {
   3098       assert(RHS.SI == SI && "Incompatible operators.");
   3099       return RHS.Index == Index;
   3100     }
   3101     bool operator!=(const Self& RHS) const {
   3102       assert(RHS.SI == SI && "Incompatible operators.");
   3103       return RHS.Index != Index;
   3104     }
   3105     Self &operator*() {
   3106       return *this;
   3107     }
   3108   };
   3109 
   3110   typedef CaseIteratorT<const SwitchInst, const ConstantInt, const BasicBlock>
   3111     ConstCaseIt;
   3112 
   3113   class CaseIt : public CaseIteratorT<SwitchInst, ConstantInt, BasicBlock> {
   3114 
   3115     typedef CaseIteratorT<SwitchInst, ConstantInt, BasicBlock> ParentTy;
   3116 
   3117   public:
   3118     CaseIt(const ParentTy &Src) : ParentTy(Src) {}
   3119     CaseIt(SwitchInst *SI, unsigned CaseNum) : ParentTy(SI, CaseNum) {}
   3120 
   3121     /// Sets the new value for current case.
   3122     void setValue(ConstantInt *V) {
   3123       assert(Index < SI->getNumCases() && "Index out the number of cases.");
   3124       SI->setOperand(2 + Index*2, reinterpret_cast<Value*>(V));
   3125     }
   3126 
   3127     /// Sets the new successor for current case.
   3128     void setSuccessor(BasicBlock *S) {
   3129       SI->setSuccessor(getSuccessorIndex(), S);
   3130     }
   3131   };
   3132 
   3133   static SwitchInst *Create(Value *Value, BasicBlock *Default,
   3134                             unsigned NumCases,
   3135                             Instruction *InsertBefore = nullptr) {
   3136     return new SwitchInst(Value, Default, NumCases, InsertBefore);
   3137   }
   3138   static SwitchInst *Create(Value *Value, BasicBlock *Default,
   3139                             unsigned NumCases, BasicBlock *InsertAtEnd) {
   3140     return new SwitchInst(Value, Default, NumCases, InsertAtEnd);
   3141   }
   3142 
   3143   /// Provide fast operand accessors
   3144   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   3145 
   3146   // Accessor Methods for Switch stmt
   3147   Value *getCondition() const { return getOperand(0); }
   3148   void setCondition(Value *V) { setOperand(0, V); }
   3149 
   3150   BasicBlock *getDefaultDest() const {
   3151     return cast<BasicBlock>(getOperand(1));
   3152   }
   3153 
   3154   void setDefaultDest(BasicBlock *DefaultCase) {
   3155     setOperand(1, reinterpret_cast<Value*>(DefaultCase));
   3156   }
   3157 
   3158   /// Return the number of 'cases' in this switch instruction, excluding the
   3159   /// default case.
   3160   unsigned getNumCases() const {
   3161     return getNumOperands()/2 - 1;
   3162   }
   3163 
   3164   /// Returns a read/write iterator that points to the first case in the
   3165   /// SwitchInst.
   3166   CaseIt case_begin() {
   3167     return CaseIt(this, 0);
   3168   }
   3169   /// Returns a read-only iterator that points to the first case in the
   3170   /// SwitchInst.
   3171   ConstCaseIt case_begin() const {
   3172     return ConstCaseIt(this, 0);
   3173   }
   3174 
   3175   /// Returns a read/write iterator that points one past the last in the
   3176   /// SwitchInst.
   3177   CaseIt case_end() {
   3178     return CaseIt(this, getNumCases());
   3179   }
   3180   /// Returns a read-only iterator that points one past the last in the
   3181   /// SwitchInst.
   3182   ConstCaseIt case_end() const {
   3183     return ConstCaseIt(this, getNumCases());
   3184   }
   3185 
   3186   /// Iteration adapter for range-for loops.
   3187   iterator_range<CaseIt> cases() {
   3188     return make_range(case_begin(), case_end());
   3189   }
   3190 
   3191   /// Constant iteration adapter for range-for loops.
   3192   iterator_range<ConstCaseIt> cases() const {
   3193     return make_range(case_begin(), case_end());
   3194   }
   3195 
   3196   /// Returns an iterator that points to the default case.
   3197   /// Note: this iterator allows to resolve successor only. Attempt
   3198   /// to resolve case value causes an assertion.
   3199   /// Also note, that increment and decrement also causes an assertion and
   3200   /// makes iterator invalid.
   3201   CaseIt case_default() {
   3202     return CaseIt(this, DefaultPseudoIndex);
   3203   }
   3204   ConstCaseIt case_default() const {
   3205     return ConstCaseIt(this, DefaultPseudoIndex);
   3206   }
   3207 
   3208   /// Search all of the case values for the specified constant. If it is
   3209   /// explicitly handled, return the case iterator of it, otherwise return
   3210   /// default case iterator to indicate that it is handled by the default
   3211   /// handler.
   3212   CaseIt findCaseValue(const ConstantInt *C) {
   3213     for (CaseIt i = case_begin(), e = case_end(); i != e; ++i)
   3214       if (i.getCaseValue() == C)
   3215         return i;
   3216     return case_default();
   3217   }
   3218   ConstCaseIt findCaseValue(const ConstantInt *C) const {
   3219     for (ConstCaseIt i = case_begin(), e = case_end(); i != e; ++i)
   3220       if (i.getCaseValue() == C)
   3221         return i;
   3222     return case_default();
   3223   }
   3224 
   3225   /// Finds the unique case value for a given successor. Returns null if the
   3226   /// successor is not found, not unique, or is the default case.
   3227   ConstantInt *findCaseDest(BasicBlock *BB) {
   3228     if (BB == getDefaultDest()) return nullptr;
   3229 
   3230     ConstantInt *CI = nullptr;
   3231     for (CaseIt i = case_begin(), e = case_end(); i != e; ++i) {
   3232       if (i.getCaseSuccessor() == BB) {
   3233         if (CI) return nullptr;   // Multiple cases lead to BB.
   3234         else CI = i.getCaseValue();
   3235       }
   3236     }
   3237     return CI;
   3238   }
   3239 
   3240   /// Add an entry to the switch instruction.
   3241   /// Note:
   3242   /// This action invalidates case_end(). Old case_end() iterator will
   3243   /// point to the added case.
   3244   void addCase(ConstantInt *OnVal, BasicBlock *Dest);
   3245 
   3246   /// This method removes the specified case and its successor from the switch
   3247   /// instruction. Note that this operation may reorder the remaining cases at
   3248   /// index idx and above.
   3249   /// Note:
   3250   /// This action invalidates iterators for all cases following the one removed,
   3251   /// including the case_end() iterator.
   3252   void removeCase(CaseIt i);
   3253 
   3254   unsigned getNumSuccessors() const { return getNumOperands()/2; }
   3255   BasicBlock *getSuccessor(unsigned idx) const {
   3256     assert(idx < getNumSuccessors() &&"Successor idx out of range for switch!");
   3257     return cast<BasicBlock>(getOperand(idx*2+1));
   3258   }
   3259   void setSuccessor(unsigned idx, BasicBlock *NewSucc) {
   3260     assert(idx < getNumSuccessors() && "Successor # out of range for switch!");
   3261     setOperand(idx * 2 + 1, NewSucc);
   3262   }
   3263 
   3264   // Methods for support type inquiry through isa, cast, and dyn_cast:
   3265   static inline bool classof(const Instruction *I) {
   3266     return I->getOpcode() == Instruction::Switch;
   3267   }
   3268   static inline bool classof(const Value *V) {
   3269     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   3270   }
   3271 
   3272 private:
   3273   BasicBlock *getSuccessorV(unsigned idx) const override;
   3274   unsigned getNumSuccessorsV() const override;
   3275   void setSuccessorV(unsigned idx, BasicBlock *B) override;
   3276 };
   3277 
   3278 template <>
   3279 struct OperandTraits<SwitchInst> : public HungoffOperandTraits<2> {
   3280 };
   3281 
   3282 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(SwitchInst, Value)
   3283 
   3284 //===----------------------------------------------------------------------===//
   3285 //                             IndirectBrInst Class
   3286 //===----------------------------------------------------------------------===//
   3287 
   3288 //===---------------------------------------------------------------------------
   3289 /// IndirectBrInst - Indirect Branch Instruction.
   3290 ///
   3291 class IndirectBrInst : public TerminatorInst {
   3292   void *operator new(size_t, unsigned) = delete;
   3293   unsigned ReservedSpace;
   3294   // Operand[0]    = Value to switch on
   3295   // Operand[1]    = Default basic block destination
   3296   // Operand[2n  ] = Value to match
   3297   // Operand[2n+1] = BasicBlock to go to on match
   3298   IndirectBrInst(const IndirectBrInst &IBI);
   3299   void init(Value *Address, unsigned NumDests);
   3300   void growOperands();
   3301   // allocate space for exactly zero operands
   3302   void *operator new(size_t s) {
   3303     return User::operator new(s);
   3304   }
   3305   /// IndirectBrInst ctor - Create a new indirectbr instruction, specifying an
   3306   /// Address to jump to.  The number of expected destinations can be specified
   3307   /// here to make memory allocation more efficient.  This constructor can also
   3308   /// autoinsert before another instruction.
   3309   IndirectBrInst(Value *Address, unsigned NumDests, Instruction *InsertBefore);
   3310 
   3311   /// IndirectBrInst ctor - Create a new indirectbr instruction, specifying an
   3312   /// Address to jump to.  The number of expected destinations can be specified
   3313   /// here to make memory allocation more efficient.  This constructor also
   3314   /// autoinserts at the end of the specified BasicBlock.
   3315   IndirectBrInst(Value *Address, unsigned NumDests, BasicBlock *InsertAtEnd);
   3316 
   3317 protected:
   3318   // Note: Instruction needs to be a friend here to call cloneImpl.
   3319   friend class Instruction;
   3320   IndirectBrInst *cloneImpl() const;
   3321 
   3322 public:
   3323   static IndirectBrInst *Create(Value *Address, unsigned NumDests,
   3324                                 Instruction *InsertBefore = nullptr) {
   3325     return new IndirectBrInst(Address, NumDests, InsertBefore);
   3326   }
   3327   static IndirectBrInst *Create(Value *Address, unsigned NumDests,
   3328                                 BasicBlock *InsertAtEnd) {
   3329     return new IndirectBrInst(Address, NumDests, InsertAtEnd);
   3330   }
   3331 
   3332   /// Provide fast operand accessors.
   3333   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   3334 
   3335   // Accessor Methods for IndirectBrInst instruction.
   3336   Value *getAddress() { return getOperand(0); }
   3337   const Value *getAddress() const { return getOperand(0); }
   3338   void setAddress(Value *V) { setOperand(0, V); }
   3339 
   3340   /// getNumDestinations - return the number of possible destinations in this
   3341   /// indirectbr instruction.
   3342   unsigned getNumDestinations() const { return getNumOperands()-1; }
   3343 
   3344   /// getDestination - Return the specified destination.
   3345   BasicBlock *getDestination(unsigned i) { return getSuccessor(i); }
   3346   const BasicBlock *getDestination(unsigned i) const { return getSuccessor(i); }
   3347 
   3348   /// addDestination - Add a destination.
   3349   ///
   3350   void addDestination(BasicBlock *Dest);
   3351 
   3352   /// removeDestination - This method removes the specified successor from the
   3353   /// indirectbr instruction.
   3354   void removeDestination(unsigned i);
   3355 
   3356   unsigned getNumSuccessors() const { return getNumOperands()-1; }
   3357   BasicBlock *getSuccessor(unsigned i) const {
   3358     return cast<BasicBlock>(getOperand(i+1));
   3359   }
   3360   void setSuccessor(unsigned i, BasicBlock *NewSucc) {
   3361     setOperand(i + 1, NewSucc);
   3362   }
   3363 
   3364   // Methods for support type inquiry through isa, cast, and dyn_cast:
   3365   static inline bool classof(const Instruction *I) {
   3366     return I->getOpcode() == Instruction::IndirectBr;
   3367   }
   3368   static inline bool classof(const Value *V) {
   3369     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   3370   }
   3371 
   3372 private:
   3373   BasicBlock *getSuccessorV(unsigned idx) const override;
   3374   unsigned getNumSuccessorsV() const override;
   3375   void setSuccessorV(unsigned idx, BasicBlock *B) override;
   3376 };
   3377 
   3378 template <>
   3379 struct OperandTraits<IndirectBrInst> : public HungoffOperandTraits<1> {
   3380 };
   3381 
   3382 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(IndirectBrInst, Value)
   3383 
   3384 //===----------------------------------------------------------------------===//
   3385 //                               InvokeInst Class
   3386 //===----------------------------------------------------------------------===//
   3387 
   3388 /// InvokeInst - Invoke instruction.  The SubclassData field is used to hold the
   3389 /// calling convention of the call.
   3390 ///
   3391 class InvokeInst : public TerminatorInst,
   3392                    public OperandBundleUser<InvokeInst, User::op_iterator> {
   3393   AttributeSet AttributeList;
   3394   FunctionType *FTy;
   3395   InvokeInst(const InvokeInst &BI);
   3396   void init(Value *Func, BasicBlock *IfNormal, BasicBlock *IfException,
   3397             ArrayRef<Value *> Args, ArrayRef<OperandBundleDef> Bundles,
   3398             const Twine &NameStr) {
   3399     init(cast<FunctionType>(
   3400              cast<PointerType>(Func->getType())->getElementType()),
   3401          Func, IfNormal, IfException, Args, Bundles, NameStr);
   3402   }
   3403   void init(FunctionType *FTy, Value *Func, BasicBlock *IfNormal,
   3404             BasicBlock *IfException, ArrayRef<Value *> Args,
   3405             ArrayRef<OperandBundleDef> Bundles, const Twine &NameStr);
   3406 
   3407   /// Construct an InvokeInst given a range of arguments.
   3408   ///
   3409   /// \brief Construct an InvokeInst from a range of arguments
   3410   inline InvokeInst(Value *Func, BasicBlock *IfNormal, BasicBlock *IfException,
   3411                     ArrayRef<Value *> Args, ArrayRef<OperandBundleDef> Bundles,
   3412                     unsigned Values, const Twine &NameStr,
   3413                     Instruction *InsertBefore)
   3414       : InvokeInst(cast<FunctionType>(
   3415                        cast<PointerType>(Func->getType())->getElementType()),
   3416                    Func, IfNormal, IfException, Args, Bundles, Values, NameStr,
   3417                    InsertBefore) {}
   3418 
   3419   inline InvokeInst(FunctionType *Ty, Value *Func, BasicBlock *IfNormal,
   3420                     BasicBlock *IfException, ArrayRef<Value *> Args,
   3421                     ArrayRef<OperandBundleDef> Bundles, unsigned Values,
   3422                     const Twine &NameStr, Instruction *InsertBefore);
   3423   /// Construct an InvokeInst given a range of arguments.
   3424   ///
   3425   /// \brief Construct an InvokeInst from a range of arguments
   3426   inline InvokeInst(Value *Func, BasicBlock *IfNormal, BasicBlock *IfException,
   3427                     ArrayRef<Value *> Args, ArrayRef<OperandBundleDef> Bundles,
   3428                     unsigned Values, const Twine &NameStr,
   3429                     BasicBlock *InsertAtEnd);
   3430 
   3431   friend class OperandBundleUser<InvokeInst, User::op_iterator>;
   3432   bool hasDescriptor() const { return HasDescriptor; }
   3433 
   3434 protected:
   3435   // Note: Instruction needs to be a friend here to call cloneImpl.
   3436   friend class Instruction;
   3437   InvokeInst *cloneImpl() const;
   3438 
   3439 public:
   3440   static InvokeInst *Create(Value *Func, BasicBlock *IfNormal,
   3441                             BasicBlock *IfException, ArrayRef<Value *> Args,
   3442                             const Twine &NameStr,
   3443                             Instruction *InsertBefore = nullptr) {
   3444     return Create(cast<FunctionType>(
   3445                       cast<PointerType>(Func->getType())->getElementType()),
   3446                   Func, IfNormal, IfException, Args, None, NameStr,
   3447                   InsertBefore);
   3448   }
   3449   static InvokeInst *Create(Value *Func, BasicBlock *IfNormal,
   3450                             BasicBlock *IfException, ArrayRef<Value *> Args,
   3451                             ArrayRef<OperandBundleDef> Bundles = None,
   3452                             const Twine &NameStr = "",
   3453                             Instruction *InsertBefore = nullptr) {
   3454     return Create(cast<FunctionType>(
   3455                       cast<PointerType>(Func->getType())->getElementType()),
   3456                   Func, IfNormal, IfException, Args, Bundles, NameStr,
   3457                   InsertBefore);
   3458   }
   3459   static InvokeInst *Create(FunctionType *Ty, Value *Func, BasicBlock *IfNormal,
   3460                             BasicBlock *IfException, ArrayRef<Value *> Args,
   3461                             const Twine &NameStr,
   3462                             Instruction *InsertBefore = nullptr) {
   3463     unsigned Values = unsigned(Args.size()) + 3;
   3464     return new (Values) InvokeInst(Ty, Func, IfNormal, IfException, Args, None,
   3465                                    Values, NameStr, InsertBefore);
   3466   }
   3467   static InvokeInst *Create(FunctionType *Ty, Value *Func, BasicBlock *IfNormal,
   3468                             BasicBlock *IfException, ArrayRef<Value *> Args,
   3469                             ArrayRef<OperandBundleDef> Bundles = None,
   3470                             const Twine &NameStr = "",
   3471                             Instruction *InsertBefore = nullptr) {
   3472     unsigned Values = unsigned(Args.size()) + CountBundleInputs(Bundles) + 3;
   3473     unsigned DescriptorBytes = Bundles.size() * sizeof(BundleOpInfo);
   3474 
   3475     return new (Values, DescriptorBytes)
   3476         InvokeInst(Ty, Func, IfNormal, IfException, Args, Bundles, Values,
   3477                    NameStr, InsertBefore);
   3478   }
   3479   static InvokeInst *Create(Value *Func,
   3480                             BasicBlock *IfNormal, BasicBlock *IfException,
   3481                             ArrayRef<Value *> Args, const Twine &NameStr,
   3482                             BasicBlock *InsertAtEnd) {
   3483     unsigned Values = unsigned(Args.size()) + 3;
   3484     return new (Values) InvokeInst(Func, IfNormal, IfException, Args, None,
   3485                                    Values, NameStr, InsertAtEnd);
   3486   }
   3487   static InvokeInst *Create(Value *Func, BasicBlock *IfNormal,
   3488                             BasicBlock *IfException, ArrayRef<Value *> Args,
   3489                             ArrayRef<OperandBundleDef> Bundles,
   3490                             const Twine &NameStr, BasicBlock *InsertAtEnd) {
   3491     unsigned Values = unsigned(Args.size()) + CountBundleInputs(Bundles) + 3;
   3492     unsigned DescriptorBytes = Bundles.size() * sizeof(BundleOpInfo);
   3493 
   3494     return new (Values, DescriptorBytes)
   3495         InvokeInst(Func, IfNormal, IfException, Args, Bundles, Values, NameStr,
   3496                    InsertAtEnd);
   3497   }
   3498 
   3499   /// \brief Create a clone of \p II with a different set of operand bundles and
   3500   /// insert it before \p InsertPt.
   3501   ///
   3502   /// The returned invoke instruction is identical to \p II in every way except
   3503   /// that the operand bundles for the new instruction are set to the operand
   3504   /// bundles in \p Bundles.
   3505   static InvokeInst *Create(InvokeInst *II, ArrayRef<OperandBundleDef> Bundles,
   3506                             Instruction *InsertPt = nullptr);
   3507 
   3508   /// Provide fast operand accessors
   3509   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   3510 
   3511   FunctionType *getFunctionType() const { return FTy; }
   3512 
   3513   void mutateFunctionType(FunctionType *FTy) {
   3514     mutateType(FTy->getReturnType());
   3515     this->FTy = FTy;
   3516   }
   3517 
   3518   /// getNumArgOperands - Return the number of invoke arguments.
   3519   ///
   3520   unsigned getNumArgOperands() const {
   3521     return getNumOperands() - getNumTotalBundleOperands() - 3;
   3522   }
   3523 
   3524   /// getArgOperand/setArgOperand - Return/set the i-th invoke argument.
   3525   ///
   3526   Value *getArgOperand(unsigned i) const {
   3527     assert(i < getNumArgOperands() && "Out of bounds!");
   3528     return getOperand(i);
   3529   }
   3530   void setArgOperand(unsigned i, Value *v) {
   3531     assert(i < getNumArgOperands() && "Out of bounds!");
   3532     setOperand(i, v);
   3533   }
   3534 
   3535   /// \brief Return the iterator pointing to the beginning of the argument list.
   3536   op_iterator arg_begin() { return op_begin(); }
   3537 
   3538   /// \brief Return the iterator pointing to the end of the argument list.
   3539   op_iterator arg_end() {
   3540     // [ invoke args ], [ operand bundles ], normal dest, unwind dest, callee
   3541     return op_end() - getNumTotalBundleOperands() - 3;
   3542   };
   3543 
   3544   /// \brief Iteration adapter for range-for loops.
   3545   iterator_range<op_iterator> arg_operands() {
   3546     return make_range(arg_begin(), arg_end());
   3547   }
   3548 
   3549   /// \brief Return the iterator pointing to the beginning of the argument list.
   3550   const_op_iterator arg_begin() const { return op_begin(); }
   3551 
   3552   /// \brief Return the iterator pointing to the end of the argument list.
   3553   const_op_iterator arg_end() const {
   3554     // [ invoke args ], [ operand bundles ], normal dest, unwind dest, callee
   3555     return op_end() - getNumTotalBundleOperands() - 3;
   3556   };
   3557 
   3558   /// \brief Iteration adapter for range-for loops.
   3559   iterator_range<const_op_iterator> arg_operands() const {
   3560     return make_range(arg_begin(), arg_end());
   3561   }
   3562 
   3563   /// \brief Wrappers for getting the \c Use of a invoke argument.
   3564   const Use &getArgOperandUse(unsigned i) const {
   3565     assert(i < getNumArgOperands() && "Out of bounds!");
   3566     return getOperandUse(i);
   3567   }
   3568   Use &getArgOperandUse(unsigned i) {
   3569     assert(i < getNumArgOperands() && "Out of bounds!");
   3570     return getOperandUse(i);
   3571   }
   3572 
   3573   /// If one of the arguments has the 'returned' attribute, return its
   3574   /// operand value. Otherwise, return nullptr.
   3575   Value *getReturnedArgOperand() const;
   3576 
   3577   /// getCallingConv/setCallingConv - Get or set the calling convention of this
   3578   /// function call.
   3579   CallingConv::ID getCallingConv() const {
   3580     return static_cast<CallingConv::ID>(getSubclassDataFromInstruction());
   3581   }
   3582   void setCallingConv(CallingConv::ID CC) {
   3583     auto ID = static_cast<unsigned>(CC);
   3584     assert(!(ID & ~CallingConv::MaxID) && "Unsupported calling convention");
   3585     setInstructionSubclassData(ID);
   3586   }
   3587 
   3588   /// getAttributes - Return the parameter attributes for this invoke.
   3589   ///
   3590   const AttributeSet &getAttributes() const { return AttributeList; }
   3591 
   3592   /// setAttributes - Set the parameter attributes for this invoke.
   3593   ///
   3594   void setAttributes(const AttributeSet &Attrs) { AttributeList = Attrs; }
   3595 
   3596   /// addAttribute - adds the attribute to the list of attributes.
   3597   void addAttribute(unsigned i, Attribute::AttrKind Kind);
   3598 
   3599   /// addAttribute - adds the attribute to the list of attributes.
   3600   void addAttribute(unsigned i, Attribute Attr);
   3601 
   3602   /// removeAttribute - removes the attribute from the list of attributes.
   3603   void removeAttribute(unsigned i, Attribute::AttrKind Kind);
   3604 
   3605   /// removeAttribute - removes the attribute from the list of attributes.
   3606   void removeAttribute(unsigned i, StringRef Kind);
   3607 
   3608   /// removeAttribute - removes the attribute from the list of attributes.
   3609   void removeAttribute(unsigned i, Attribute Attr);
   3610 
   3611   /// \brief adds the dereferenceable attribute to the list of attributes.
   3612   void addDereferenceableAttr(unsigned i, uint64_t Bytes);
   3613 
   3614   /// \brief adds the dereferenceable_or_null attribute to the list of
   3615   /// attributes.
   3616   void addDereferenceableOrNullAttr(unsigned i, uint64_t Bytes);
   3617 
   3618   /// \brief Determine whether this call has the given attribute.
   3619   bool hasFnAttr(Attribute::AttrKind Kind) const {
   3620     assert(Kind != Attribute::NoBuiltin &&
   3621            "Use CallInst::isNoBuiltin() to check for Attribute::NoBuiltin");
   3622     return hasFnAttrImpl(Kind);
   3623   }
   3624 
   3625   /// \brief Determine whether this call has the given attribute.
   3626   bool hasFnAttr(StringRef Kind) const {
   3627     return hasFnAttrImpl(Kind);
   3628   }
   3629 
   3630   /// \brief Determine whether the call or the callee has the given attributes.
   3631   bool paramHasAttr(unsigned i, Attribute::AttrKind Kind) const;
   3632 
   3633   /// \brief Get the attribute of a given kind at a position.
   3634   Attribute getAttribute(unsigned i, Attribute::AttrKind Kind) const;
   3635 
   3636   /// \brief Get the attribute of a given kind at a position.
   3637   Attribute getAttribute(unsigned i, StringRef Kind) const;
   3638 
   3639   /// \brief Return true if the data operand at index \p i has the attribute \p
   3640   /// A.
   3641   ///
   3642   /// Data operands include invoke arguments and values used in operand bundles,
   3643   /// but does not include the invokee operand, or the two successor blocks.
   3644   /// This routine dispatches to the underlying AttributeList or the
   3645   /// OperandBundleUser as appropriate.
   3646   ///
   3647   /// The index \p i is interpreted as
   3648   ///
   3649   ///  \p i == Attribute::ReturnIndex  -> the return value
   3650   ///  \p i in [1, arg_size + 1)  -> argument number (\p i - 1)
   3651   ///  \p i in [arg_size + 1, data_operand_size + 1) -> bundle operand at index
   3652   ///     (\p i - 1) in the operand list.
   3653   bool dataOperandHasImpliedAttr(unsigned i, Attribute::AttrKind Kind) const;
   3654 
   3655   /// \brief Extract the alignment for a call or parameter (0=unknown).
   3656   unsigned getParamAlignment(unsigned i) const {
   3657     return AttributeList.getParamAlignment(i);
   3658   }
   3659 
   3660   /// \brief Extract the number of dereferenceable bytes for a call or
   3661   /// parameter (0=unknown).
   3662   uint64_t getDereferenceableBytes(unsigned i) const {
   3663     return AttributeList.getDereferenceableBytes(i);
   3664   }
   3665 
   3666   /// \brief Extract the number of dereferenceable_or_null bytes for a call or
   3667   /// parameter (0=unknown).
   3668   uint64_t getDereferenceableOrNullBytes(unsigned i) const {
   3669     return AttributeList.getDereferenceableOrNullBytes(i);
   3670   }
   3671 
   3672   /// @brief Determine if the parameter or return value is marked with NoAlias
   3673   /// attribute.
   3674   /// @param n The parameter to check. 1 is the first parameter, 0 is the return
   3675   bool doesNotAlias(unsigned n) const {
   3676     return AttributeList.hasAttribute(n, Attribute::NoAlias);
   3677   }
   3678 
   3679   /// \brief Return true if the call should not be treated as a call to a
   3680   /// builtin.
   3681   bool isNoBuiltin() const {
   3682     // We assert in hasFnAttr if one passes in Attribute::NoBuiltin, so we have
   3683     // to check it by hand.
   3684     return hasFnAttrImpl(Attribute::NoBuiltin) &&
   3685       !hasFnAttrImpl(Attribute::Builtin);
   3686   }
   3687 
   3688   /// \brief Return true if the call should not be inlined.
   3689   bool isNoInline() const { return hasFnAttr(Attribute::NoInline); }
   3690   void setIsNoInline() {
   3691     addAttribute(AttributeSet::FunctionIndex, Attribute::NoInline);
   3692   }
   3693 
   3694   /// \brief Determine if the call does not access memory.
   3695   bool doesNotAccessMemory() const {
   3696     return hasFnAttr(Attribute::ReadNone);
   3697   }
   3698   void setDoesNotAccessMemory() {
   3699     addAttribute(AttributeSet::FunctionIndex, Attribute::ReadNone);
   3700   }
   3701 
   3702   /// \brief Determine if the call does not access or only reads memory.
   3703   bool onlyReadsMemory() const {
   3704     return doesNotAccessMemory() || hasFnAttr(Attribute::ReadOnly);
   3705   }
   3706   void setOnlyReadsMemory() {
   3707     addAttribute(AttributeSet::FunctionIndex, Attribute::ReadOnly);
   3708   }
   3709 
   3710   /// \brief Determine if the call does not access or only writes memory.
   3711   bool doesNotReadMemory() const {
   3712     return doesNotAccessMemory() || hasFnAttr(Attribute::WriteOnly);
   3713   }
   3714   void setDoesNotReadMemory() {
   3715     addAttribute(AttributeSet::FunctionIndex, Attribute::WriteOnly);
   3716   }
   3717 
   3718   /// @brief Determine if the call access memmory only using it's pointer
   3719   /// arguments.
   3720   bool onlyAccessesArgMemory() const {
   3721     return hasFnAttr(Attribute::ArgMemOnly);
   3722   }
   3723   void setOnlyAccessesArgMemory() {
   3724     addAttribute(AttributeSet::FunctionIndex, Attribute::ArgMemOnly);
   3725   }
   3726 
   3727   /// \brief Determine if the call cannot return.
   3728   bool doesNotReturn() const { return hasFnAttr(Attribute::NoReturn); }
   3729   void setDoesNotReturn() {
   3730     addAttribute(AttributeSet::FunctionIndex, Attribute::NoReturn);
   3731   }
   3732 
   3733   /// \brief Determine if the call cannot unwind.
   3734   bool doesNotThrow() const { return hasFnAttr(Attribute::NoUnwind); }
   3735   void setDoesNotThrow() {
   3736     addAttribute(AttributeSet::FunctionIndex, Attribute::NoUnwind);
   3737   }
   3738 
   3739   /// \brief Determine if the invoke cannot be duplicated.
   3740   bool cannotDuplicate() const {return hasFnAttr(Attribute::NoDuplicate); }
   3741   void setCannotDuplicate() {
   3742     addAttribute(AttributeSet::FunctionIndex, Attribute::NoDuplicate);
   3743   }
   3744 
   3745   /// \brief Determine if the invoke is convergent
   3746   bool isConvergent() const { return hasFnAttr(Attribute::Convergent); }
   3747   void setConvergent() {
   3748     addAttribute(AttributeSet::FunctionIndex, Attribute::Convergent);
   3749   }
   3750   void setNotConvergent() {
   3751     removeAttribute(AttributeSet::FunctionIndex,
   3752                     Attribute::get(getContext(), Attribute::Convergent));
   3753   }
   3754 
   3755   /// \brief Determine if the call returns a structure through first
   3756   /// pointer argument.
   3757   bool hasStructRetAttr() const {
   3758     if (getNumArgOperands() == 0)
   3759       return false;
   3760 
   3761     // Be friendly and also check the callee.
   3762     return paramHasAttr(1, Attribute::StructRet);
   3763   }
   3764 
   3765   /// \brief Determine if any call argument is an aggregate passed by value.
   3766   bool hasByValArgument() const {
   3767     return AttributeList.hasAttrSomewhere(Attribute::ByVal);
   3768   }
   3769 
   3770   /// getCalledFunction - Return the function called, or null if this is an
   3771   /// indirect function invocation.
   3772   ///
   3773   Function *getCalledFunction() const {
   3774     return dyn_cast<Function>(Op<-3>());
   3775   }
   3776 
   3777   /// getCalledValue - Get a pointer to the function that is invoked by this
   3778   /// instruction
   3779   const Value *getCalledValue() const { return Op<-3>(); }
   3780         Value *getCalledValue()       { return Op<-3>(); }
   3781 
   3782   /// setCalledFunction - Set the function called.
   3783   void setCalledFunction(Value* Fn) {
   3784     setCalledFunction(
   3785         cast<FunctionType>(cast<PointerType>(Fn->getType())->getElementType()),
   3786         Fn);
   3787   }
   3788   void setCalledFunction(FunctionType *FTy, Value *Fn) {
   3789     this->FTy = FTy;
   3790     assert(FTy == cast<FunctionType>(
   3791                       cast<PointerType>(Fn->getType())->getElementType()));
   3792     Op<-3>() = Fn;
   3793   }
   3794 
   3795   // get*Dest - Return the destination basic blocks...
   3796   BasicBlock *getNormalDest() const {
   3797     return cast<BasicBlock>(Op<-2>());
   3798   }
   3799   BasicBlock *getUnwindDest() const {
   3800     return cast<BasicBlock>(Op<-1>());
   3801   }
   3802   void setNormalDest(BasicBlock *B) {
   3803     Op<-2>() = reinterpret_cast<Value*>(B);
   3804   }
   3805   void setUnwindDest(BasicBlock *B) {
   3806     Op<-1>() = reinterpret_cast<Value*>(B);
   3807   }
   3808 
   3809   /// getLandingPadInst - Get the landingpad instruction from the landing pad
   3810   /// block (the unwind destination).
   3811   LandingPadInst *getLandingPadInst() const;
   3812 
   3813   BasicBlock *getSuccessor(unsigned i) const {
   3814     assert(i < 2 && "Successor # out of range for invoke!");
   3815     return i == 0 ? getNormalDest() : getUnwindDest();
   3816   }
   3817 
   3818   void setSuccessor(unsigned idx, BasicBlock *NewSucc) {
   3819     assert(idx < 2 && "Successor # out of range for invoke!");
   3820     *(&Op<-2>() + idx) = reinterpret_cast<Value*>(NewSucc);
   3821   }
   3822 
   3823   unsigned getNumSuccessors() const { return 2; }
   3824 
   3825   // Methods for support type inquiry through isa, cast, and dyn_cast:
   3826   static inline bool classof(const Instruction *I) {
   3827     return (I->getOpcode() == Instruction::Invoke);
   3828   }
   3829   static inline bool classof(const Value *V) {
   3830     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   3831   }
   3832 
   3833 private:
   3834   BasicBlock *getSuccessorV(unsigned idx) const override;
   3835   unsigned getNumSuccessorsV() const override;
   3836   void setSuccessorV(unsigned idx, BasicBlock *B) override;
   3837 
   3838   template <typename AttrKind> bool hasFnAttrImpl(AttrKind A) const {
   3839     if (AttributeList.hasAttribute(AttributeSet::FunctionIndex, A))
   3840       return true;
   3841 
   3842     // Operand bundles override attributes on the called function, but don't
   3843     // override attributes directly present on the invoke instruction.
   3844     if (isFnAttrDisallowedByOpBundle(A))
   3845       return false;
   3846 
   3847     if (const Function *F = getCalledFunction())
   3848       return F->getAttributes().hasAttribute(AttributeSet::FunctionIndex, A);
   3849     return false;
   3850   }
   3851 
   3852   // Shadow Instruction::setInstructionSubclassData with a private forwarding
   3853   // method so that subclasses cannot accidentally use it.
   3854   void setInstructionSubclassData(unsigned short D) {
   3855     Instruction::setInstructionSubclassData(D);
   3856   }
   3857 };
   3858 
   3859 template <>
   3860 struct OperandTraits<InvokeInst> : public VariadicOperandTraits<InvokeInst, 3> {
   3861 };
   3862 
   3863 InvokeInst::InvokeInst(FunctionType *Ty, Value *Func, BasicBlock *IfNormal,
   3864                        BasicBlock *IfException, ArrayRef<Value *> Args,
   3865                        ArrayRef<OperandBundleDef> Bundles, unsigned Values,
   3866                        const Twine &NameStr, Instruction *InsertBefore)
   3867     : TerminatorInst(Ty->getReturnType(), Instruction::Invoke,
   3868                      OperandTraits<InvokeInst>::op_end(this) - Values, Values,
   3869                      InsertBefore) {
   3870   init(Ty, Func, IfNormal, IfException, Args, Bundles, NameStr);
   3871 }
   3872 InvokeInst::InvokeInst(Value *Func, BasicBlock *IfNormal,
   3873                        BasicBlock *IfException, ArrayRef<Value *> Args,
   3874                        ArrayRef<OperandBundleDef> Bundles, unsigned Values,
   3875                        const Twine &NameStr, BasicBlock *InsertAtEnd)
   3876     : TerminatorInst(
   3877           cast<FunctionType>(cast<PointerType>(Func->getType())
   3878                                  ->getElementType())->getReturnType(),
   3879           Instruction::Invoke, OperandTraits<InvokeInst>::op_end(this) - Values,
   3880           Values, InsertAtEnd) {
   3881   init(Func, IfNormal, IfException, Args, Bundles, NameStr);
   3882 }
   3883 
   3884 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(InvokeInst, Value)
   3885 
   3886 //===----------------------------------------------------------------------===//
   3887 //                              ResumeInst Class
   3888 //===----------------------------------------------------------------------===//
   3889 
   3890 //===---------------------------------------------------------------------------
   3891 /// ResumeInst - Resume the propagation of an exception.
   3892 ///
   3893 class ResumeInst : public TerminatorInst {
   3894   ResumeInst(const ResumeInst &RI);
   3895 
   3896   explicit ResumeInst(Value *Exn, Instruction *InsertBefore=nullptr);
   3897   ResumeInst(Value *Exn, BasicBlock *InsertAtEnd);
   3898 
   3899 protected:
   3900   // Note: Instruction needs to be a friend here to call cloneImpl.
   3901   friend class Instruction;
   3902   ResumeInst *cloneImpl() const;
   3903 
   3904 public:
   3905   static ResumeInst *Create(Value *Exn, Instruction *InsertBefore = nullptr) {
   3906     return new(1) ResumeInst(Exn, InsertBefore);
   3907   }
   3908   static ResumeInst *Create(Value *Exn, BasicBlock *InsertAtEnd) {
   3909     return new(1) ResumeInst(Exn, InsertAtEnd);
   3910   }
   3911 
   3912   /// Provide fast operand accessors
   3913   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   3914 
   3915   /// Convenience accessor.
   3916   Value *getValue() const { return Op<0>(); }
   3917 
   3918   unsigned getNumSuccessors() const { return 0; }
   3919 
   3920   // Methods for support type inquiry through isa, cast, and dyn_cast:
   3921   static inline bool classof(const Instruction *I) {
   3922     return I->getOpcode() == Instruction::Resume;
   3923   }
   3924   static inline bool classof(const Value *V) {
   3925     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   3926   }
   3927 
   3928 private:
   3929   BasicBlock *getSuccessorV(unsigned idx) const override;
   3930   unsigned getNumSuccessorsV() const override;
   3931   void setSuccessorV(unsigned idx, BasicBlock *B) override;
   3932 };
   3933 
   3934 template <>
   3935 struct OperandTraits<ResumeInst> :
   3936     public FixedNumOperandTraits<ResumeInst, 1> {
   3937 };
   3938 
   3939 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(ResumeInst, Value)
   3940 
   3941 //===----------------------------------------------------------------------===//
   3942 //                         CatchSwitchInst Class
   3943 //===----------------------------------------------------------------------===//
   3944 class CatchSwitchInst : public TerminatorInst {
   3945   void *operator new(size_t, unsigned) = delete;
   3946   /// ReservedSpace - The number of operands actually allocated.  NumOperands is
   3947   /// the number actually in use.
   3948   unsigned ReservedSpace;
   3949   // Operand[0] = Outer scope
   3950   // Operand[1] = Unwind block destination
   3951   // Operand[n] = BasicBlock to go to on match
   3952   CatchSwitchInst(const CatchSwitchInst &CSI);
   3953   void init(Value *ParentPad, BasicBlock *UnwindDest, unsigned NumReserved);
   3954   void growOperands(unsigned Size);
   3955   // allocate space for exactly zero operands
   3956   void *operator new(size_t s) { return User::operator new(s); }
   3957   /// CatchSwitchInst ctor - Create a new switch instruction, specifying a
   3958   /// default destination.  The number of additional handlers can be specified
   3959   /// here to make memory allocation more efficient.
   3960   /// This constructor can also autoinsert before another instruction.
   3961   CatchSwitchInst(Value *ParentPad, BasicBlock *UnwindDest,
   3962                   unsigned NumHandlers, const Twine &NameStr,
   3963                   Instruction *InsertBefore);
   3964 
   3965   /// CatchSwitchInst ctor - Create a new switch instruction, specifying a
   3966   /// default destination.  The number of additional handlers can be specified
   3967   /// here to make memory allocation more efficient.
   3968   /// This constructor also autoinserts at the end of the specified BasicBlock.
   3969   CatchSwitchInst(Value *ParentPad, BasicBlock *UnwindDest,
   3970                   unsigned NumHandlers, const Twine &NameStr,
   3971                   BasicBlock *InsertAtEnd);
   3972 
   3973 protected:
   3974   // Note: Instruction needs to be a friend here to call cloneImpl.
   3975   friend class Instruction;
   3976   CatchSwitchInst *cloneImpl() const;
   3977 
   3978 public:
   3979   static CatchSwitchInst *Create(Value *ParentPad, BasicBlock *UnwindDest,
   3980                                  unsigned NumHandlers,
   3981                                  const Twine &NameStr = "",
   3982                                  Instruction *InsertBefore = nullptr) {
   3983     return new CatchSwitchInst(ParentPad, UnwindDest, NumHandlers, NameStr,
   3984                                InsertBefore);
   3985   }
   3986   static CatchSwitchInst *Create(Value *ParentPad, BasicBlock *UnwindDest,
   3987                                  unsigned NumHandlers, const Twine &NameStr,
   3988                                  BasicBlock *InsertAtEnd) {
   3989     return new CatchSwitchInst(ParentPad, UnwindDest, NumHandlers, NameStr,
   3990                                InsertAtEnd);
   3991   }
   3992 
   3993   /// Provide fast operand accessors
   3994   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   3995 
   3996   // Accessor Methods for CatchSwitch stmt
   3997   Value *getParentPad() const { return getOperand(0); }
   3998   void setParentPad(Value *ParentPad) { setOperand(0, ParentPad); }
   3999 
   4000   // Accessor Methods for CatchSwitch stmt
   4001   bool hasUnwindDest() const { return getSubclassDataFromInstruction() & 1; }
   4002   bool unwindsToCaller() const { return !hasUnwindDest(); }
   4003   BasicBlock *getUnwindDest() const {
   4004     if (hasUnwindDest())
   4005       return cast<BasicBlock>(getOperand(1));
   4006     return nullptr;
   4007   }
   4008   void setUnwindDest(BasicBlock *UnwindDest) {
   4009     assert(UnwindDest);
   4010     assert(hasUnwindDest());
   4011     setOperand(1, UnwindDest);
   4012   }
   4013 
   4014   /// getNumHandlers - return the number of 'handlers' in this catchswitch
   4015   /// instruction, except the default handler
   4016   unsigned getNumHandlers() const {
   4017     if (hasUnwindDest())
   4018       return getNumOperands() - 2;
   4019     return getNumOperands() - 1;
   4020   }
   4021 
   4022 private:
   4023   static BasicBlock *handler_helper(Value *V) { return cast<BasicBlock>(V); }
   4024   static const BasicBlock *handler_helper(const Value *V) {
   4025     return cast<BasicBlock>(V);
   4026   }
   4027 
   4028 public:
   4029   typedef std::pointer_to_unary_function<Value *, BasicBlock *> DerefFnTy;
   4030   typedef mapped_iterator<op_iterator, DerefFnTy> handler_iterator;
   4031   typedef iterator_range<handler_iterator> handler_range;
   4032 
   4033 
   4034   typedef std::pointer_to_unary_function<const Value *, const BasicBlock *>
   4035       ConstDerefFnTy;
   4036   typedef mapped_iterator<const_op_iterator, ConstDerefFnTy> const_handler_iterator;
   4037   typedef iterator_range<const_handler_iterator> const_handler_range;
   4038 
   4039   /// Returns an iterator that points to the first handler in CatchSwitchInst.
   4040   handler_iterator handler_begin() {
   4041     op_iterator It = op_begin() + 1;
   4042     if (hasUnwindDest())
   4043       ++It;
   4044     return handler_iterator(It, DerefFnTy(handler_helper));
   4045   }
   4046   /// Returns an iterator that points to the first handler in the
   4047   /// CatchSwitchInst.
   4048   const_handler_iterator handler_begin() const {
   4049     const_op_iterator It = op_begin() + 1;
   4050     if (hasUnwindDest())
   4051       ++It;
   4052     return const_handler_iterator(It, ConstDerefFnTy(handler_helper));
   4053   }
   4054 
   4055   /// Returns a read-only iterator that points one past the last
   4056   /// handler in the CatchSwitchInst.
   4057   handler_iterator handler_end() {
   4058     return handler_iterator(op_end(), DerefFnTy(handler_helper));
   4059   }
   4060   /// Returns an iterator that points one past the last handler in the
   4061   /// CatchSwitchInst.
   4062   const_handler_iterator handler_end() const {
   4063     return const_handler_iterator(op_end(), ConstDerefFnTy(handler_helper));
   4064   }
   4065 
   4066   /// handlers - iteration adapter for range-for loops.
   4067   handler_range handlers() {
   4068     return make_range(handler_begin(), handler_end());
   4069   }
   4070 
   4071   /// handlers - iteration adapter for range-for loops.
   4072   const_handler_range handlers() const {
   4073     return make_range(handler_begin(), handler_end());
   4074   }
   4075 
   4076   /// addHandler - Add an entry to the switch instruction...
   4077   /// Note:
   4078   /// This action invalidates handler_end(). Old handler_end() iterator will
   4079   /// point to the added handler.
   4080   void addHandler(BasicBlock *Dest);
   4081 
   4082   void removeHandler(handler_iterator HI);
   4083 
   4084   unsigned getNumSuccessors() const { return getNumOperands() - 1; }
   4085   BasicBlock *getSuccessor(unsigned Idx) const {
   4086     assert(Idx < getNumSuccessors() &&
   4087            "Successor # out of range for catchswitch!");
   4088     return cast<BasicBlock>(getOperand(Idx + 1));
   4089   }
   4090   void setSuccessor(unsigned Idx, BasicBlock *NewSucc) {
   4091     assert(Idx < getNumSuccessors() &&
   4092            "Successor # out of range for catchswitch!");
   4093     setOperand(Idx + 1, NewSucc);
   4094   }
   4095 
   4096   // Methods for support type inquiry through isa, cast, and dyn_cast:
   4097   static inline bool classof(const Instruction *I) {
   4098     return I->getOpcode() == Instruction::CatchSwitch;
   4099   }
   4100   static inline bool classof(const Value *V) {
   4101     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   4102   }
   4103 
   4104 private:
   4105   BasicBlock *getSuccessorV(unsigned Idx) const override;
   4106   unsigned getNumSuccessorsV() const override;
   4107   void setSuccessorV(unsigned Idx, BasicBlock *B) override;
   4108 };
   4109 
   4110 template <>
   4111 struct OperandTraits<CatchSwitchInst> : public HungoffOperandTraits<2> {};
   4112 
   4113 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(CatchSwitchInst, Value)
   4114 
   4115 //===----------------------------------------------------------------------===//
   4116 //                               CleanupPadInst Class
   4117 //===----------------------------------------------------------------------===//
   4118 class CleanupPadInst : public FuncletPadInst {
   4119 private:
   4120   explicit CleanupPadInst(Value *ParentPad, ArrayRef<Value *> Args,
   4121                           unsigned Values, const Twine &NameStr,
   4122                           Instruction *InsertBefore)
   4123       : FuncletPadInst(Instruction::CleanupPad, ParentPad, Args, Values,
   4124                        NameStr, InsertBefore) {}
   4125   explicit CleanupPadInst(Value *ParentPad, ArrayRef<Value *> Args,
   4126                           unsigned Values, const Twine &NameStr,
   4127                           BasicBlock *InsertAtEnd)
   4128       : FuncletPadInst(Instruction::CleanupPad, ParentPad, Args, Values,
   4129                        NameStr, InsertAtEnd) {}
   4130 
   4131 public:
   4132   static CleanupPadInst *Create(Value *ParentPad, ArrayRef<Value *> Args = None,
   4133                                 const Twine &NameStr = "",
   4134                                 Instruction *InsertBefore = nullptr) {
   4135     unsigned Values = 1 + Args.size();
   4136     return new (Values)
   4137         CleanupPadInst(ParentPad, Args, Values, NameStr, InsertBefore);
   4138   }
   4139   static CleanupPadInst *Create(Value *ParentPad, ArrayRef<Value *> Args,
   4140                                 const Twine &NameStr, BasicBlock *InsertAtEnd) {
   4141     unsigned Values = 1 + Args.size();
   4142     return new (Values)
   4143         CleanupPadInst(ParentPad, Args, Values, NameStr, InsertAtEnd);
   4144   }
   4145 
   4146   /// \brief Methods for support type inquiry through isa, cast, and dyn_cast:
   4147   static inline bool classof(const Instruction *I) {
   4148     return I->getOpcode() == Instruction::CleanupPad;
   4149   }
   4150   static inline bool classof(const Value *V) {
   4151     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   4152   }
   4153 };
   4154 
   4155 //===----------------------------------------------------------------------===//
   4156 //                               CatchPadInst Class
   4157 //===----------------------------------------------------------------------===//
   4158 class CatchPadInst : public FuncletPadInst {
   4159 private:
   4160   explicit CatchPadInst(Value *CatchSwitch, ArrayRef<Value *> Args,
   4161                         unsigned Values, const Twine &NameStr,
   4162                         Instruction *InsertBefore)
   4163       : FuncletPadInst(Instruction::CatchPad, CatchSwitch, Args, Values,
   4164                        NameStr, InsertBefore) {}
   4165   explicit CatchPadInst(Value *CatchSwitch, ArrayRef<Value *> Args,
   4166                         unsigned Values, const Twine &NameStr,
   4167                         BasicBlock *InsertAtEnd)
   4168       : FuncletPadInst(Instruction::CatchPad, CatchSwitch, Args, Values,
   4169                        NameStr, InsertAtEnd) {}
   4170 
   4171 public:
   4172   static CatchPadInst *Create(Value *CatchSwitch, ArrayRef<Value *> Args,
   4173                               const Twine &NameStr = "",
   4174                               Instruction *InsertBefore = nullptr) {
   4175     unsigned Values = 1 + Args.size();
   4176     return new (Values)
   4177         CatchPadInst(CatchSwitch, Args, Values, NameStr, InsertBefore);
   4178   }
   4179   static CatchPadInst *Create(Value *CatchSwitch, ArrayRef<Value *> Args,
   4180                               const Twine &NameStr, BasicBlock *InsertAtEnd) {
   4181     unsigned Values = 1 + Args.size();
   4182     return new (Values)
   4183         CatchPadInst(CatchSwitch, Args, Values, NameStr, InsertAtEnd);
   4184   }
   4185 
   4186   /// Convenience accessors
   4187   CatchSwitchInst *getCatchSwitch() const {
   4188     return cast<CatchSwitchInst>(Op<-1>());
   4189   }
   4190   void setCatchSwitch(Value *CatchSwitch) {
   4191     assert(CatchSwitch);
   4192     Op<-1>() = CatchSwitch;
   4193   }
   4194 
   4195   /// \brief Methods for support type inquiry through isa, cast, and dyn_cast:
   4196   static inline bool classof(const Instruction *I) {
   4197     return I->getOpcode() == Instruction::CatchPad;
   4198   }
   4199   static inline bool classof(const Value *V) {
   4200     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   4201   }
   4202 };
   4203 
   4204 //===----------------------------------------------------------------------===//
   4205 //                               CatchReturnInst Class
   4206 //===----------------------------------------------------------------------===//
   4207 
   4208 class CatchReturnInst : public TerminatorInst {
   4209   CatchReturnInst(const CatchReturnInst &RI);
   4210 
   4211   void init(Value *CatchPad, BasicBlock *BB);
   4212   CatchReturnInst(Value *CatchPad, BasicBlock *BB, Instruction *InsertBefore);
   4213   CatchReturnInst(Value *CatchPad, BasicBlock *BB, BasicBlock *InsertAtEnd);
   4214 
   4215 protected:
   4216   // Note: Instruction needs to be a friend here to call cloneImpl.
   4217   friend class Instruction;
   4218   CatchReturnInst *cloneImpl() const;
   4219 
   4220 public:
   4221   static CatchReturnInst *Create(Value *CatchPad, BasicBlock *BB,
   4222                                  Instruction *InsertBefore = nullptr) {
   4223     assert(CatchPad);
   4224     assert(BB);
   4225     return new (2) CatchReturnInst(CatchPad, BB, InsertBefore);
   4226   }
   4227   static CatchReturnInst *Create(Value *CatchPad, BasicBlock *BB,
   4228                                  BasicBlock *InsertAtEnd) {
   4229     assert(CatchPad);
   4230     assert(BB);
   4231     return new (2) CatchReturnInst(CatchPad, BB, InsertAtEnd);
   4232   }
   4233 
   4234   /// Provide fast operand accessors
   4235   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   4236 
   4237   /// Convenience accessors.
   4238   CatchPadInst *getCatchPad() const { return cast<CatchPadInst>(Op<0>()); }
   4239   void setCatchPad(CatchPadInst *CatchPad) {
   4240     assert(CatchPad);
   4241     Op<0>() = CatchPad;
   4242   }
   4243 
   4244   BasicBlock *getSuccessor() const { return cast<BasicBlock>(Op<1>()); }
   4245   void setSuccessor(BasicBlock *NewSucc) {
   4246     assert(NewSucc);
   4247     Op<1>() = NewSucc;
   4248   }
   4249   unsigned getNumSuccessors() const { return 1; }
   4250 
   4251   /// Get the parentPad of this catchret's catchpad's catchswitch.
   4252   /// The successor block is implicitly a member of this funclet.
   4253   Value *getCatchSwitchParentPad() const {
   4254     return getCatchPad()->getCatchSwitch()->getParentPad();
   4255   }
   4256 
   4257   // Methods for support type inquiry through isa, cast, and dyn_cast:
   4258   static inline bool classof(const Instruction *I) {
   4259     return (I->getOpcode() == Instruction::CatchRet);
   4260   }
   4261   static inline bool classof(const Value *V) {
   4262     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   4263   }
   4264 
   4265 private:
   4266   BasicBlock *getSuccessorV(unsigned Idx) const override;
   4267   unsigned getNumSuccessorsV() const override;
   4268   void setSuccessorV(unsigned Idx, BasicBlock *B) override;
   4269 };
   4270 
   4271 template <>
   4272 struct OperandTraits<CatchReturnInst>
   4273     : public FixedNumOperandTraits<CatchReturnInst, 2> {};
   4274 
   4275 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(CatchReturnInst, Value)
   4276 
   4277 //===----------------------------------------------------------------------===//
   4278 //                               CleanupReturnInst Class
   4279 //===----------------------------------------------------------------------===//
   4280 
   4281 class CleanupReturnInst : public TerminatorInst {
   4282 private:
   4283   CleanupReturnInst(const CleanupReturnInst &RI);
   4284 
   4285   void init(Value *CleanupPad, BasicBlock *UnwindBB);
   4286   CleanupReturnInst(Value *CleanupPad, BasicBlock *UnwindBB, unsigned Values,
   4287                     Instruction *InsertBefore = nullptr);
   4288   CleanupReturnInst(Value *CleanupPad, BasicBlock *UnwindBB, unsigned Values,
   4289                     BasicBlock *InsertAtEnd);
   4290 
   4291 protected:
   4292   // Note: Instruction needs to be a friend here to call cloneImpl.
   4293   friend class Instruction;
   4294   CleanupReturnInst *cloneImpl() const;
   4295 
   4296 public:
   4297   static CleanupReturnInst *Create(Value *CleanupPad,
   4298                                    BasicBlock *UnwindBB = nullptr,
   4299                                    Instruction *InsertBefore = nullptr) {
   4300     assert(CleanupPad);
   4301     unsigned Values = 1;
   4302     if (UnwindBB)
   4303       ++Values;
   4304     return new (Values)
   4305         CleanupReturnInst(CleanupPad, UnwindBB, Values, InsertBefore);
   4306   }
   4307   static CleanupReturnInst *Create(Value *CleanupPad, BasicBlock *UnwindBB,
   4308                                    BasicBlock *InsertAtEnd) {
   4309     assert(CleanupPad);
   4310     unsigned Values = 1;
   4311     if (UnwindBB)
   4312       ++Values;
   4313     return new (Values)
   4314         CleanupReturnInst(CleanupPad, UnwindBB, Values, InsertAtEnd);
   4315   }
   4316 
   4317   /// Provide fast operand accessors
   4318   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   4319 
   4320   bool hasUnwindDest() const { return getSubclassDataFromInstruction() & 1; }
   4321   bool unwindsToCaller() const { return !hasUnwindDest(); }
   4322 
   4323   /// Convenience accessor.
   4324   CleanupPadInst *getCleanupPad() const {
   4325     return cast<CleanupPadInst>(Op<0>());
   4326   }
   4327   void setCleanupPad(CleanupPadInst *CleanupPad) {
   4328     assert(CleanupPad);
   4329     Op<0>() = CleanupPad;
   4330   }
   4331 
   4332   unsigned getNumSuccessors() const { return hasUnwindDest() ? 1 : 0; }
   4333 
   4334   BasicBlock *getUnwindDest() const {
   4335     return hasUnwindDest() ? cast<BasicBlock>(Op<1>()) : nullptr;
   4336   }
   4337   void setUnwindDest(BasicBlock *NewDest) {
   4338     assert(NewDest);
   4339     assert(hasUnwindDest());
   4340     Op<1>() = NewDest;
   4341   }
   4342 
   4343   // Methods for support type inquiry through isa, cast, and dyn_cast:
   4344   static inline bool classof(const Instruction *I) {
   4345     return (I->getOpcode() == Instruction::CleanupRet);
   4346   }
   4347   static inline bool classof(const Value *V) {
   4348     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   4349   }
   4350 
   4351 private:
   4352   BasicBlock *getSuccessorV(unsigned Idx) const override;
   4353   unsigned getNumSuccessorsV() const override;
   4354   void setSuccessorV(unsigned Idx, BasicBlock *B) override;
   4355 
   4356   // Shadow Instruction::setInstructionSubclassData with a private forwarding
   4357   // method so that subclasses cannot accidentally use it.
   4358   void setInstructionSubclassData(unsigned short D) {
   4359     Instruction::setInstructionSubclassData(D);
   4360   }
   4361 };
   4362 
   4363 template <>
   4364 struct OperandTraits<CleanupReturnInst>
   4365     : public VariadicOperandTraits<CleanupReturnInst, /*MINARITY=*/1> {};
   4366 
   4367 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(CleanupReturnInst, Value)
   4368 
   4369 //===----------------------------------------------------------------------===//
   4370 //                           UnreachableInst Class
   4371 //===----------------------------------------------------------------------===//
   4372 
   4373 //===---------------------------------------------------------------------------
   4374 /// UnreachableInst - This function has undefined behavior.  In particular, the
   4375 /// presence of this instruction indicates some higher level knowledge that the
   4376 /// end of the block cannot be reached.
   4377 ///
   4378 class UnreachableInst : public TerminatorInst {
   4379   void *operator new(size_t, unsigned) = delete;
   4380 
   4381 protected:
   4382   // Note: Instruction needs to be a friend here to call cloneImpl.
   4383   friend class Instruction;
   4384   UnreachableInst *cloneImpl() const;
   4385 
   4386 public:
   4387   // allocate space for exactly zero operands
   4388   void *operator new(size_t s) {
   4389     return User::operator new(s, 0);
   4390   }
   4391   explicit UnreachableInst(LLVMContext &C, Instruction *InsertBefore = nullptr);
   4392   explicit UnreachableInst(LLVMContext &C, BasicBlock *InsertAtEnd);
   4393 
   4394   unsigned getNumSuccessors() const { return 0; }
   4395 
   4396   // Methods for support type inquiry through isa, cast, and dyn_cast:
   4397   static inline bool classof(const Instruction *I) {
   4398     return I->getOpcode() == Instruction::Unreachable;
   4399   }
   4400   static inline bool classof(const Value *V) {
   4401     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   4402   }
   4403 
   4404 private:
   4405   BasicBlock *getSuccessorV(unsigned idx) const override;
   4406   unsigned getNumSuccessorsV() const override;
   4407   void setSuccessorV(unsigned idx, BasicBlock *B) override;
   4408 };
   4409 
   4410 //===----------------------------------------------------------------------===//
   4411 //                                 TruncInst Class
   4412 //===----------------------------------------------------------------------===//
   4413 
   4414 /// \brief This class represents a truncation of integer types.
   4415 class TruncInst : public CastInst {
   4416 protected:
   4417   // Note: Instruction needs to be a friend here to call cloneImpl.
   4418   friend class Instruction;
   4419   /// \brief Clone an identical TruncInst
   4420   TruncInst *cloneImpl() const;
   4421 
   4422 public:
   4423   /// \brief Constructor with insert-before-instruction semantics
   4424   TruncInst(
   4425     Value *S,                           ///< The value to be truncated
   4426     Type *Ty,                           ///< The (smaller) type to truncate to
   4427     const Twine &NameStr = "",          ///< A name for the new instruction
   4428     Instruction *InsertBefore = nullptr ///< Where to insert the new instruction
   4429   );
   4430 
   4431   /// \brief Constructor with insert-at-end-of-block semantics
   4432   TruncInst(
   4433     Value *S,                     ///< The value to be truncated
   4434     Type *Ty,                     ///< The (smaller) type to truncate to
   4435     const Twine &NameStr,         ///< A name for the new instruction
   4436     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
   4437   );
   4438 
   4439   /// \brief Methods for support type inquiry through isa, cast, and dyn_cast:
   4440   static inline bool classof(const Instruction *I) {
   4441     return I->getOpcode() == Trunc;
   4442   }
   4443   static inline bool classof(const Value *V) {
   4444     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   4445   }
   4446 };
   4447 
   4448 //===----------------------------------------------------------------------===//
   4449 //                                 ZExtInst Class
   4450 //===----------------------------------------------------------------------===//
   4451 
   4452 /// \brief This class represents zero extension of integer types.
   4453 class ZExtInst : public CastInst {
   4454 protected:
   4455   // Note: Instruction needs to be a friend here to call cloneImpl.
   4456   friend class Instruction;
   4457   /// \brief Clone an identical ZExtInst
   4458   ZExtInst *cloneImpl() const;
   4459 
   4460 public:
   4461   /// \brief Constructor with insert-before-instruction semantics
   4462   ZExtInst(
   4463     Value *S,                           ///< The value to be zero extended
   4464     Type *Ty,                           ///< The type to zero extend to
   4465     const Twine &NameStr = "",          ///< A name for the new instruction
   4466     Instruction *InsertBefore = nullptr ///< Where to insert the new instruction
   4467   );
   4468 
   4469   /// \brief Constructor with insert-at-end semantics.
   4470   ZExtInst(
   4471     Value *S,                     ///< The value to be zero extended
   4472     Type *Ty,                     ///< The type to zero extend to
   4473     const Twine &NameStr,         ///< A name for the new instruction
   4474     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
   4475   );
   4476 
   4477   /// \brief Methods for support type inquiry through isa, cast, and dyn_cast:
   4478   static inline bool classof(const Instruction *I) {
   4479     return I->getOpcode() == ZExt;
   4480   }
   4481   static inline bool classof(const Value *V) {
   4482     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   4483   }
   4484 };
   4485 
   4486 //===----------------------------------------------------------------------===//
   4487 //                                 SExtInst Class
   4488 //===----------------------------------------------------------------------===//
   4489 
   4490 /// \brief This class represents a sign extension of integer types.
   4491 class SExtInst : public CastInst {
   4492 protected:
   4493   // Note: Instruction needs to be a friend here to call cloneImpl.
   4494   friend class Instruction;
   4495   /// \brief Clone an identical SExtInst
   4496   SExtInst *cloneImpl() const;
   4497 
   4498 public:
   4499   /// \brief Constructor with insert-before-instruction semantics
   4500   SExtInst(
   4501     Value *S,                           ///< The value to be sign extended
   4502     Type *Ty,                           ///< The type to sign extend to
   4503     const Twine &NameStr = "",          ///< A name for the new instruction
   4504     Instruction *InsertBefore = nullptr ///< Where to insert the new instruction
   4505   );
   4506 
   4507   /// \brief Constructor with insert-at-end-of-block semantics
   4508   SExtInst(
   4509     Value *S,                     ///< The value to be sign extended
   4510     Type *Ty,                     ///< The type to sign extend to
   4511     const Twine &NameStr,         ///< A name for the new instruction
   4512     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
   4513   );
   4514 
   4515   /// \brief Methods for support type inquiry through isa, cast, and dyn_cast:
   4516   static inline bool classof(const Instruction *I) {
   4517     return I->getOpcode() == SExt;
   4518   }
   4519   static inline bool classof(const Value *V) {
   4520     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   4521   }
   4522 };
   4523 
   4524 //===----------------------------------------------------------------------===//
   4525 //                                 FPTruncInst Class
   4526 //===----------------------------------------------------------------------===//
   4527 
   4528 /// \brief This class represents a truncation of floating point types.
   4529 class FPTruncInst : public CastInst {
   4530 protected:
   4531   // Note: Instruction needs to be a friend here to call cloneImpl.
   4532   friend class Instruction;
   4533   /// \brief Clone an identical FPTruncInst
   4534   FPTruncInst *cloneImpl() const;
   4535 
   4536 public:
   4537   /// \brief Constructor with insert-before-instruction semantics
   4538   FPTruncInst(
   4539     Value *S,                           ///< The value to be truncated
   4540     Type *Ty,                           ///< The type to truncate to
   4541     const Twine &NameStr = "",          ///< A name for the new instruction
   4542     Instruction *InsertBefore = nullptr ///< Where to insert the new instruction
   4543   );
   4544 
   4545   /// \brief Constructor with insert-before-instruction semantics
   4546   FPTruncInst(
   4547     Value *S,                     ///< The value to be truncated
   4548     Type *Ty,                     ///< The type to truncate to
   4549     const Twine &NameStr,         ///< A name for the new instruction
   4550     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
   4551   );
   4552 
   4553   /// \brief Methods for support type inquiry through isa, cast, and dyn_cast:
   4554   static inline bool classof(const Instruction *I) {
   4555     return I->getOpcode() == FPTrunc;
   4556   }
   4557   static inline bool classof(const Value *V) {
   4558     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   4559   }
   4560 };
   4561 
   4562 //===----------------------------------------------------------------------===//
   4563 //                                 FPExtInst Class
   4564 //===----------------------------------------------------------------------===//
   4565 
   4566 /// \brief This class represents an extension of floating point types.
   4567 class FPExtInst : public CastInst {
   4568 protected:
   4569   // Note: Instruction needs to be a friend here to call cloneImpl.
   4570   friend class Instruction;
   4571   /// \brief Clone an identical FPExtInst
   4572   FPExtInst *cloneImpl() const;
   4573 
   4574 public:
   4575   /// \brief Constructor with insert-before-instruction semantics
   4576   FPExtInst(
   4577     Value *S,                           ///< The value to be extended
   4578     Type *Ty,                           ///< The type to extend to
   4579     const Twine &NameStr = "",          ///< A name for the new instruction
   4580     Instruction *InsertBefore = nullptr ///< Where to insert the new instruction
   4581   );
   4582 
   4583   /// \brief Constructor with insert-at-end-of-block semantics
   4584   FPExtInst(
   4585     Value *S,                     ///< The value to be extended
   4586     Type *Ty,                     ///< The type to extend to
   4587     const Twine &NameStr,         ///< A name for the new instruction
   4588     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
   4589   );
   4590 
   4591   /// \brief Methods for support type inquiry through isa, cast, and dyn_cast:
   4592   static inline bool classof(const Instruction *I) {
   4593     return I->getOpcode() == FPExt;
   4594   }
   4595   static inline bool classof(const Value *V) {
   4596     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   4597   }
   4598 };
   4599 
   4600 //===----------------------------------------------------------------------===//
   4601 //                                 UIToFPInst Class
   4602 //===----------------------------------------------------------------------===//
   4603 
   4604 /// \brief This class represents a cast unsigned integer to floating point.
   4605 class UIToFPInst : public CastInst {
   4606 protected:
   4607   // Note: Instruction needs to be a friend here to call cloneImpl.
   4608   friend class Instruction;
   4609   /// \brief Clone an identical UIToFPInst
   4610   UIToFPInst *cloneImpl() const;
   4611 
   4612 public:
   4613   /// \brief Constructor with insert-before-instruction semantics
   4614   UIToFPInst(
   4615     Value *S,                           ///< The value to be converted
   4616     Type *Ty,                           ///< The type to convert to
   4617     const Twine &NameStr = "",          ///< A name for the new instruction
   4618     Instruction *InsertBefore = nullptr ///< Where to insert the new instruction
   4619   );
   4620 
   4621   /// \brief Constructor with insert-at-end-of-block semantics
   4622   UIToFPInst(
   4623     Value *S,                     ///< The value to be converted
   4624     Type *Ty,                     ///< The type to convert to
   4625     const Twine &NameStr,         ///< A name for the new instruction
   4626     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
   4627   );
   4628 
   4629   /// \brief Methods for support type inquiry through isa, cast, and dyn_cast:
   4630   static inline bool classof(const Instruction *I) {
   4631     return I->getOpcode() == UIToFP;
   4632   }
   4633   static inline bool classof(const Value *V) {
   4634     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   4635   }
   4636 };
   4637 
   4638 //===----------------------------------------------------------------------===//
   4639 //                                 SIToFPInst Class
   4640 //===----------------------------------------------------------------------===//
   4641 
   4642 /// \brief This class represents a cast from signed integer to floating point.
   4643 class SIToFPInst : public CastInst {
   4644 protected:
   4645   // Note: Instruction needs to be a friend here to call cloneImpl.
   4646   friend class Instruction;
   4647   /// \brief Clone an identical SIToFPInst
   4648   SIToFPInst *cloneImpl() const;
   4649 
   4650 public:
   4651   /// \brief Constructor with insert-before-instruction semantics
   4652   SIToFPInst(
   4653     Value *S,                           ///< The value to be converted
   4654     Type *Ty,                           ///< The type to convert to
   4655     const Twine &NameStr = "",          ///< A name for the new instruction
   4656     Instruction *InsertBefore = nullptr ///< Where to insert the new instruction
   4657   );
   4658 
   4659   /// \brief Constructor with insert-at-end-of-block semantics
   4660   SIToFPInst(
   4661     Value *S,                     ///< The value to be converted
   4662     Type *Ty,                     ///< The type to convert to
   4663     const Twine &NameStr,         ///< A name for the new instruction
   4664     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
   4665   );
   4666 
   4667   /// \brief Methods for support type inquiry through isa, cast, and dyn_cast:
   4668   static inline bool classof(const Instruction *I) {
   4669     return I->getOpcode() == SIToFP;
   4670   }
   4671   static inline bool classof(const Value *V) {
   4672     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   4673   }
   4674 };
   4675 
   4676 //===----------------------------------------------------------------------===//
   4677 //                                 FPToUIInst Class
   4678 //===----------------------------------------------------------------------===//
   4679 
   4680 /// \brief This class represents a cast from floating point to unsigned integer
   4681 class FPToUIInst  : public CastInst {
   4682 protected:
   4683   // Note: Instruction needs to be a friend here to call cloneImpl.
   4684   friend class Instruction;
   4685   /// \brief Clone an identical FPToUIInst
   4686   FPToUIInst *cloneImpl() const;
   4687 
   4688 public:
   4689   /// \brief Constructor with insert-before-instruction semantics
   4690   FPToUIInst(
   4691     Value *S,                           ///< The value to be converted
   4692     Type *Ty,                           ///< The type to convert to
   4693     const Twine &NameStr = "",          ///< A name for the new instruction
   4694     Instruction *InsertBefore = nullptr ///< Where to insert the new instruction
   4695   );
   4696 
   4697   /// \brief Constructor with insert-at-end-of-block semantics
   4698   FPToUIInst(
   4699     Value *S,                     ///< The value to be converted
   4700     Type *Ty,                     ///< The type to convert to
   4701     const Twine &NameStr,         ///< A name for the new instruction
   4702     BasicBlock *InsertAtEnd       ///< Where to insert the new instruction
   4703   );
   4704 
   4705   /// \brief Methods for support type inquiry through isa, cast, and dyn_cast:
   4706   static inline bool classof(const Instruction *I) {
   4707     return I->getOpcode() == FPToUI;
   4708   }
   4709   static inline bool classof(const Value *V) {
   4710     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   4711   }
   4712 };
   4713 
   4714 //===----------------------------------------------------------------------===//
   4715 //                                 FPToSIInst Class
   4716 //===----------------------------------------------------------------------===//
   4717 
   4718 /// \brief This class represents a cast from floating point to signed integer.
   4719 class FPToSIInst  : public CastInst {
   4720 protected:
   4721   // Note: Instruction needs to be a friend here to call cloneImpl.
   4722   friend class Instruction;
   4723   /// \brief Clone an identical FPToSIInst
   4724   FPToSIInst *cloneImpl() const;
   4725 
   4726 public:
   4727   /// \brief Constructor with insert-before-instruction semantics
   4728   FPToSIInst(
   4729     Value *S,                           ///< The value to be converted
   4730     Type *Ty,                           ///< The type to convert to
   4731     const Twine &NameStr = "",          ///< A name for the new instruction
   4732     Instruction *InsertBefore = nullptr ///< Where to insert the new instruction
   4733   );
   4734 
   4735   /// \brief Constructor with insert-at-end-of-block semantics
   4736   FPToSIInst(
   4737     Value *S,                     ///< The value to be converted
   4738     Type *Ty,                     ///< The type to convert to
   4739     const Twine &NameStr,         ///< A name for the new instruction
   4740     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
   4741   );
   4742 
   4743   /// \brief Methods for support type inquiry through isa, cast, and dyn_cast:
   4744   static inline bool classof(const Instruction *I) {
   4745     return I->getOpcode() == FPToSI;
   4746   }
   4747   static inline bool classof(const Value *V) {
   4748     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   4749   }
   4750 };
   4751 
   4752 //===----------------------------------------------------------------------===//
   4753 //                                 IntToPtrInst Class
   4754 //===----------------------------------------------------------------------===//
   4755 
   4756 /// \brief This class represents a cast from an integer to a pointer.
   4757 class IntToPtrInst : public CastInst {
   4758 public:
   4759   /// \brief Constructor with insert-before-instruction semantics
   4760   IntToPtrInst(
   4761     Value *S,                           ///< The value to be converted
   4762     Type *Ty,                           ///< The type to convert to
   4763     const Twine &NameStr = "",          ///< A name for the new instruction
   4764     Instruction *InsertBefore = nullptr ///< Where to insert the new instruction
   4765   );
   4766 
   4767   /// \brief Constructor with insert-at-end-of-block semantics
   4768   IntToPtrInst(
   4769     Value *S,                     ///< The value to be converted
   4770     Type *Ty,                     ///< The type to convert to
   4771     const Twine &NameStr,         ///< A name for the new instruction
   4772     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
   4773   );
   4774 
   4775   // Note: Instruction needs to be a friend here to call cloneImpl.
   4776   friend class Instruction;
   4777   /// \brief Clone an identical IntToPtrInst
   4778   IntToPtrInst *cloneImpl() const;
   4779 
   4780   /// \brief Returns the address space of this instruction's pointer type.
   4781   unsigned getAddressSpace() const {
   4782     return getType()->getPointerAddressSpace();
   4783   }
   4784 
   4785   // Methods for support type inquiry through isa, cast, and dyn_cast:
   4786   static inline bool classof(const Instruction *I) {
   4787     return I->getOpcode() == IntToPtr;
   4788   }
   4789   static inline bool classof(const Value *V) {
   4790     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   4791   }
   4792 };
   4793 
   4794 //===----------------------------------------------------------------------===//
   4795 //                                 PtrToIntInst Class
   4796 //===----------------------------------------------------------------------===//
   4797 
   4798 /// \brief This class represents a cast from a pointer to an integer
   4799 class PtrToIntInst : public CastInst {
   4800 protected:
   4801   // Note: Instruction needs to be a friend here to call cloneImpl.
   4802   friend class Instruction;
   4803   /// \brief Clone an identical PtrToIntInst
   4804   PtrToIntInst *cloneImpl() const;
   4805 
   4806 public:
   4807   /// \brief Constructor with insert-before-instruction semantics
   4808   PtrToIntInst(
   4809     Value *S,                           ///< The value to be converted
   4810     Type *Ty,                           ///< The type to convert to
   4811     const Twine &NameStr = "",          ///< A name for the new instruction
   4812     Instruction *InsertBefore = nullptr ///< Where to insert the new instruction
   4813   );
   4814 
   4815   /// \brief Constructor with insert-at-end-of-block semantics
   4816   PtrToIntInst(
   4817     Value *S,                     ///< The value to be converted
   4818     Type *Ty,                     ///< The type to convert to
   4819     const Twine &NameStr,         ///< A name for the new instruction
   4820     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
   4821   );
   4822 
   4823   /// \brief Gets the pointer operand.
   4824   Value *getPointerOperand() { return getOperand(0); }
   4825   /// \brief Gets the pointer operand.
   4826   const Value *getPointerOperand() const { return getOperand(0); }
   4827   /// \brief Gets the operand index of the pointer operand.
   4828   static unsigned getPointerOperandIndex() { return 0U; }
   4829 
   4830   /// \brief Returns the address space of the pointer operand.
   4831   unsigned getPointerAddressSpace() const {
   4832     return getPointerOperand()->getType()->getPointerAddressSpace();
   4833   }
   4834 
   4835   // Methods for support type inquiry through isa, cast, and dyn_cast:
   4836   static inline bool classof(const Instruction *I) {
   4837     return I->getOpcode() == PtrToInt;
   4838   }
   4839   static inline bool classof(const Value *V) {
   4840     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   4841   }
   4842 };
   4843 
   4844 //===----------------------------------------------------------------------===//
   4845 //                             BitCastInst Class
   4846 //===----------------------------------------------------------------------===//
   4847 
   4848 /// \brief This class represents a no-op cast from one type to another.
   4849 class BitCastInst : public CastInst {
   4850 protected:
   4851   // Note: Instruction needs to be a friend here to call cloneImpl.
   4852   friend class Instruction;
   4853   /// \brief Clone an identical BitCastInst
   4854   BitCastInst *cloneImpl() const;
   4855 
   4856 public:
   4857   /// \brief Constructor with insert-before-instruction semantics
   4858   BitCastInst(
   4859     Value *S,                           ///< The value to be casted
   4860     Type *Ty,                           ///< The type to casted to
   4861     const Twine &NameStr = "",          ///< A name for the new instruction
   4862     Instruction *InsertBefore = nullptr ///< Where to insert the new instruction
   4863   );
   4864 
   4865   /// \brief Constructor with insert-at-end-of-block semantics
   4866   BitCastInst(
   4867     Value *S,                     ///< The value to be casted
   4868     Type *Ty,                     ///< The type to casted to
   4869     const Twine &NameStr,         ///< A name for the new instruction
   4870     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
   4871   );
   4872 
   4873   // Methods for support type inquiry through isa, cast, and dyn_cast:
   4874   static inline bool classof(const Instruction *I) {
   4875     return I->getOpcode() == BitCast;
   4876   }
   4877   static inline bool classof(const Value *V) {
   4878     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   4879   }
   4880 };
   4881 
   4882 //===----------------------------------------------------------------------===//
   4883 //                          AddrSpaceCastInst Class
   4884 //===----------------------------------------------------------------------===//
   4885 
   4886 /// \brief This class represents a conversion between pointers from
   4887 /// one address space to another.
   4888 class AddrSpaceCastInst : public CastInst {
   4889 protected:
   4890   // Note: Instruction needs to be a friend here to call cloneImpl.
   4891   friend class Instruction;
   4892   /// \brief Clone an identical AddrSpaceCastInst
   4893   AddrSpaceCastInst *cloneImpl() const;
   4894 
   4895 public:
   4896   /// \brief Constructor with insert-before-instruction semantics
   4897   AddrSpaceCastInst(
   4898     Value *S,                           ///< The value to be casted
   4899     Type *Ty,                           ///< The type to casted to
   4900     const Twine &NameStr = "",          ///< A name for the new instruction
   4901     Instruction *InsertBefore = nullptr ///< Where to insert the new instruction
   4902   );
   4903 
   4904   /// \brief Constructor with insert-at-end-of-block semantics
   4905   AddrSpaceCastInst(
   4906     Value *S,                     ///< The value to be casted
   4907     Type *Ty,                     ///< The type to casted to
   4908     const Twine &NameStr,         ///< A name for the new instruction
   4909     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
   4910   );
   4911 
   4912   // Methods for support type inquiry through isa, cast, and dyn_cast:
   4913   static inline bool classof(const Instruction *I) {
   4914     return I->getOpcode() == AddrSpaceCast;
   4915   }
   4916   static inline bool classof(const Value *V) {
   4917     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   4918   }
   4919 
   4920   /// \brief Gets the pointer operand.
   4921   Value *getPointerOperand() {
   4922     return getOperand(0);
   4923   }
   4924 
   4925   /// \brief Gets the pointer operand.
   4926   const Value *getPointerOperand() const {
   4927     return getOperand(0);
   4928   }
   4929 
   4930   /// \brief Gets the operand index of the pointer operand.
   4931   static unsigned getPointerOperandIndex() {
   4932     return 0U;
   4933   }
   4934 
   4935   /// \brief Returns the address space of the pointer operand.
   4936   unsigned getSrcAddressSpace() const {
   4937     return getPointerOperand()->getType()->getPointerAddressSpace();
   4938   }
   4939 
   4940   /// \brief Returns the address space of the result.
   4941   unsigned getDestAddressSpace() const {
   4942     return getType()->getPointerAddressSpace();
   4943   }
   4944 };
   4945 
   4946 } // End llvm namespace
   4947 
   4948 #endif
   4949