Home | History | Annotate | Download | only in llvm
      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_INSTRUCTIONS_H
     17 #define LLVM_INSTRUCTIONS_H
     18 
     19 #include "llvm/InstrTypes.h"
     20 #include "llvm/DerivedTypes.h"
     21 #include "llvm/Attributes.h"
     22 #include "llvm/CallingConv.h"
     23 #include "llvm/ADT/ArrayRef.h"
     24 #include "llvm/ADT/SmallVector.h"
     25 #include "llvm/Support/ErrorHandling.h"
     26 #include <iterator>
     27 
     28 namespace llvm {
     29 
     30 class ConstantInt;
     31 class ConstantRange;
     32 class APInt;
     33 class LLVMContext;
     34 
     35 enum AtomicOrdering {
     36   NotAtomic = 0,
     37   Unordered = 1,
     38   Monotonic = 2,
     39   // Consume = 3,  // Not specified yet.
     40   Acquire = 4,
     41   Release = 5,
     42   AcquireRelease = 6,
     43   SequentiallyConsistent = 7
     44 };
     45 
     46 enum SynchronizationScope {
     47   SingleThread = 0,
     48   CrossThread = 1
     49 };
     50 
     51 //===----------------------------------------------------------------------===//
     52 //                                AllocaInst Class
     53 //===----------------------------------------------------------------------===//
     54 
     55 /// AllocaInst - an instruction to allocate memory on the stack
     56 ///
     57 class AllocaInst : public UnaryInstruction {
     58 protected:
     59   virtual AllocaInst *clone_impl() const;
     60 public:
     61   explicit AllocaInst(Type *Ty, Value *ArraySize = 0,
     62                       const Twine &Name = "", Instruction *InsertBefore = 0);
     63   AllocaInst(Type *Ty, Value *ArraySize,
     64              const Twine &Name, BasicBlock *InsertAtEnd);
     65 
     66   AllocaInst(Type *Ty, const Twine &Name, Instruction *InsertBefore = 0);
     67   AllocaInst(Type *Ty, const Twine &Name, BasicBlock *InsertAtEnd);
     68 
     69   AllocaInst(Type *Ty, Value *ArraySize, unsigned Align,
     70              const Twine &Name = "", Instruction *InsertBefore = 0);
     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   virtual ~AllocaInst();
     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 reinterpret_cast<PointerType*>(Instruction::getType());
     92   }
     93 
     94   /// getAllocatedType - Return the type that is being allocated by the
     95   /// instruction.
     96   ///
     97   Type *getAllocatedType() const;
     98 
     99   /// getAlignment - Return the alignment of the memory that is being allocated
    100   /// by the instruction.
    101   ///
    102   unsigned getAlignment() const {
    103     return (1u << getSubclassDataFromInstruction()) >> 1;
    104   }
    105   void setAlignment(unsigned Align);
    106 
    107   /// isStaticAlloca - Return true if this alloca is in the entry block of the
    108   /// function and is a constant size.  If so, the code generator will fold it
    109   /// into the prolog/epilog code, so it is basically free.
    110   bool isStaticAlloca() const;
    111 
    112   // Methods for support type inquiry through isa, cast, and dyn_cast:
    113   static inline bool classof(const AllocaInst *) { return true; }
    114   static inline bool classof(const Instruction *I) {
    115     return (I->getOpcode() == Instruction::Alloca);
    116   }
    117   static inline bool classof(const Value *V) {
    118     return isa<Instruction>(V) && classof(cast<Instruction>(V));
    119   }
    120 private:
    121   // Shadow Instruction::setInstructionSubclassData with a private forwarding
    122   // method so that subclasses cannot accidentally use it.
    123   void setInstructionSubclassData(unsigned short D) {
    124     Instruction::setInstructionSubclassData(D);
    125   }
    126 };
    127 
    128 
    129 //===----------------------------------------------------------------------===//
    130 //                                LoadInst Class
    131 //===----------------------------------------------------------------------===//
    132 
    133 /// LoadInst - an instruction for reading from memory.  This uses the
    134 /// SubclassData field in Value to store whether or not the load is volatile.
    135 ///
    136 class LoadInst : public UnaryInstruction {
    137   void AssertOK();
    138 protected:
    139   virtual LoadInst *clone_impl() const;
    140 public:
    141   LoadInst(Value *Ptr, const Twine &NameStr, Instruction *InsertBefore);
    142   LoadInst(Value *Ptr, const Twine &NameStr, BasicBlock *InsertAtEnd);
    143   LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile = false,
    144            Instruction *InsertBefore = 0);
    145   LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile,
    146            BasicBlock *InsertAtEnd);
    147   LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile,
    148            unsigned Align, Instruction *InsertBefore = 0);
    149   LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile,
    150            unsigned Align, BasicBlock *InsertAtEnd);
    151   LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile,
    152            unsigned Align, AtomicOrdering Order,
    153            SynchronizationScope SynchScope = CrossThread,
    154            Instruction *InsertBefore = 0);
    155   LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile,
    156            unsigned Align, AtomicOrdering Order,
    157            SynchronizationScope SynchScope,
    158            BasicBlock *InsertAtEnd);
    159 
    160   LoadInst(Value *Ptr, const char *NameStr, Instruction *InsertBefore);
    161   LoadInst(Value *Ptr, const char *NameStr, BasicBlock *InsertAtEnd);
    162   explicit LoadInst(Value *Ptr, const char *NameStr = 0,
    163                     bool isVolatile = false,  Instruction *InsertBefore = 0);
    164   LoadInst(Value *Ptr, const char *NameStr, bool isVolatile,
    165            BasicBlock *InsertAtEnd);
    166 
    167   /// isVolatile - Return true if this is a load from a volatile memory
    168   /// location.
    169   ///
    170   bool isVolatile() const { return getSubclassDataFromInstruction() & 1; }
    171 
    172   /// setVolatile - Specify whether this is a volatile load or not.
    173   ///
    174   void setVolatile(bool V) {
    175     setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) |
    176                                (V ? 1 : 0));
    177   }
    178 
    179   /// getAlignment - Return the alignment of the access that is being performed
    180   ///
    181   unsigned getAlignment() const {
    182     return (1 << ((getSubclassDataFromInstruction() >> 1) & 31)) >> 1;
    183   }
    184 
    185   void setAlignment(unsigned Align);
    186 
    187   /// Returns the ordering effect of this fence.
    188   AtomicOrdering getOrdering() const {
    189     return AtomicOrdering((getSubclassDataFromInstruction() >> 7) & 7);
    190   }
    191 
    192   /// Set the ordering constraint on this load. May not be Release or
    193   /// AcquireRelease.
    194   void setOrdering(AtomicOrdering Ordering) {
    195     setInstructionSubclassData((getSubclassDataFromInstruction() & ~(7 << 7)) |
    196                                (Ordering << 7));
    197   }
    198 
    199   SynchronizationScope getSynchScope() const {
    200     return SynchronizationScope((getSubclassDataFromInstruction() >> 6) & 1);
    201   }
    202 
    203   /// Specify whether this load is ordered with respect to all
    204   /// concurrently executing threads, or only with respect to signal handlers
    205   /// executing in the same thread.
    206   void setSynchScope(SynchronizationScope xthread) {
    207     setInstructionSubclassData((getSubclassDataFromInstruction() & ~(1 << 6)) |
    208                                (xthread << 6));
    209   }
    210 
    211   bool isAtomic() const { return getOrdering() != NotAtomic; }
    212   void setAtomic(AtomicOrdering Ordering,
    213                  SynchronizationScope SynchScope = CrossThread) {
    214     setOrdering(Ordering);
    215     setSynchScope(SynchScope);
    216   }
    217 
    218   bool isSimple() const { return !isAtomic() && !isVolatile(); }
    219   bool isUnordered() const {
    220     return getOrdering() <= Unordered && !isVolatile();
    221   }
    222 
    223   Value *getPointerOperand() { return getOperand(0); }
    224   const Value *getPointerOperand() const { return getOperand(0); }
    225   static unsigned getPointerOperandIndex() { return 0U; }
    226 
    227   unsigned getPointerAddressSpace() const {
    228     return cast<PointerType>(getPointerOperand()->getType())->getAddressSpace();
    229   }
    230 
    231 
    232   // Methods for support type inquiry through isa, cast, and dyn_cast:
    233   static inline bool classof(const LoadInst *) { return true; }
    234   static inline bool classof(const Instruction *I) {
    235     return I->getOpcode() == Instruction::Load;
    236   }
    237   static inline bool classof(const Value *V) {
    238     return isa<Instruction>(V) && classof(cast<Instruction>(V));
    239   }
    240 private:
    241   // Shadow Instruction::setInstructionSubclassData with a private forwarding
    242   // method so that subclasses cannot accidentally use it.
    243   void setInstructionSubclassData(unsigned short D) {
    244     Instruction::setInstructionSubclassData(D);
    245   }
    246 };
    247 
    248 
    249 //===----------------------------------------------------------------------===//
    250 //                                StoreInst Class
    251 //===----------------------------------------------------------------------===//
    252 
    253 /// StoreInst - an instruction for storing to memory
    254 ///
    255 class StoreInst : public Instruction {
    256   void *operator new(size_t, unsigned);  // DO NOT IMPLEMENT
    257   void AssertOK();
    258 protected:
    259   virtual StoreInst *clone_impl() const;
    260 public:
    261   // allocate space for exactly two operands
    262   void *operator new(size_t s) {
    263     return User::operator new(s, 2);
    264   }
    265   StoreInst(Value *Val, Value *Ptr, Instruction *InsertBefore);
    266   StoreInst(Value *Val, Value *Ptr, BasicBlock *InsertAtEnd);
    267   StoreInst(Value *Val, Value *Ptr, bool isVolatile = false,
    268             Instruction *InsertBefore = 0);
    269   StoreInst(Value *Val, Value *Ptr, bool isVolatile, BasicBlock *InsertAtEnd);
    270   StoreInst(Value *Val, Value *Ptr, bool isVolatile,
    271             unsigned Align, Instruction *InsertBefore = 0);
    272   StoreInst(Value *Val, Value *Ptr, bool isVolatile,
    273             unsigned Align, BasicBlock *InsertAtEnd);
    274   StoreInst(Value *Val, Value *Ptr, bool isVolatile,
    275             unsigned Align, AtomicOrdering Order,
    276             SynchronizationScope SynchScope = CrossThread,
    277             Instruction *InsertBefore = 0);
    278   StoreInst(Value *Val, Value *Ptr, bool isVolatile,
    279             unsigned Align, AtomicOrdering Order,
    280             SynchronizationScope SynchScope,
    281             BasicBlock *InsertAtEnd);
    282 
    283 
    284   /// isVolatile - Return true if this is a store to a volatile memory
    285   /// location.
    286   ///
    287   bool isVolatile() const { return getSubclassDataFromInstruction() & 1; }
    288 
    289   /// setVolatile - Specify whether this is a volatile store or not.
    290   ///
    291   void setVolatile(bool V) {
    292     setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) |
    293                                (V ? 1 : 0));
    294   }
    295 
    296   /// Transparently provide more efficient getOperand methods.
    297   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
    298 
    299   /// getAlignment - Return the alignment of the access that is being performed
    300   ///
    301   unsigned getAlignment() const {
    302     return (1 << ((getSubclassDataFromInstruction() >> 1) & 31)) >> 1;
    303   }
    304 
    305   void setAlignment(unsigned Align);
    306 
    307   /// Returns the ordering effect of this store.
    308   AtomicOrdering getOrdering() const {
    309     return AtomicOrdering((getSubclassDataFromInstruction() >> 7) & 7);
    310   }
    311 
    312   /// Set the ordering constraint on this store.  May not be Acquire or
    313   /// AcquireRelease.
    314   void setOrdering(AtomicOrdering Ordering) {
    315     setInstructionSubclassData((getSubclassDataFromInstruction() & ~(7 << 7)) |
    316                                (Ordering << 7));
    317   }
    318 
    319   SynchronizationScope getSynchScope() const {
    320     return SynchronizationScope((getSubclassDataFromInstruction() >> 6) & 1);
    321   }
    322 
    323   /// Specify whether this store instruction is ordered with respect to all
    324   /// concurrently executing threads, or only with respect to signal handlers
    325   /// executing in the same thread.
    326   void setSynchScope(SynchronizationScope xthread) {
    327     setInstructionSubclassData((getSubclassDataFromInstruction() & ~(1 << 6)) |
    328                                (xthread << 6));
    329   }
    330 
    331   bool isAtomic() const { return getOrdering() != NotAtomic; }
    332   void setAtomic(AtomicOrdering Ordering,
    333                  SynchronizationScope SynchScope = CrossThread) {
    334     setOrdering(Ordering);
    335     setSynchScope(SynchScope);
    336   }
    337 
    338   bool isSimple() const { return !isAtomic() && !isVolatile(); }
    339   bool isUnordered() const {
    340     return getOrdering() <= Unordered && !isVolatile();
    341   }
    342 
    343   Value *getValueOperand() { return getOperand(0); }
    344   const Value *getValueOperand() const { return getOperand(0); }
    345 
    346   Value *getPointerOperand() { return getOperand(1); }
    347   const Value *getPointerOperand() const { return getOperand(1); }
    348   static unsigned getPointerOperandIndex() { return 1U; }
    349 
    350   unsigned getPointerAddressSpace() const {
    351     return cast<PointerType>(getPointerOperand()->getType())->getAddressSpace();
    352   }
    353 
    354   // Methods for support type inquiry through isa, cast, and dyn_cast:
    355   static inline bool classof(const StoreInst *) { return true; }
    356   static inline bool classof(const Instruction *I) {
    357     return I->getOpcode() == Instruction::Store;
    358   }
    359   static inline bool classof(const Value *V) {
    360     return isa<Instruction>(V) && classof(cast<Instruction>(V));
    361   }
    362 private:
    363   // Shadow Instruction::setInstructionSubclassData with a private forwarding
    364   // method so that subclasses cannot accidentally use it.
    365   void setInstructionSubclassData(unsigned short D) {
    366     Instruction::setInstructionSubclassData(D);
    367   }
    368 };
    369 
    370 template <>
    371 struct OperandTraits<StoreInst> : public FixedNumOperandTraits<StoreInst, 2> {
    372 };
    373 
    374 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(StoreInst, Value)
    375 
    376 //===----------------------------------------------------------------------===//
    377 //                                FenceInst Class
    378 //===----------------------------------------------------------------------===//
    379 
    380 /// FenceInst - an instruction for ordering other memory operations
    381 ///
    382 class FenceInst : public Instruction {
    383   void *operator new(size_t, unsigned);  // DO NOT IMPLEMENT
    384   void Init(AtomicOrdering Ordering, SynchronizationScope SynchScope);
    385 protected:
    386   virtual FenceInst *clone_impl() const;
    387 public:
    388   // allocate space for exactly zero operands
    389   void *operator new(size_t s) {
    390     return User::operator new(s, 0);
    391   }
    392 
    393   // Ordering may only be Acquire, Release, AcquireRelease, or
    394   // SequentiallyConsistent.
    395   FenceInst(LLVMContext &C, AtomicOrdering Ordering,
    396             SynchronizationScope SynchScope = CrossThread,
    397             Instruction *InsertBefore = 0);
    398   FenceInst(LLVMContext &C, AtomicOrdering Ordering,
    399             SynchronizationScope SynchScope,
    400             BasicBlock *InsertAtEnd);
    401 
    402   /// Returns the ordering effect of this fence.
    403   AtomicOrdering getOrdering() const {
    404     return AtomicOrdering(getSubclassDataFromInstruction() >> 1);
    405   }
    406 
    407   /// Set the ordering constraint on this fence.  May only be Acquire, Release,
    408   /// AcquireRelease, or SequentiallyConsistent.
    409   void setOrdering(AtomicOrdering Ordering) {
    410     setInstructionSubclassData((getSubclassDataFromInstruction() & 1) |
    411                                (Ordering << 1));
    412   }
    413 
    414   SynchronizationScope getSynchScope() const {
    415     return SynchronizationScope(getSubclassDataFromInstruction() & 1);
    416   }
    417 
    418   /// Specify whether this fence orders other operations with respect to all
    419   /// concurrently executing threads, or only with respect to signal handlers
    420   /// executing in the same thread.
    421   void setSynchScope(SynchronizationScope xthread) {
    422     setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) |
    423                                xthread);
    424   }
    425 
    426   // Methods for support type inquiry through isa, cast, and dyn_cast:
    427   static inline bool classof(const FenceInst *) { return true; }
    428   static inline bool classof(const Instruction *I) {
    429     return I->getOpcode() == Instruction::Fence;
    430   }
    431   static inline bool classof(const Value *V) {
    432     return isa<Instruction>(V) && classof(cast<Instruction>(V));
    433   }
    434 private:
    435   // Shadow Instruction::setInstructionSubclassData with a private forwarding
    436   // method so that subclasses cannot accidentally use it.
    437   void setInstructionSubclassData(unsigned short D) {
    438     Instruction::setInstructionSubclassData(D);
    439   }
    440 };
    441 
    442 //===----------------------------------------------------------------------===//
    443 //                                AtomicCmpXchgInst Class
    444 //===----------------------------------------------------------------------===//
    445 
    446 /// AtomicCmpXchgInst - an instruction that atomically checks whether a
    447 /// specified value is in a memory location, and, if it is, stores a new value
    448 /// there.  Returns the value that was loaded.
    449 ///
    450 class AtomicCmpXchgInst : public Instruction {
    451   void *operator new(size_t, unsigned);  // DO NOT IMPLEMENT
    452   void Init(Value *Ptr, Value *Cmp, Value *NewVal,
    453             AtomicOrdering Ordering, SynchronizationScope SynchScope);
    454 protected:
    455   virtual AtomicCmpXchgInst *clone_impl() const;
    456 public:
    457   // allocate space for exactly three operands
    458   void *operator new(size_t s) {
    459     return User::operator new(s, 3);
    460   }
    461   AtomicCmpXchgInst(Value *Ptr, Value *Cmp, Value *NewVal,
    462                     AtomicOrdering Ordering, SynchronizationScope SynchScope,
    463                     Instruction *InsertBefore = 0);
    464   AtomicCmpXchgInst(Value *Ptr, Value *Cmp, Value *NewVal,
    465                     AtomicOrdering Ordering, SynchronizationScope SynchScope,
    466                     BasicBlock *InsertAtEnd);
    467 
    468   /// isVolatile - Return true if this is a cmpxchg from a volatile memory
    469   /// location.
    470   ///
    471   bool isVolatile() const {
    472     return getSubclassDataFromInstruction() & 1;
    473   }
    474 
    475   /// setVolatile - Specify whether this is a volatile cmpxchg.
    476   ///
    477   void setVolatile(bool V) {
    478      setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) |
    479                                 (unsigned)V);
    480   }
    481 
    482   /// Transparently provide more efficient getOperand methods.
    483   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
    484 
    485   /// Set the ordering constraint on this cmpxchg.
    486   void setOrdering(AtomicOrdering Ordering) {
    487     assert(Ordering != NotAtomic &&
    488            "CmpXchg instructions can only be atomic.");
    489     setInstructionSubclassData((getSubclassDataFromInstruction() & 3) |
    490                                (Ordering << 2));
    491   }
    492 
    493   /// Specify whether this cmpxchg is atomic and orders other operations with
    494   /// respect to all concurrently executing threads, or only with respect to
    495   /// signal handlers executing in the same thread.
    496   void setSynchScope(SynchronizationScope SynchScope) {
    497     setInstructionSubclassData((getSubclassDataFromInstruction() & ~2) |
    498                                (SynchScope << 1));
    499   }
    500 
    501   /// Returns the ordering constraint on this cmpxchg.
    502   AtomicOrdering getOrdering() const {
    503     return AtomicOrdering(getSubclassDataFromInstruction() >> 2);
    504   }
    505 
    506   /// Returns whether this cmpxchg is atomic between threads or only within a
    507   /// single thread.
    508   SynchronizationScope getSynchScope() const {
    509     return SynchronizationScope((getSubclassDataFromInstruction() & 2) >> 1);
    510   }
    511 
    512   Value *getPointerOperand() { return getOperand(0); }
    513   const Value *getPointerOperand() const { return getOperand(0); }
    514   static unsigned getPointerOperandIndex() { return 0U; }
    515 
    516   Value *getCompareOperand() { return getOperand(1); }
    517   const Value *getCompareOperand() const { return getOperand(1); }
    518 
    519   Value *getNewValOperand() { return getOperand(2); }
    520   const Value *getNewValOperand() const { return getOperand(2); }
    521 
    522   unsigned getPointerAddressSpace() const {
    523     return cast<PointerType>(getPointerOperand()->getType())->getAddressSpace();
    524   }
    525 
    526   // Methods for support type inquiry through isa, cast, and dyn_cast:
    527   static inline bool classof(const AtomicCmpXchgInst *) { return true; }
    528   static inline bool classof(const Instruction *I) {
    529     return I->getOpcode() == Instruction::AtomicCmpXchg;
    530   }
    531   static inline bool classof(const Value *V) {
    532     return isa<Instruction>(V) && classof(cast<Instruction>(V));
    533   }
    534 private:
    535   // Shadow Instruction::setInstructionSubclassData with a private forwarding
    536   // method so that subclasses cannot accidentally use it.
    537   void setInstructionSubclassData(unsigned short D) {
    538     Instruction::setInstructionSubclassData(D);
    539   }
    540 };
    541 
    542 template <>
    543 struct OperandTraits<AtomicCmpXchgInst> :
    544     public FixedNumOperandTraits<AtomicCmpXchgInst, 3> {
    545 };
    546 
    547 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(AtomicCmpXchgInst, Value)
    548 
    549 //===----------------------------------------------------------------------===//
    550 //                                AtomicRMWInst Class
    551 //===----------------------------------------------------------------------===//
    552 
    553 /// AtomicRMWInst - an instruction that atomically reads a memory location,
    554 /// combines it with another value, and then stores the result back.  Returns
    555 /// the old value.
    556 ///
    557 class AtomicRMWInst : public Instruction {
    558   void *operator new(size_t, unsigned);  // DO NOT IMPLEMENT
    559 protected:
    560   virtual AtomicRMWInst *clone_impl() const;
    561 public:
    562   /// This enumeration lists the possible modifications atomicrmw can make.  In
    563   /// the descriptions, 'p' is the pointer to the instruction's memory location,
    564   /// 'old' is the initial value of *p, and 'v' is the other value passed to the
    565   /// instruction.  These instructions always return 'old'.
    566   enum BinOp {
    567     /// *p = v
    568     Xchg,
    569     /// *p = old + v
    570     Add,
    571     /// *p = old - v
    572     Sub,
    573     /// *p = old & v
    574     And,
    575     /// *p = ~old & v
    576     Nand,
    577     /// *p = old | v
    578     Or,
    579     /// *p = old ^ v
    580     Xor,
    581     /// *p = old >signed v ? old : v
    582     Max,
    583     /// *p = old <signed v ? old : v
    584     Min,
    585     /// *p = old >unsigned v ? old : v
    586     UMax,
    587     /// *p = old <unsigned v ? old : v
    588     UMin,
    589 
    590     FIRST_BINOP = Xchg,
    591     LAST_BINOP = UMin,
    592     BAD_BINOP
    593   };
    594 
    595   // allocate space for exactly two operands
    596   void *operator new(size_t s) {
    597     return User::operator new(s, 2);
    598   }
    599   AtomicRMWInst(BinOp Operation, Value *Ptr, Value *Val,
    600                 AtomicOrdering Ordering, SynchronizationScope SynchScope,
    601                 Instruction *InsertBefore = 0);
    602   AtomicRMWInst(BinOp Operation, Value *Ptr, Value *Val,
    603                 AtomicOrdering Ordering, SynchronizationScope SynchScope,
    604                 BasicBlock *InsertAtEnd);
    605 
    606   BinOp getOperation() const {
    607     return static_cast<BinOp>(getSubclassDataFromInstruction() >> 5);
    608   }
    609 
    610   void setOperation(BinOp Operation) {
    611     unsigned short SubclassData = getSubclassDataFromInstruction();
    612     setInstructionSubclassData((SubclassData & 31) |
    613                                (Operation << 5));
    614   }
    615 
    616   /// isVolatile - Return true if this is a RMW on a volatile memory location.
    617   ///
    618   bool isVolatile() const {
    619     return getSubclassDataFromInstruction() & 1;
    620   }
    621 
    622   /// setVolatile - Specify whether this is a volatile RMW or not.
    623   ///
    624   void setVolatile(bool V) {
    625      setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) |
    626                                 (unsigned)V);
    627   }
    628 
    629   /// Transparently provide more efficient getOperand methods.
    630   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
    631 
    632   /// Set the ordering constraint on this RMW.
    633   void setOrdering(AtomicOrdering Ordering) {
    634     assert(Ordering != NotAtomic &&
    635            "atomicrmw instructions can only be atomic.");
    636     setInstructionSubclassData((getSubclassDataFromInstruction() & ~(7 << 2)) |
    637                                (Ordering << 2));
    638   }
    639 
    640   /// Specify whether this RMW orders other operations with respect to all
    641   /// concurrently executing threads, or only with respect to signal handlers
    642   /// executing in the same thread.
    643   void setSynchScope(SynchronizationScope SynchScope) {
    644     setInstructionSubclassData((getSubclassDataFromInstruction() & ~2) |
    645                                (SynchScope << 1));
    646   }
    647 
    648   /// Returns the ordering constraint on this RMW.
    649   AtomicOrdering getOrdering() const {
    650     return AtomicOrdering((getSubclassDataFromInstruction() >> 2) & 7);
    651   }
    652 
    653   /// Returns whether this RMW is atomic between threads or only within a
    654   /// single thread.
    655   SynchronizationScope getSynchScope() const {
    656     return SynchronizationScope((getSubclassDataFromInstruction() & 2) >> 1);
    657   }
    658 
    659   Value *getPointerOperand() { return getOperand(0); }
    660   const Value *getPointerOperand() const { return getOperand(0); }
    661   static unsigned getPointerOperandIndex() { return 0U; }
    662 
    663   Value *getValOperand() { return getOperand(1); }
    664   const Value *getValOperand() const { return getOperand(1); }
    665 
    666   unsigned getPointerAddressSpace() const {
    667     return cast<PointerType>(getPointerOperand()->getType())->getAddressSpace();
    668   }
    669 
    670   // Methods for support type inquiry through isa, cast, and dyn_cast:
    671   static inline bool classof(const AtomicRMWInst *) { return true; }
    672   static inline bool classof(const Instruction *I) {
    673     return I->getOpcode() == Instruction::AtomicRMW;
    674   }
    675   static inline bool classof(const Value *V) {
    676     return isa<Instruction>(V) && classof(cast<Instruction>(V));
    677   }
    678 private:
    679   void Init(BinOp Operation, Value *Ptr, Value *Val,
    680             AtomicOrdering Ordering, SynchronizationScope SynchScope);
    681   // Shadow Instruction::setInstructionSubclassData with a private forwarding
    682   // method so that subclasses cannot accidentally use it.
    683   void setInstructionSubclassData(unsigned short D) {
    684     Instruction::setInstructionSubclassData(D);
    685   }
    686 };
    687 
    688 template <>
    689 struct OperandTraits<AtomicRMWInst>
    690     : public FixedNumOperandTraits<AtomicRMWInst,2> {
    691 };
    692 
    693 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(AtomicRMWInst, Value)
    694 
    695 //===----------------------------------------------------------------------===//
    696 //                             GetElementPtrInst Class
    697 //===----------------------------------------------------------------------===//
    698 
    699 // checkGEPType - Simple wrapper function to give a better assertion failure
    700 // message on bad indexes for a gep instruction.
    701 //
    702 static inline Type *checkGEPType(Type *Ty) {
    703   assert(Ty && "Invalid GetElementPtrInst indices for type!");
    704   return Ty;
    705 }
    706 
    707 /// GetElementPtrInst - an instruction for type-safe pointer arithmetic to
    708 /// access elements of arrays and structs
    709 ///
    710 class GetElementPtrInst : public Instruction {
    711   GetElementPtrInst(const GetElementPtrInst &GEPI);
    712   void init(Value *Ptr, ArrayRef<Value *> IdxList, const Twine &NameStr);
    713 
    714   /// Constructors - Create a getelementptr instruction with a base pointer an
    715   /// list of indices. The first ctor can optionally insert before an existing
    716   /// instruction, the second appends the new instruction to the specified
    717   /// BasicBlock.
    718   inline GetElementPtrInst(Value *Ptr, ArrayRef<Value *> IdxList,
    719                            unsigned Values, const Twine &NameStr,
    720                            Instruction *InsertBefore);
    721   inline GetElementPtrInst(Value *Ptr, ArrayRef<Value *> IdxList,
    722                            unsigned Values, const Twine &NameStr,
    723                            BasicBlock *InsertAtEnd);
    724 protected:
    725   virtual GetElementPtrInst *clone_impl() const;
    726 public:
    727   static GetElementPtrInst *Create(Value *Ptr, ArrayRef<Value *> IdxList,
    728                                    const Twine &NameStr = "",
    729                                    Instruction *InsertBefore = 0) {
    730     unsigned Values = 1 + unsigned(IdxList.size());
    731     return new(Values)
    732       GetElementPtrInst(Ptr, IdxList, Values, NameStr, InsertBefore);
    733   }
    734   static GetElementPtrInst *Create(Value *Ptr, ArrayRef<Value *> IdxList,
    735                                    const Twine &NameStr,
    736                                    BasicBlock *InsertAtEnd) {
    737     unsigned Values = 1 + unsigned(IdxList.size());
    738     return new(Values)
    739       GetElementPtrInst(Ptr, IdxList, Values, NameStr, InsertAtEnd);
    740   }
    741 
    742   /// Create an "inbounds" getelementptr. See the documentation for the
    743   /// "inbounds" flag in LangRef.html for details.
    744   static GetElementPtrInst *CreateInBounds(Value *Ptr,
    745                                            ArrayRef<Value *> IdxList,
    746                                            const Twine &NameStr = "",
    747                                            Instruction *InsertBefore = 0) {
    748     GetElementPtrInst *GEP = Create(Ptr, IdxList, NameStr, InsertBefore);
    749     GEP->setIsInBounds(true);
    750     return GEP;
    751   }
    752   static GetElementPtrInst *CreateInBounds(Value *Ptr,
    753                                            ArrayRef<Value *> IdxList,
    754                                            const Twine &NameStr,
    755                                            BasicBlock *InsertAtEnd) {
    756     GetElementPtrInst *GEP = Create(Ptr, IdxList, NameStr, InsertAtEnd);
    757     GEP->setIsInBounds(true);
    758     return GEP;
    759   }
    760 
    761   /// Transparently provide more efficient getOperand methods.
    762   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
    763 
    764   // getType - Overload to return most specific pointer type...
    765   PointerType *getType() const {
    766     return reinterpret_cast<PointerType*>(Instruction::getType());
    767   }
    768 
    769   /// getIndexedType - Returns the type of the element that would be loaded with
    770   /// a load instruction with the specified parameters.
    771   ///
    772   /// Null is returned if the indices are invalid for the specified
    773   /// pointer type.
    774   ///
    775   static Type *getIndexedType(Type *Ptr, ArrayRef<Value *> IdxList);
    776   static Type *getIndexedType(Type *Ptr, ArrayRef<Constant *> IdxList);
    777   static Type *getIndexedType(Type *Ptr, ArrayRef<uint64_t> IdxList);
    778 
    779   /// getIndexedType - Returns the address space used by the GEP pointer.
    780   ///
    781   static unsigned getAddressSpace(Value *Ptr);
    782 
    783   inline op_iterator       idx_begin()       { return op_begin()+1; }
    784   inline const_op_iterator idx_begin() const { return op_begin()+1; }
    785   inline op_iterator       idx_end()         { return op_end(); }
    786   inline const_op_iterator idx_end()   const { return op_end(); }
    787 
    788   Value *getPointerOperand() {
    789     return getOperand(0);
    790   }
    791   const Value *getPointerOperand() const {
    792     return getOperand(0);
    793   }
    794   static unsigned getPointerOperandIndex() {
    795     return 0U;    // get index for modifying correct operand.
    796   }
    797 
    798   unsigned getPointerAddressSpace() const {
    799     return cast<PointerType>(getType())->getAddressSpace();
    800   }
    801 
    802   /// getPointerOperandType - Method to return the pointer operand as a
    803   /// PointerType.
    804   Type *getPointerOperandType() const {
    805     return getPointerOperand()->getType();
    806   }
    807 
    808   /// GetGEPReturnType - Returns the pointer type returned by the GEP
    809   /// instruction, which may be a vector of pointers.
    810   static Type *getGEPReturnType(Value *Ptr, ArrayRef<Value *> IdxList) {
    811     Type *PtrTy = PointerType::get(checkGEPType(
    812                                    getIndexedType(Ptr->getType(), IdxList)),
    813                                    getAddressSpace(Ptr));
    814     // Vector GEP
    815     if (Ptr->getType()->isVectorTy()) {
    816       unsigned NumElem = cast<VectorType>(Ptr->getType())->getNumElements();
    817       return VectorType::get(PtrTy, NumElem);
    818     }
    819 
    820     // Scalar GEP
    821     return PtrTy;
    822   }
    823 
    824   unsigned getNumIndices() const {  // Note: always non-negative
    825     return getNumOperands() - 1;
    826   }
    827 
    828   bool hasIndices() const {
    829     return getNumOperands() > 1;
    830   }
    831 
    832   /// hasAllZeroIndices - Return true if all of the indices of this GEP are
    833   /// zeros.  If so, the result pointer and the first operand have the same
    834   /// value, just potentially different types.
    835   bool hasAllZeroIndices() const;
    836 
    837   /// hasAllConstantIndices - Return true if all of the indices of this GEP are
    838   /// constant integers.  If so, the result pointer and the first operand have
    839   /// a constant offset between them.
    840   bool hasAllConstantIndices() const;
    841 
    842   /// setIsInBounds - Set or clear the inbounds flag on this GEP instruction.
    843   /// See LangRef.html for the meaning of inbounds on a getelementptr.
    844   void setIsInBounds(bool b = true);
    845 
    846   /// isInBounds - Determine whether the GEP has the inbounds flag.
    847   bool isInBounds() const;
    848 
    849   // Methods for support type inquiry through isa, cast, and dyn_cast:
    850   static inline bool classof(const GetElementPtrInst *) { return true; }
    851   static inline bool classof(const Instruction *I) {
    852     return (I->getOpcode() == Instruction::GetElementPtr);
    853   }
    854   static inline bool classof(const Value *V) {
    855     return isa<Instruction>(V) && classof(cast<Instruction>(V));
    856   }
    857 };
    858 
    859 template <>
    860 struct OperandTraits<GetElementPtrInst> :
    861   public VariadicOperandTraits<GetElementPtrInst, 1> {
    862 };
    863 
    864 GetElementPtrInst::GetElementPtrInst(Value *Ptr,
    865                                      ArrayRef<Value *> IdxList,
    866                                      unsigned Values,
    867                                      const Twine &NameStr,
    868                                      Instruction *InsertBefore)
    869   : Instruction(getGEPReturnType(Ptr, IdxList),
    870                 GetElementPtr,
    871                 OperandTraits<GetElementPtrInst>::op_end(this) - Values,
    872                 Values, InsertBefore) {
    873   init(Ptr, IdxList, NameStr);
    874 }
    875 GetElementPtrInst::GetElementPtrInst(Value *Ptr,
    876                                      ArrayRef<Value *> IdxList,
    877                                      unsigned Values,
    878                                      const Twine &NameStr,
    879                                      BasicBlock *InsertAtEnd)
    880   : Instruction(getGEPReturnType(Ptr, IdxList),
    881                 GetElementPtr,
    882                 OperandTraits<GetElementPtrInst>::op_end(this) - Values,
    883                 Values, InsertAtEnd) {
    884   init(Ptr, IdxList, NameStr);
    885 }
    886 
    887 
    888 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(GetElementPtrInst, Value)
    889 
    890 
    891 //===----------------------------------------------------------------------===//
    892 //                               ICmpInst Class
    893 //===----------------------------------------------------------------------===//
    894 
    895 /// This instruction compares its operands according to the predicate given
    896 /// to the constructor. It only operates on integers or pointers. The operands
    897 /// must be identical types.
    898 /// @brief Represent an integer comparison operator.
    899 class ICmpInst: public CmpInst {
    900 protected:
    901   /// @brief Clone an identical ICmpInst
    902   virtual ICmpInst *clone_impl() const;
    903 public:
    904   /// @brief Constructor with insert-before-instruction semantics.
    905   ICmpInst(
    906     Instruction *InsertBefore,  ///< Where to insert
    907     Predicate pred,  ///< The predicate to use for the comparison
    908     Value *LHS,      ///< The left-hand-side of the expression
    909     Value *RHS,      ///< The right-hand-side of the expression
    910     const Twine &NameStr = ""  ///< Name of the instruction
    911   ) : CmpInst(makeCmpResultType(LHS->getType()),
    912               Instruction::ICmp, pred, LHS, RHS, NameStr,
    913               InsertBefore) {
    914     assert(pred >= CmpInst::FIRST_ICMP_PREDICATE &&
    915            pred <= CmpInst::LAST_ICMP_PREDICATE &&
    916            "Invalid ICmp predicate value");
    917     assert(getOperand(0)->getType() == getOperand(1)->getType() &&
    918           "Both operands to ICmp instruction are not of the same type!");
    919     // Check that the operands are the right type
    920     assert((getOperand(0)->getType()->isIntOrIntVectorTy() ||
    921             getOperand(0)->getType()->getScalarType()->isPointerTy()) &&
    922            "Invalid operand types for ICmp instruction");
    923   }
    924 
    925   /// @brief Constructor with insert-at-end semantics.
    926   ICmpInst(
    927     BasicBlock &InsertAtEnd, ///< Block to insert into.
    928     Predicate pred,  ///< The predicate to use for the comparison
    929     Value *LHS,      ///< The left-hand-side of the expression
    930     Value *RHS,      ///< The right-hand-side of the expression
    931     const Twine &NameStr = ""  ///< Name of the instruction
    932   ) : CmpInst(makeCmpResultType(LHS->getType()),
    933               Instruction::ICmp, pred, LHS, RHS, NameStr,
    934               &InsertAtEnd) {
    935     assert(pred >= CmpInst::FIRST_ICMP_PREDICATE &&
    936           pred <= CmpInst::LAST_ICMP_PREDICATE &&
    937           "Invalid ICmp predicate value");
    938     assert(getOperand(0)->getType() == getOperand(1)->getType() &&
    939           "Both operands to ICmp instruction are not of the same type!");
    940     // Check that the operands are the right type
    941     assert((getOperand(0)->getType()->isIntOrIntVectorTy() ||
    942             getOperand(0)->getType()->isPointerTy()) &&
    943            "Invalid operand types for ICmp instruction");
    944   }
    945 
    946   /// @brief Constructor with no-insertion semantics
    947   ICmpInst(
    948     Predicate pred, ///< The predicate to use for the comparison
    949     Value *LHS,     ///< The left-hand-side of the expression
    950     Value *RHS,     ///< The right-hand-side of the expression
    951     const Twine &NameStr = "" ///< Name of the instruction
    952   ) : CmpInst(makeCmpResultType(LHS->getType()),
    953               Instruction::ICmp, pred, LHS, RHS, NameStr) {
    954     assert(pred >= CmpInst::FIRST_ICMP_PREDICATE &&
    955            pred <= CmpInst::LAST_ICMP_PREDICATE &&
    956            "Invalid ICmp predicate value");
    957     assert(getOperand(0)->getType() == getOperand(1)->getType() &&
    958           "Both operands to ICmp instruction are not of the same type!");
    959     // Check that the operands are the right type
    960     assert((getOperand(0)->getType()->isIntOrIntVectorTy() ||
    961             getOperand(0)->getType()->getScalarType()->isPointerTy()) &&
    962            "Invalid operand types for ICmp instruction");
    963   }
    964 
    965   /// For example, EQ->EQ, SLE->SLE, UGT->SGT, etc.
    966   /// @returns the predicate that would be the result if the operand were
    967   /// regarded as signed.
    968   /// @brief Return the signed version of the predicate
    969   Predicate getSignedPredicate() const {
    970     return getSignedPredicate(getPredicate());
    971   }
    972 
    973   /// This is a static version that you can use without an instruction.
    974   /// @brief Return the signed version of the predicate.
    975   static Predicate getSignedPredicate(Predicate pred);
    976 
    977   /// For example, EQ->EQ, SLE->ULE, UGT->UGT, etc.
    978   /// @returns the predicate that would be the result if the operand were
    979   /// regarded as unsigned.
    980   /// @brief Return the unsigned version of the predicate
    981   Predicate getUnsignedPredicate() const {
    982     return getUnsignedPredicate(getPredicate());
    983   }
    984 
    985   /// This is a static version that you can use without an instruction.
    986   /// @brief Return the unsigned version of the predicate.
    987   static Predicate getUnsignedPredicate(Predicate pred);
    988 
    989   /// isEquality - Return true if this predicate is either EQ or NE.  This also
    990   /// tests for commutativity.
    991   static bool isEquality(Predicate P) {
    992     return P == ICMP_EQ || P == ICMP_NE;
    993   }
    994 
    995   /// isEquality - Return true if this predicate is either EQ or NE.  This also
    996   /// tests for commutativity.
    997   bool isEquality() const {
    998     return isEquality(getPredicate());
    999   }
   1000 
   1001   /// @returns true if the predicate of this ICmpInst is commutative
   1002   /// @brief Determine if this relation is commutative.
   1003   bool isCommutative() const { return isEquality(); }
   1004 
   1005   /// isRelational - Return true if the predicate is relational (not EQ or NE).
   1006   ///
   1007   bool isRelational() const {
   1008     return !isEquality();
   1009   }
   1010 
   1011   /// isRelational - Return true if the predicate is relational (not EQ or NE).
   1012   ///
   1013   static bool isRelational(Predicate P) {
   1014     return !isEquality(P);
   1015   }
   1016 
   1017   /// Initialize a set of values that all satisfy the predicate with C.
   1018   /// @brief Make a ConstantRange for a relation with a constant value.
   1019   static ConstantRange makeConstantRange(Predicate pred, const APInt &C);
   1020 
   1021   /// Exchange the two operands to this instruction in such a way that it does
   1022   /// not modify the semantics of the instruction. The predicate value may be
   1023   /// changed to retain the same result if the predicate is order dependent
   1024   /// (e.g. ult).
   1025   /// @brief Swap operands and adjust predicate.
   1026   void swapOperands() {
   1027     setPredicate(getSwappedPredicate());
   1028     Op<0>().swap(Op<1>());
   1029   }
   1030 
   1031   // Methods for support type inquiry through isa, cast, and dyn_cast:
   1032   static inline bool classof(const ICmpInst *) { return true; }
   1033   static inline bool classof(const Instruction *I) {
   1034     return I->getOpcode() == Instruction::ICmp;
   1035   }
   1036   static inline bool classof(const Value *V) {
   1037     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   1038   }
   1039 
   1040 };
   1041 
   1042 //===----------------------------------------------------------------------===//
   1043 //                               FCmpInst Class
   1044 //===----------------------------------------------------------------------===//
   1045 
   1046 /// This instruction compares its operands according to the predicate given
   1047 /// to the constructor. It only operates on floating point values or packed
   1048 /// vectors of floating point values. The operands must be identical types.
   1049 /// @brief Represents a floating point comparison operator.
   1050 class FCmpInst: public CmpInst {
   1051 protected:
   1052   /// @brief Clone an identical FCmpInst
   1053   virtual FCmpInst *clone_impl() const;
   1054 public:
   1055   /// @brief Constructor with insert-before-instruction semantics.
   1056   FCmpInst(
   1057     Instruction *InsertBefore, ///< Where to insert
   1058     Predicate pred,  ///< The predicate to use for the comparison
   1059     Value *LHS,      ///< The left-hand-side of the expression
   1060     Value *RHS,      ///< The right-hand-side of the expression
   1061     const Twine &NameStr = ""  ///< Name of the instruction
   1062   ) : CmpInst(makeCmpResultType(LHS->getType()),
   1063               Instruction::FCmp, pred, LHS, RHS, NameStr,
   1064               InsertBefore) {
   1065     assert(pred <= FCmpInst::LAST_FCMP_PREDICATE &&
   1066            "Invalid FCmp predicate value");
   1067     assert(getOperand(0)->getType() == getOperand(1)->getType() &&
   1068            "Both operands to FCmp instruction are not of the same type!");
   1069     // Check that the operands are the right type
   1070     assert(getOperand(0)->getType()->isFPOrFPVectorTy() &&
   1071            "Invalid operand types for FCmp instruction");
   1072   }
   1073 
   1074   /// @brief Constructor with insert-at-end semantics.
   1075   FCmpInst(
   1076     BasicBlock &InsertAtEnd, ///< Block to insert into.
   1077     Predicate pred,  ///< The predicate to use for the comparison
   1078     Value *LHS,      ///< The left-hand-side of the expression
   1079     Value *RHS,      ///< The right-hand-side of the expression
   1080     const Twine &NameStr = ""  ///< Name of the instruction
   1081   ) : CmpInst(makeCmpResultType(LHS->getType()),
   1082               Instruction::FCmp, pred, LHS, RHS, NameStr,
   1083               &InsertAtEnd) {
   1084     assert(pred <= FCmpInst::LAST_FCMP_PREDICATE &&
   1085            "Invalid FCmp predicate value");
   1086     assert(getOperand(0)->getType() == getOperand(1)->getType() &&
   1087            "Both operands to FCmp instruction are not of the same type!");
   1088     // Check that the operands are the right type
   1089     assert(getOperand(0)->getType()->isFPOrFPVectorTy() &&
   1090            "Invalid operand types for FCmp instruction");
   1091   }
   1092 
   1093   /// @brief Constructor with no-insertion semantics
   1094   FCmpInst(
   1095     Predicate pred, ///< The predicate to use for the comparison
   1096     Value *LHS,     ///< The left-hand-side of the expression
   1097     Value *RHS,     ///< The right-hand-side of the expression
   1098     const Twine &NameStr = "" ///< Name of the instruction
   1099   ) : CmpInst(makeCmpResultType(LHS->getType()),
   1100               Instruction::FCmp, pred, LHS, RHS, NameStr) {
   1101     assert(pred <= FCmpInst::LAST_FCMP_PREDICATE &&
   1102            "Invalid FCmp predicate value");
   1103     assert(getOperand(0)->getType() == getOperand(1)->getType() &&
   1104            "Both operands to FCmp instruction are not of the same type!");
   1105     // Check that the operands are the right type
   1106     assert(getOperand(0)->getType()->isFPOrFPVectorTy() &&
   1107            "Invalid operand types for FCmp instruction");
   1108   }
   1109 
   1110   /// @returns true if the predicate of this instruction is EQ or NE.
   1111   /// @brief Determine if this is an equality predicate.
   1112   bool isEquality() const {
   1113     return getPredicate() == FCMP_OEQ || getPredicate() == FCMP_ONE ||
   1114            getPredicate() == FCMP_UEQ || getPredicate() == FCMP_UNE;
   1115   }
   1116 
   1117   /// @returns true if the predicate of this instruction is commutative.
   1118   /// @brief Determine if this is a commutative predicate.
   1119   bool isCommutative() const {
   1120     return isEquality() ||
   1121            getPredicate() == FCMP_FALSE ||
   1122            getPredicate() == FCMP_TRUE ||
   1123            getPredicate() == FCMP_ORD ||
   1124            getPredicate() == FCMP_UNO;
   1125   }
   1126 
   1127   /// @returns true if the predicate is relational (not EQ or NE).
   1128   /// @brief Determine if this a relational predicate.
   1129   bool isRelational() const { return !isEquality(); }
   1130 
   1131   /// Exchange the two operands to this instruction in such a way that it does
   1132   /// not modify the semantics of the instruction. The predicate value may be
   1133   /// changed to retain the same result if the predicate is order dependent
   1134   /// (e.g. ult).
   1135   /// @brief Swap operands and adjust predicate.
   1136   void swapOperands() {
   1137     setPredicate(getSwappedPredicate());
   1138     Op<0>().swap(Op<1>());
   1139   }
   1140 
   1141   /// @brief Methods for support type inquiry through isa, cast, and dyn_cast:
   1142   static inline bool classof(const FCmpInst *) { return true; }
   1143   static inline bool classof(const Instruction *I) {
   1144     return I->getOpcode() == Instruction::FCmp;
   1145   }
   1146   static inline bool classof(const Value *V) {
   1147     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   1148   }
   1149 };
   1150 
   1151 //===----------------------------------------------------------------------===//
   1152 /// CallInst - This class represents a function call, abstracting a target
   1153 /// machine's calling convention.  This class uses low bit of the SubClassData
   1154 /// field to indicate whether or not this is a tail call.  The rest of the bits
   1155 /// hold the calling convention of the call.
   1156 ///
   1157 class CallInst : public Instruction {
   1158   AttrListPtr AttributeList; ///< parameter attributes for call
   1159   CallInst(const CallInst &CI);
   1160   void init(Value *Func, ArrayRef<Value *> Args, const Twine &NameStr);
   1161   void init(Value *Func, const Twine &NameStr);
   1162 
   1163   /// Construct a CallInst given a range of arguments.
   1164   /// @brief Construct a CallInst from a range of arguments
   1165   inline CallInst(Value *Func, ArrayRef<Value *> Args,
   1166                   const Twine &NameStr, Instruction *InsertBefore);
   1167 
   1168   /// Construct a CallInst given a range of arguments.
   1169   /// @brief Construct a CallInst from a range of arguments
   1170   inline CallInst(Value *Func, ArrayRef<Value *> Args,
   1171                   const Twine &NameStr, BasicBlock *InsertAtEnd);
   1172 
   1173   CallInst(Value *F, Value *Actual, const Twine &NameStr,
   1174            Instruction *InsertBefore);
   1175   CallInst(Value *F, Value *Actual, const Twine &NameStr,
   1176            BasicBlock *InsertAtEnd);
   1177   explicit CallInst(Value *F, const Twine &NameStr,
   1178                     Instruction *InsertBefore);
   1179   CallInst(Value *F, const Twine &NameStr, BasicBlock *InsertAtEnd);
   1180 protected:
   1181   virtual CallInst *clone_impl() const;
   1182 public:
   1183   static CallInst *Create(Value *Func,
   1184                           ArrayRef<Value *> Args,
   1185                           const Twine &NameStr = "",
   1186                           Instruction *InsertBefore = 0) {
   1187     return new(unsigned(Args.size() + 1))
   1188       CallInst(Func, Args, NameStr, InsertBefore);
   1189   }
   1190   static CallInst *Create(Value *Func,
   1191                           ArrayRef<Value *> Args,
   1192                           const Twine &NameStr, BasicBlock *InsertAtEnd) {
   1193     return new(unsigned(Args.size() + 1))
   1194       CallInst(Func, Args, NameStr, InsertAtEnd);
   1195   }
   1196   static CallInst *Create(Value *F, const Twine &NameStr = "",
   1197                           Instruction *InsertBefore = 0) {
   1198     return new(1) CallInst(F, NameStr, InsertBefore);
   1199   }
   1200   static CallInst *Create(Value *F, const Twine &NameStr,
   1201                           BasicBlock *InsertAtEnd) {
   1202     return new(1) CallInst(F, NameStr, InsertAtEnd);
   1203   }
   1204   /// CreateMalloc - Generate the IR for a call to malloc:
   1205   /// 1. Compute the malloc call's argument as the specified type's size,
   1206   ///    possibly multiplied by the array size if the array size is not
   1207   ///    constant 1.
   1208   /// 2. Call malloc with that argument.
   1209   /// 3. Bitcast the result of the malloc call to the specified type.
   1210   static Instruction *CreateMalloc(Instruction *InsertBefore,
   1211                                    Type *IntPtrTy, Type *AllocTy,
   1212                                    Value *AllocSize, Value *ArraySize = 0,
   1213                                    Function* MallocF = 0,
   1214                                    const Twine &Name = "");
   1215   static Instruction *CreateMalloc(BasicBlock *InsertAtEnd,
   1216                                    Type *IntPtrTy, Type *AllocTy,
   1217                                    Value *AllocSize, Value *ArraySize = 0,
   1218                                    Function* MallocF = 0,
   1219                                    const Twine &Name = "");
   1220   /// CreateFree - Generate the IR for a call to the builtin free function.
   1221   static Instruction* CreateFree(Value* Source, Instruction *InsertBefore);
   1222   static Instruction* CreateFree(Value* Source, BasicBlock *InsertAtEnd);
   1223 
   1224   ~CallInst();
   1225 
   1226   bool isTailCall() const { return getSubclassDataFromInstruction() & 1; }
   1227   void setTailCall(bool isTC = true) {
   1228     setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) |
   1229                                unsigned(isTC));
   1230   }
   1231 
   1232   /// Provide fast operand accessors
   1233   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   1234 
   1235   /// getNumArgOperands - Return the number of call arguments.
   1236   ///
   1237   unsigned getNumArgOperands() const { return getNumOperands() - 1; }
   1238 
   1239   /// getArgOperand/setArgOperand - Return/set the i-th call argument.
   1240   ///
   1241   Value *getArgOperand(unsigned i) const { return getOperand(i); }
   1242   void setArgOperand(unsigned i, Value *v) { setOperand(i, v); }
   1243 
   1244   /// getCallingConv/setCallingConv - Get or set the calling convention of this
   1245   /// function call.
   1246   CallingConv::ID getCallingConv() const {
   1247     return static_cast<CallingConv::ID>(getSubclassDataFromInstruction() >> 1);
   1248   }
   1249   void setCallingConv(CallingConv::ID CC) {
   1250     setInstructionSubclassData((getSubclassDataFromInstruction() & 1) |
   1251                                (static_cast<unsigned>(CC) << 1));
   1252   }
   1253 
   1254   /// getAttributes - Return the parameter attributes for this call.
   1255   ///
   1256   const AttrListPtr &getAttributes() const { return AttributeList; }
   1257 
   1258   /// setAttributes - Set the parameter attributes for this call.
   1259   ///
   1260   void setAttributes(const AttrListPtr &Attrs) { AttributeList = Attrs; }
   1261 
   1262   /// addAttribute - adds the attribute to the list of attributes.
   1263   void addAttribute(unsigned i, Attributes attr);
   1264 
   1265   /// removeAttribute - removes the attribute from the list of attributes.
   1266   void removeAttribute(unsigned i, Attributes attr);
   1267 
   1268   /// @brief Determine whether the call or the callee has the given attribute.
   1269   bool paramHasAttr(unsigned i, Attributes attr) const;
   1270 
   1271   /// @brief Extract the alignment for a call or parameter (0=unknown).
   1272   unsigned getParamAlignment(unsigned i) const {
   1273     return AttributeList.getParamAlignment(i);
   1274   }
   1275 
   1276   /// @brief Return true if the call should not be inlined.
   1277   bool isNoInline() const { return paramHasAttr(~0, Attribute::NoInline); }
   1278   void setIsNoInline(bool Value = true) {
   1279     if (Value) addAttribute(~0, Attribute::NoInline);
   1280     else removeAttribute(~0, Attribute::NoInline);
   1281   }
   1282 
   1283   /// @brief Return true if the call can return twice
   1284   bool canReturnTwice() const {
   1285     return paramHasAttr(~0, Attribute::ReturnsTwice);
   1286   }
   1287   void setCanReturnTwice(bool Value = true) {
   1288     if (Value) addAttribute(~0, Attribute::ReturnsTwice);
   1289     else removeAttribute(~0, Attribute::ReturnsTwice);
   1290   }
   1291 
   1292   /// @brief Determine if the call does not access memory.
   1293   bool doesNotAccessMemory() const {
   1294     return paramHasAttr(~0, Attribute::ReadNone);
   1295   }
   1296   void setDoesNotAccessMemory(bool NotAccessMemory = true) {
   1297     if (NotAccessMemory) addAttribute(~0, Attribute::ReadNone);
   1298     else removeAttribute(~0, Attribute::ReadNone);
   1299   }
   1300 
   1301   /// @brief Determine if the call does not access or only reads memory.
   1302   bool onlyReadsMemory() const {
   1303     return doesNotAccessMemory() || paramHasAttr(~0, Attribute::ReadOnly);
   1304   }
   1305   void setOnlyReadsMemory(bool OnlyReadsMemory = true) {
   1306     if (OnlyReadsMemory) addAttribute(~0, Attribute::ReadOnly);
   1307     else removeAttribute(~0, Attribute::ReadOnly | Attribute::ReadNone);
   1308   }
   1309 
   1310   /// @brief Determine if the call cannot return.
   1311   bool doesNotReturn() const { return paramHasAttr(~0, Attribute::NoReturn); }
   1312   void setDoesNotReturn(bool DoesNotReturn = true) {
   1313     if (DoesNotReturn) addAttribute(~0, Attribute::NoReturn);
   1314     else removeAttribute(~0, Attribute::NoReturn);
   1315   }
   1316 
   1317   /// @brief Determine if the call cannot unwind.
   1318   bool doesNotThrow() const { return paramHasAttr(~0, Attribute::NoUnwind); }
   1319   void setDoesNotThrow(bool DoesNotThrow = true) {
   1320     if (DoesNotThrow) addAttribute(~0, Attribute::NoUnwind);
   1321     else removeAttribute(~0, Attribute::NoUnwind);
   1322   }
   1323 
   1324   /// @brief Determine if the call returns a structure through first
   1325   /// pointer argument.
   1326   bool hasStructRetAttr() const {
   1327     // Be friendly and also check the callee.
   1328     return paramHasAttr(1, Attribute::StructRet);
   1329   }
   1330 
   1331   /// @brief Determine if any call argument is an aggregate passed by value.
   1332   bool hasByValArgument() const {
   1333     return AttributeList.hasAttrSomewhere(Attribute::ByVal);
   1334   }
   1335 
   1336   /// getCalledFunction - Return the function called, or null if this is an
   1337   /// indirect function invocation.
   1338   ///
   1339   Function *getCalledFunction() const {
   1340     return dyn_cast<Function>(Op<-1>());
   1341   }
   1342 
   1343   /// getCalledValue - Get a pointer to the function that is invoked by this
   1344   /// instruction.
   1345   const Value *getCalledValue() const { return Op<-1>(); }
   1346         Value *getCalledValue()       { return Op<-1>(); }
   1347 
   1348   /// setCalledFunction - Set the function called.
   1349   void setCalledFunction(Value* Fn) {
   1350     Op<-1>() = Fn;
   1351   }
   1352 
   1353   /// isInlineAsm - Check if this call is an inline asm statement.
   1354   bool isInlineAsm() const {
   1355     return isa<InlineAsm>(Op<-1>());
   1356   }
   1357 
   1358   // Methods for support type inquiry through isa, cast, and dyn_cast:
   1359   static inline bool classof(const CallInst *) { return true; }
   1360   static inline bool classof(const Instruction *I) {
   1361     return I->getOpcode() == Instruction::Call;
   1362   }
   1363   static inline bool classof(const Value *V) {
   1364     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   1365   }
   1366 private:
   1367   // Shadow Instruction::setInstructionSubclassData with a private forwarding
   1368   // method so that subclasses cannot accidentally use it.
   1369   void setInstructionSubclassData(unsigned short D) {
   1370     Instruction::setInstructionSubclassData(D);
   1371   }
   1372 };
   1373 
   1374 template <>
   1375 struct OperandTraits<CallInst> : public VariadicOperandTraits<CallInst, 1> {
   1376 };
   1377 
   1378 CallInst::CallInst(Value *Func, ArrayRef<Value *> Args,
   1379                    const Twine &NameStr, BasicBlock *InsertAtEnd)
   1380   : Instruction(cast<FunctionType>(cast<PointerType>(Func->getType())
   1381                                    ->getElementType())->getReturnType(),
   1382                 Instruction::Call,
   1383                 OperandTraits<CallInst>::op_end(this) - (Args.size() + 1),
   1384                 unsigned(Args.size() + 1), InsertAtEnd) {
   1385   init(Func, Args, NameStr);
   1386 }
   1387 
   1388 CallInst::CallInst(Value *Func, ArrayRef<Value *> Args,
   1389                    const Twine &NameStr, Instruction *InsertBefore)
   1390   : Instruction(cast<FunctionType>(cast<PointerType>(Func->getType())
   1391                                    ->getElementType())->getReturnType(),
   1392                 Instruction::Call,
   1393                 OperandTraits<CallInst>::op_end(this) - (Args.size() + 1),
   1394                 unsigned(Args.size() + 1), InsertBefore) {
   1395   init(Func, Args, NameStr);
   1396 }
   1397 
   1398 
   1399 // Note: if you get compile errors about private methods then
   1400 //       please update your code to use the high-level operand
   1401 //       interfaces. See line 943 above.
   1402 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(CallInst, Value)
   1403 
   1404 //===----------------------------------------------------------------------===//
   1405 //                               SelectInst Class
   1406 //===----------------------------------------------------------------------===//
   1407 
   1408 /// SelectInst - This class represents the LLVM 'select' instruction.
   1409 ///
   1410 class SelectInst : public Instruction {
   1411   void init(Value *C, Value *S1, Value *S2) {
   1412     assert(!areInvalidOperands(C, S1, S2) && "Invalid operands for select");
   1413     Op<0>() = C;
   1414     Op<1>() = S1;
   1415     Op<2>() = S2;
   1416   }
   1417 
   1418   SelectInst(Value *C, Value *S1, Value *S2, const Twine &NameStr,
   1419              Instruction *InsertBefore)
   1420     : Instruction(S1->getType(), Instruction::Select,
   1421                   &Op<0>(), 3, InsertBefore) {
   1422     init(C, S1, S2);
   1423     setName(NameStr);
   1424   }
   1425   SelectInst(Value *C, Value *S1, Value *S2, const Twine &NameStr,
   1426              BasicBlock *InsertAtEnd)
   1427     : Instruction(S1->getType(), Instruction::Select,
   1428                   &Op<0>(), 3, InsertAtEnd) {
   1429     init(C, S1, S2);
   1430     setName(NameStr);
   1431   }
   1432 protected:
   1433   virtual SelectInst *clone_impl() const;
   1434 public:
   1435   static SelectInst *Create(Value *C, Value *S1, Value *S2,
   1436                             const Twine &NameStr = "",
   1437                             Instruction *InsertBefore = 0) {
   1438     return new(3) SelectInst(C, S1, S2, NameStr, InsertBefore);
   1439   }
   1440   static SelectInst *Create(Value *C, Value *S1, Value *S2,
   1441                             const Twine &NameStr,
   1442                             BasicBlock *InsertAtEnd) {
   1443     return new(3) SelectInst(C, S1, S2, NameStr, InsertAtEnd);
   1444   }
   1445 
   1446   const Value *getCondition() const { return Op<0>(); }
   1447   const Value *getTrueValue() const { return Op<1>(); }
   1448   const Value *getFalseValue() const { return Op<2>(); }
   1449   Value *getCondition() { return Op<0>(); }
   1450   Value *getTrueValue() { return Op<1>(); }
   1451   Value *getFalseValue() { return Op<2>(); }
   1452 
   1453   /// areInvalidOperands - Return a string if the specified operands are invalid
   1454   /// for a select operation, otherwise return null.
   1455   static const char *areInvalidOperands(Value *Cond, Value *True, Value *False);
   1456 
   1457   /// Transparently provide more efficient getOperand methods.
   1458   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   1459 
   1460   OtherOps getOpcode() const {
   1461     return static_cast<OtherOps>(Instruction::getOpcode());
   1462   }
   1463 
   1464   // Methods for support type inquiry through isa, cast, and dyn_cast:
   1465   static inline bool classof(const SelectInst *) { return true; }
   1466   static inline bool classof(const Instruction *I) {
   1467     return I->getOpcode() == Instruction::Select;
   1468   }
   1469   static inline bool classof(const Value *V) {
   1470     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   1471   }
   1472 };
   1473 
   1474 template <>
   1475 struct OperandTraits<SelectInst> : public FixedNumOperandTraits<SelectInst, 3> {
   1476 };
   1477 
   1478 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(SelectInst, Value)
   1479 
   1480 //===----------------------------------------------------------------------===//
   1481 //                                VAArgInst Class
   1482 //===----------------------------------------------------------------------===//
   1483 
   1484 /// VAArgInst - This class represents the va_arg llvm instruction, which returns
   1485 /// an argument of the specified type given a va_list and increments that list
   1486 ///
   1487 class VAArgInst : public UnaryInstruction {
   1488 protected:
   1489   virtual VAArgInst *clone_impl() const;
   1490 
   1491 public:
   1492   VAArgInst(Value *List, Type *Ty, const Twine &NameStr = "",
   1493              Instruction *InsertBefore = 0)
   1494     : UnaryInstruction(Ty, VAArg, List, InsertBefore) {
   1495     setName(NameStr);
   1496   }
   1497   VAArgInst(Value *List, Type *Ty, const Twine &NameStr,
   1498             BasicBlock *InsertAtEnd)
   1499     : UnaryInstruction(Ty, VAArg, List, InsertAtEnd) {
   1500     setName(NameStr);
   1501   }
   1502 
   1503   Value *getPointerOperand() { return getOperand(0); }
   1504   const Value *getPointerOperand() const { return getOperand(0); }
   1505   static unsigned getPointerOperandIndex() { return 0U; }
   1506 
   1507   // Methods for support type inquiry through isa, cast, and dyn_cast:
   1508   static inline bool classof(const VAArgInst *) { return true; }
   1509   static inline bool classof(const Instruction *I) {
   1510     return I->getOpcode() == VAArg;
   1511   }
   1512   static inline bool classof(const Value *V) {
   1513     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   1514   }
   1515 };
   1516 
   1517 //===----------------------------------------------------------------------===//
   1518 //                                ExtractElementInst Class
   1519 //===----------------------------------------------------------------------===//
   1520 
   1521 /// ExtractElementInst - This instruction extracts a single (scalar)
   1522 /// element from a VectorType value
   1523 ///
   1524 class ExtractElementInst : public Instruction {
   1525   ExtractElementInst(Value *Vec, Value *Idx, const Twine &NameStr = "",
   1526                      Instruction *InsertBefore = 0);
   1527   ExtractElementInst(Value *Vec, Value *Idx, const Twine &NameStr,
   1528                      BasicBlock *InsertAtEnd);
   1529 protected:
   1530   virtual ExtractElementInst *clone_impl() const;
   1531 
   1532 public:
   1533   static ExtractElementInst *Create(Value *Vec, Value *Idx,
   1534                                    const Twine &NameStr = "",
   1535                                    Instruction *InsertBefore = 0) {
   1536     return new(2) ExtractElementInst(Vec, Idx, NameStr, InsertBefore);
   1537   }
   1538   static ExtractElementInst *Create(Value *Vec, Value *Idx,
   1539                                    const Twine &NameStr,
   1540                                    BasicBlock *InsertAtEnd) {
   1541     return new(2) ExtractElementInst(Vec, Idx, NameStr, InsertAtEnd);
   1542   }
   1543 
   1544   /// isValidOperands - Return true if an extractelement instruction can be
   1545   /// formed with the specified operands.
   1546   static bool isValidOperands(const Value *Vec, const Value *Idx);
   1547 
   1548   Value *getVectorOperand() { return Op<0>(); }
   1549   Value *getIndexOperand() { return Op<1>(); }
   1550   const Value *getVectorOperand() const { return Op<0>(); }
   1551   const Value *getIndexOperand() const { return Op<1>(); }
   1552 
   1553   VectorType *getVectorOperandType() const {
   1554     return reinterpret_cast<VectorType*>(getVectorOperand()->getType());
   1555   }
   1556 
   1557 
   1558   /// Transparently provide more efficient getOperand methods.
   1559   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   1560 
   1561   // Methods for support type inquiry through isa, cast, and dyn_cast:
   1562   static inline bool classof(const ExtractElementInst *) { return true; }
   1563   static inline bool classof(const Instruction *I) {
   1564     return I->getOpcode() == Instruction::ExtractElement;
   1565   }
   1566   static inline bool classof(const Value *V) {
   1567     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   1568   }
   1569 };
   1570 
   1571 template <>
   1572 struct OperandTraits<ExtractElementInst> :
   1573   public FixedNumOperandTraits<ExtractElementInst, 2> {
   1574 };
   1575 
   1576 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(ExtractElementInst, Value)
   1577 
   1578 //===----------------------------------------------------------------------===//
   1579 //                                InsertElementInst Class
   1580 //===----------------------------------------------------------------------===//
   1581 
   1582 /// InsertElementInst - This instruction inserts a single (scalar)
   1583 /// element into a VectorType value
   1584 ///
   1585 class InsertElementInst : public Instruction {
   1586   InsertElementInst(Value *Vec, Value *NewElt, Value *Idx,
   1587                     const Twine &NameStr = "",
   1588                     Instruction *InsertBefore = 0);
   1589   InsertElementInst(Value *Vec, Value *NewElt, Value *Idx,
   1590                     const Twine &NameStr, BasicBlock *InsertAtEnd);
   1591 protected:
   1592   virtual InsertElementInst *clone_impl() const;
   1593 
   1594 public:
   1595   static InsertElementInst *Create(Value *Vec, Value *NewElt, Value *Idx,
   1596                                    const Twine &NameStr = "",
   1597                                    Instruction *InsertBefore = 0) {
   1598     return new(3) InsertElementInst(Vec, NewElt, Idx, NameStr, InsertBefore);
   1599   }
   1600   static InsertElementInst *Create(Value *Vec, Value *NewElt, Value *Idx,
   1601                                    const Twine &NameStr,
   1602                                    BasicBlock *InsertAtEnd) {
   1603     return new(3) InsertElementInst(Vec, NewElt, Idx, NameStr, InsertAtEnd);
   1604   }
   1605 
   1606   /// isValidOperands - Return true if an insertelement instruction can be
   1607   /// formed with the specified operands.
   1608   static bool isValidOperands(const Value *Vec, const Value *NewElt,
   1609                               const Value *Idx);
   1610 
   1611   /// getType - Overload to return most specific vector type.
   1612   ///
   1613   VectorType *getType() const {
   1614     return reinterpret_cast<VectorType*>(Instruction::getType());
   1615   }
   1616 
   1617   /// Transparently provide more efficient getOperand methods.
   1618   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   1619 
   1620   // Methods for support type inquiry through isa, cast, and dyn_cast:
   1621   static inline bool classof(const InsertElementInst *) { return true; }
   1622   static inline bool classof(const Instruction *I) {
   1623     return I->getOpcode() == Instruction::InsertElement;
   1624   }
   1625   static inline bool classof(const Value *V) {
   1626     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   1627   }
   1628 };
   1629 
   1630 template <>
   1631 struct OperandTraits<InsertElementInst> :
   1632   public FixedNumOperandTraits<InsertElementInst, 3> {
   1633 };
   1634 
   1635 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(InsertElementInst, Value)
   1636 
   1637 //===----------------------------------------------------------------------===//
   1638 //                           ShuffleVectorInst Class
   1639 //===----------------------------------------------------------------------===//
   1640 
   1641 /// ShuffleVectorInst - This instruction constructs a fixed permutation of two
   1642 /// input vectors.
   1643 ///
   1644 class ShuffleVectorInst : public Instruction {
   1645 protected:
   1646   virtual ShuffleVectorInst *clone_impl() const;
   1647 
   1648 public:
   1649   // allocate space for exactly three operands
   1650   void *operator new(size_t s) {
   1651     return User::operator new(s, 3);
   1652   }
   1653   ShuffleVectorInst(Value *V1, Value *V2, Value *Mask,
   1654                     const Twine &NameStr = "",
   1655                     Instruction *InsertBefor = 0);
   1656   ShuffleVectorInst(Value *V1, Value *V2, Value *Mask,
   1657                     const Twine &NameStr, BasicBlock *InsertAtEnd);
   1658 
   1659   /// isValidOperands - Return true if a shufflevector instruction can be
   1660   /// formed with the specified operands.
   1661   static bool isValidOperands(const Value *V1, const Value *V2,
   1662                               const Value *Mask);
   1663 
   1664   /// getType - Overload to return most specific vector type.
   1665   ///
   1666   VectorType *getType() const {
   1667     return reinterpret_cast<VectorType*>(Instruction::getType());
   1668   }
   1669 
   1670   /// Transparently provide more efficient getOperand methods.
   1671   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   1672 
   1673   Constant *getMask() const {
   1674     return reinterpret_cast<Constant*>(getOperand(2));
   1675   }
   1676 
   1677   /// getMaskValue - Return the index from the shuffle mask for the specified
   1678   /// output result.  This is either -1 if the element is undef or a number less
   1679   /// than 2*numelements.
   1680   static int getMaskValue(Constant *Mask, unsigned i);
   1681 
   1682   int getMaskValue(unsigned i) const {
   1683     return getMaskValue(getMask(), i);
   1684   }
   1685 
   1686   /// getShuffleMask - Return the full mask for this instruction, where each
   1687   /// element is the element number and undef's are returned as -1.
   1688   static void getShuffleMask(Constant *Mask, SmallVectorImpl<int> &Result);
   1689 
   1690   void getShuffleMask(SmallVectorImpl<int> &Result) const {
   1691     return getShuffleMask(getMask(), Result);
   1692   }
   1693 
   1694   SmallVector<int, 16> getShuffleMask() const {
   1695     SmallVector<int, 16> Mask;
   1696     getShuffleMask(Mask);
   1697     return Mask;
   1698   }
   1699 
   1700 
   1701   // Methods for support type inquiry through isa, cast, and dyn_cast:
   1702   static inline bool classof(const ShuffleVectorInst *) { return true; }
   1703   static inline bool classof(const Instruction *I) {
   1704     return I->getOpcode() == Instruction::ShuffleVector;
   1705   }
   1706   static inline bool classof(const Value *V) {
   1707     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   1708   }
   1709 };
   1710 
   1711 template <>
   1712 struct OperandTraits<ShuffleVectorInst> :
   1713   public FixedNumOperandTraits<ShuffleVectorInst, 3> {
   1714 };
   1715 
   1716 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(ShuffleVectorInst, Value)
   1717 
   1718 //===----------------------------------------------------------------------===//
   1719 //                                ExtractValueInst Class
   1720 //===----------------------------------------------------------------------===//
   1721 
   1722 /// ExtractValueInst - This instruction extracts a struct member or array
   1723 /// element value from an aggregate value.
   1724 ///
   1725 class ExtractValueInst : public UnaryInstruction {
   1726   SmallVector<unsigned, 4> Indices;
   1727 
   1728   ExtractValueInst(const ExtractValueInst &EVI);
   1729   void init(ArrayRef<unsigned> Idxs, const Twine &NameStr);
   1730 
   1731   /// Constructors - Create a extractvalue instruction with a base aggregate
   1732   /// value and a list of indices.  The first ctor can optionally insert before
   1733   /// an existing instruction, the second appends the new instruction to the
   1734   /// specified BasicBlock.
   1735   inline ExtractValueInst(Value *Agg,
   1736                           ArrayRef<unsigned> Idxs,
   1737                           const Twine &NameStr,
   1738                           Instruction *InsertBefore);
   1739   inline ExtractValueInst(Value *Agg,
   1740                           ArrayRef<unsigned> Idxs,
   1741                           const Twine &NameStr, BasicBlock *InsertAtEnd);
   1742 
   1743   // allocate space for exactly one operand
   1744   void *operator new(size_t s) {
   1745     return User::operator new(s, 1);
   1746   }
   1747 protected:
   1748   virtual ExtractValueInst *clone_impl() const;
   1749 
   1750 public:
   1751   static ExtractValueInst *Create(Value *Agg,
   1752                                   ArrayRef<unsigned> Idxs,
   1753                                   const Twine &NameStr = "",
   1754                                   Instruction *InsertBefore = 0) {
   1755     return new
   1756       ExtractValueInst(Agg, Idxs, NameStr, InsertBefore);
   1757   }
   1758   static ExtractValueInst *Create(Value *Agg,
   1759                                   ArrayRef<unsigned> Idxs,
   1760                                   const Twine &NameStr,
   1761                                   BasicBlock *InsertAtEnd) {
   1762     return new ExtractValueInst(Agg, Idxs, NameStr, InsertAtEnd);
   1763   }
   1764 
   1765   /// getIndexedType - Returns the type of the element that would be extracted
   1766   /// with an extractvalue instruction with the specified parameters.
   1767   ///
   1768   /// Null is returned if the indices are invalid for the specified type.
   1769   static Type *getIndexedType(Type *Agg, ArrayRef<unsigned> Idxs);
   1770 
   1771   typedef const unsigned* idx_iterator;
   1772   inline idx_iterator idx_begin() const { return Indices.begin(); }
   1773   inline idx_iterator idx_end()   const { return Indices.end(); }
   1774 
   1775   Value *getAggregateOperand() {
   1776     return getOperand(0);
   1777   }
   1778   const Value *getAggregateOperand() const {
   1779     return getOperand(0);
   1780   }
   1781   static unsigned getAggregateOperandIndex() {
   1782     return 0U;                      // get index for modifying correct operand
   1783   }
   1784 
   1785   ArrayRef<unsigned> getIndices() const {
   1786     return Indices;
   1787   }
   1788 
   1789   unsigned getNumIndices() const {
   1790     return (unsigned)Indices.size();
   1791   }
   1792 
   1793   bool hasIndices() const {
   1794     return true;
   1795   }
   1796 
   1797   // Methods for support type inquiry through isa, cast, and dyn_cast:
   1798   static inline bool classof(const ExtractValueInst *) { return true; }
   1799   static inline bool classof(const Instruction *I) {
   1800     return I->getOpcode() == Instruction::ExtractValue;
   1801   }
   1802   static inline bool classof(const Value *V) {
   1803     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   1804   }
   1805 };
   1806 
   1807 ExtractValueInst::ExtractValueInst(Value *Agg,
   1808                                    ArrayRef<unsigned> Idxs,
   1809                                    const Twine &NameStr,
   1810                                    Instruction *InsertBefore)
   1811   : UnaryInstruction(checkGEPType(getIndexedType(Agg->getType(), Idxs)),
   1812                      ExtractValue, Agg, InsertBefore) {
   1813   init(Idxs, NameStr);
   1814 }
   1815 ExtractValueInst::ExtractValueInst(Value *Agg,
   1816                                    ArrayRef<unsigned> Idxs,
   1817                                    const Twine &NameStr,
   1818                                    BasicBlock *InsertAtEnd)
   1819   : UnaryInstruction(checkGEPType(getIndexedType(Agg->getType(), Idxs)),
   1820                      ExtractValue, Agg, InsertAtEnd) {
   1821   init(Idxs, NameStr);
   1822 }
   1823 
   1824 
   1825 //===----------------------------------------------------------------------===//
   1826 //                                InsertValueInst Class
   1827 //===----------------------------------------------------------------------===//
   1828 
   1829 /// InsertValueInst - This instruction inserts a struct field of array element
   1830 /// value into an aggregate value.
   1831 ///
   1832 class InsertValueInst : public Instruction {
   1833   SmallVector<unsigned, 4> Indices;
   1834 
   1835   void *operator new(size_t, unsigned); // Do not implement
   1836   InsertValueInst(const InsertValueInst &IVI);
   1837   void init(Value *Agg, Value *Val, ArrayRef<unsigned> Idxs,
   1838             const Twine &NameStr);
   1839 
   1840   /// Constructors - Create a insertvalue instruction with a base aggregate
   1841   /// value, a value to insert, and a list of indices.  The first ctor can
   1842   /// optionally insert before an existing instruction, the second appends
   1843   /// the new instruction to the specified BasicBlock.
   1844   inline InsertValueInst(Value *Agg, Value *Val,
   1845                          ArrayRef<unsigned> Idxs,
   1846                          const Twine &NameStr,
   1847                          Instruction *InsertBefore);
   1848   inline InsertValueInst(Value *Agg, Value *Val,
   1849                          ArrayRef<unsigned> Idxs,
   1850                          const Twine &NameStr, BasicBlock *InsertAtEnd);
   1851 
   1852   /// Constructors - These two constructors are convenience methods because one
   1853   /// and two index insertvalue instructions are so common.
   1854   InsertValueInst(Value *Agg, Value *Val,
   1855                   unsigned Idx, const Twine &NameStr = "",
   1856                   Instruction *InsertBefore = 0);
   1857   InsertValueInst(Value *Agg, Value *Val, unsigned Idx,
   1858                   const Twine &NameStr, BasicBlock *InsertAtEnd);
   1859 protected:
   1860   virtual InsertValueInst *clone_impl() const;
   1861 public:
   1862   // allocate space for exactly two operands
   1863   void *operator new(size_t s) {
   1864     return User::operator new(s, 2);
   1865   }
   1866 
   1867   static InsertValueInst *Create(Value *Agg, Value *Val,
   1868                                  ArrayRef<unsigned> Idxs,
   1869                                  const Twine &NameStr = "",
   1870                                  Instruction *InsertBefore = 0) {
   1871     return new InsertValueInst(Agg, Val, Idxs, NameStr, InsertBefore);
   1872   }
   1873   static InsertValueInst *Create(Value *Agg, Value *Val,
   1874                                  ArrayRef<unsigned> Idxs,
   1875                                  const Twine &NameStr,
   1876                                  BasicBlock *InsertAtEnd) {
   1877     return new InsertValueInst(Agg, Val, Idxs, NameStr, InsertAtEnd);
   1878   }
   1879 
   1880   /// Transparently provide more efficient getOperand methods.
   1881   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   1882 
   1883   typedef const unsigned* idx_iterator;
   1884   inline idx_iterator idx_begin() const { return Indices.begin(); }
   1885   inline idx_iterator idx_end()   const { return Indices.end(); }
   1886 
   1887   Value *getAggregateOperand() {
   1888     return getOperand(0);
   1889   }
   1890   const Value *getAggregateOperand() const {
   1891     return getOperand(0);
   1892   }
   1893   static unsigned getAggregateOperandIndex() {
   1894     return 0U;                      // get index for modifying correct operand
   1895   }
   1896 
   1897   Value *getInsertedValueOperand() {
   1898     return getOperand(1);
   1899   }
   1900   const Value *getInsertedValueOperand() const {
   1901     return getOperand(1);
   1902   }
   1903   static unsigned getInsertedValueOperandIndex() {
   1904     return 1U;                      // get index for modifying correct operand
   1905   }
   1906 
   1907   ArrayRef<unsigned> getIndices() const {
   1908     return Indices;
   1909   }
   1910 
   1911   unsigned getNumIndices() const {
   1912     return (unsigned)Indices.size();
   1913   }
   1914 
   1915   bool hasIndices() const {
   1916     return true;
   1917   }
   1918 
   1919   // Methods for support type inquiry through isa, cast, and dyn_cast:
   1920   static inline bool classof(const InsertValueInst *) { return true; }
   1921   static inline bool classof(const Instruction *I) {
   1922     return I->getOpcode() == Instruction::InsertValue;
   1923   }
   1924   static inline bool classof(const Value *V) {
   1925     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   1926   }
   1927 };
   1928 
   1929 template <>
   1930 struct OperandTraits<InsertValueInst> :
   1931   public FixedNumOperandTraits<InsertValueInst, 2> {
   1932 };
   1933 
   1934 InsertValueInst::InsertValueInst(Value *Agg,
   1935                                  Value *Val,
   1936                                  ArrayRef<unsigned> Idxs,
   1937                                  const Twine &NameStr,
   1938                                  Instruction *InsertBefore)
   1939   : Instruction(Agg->getType(), InsertValue,
   1940                 OperandTraits<InsertValueInst>::op_begin(this),
   1941                 2, InsertBefore) {
   1942   init(Agg, Val, Idxs, NameStr);
   1943 }
   1944 InsertValueInst::InsertValueInst(Value *Agg,
   1945                                  Value *Val,
   1946                                  ArrayRef<unsigned> Idxs,
   1947                                  const Twine &NameStr,
   1948                                  BasicBlock *InsertAtEnd)
   1949   : Instruction(Agg->getType(), InsertValue,
   1950                 OperandTraits<InsertValueInst>::op_begin(this),
   1951                 2, InsertAtEnd) {
   1952   init(Agg, Val, Idxs, NameStr);
   1953 }
   1954 
   1955 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(InsertValueInst, Value)
   1956 
   1957 //===----------------------------------------------------------------------===//
   1958 //                               PHINode Class
   1959 //===----------------------------------------------------------------------===//
   1960 
   1961 // PHINode - The PHINode class is used to represent the magical mystical PHI
   1962 // node, that can not exist in nature, but can be synthesized in a computer
   1963 // scientist's overactive imagination.
   1964 //
   1965 class PHINode : public Instruction {
   1966   void *operator new(size_t, unsigned);  // DO NOT IMPLEMENT
   1967   /// ReservedSpace - The number of operands actually allocated.  NumOperands is
   1968   /// the number actually in use.
   1969   unsigned ReservedSpace;
   1970   PHINode(const PHINode &PN);
   1971   // allocate space for exactly zero operands
   1972   void *operator new(size_t s) {
   1973     return User::operator new(s, 0);
   1974   }
   1975   explicit PHINode(Type *Ty, unsigned NumReservedValues,
   1976                    const Twine &NameStr = "", Instruction *InsertBefore = 0)
   1977     : Instruction(Ty, Instruction::PHI, 0, 0, InsertBefore),
   1978       ReservedSpace(NumReservedValues) {
   1979     setName(NameStr);
   1980     OperandList = allocHungoffUses(ReservedSpace);
   1981   }
   1982 
   1983   PHINode(Type *Ty, unsigned NumReservedValues, const Twine &NameStr,
   1984           BasicBlock *InsertAtEnd)
   1985     : Instruction(Ty, Instruction::PHI, 0, 0, InsertAtEnd),
   1986       ReservedSpace(NumReservedValues) {
   1987     setName(NameStr);
   1988     OperandList = allocHungoffUses(ReservedSpace);
   1989   }
   1990 protected:
   1991   // allocHungoffUses - this is more complicated than the generic
   1992   // User::allocHungoffUses, because we have to allocate Uses for the incoming
   1993   // values and pointers to the incoming blocks, all in one allocation.
   1994   Use *allocHungoffUses(unsigned) const;
   1995 
   1996   virtual PHINode *clone_impl() const;
   1997 public:
   1998   /// Constructors - NumReservedValues is a hint for the number of incoming
   1999   /// edges that this phi node will have (use 0 if you really have no idea).
   2000   static PHINode *Create(Type *Ty, unsigned NumReservedValues,
   2001                          const Twine &NameStr = "",
   2002                          Instruction *InsertBefore = 0) {
   2003     return new PHINode(Ty, NumReservedValues, NameStr, InsertBefore);
   2004   }
   2005   static PHINode *Create(Type *Ty, unsigned NumReservedValues,
   2006                          const Twine &NameStr, BasicBlock *InsertAtEnd) {
   2007     return new PHINode(Ty, NumReservedValues, NameStr, InsertAtEnd);
   2008   }
   2009   ~PHINode();
   2010 
   2011   /// Provide fast operand accessors
   2012   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   2013 
   2014   // Block iterator interface. This provides access to the list of incoming
   2015   // basic blocks, which parallels the list of incoming values.
   2016 
   2017   typedef BasicBlock **block_iterator;
   2018   typedef BasicBlock * const *const_block_iterator;
   2019 
   2020   block_iterator block_begin() {
   2021     Use::UserRef *ref =
   2022       reinterpret_cast<Use::UserRef*>(op_begin() + ReservedSpace);
   2023     return reinterpret_cast<block_iterator>(ref + 1);
   2024   }
   2025 
   2026   const_block_iterator block_begin() const {
   2027     const Use::UserRef *ref =
   2028       reinterpret_cast<const Use::UserRef*>(op_begin() + ReservedSpace);
   2029     return reinterpret_cast<const_block_iterator>(ref + 1);
   2030   }
   2031 
   2032   block_iterator block_end() {
   2033     return block_begin() + getNumOperands();
   2034   }
   2035 
   2036   const_block_iterator block_end() const {
   2037     return block_begin() + getNumOperands();
   2038   }
   2039 
   2040   /// getNumIncomingValues - Return the number of incoming edges
   2041   ///
   2042   unsigned getNumIncomingValues() const { return getNumOperands(); }
   2043 
   2044   /// getIncomingValue - Return incoming value number x
   2045   ///
   2046   Value *getIncomingValue(unsigned i) const {
   2047     return getOperand(i);
   2048   }
   2049   void setIncomingValue(unsigned i, Value *V) {
   2050     setOperand(i, V);
   2051   }
   2052   static unsigned getOperandNumForIncomingValue(unsigned i) {
   2053     return i;
   2054   }
   2055   static unsigned getIncomingValueNumForOperand(unsigned i) {
   2056     return i;
   2057   }
   2058 
   2059   /// getIncomingBlock - Return incoming basic block number @p i.
   2060   ///
   2061   BasicBlock *getIncomingBlock(unsigned i) const {
   2062     return block_begin()[i];
   2063   }
   2064 
   2065   /// getIncomingBlock - Return incoming basic block corresponding
   2066   /// to an operand of the PHI.
   2067   ///
   2068   BasicBlock *getIncomingBlock(const Use &U) const {
   2069     assert(this == U.getUser() && "Iterator doesn't point to PHI's Uses?");
   2070     return getIncomingBlock(unsigned(&U - op_begin()));
   2071   }
   2072 
   2073   /// getIncomingBlock - Return incoming basic block corresponding
   2074   /// to value use iterator.
   2075   ///
   2076   template <typename U>
   2077   BasicBlock *getIncomingBlock(value_use_iterator<U> I) const {
   2078     return getIncomingBlock(I.getUse());
   2079   }
   2080 
   2081   void setIncomingBlock(unsigned i, BasicBlock *BB) {
   2082     block_begin()[i] = BB;
   2083   }
   2084 
   2085   /// addIncoming - Add an incoming value to the end of the PHI list
   2086   ///
   2087   void addIncoming(Value *V, BasicBlock *BB) {
   2088     assert(V && "PHI node got a null value!");
   2089     assert(BB && "PHI node got a null basic block!");
   2090     assert(getType() == V->getType() &&
   2091            "All operands to PHI node must be the same type as the PHI node!");
   2092     if (NumOperands == ReservedSpace)
   2093       growOperands();  // Get more space!
   2094     // Initialize some new operands.
   2095     ++NumOperands;
   2096     setIncomingValue(NumOperands - 1, V);
   2097     setIncomingBlock(NumOperands - 1, BB);
   2098   }
   2099 
   2100   /// removeIncomingValue - Remove an incoming value.  This is useful if a
   2101   /// predecessor basic block is deleted.  The value removed is returned.
   2102   ///
   2103   /// If the last incoming value for a PHI node is removed (and DeletePHIIfEmpty
   2104   /// is true), the PHI node is destroyed and any uses of it are replaced with
   2105   /// dummy values.  The only time there should be zero incoming values to a PHI
   2106   /// node is when the block is dead, so this strategy is sound.
   2107   ///
   2108   Value *removeIncomingValue(unsigned Idx, bool DeletePHIIfEmpty = true);
   2109 
   2110   Value *removeIncomingValue(const BasicBlock *BB, bool DeletePHIIfEmpty=true) {
   2111     int Idx = getBasicBlockIndex(BB);
   2112     assert(Idx >= 0 && "Invalid basic block argument to remove!");
   2113     return removeIncomingValue(Idx, DeletePHIIfEmpty);
   2114   }
   2115 
   2116   /// getBasicBlockIndex - Return the first index of the specified basic
   2117   /// block in the value list for this PHI.  Returns -1 if no instance.
   2118   ///
   2119   int getBasicBlockIndex(const BasicBlock *BB) const {
   2120     for (unsigned i = 0, e = getNumOperands(); i != e; ++i)
   2121       if (block_begin()[i] == BB)
   2122         return i;
   2123     return -1;
   2124   }
   2125 
   2126   Value *getIncomingValueForBlock(const BasicBlock *BB) const {
   2127     int Idx = getBasicBlockIndex(BB);
   2128     assert(Idx >= 0 && "Invalid basic block argument!");
   2129     return getIncomingValue(Idx);
   2130   }
   2131 
   2132   /// hasConstantValue - If the specified PHI node always merges together the
   2133   /// same value, return the value, otherwise return null.
   2134   Value *hasConstantValue() const;
   2135 
   2136   /// Methods for support type inquiry through isa, cast, and dyn_cast:
   2137   static inline bool classof(const PHINode *) { return true; }
   2138   static inline bool classof(const Instruction *I) {
   2139     return I->getOpcode() == Instruction::PHI;
   2140   }
   2141   static inline bool classof(const Value *V) {
   2142     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   2143   }
   2144  private:
   2145   void growOperands();
   2146 };
   2147 
   2148 template <>
   2149 struct OperandTraits<PHINode> : public HungoffOperandTraits<2> {
   2150 };
   2151 
   2152 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(PHINode, Value)
   2153 
   2154 //===----------------------------------------------------------------------===//
   2155 //                           LandingPadInst Class
   2156 //===----------------------------------------------------------------------===//
   2157 
   2158 //===---------------------------------------------------------------------------
   2159 /// LandingPadInst - The landingpad instruction holds all of the information
   2160 /// necessary to generate correct exception handling. The landingpad instruction
   2161 /// cannot be moved from the top of a landing pad block, which itself is
   2162 /// accessible only from the 'unwind' edge of an invoke. This uses the
   2163 /// SubclassData field in Value to store whether or not the landingpad is a
   2164 /// cleanup.
   2165 ///
   2166 class LandingPadInst : public Instruction {
   2167   /// ReservedSpace - The number of operands actually allocated.  NumOperands is
   2168   /// the number actually in use.
   2169   unsigned ReservedSpace;
   2170   LandingPadInst(const LandingPadInst &LP);
   2171 public:
   2172   enum ClauseType { Catch, Filter };
   2173 private:
   2174   void *operator new(size_t, unsigned);  // DO NOT IMPLEMENT
   2175   // Allocate space for exactly zero operands.
   2176   void *operator new(size_t s) {
   2177     return User::operator new(s, 0);
   2178   }
   2179   void growOperands(unsigned Size);
   2180   void init(Value *PersFn, unsigned NumReservedValues, const Twine &NameStr);
   2181 
   2182   explicit LandingPadInst(Type *RetTy, Value *PersonalityFn,
   2183                           unsigned NumReservedValues, const Twine &NameStr,
   2184                           Instruction *InsertBefore);
   2185   explicit LandingPadInst(Type *RetTy, Value *PersonalityFn,
   2186                           unsigned NumReservedValues, const Twine &NameStr,
   2187                           BasicBlock *InsertAtEnd);
   2188 protected:
   2189   virtual LandingPadInst *clone_impl() const;
   2190 public:
   2191   /// Constructors - NumReservedClauses is a hint for the number of incoming
   2192   /// clauses that this landingpad will have (use 0 if you really have no idea).
   2193   static LandingPadInst *Create(Type *RetTy, Value *PersonalityFn,
   2194                                 unsigned NumReservedClauses,
   2195                                 const Twine &NameStr = "",
   2196                                 Instruction *InsertBefore = 0);
   2197   static LandingPadInst *Create(Type *RetTy, Value *PersonalityFn,
   2198                                 unsigned NumReservedClauses,
   2199                                 const Twine &NameStr, BasicBlock *InsertAtEnd);
   2200   ~LandingPadInst();
   2201 
   2202   /// Provide fast operand accessors
   2203   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   2204 
   2205   /// getPersonalityFn - Get the personality function associated with this
   2206   /// landing pad.
   2207   Value *getPersonalityFn() const { return getOperand(0); }
   2208 
   2209   /// isCleanup - Return 'true' if this landingpad instruction is a
   2210   /// cleanup. I.e., it should be run when unwinding even if its landing pad
   2211   /// doesn't catch the exception.
   2212   bool isCleanup() const { return getSubclassDataFromInstruction() & 1; }
   2213 
   2214   /// setCleanup - Indicate that this landingpad instruction is a cleanup.
   2215   void setCleanup(bool V) {
   2216     setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) |
   2217                                (V ? 1 : 0));
   2218   }
   2219 
   2220   /// addClause - Add a catch or filter clause to the landing pad.
   2221   void addClause(Value *ClauseVal);
   2222 
   2223   /// getClause - Get the value of the clause at index Idx. Use isCatch/isFilter
   2224   /// to determine what type of clause this is.
   2225   Value *getClause(unsigned Idx) const { return OperandList[Idx + 1]; }
   2226 
   2227   /// isCatch - Return 'true' if the clause and index Idx is a catch clause.
   2228   bool isCatch(unsigned Idx) const {
   2229     return !isa<ArrayType>(OperandList[Idx + 1]->getType());
   2230   }
   2231 
   2232   /// isFilter - Return 'true' if the clause and index Idx is a filter clause.
   2233   bool isFilter(unsigned Idx) const {
   2234     return isa<ArrayType>(OperandList[Idx + 1]->getType());
   2235   }
   2236 
   2237   /// getNumClauses - Get the number of clauses for this landing pad.
   2238   unsigned getNumClauses() const { return getNumOperands() - 1; }
   2239 
   2240   /// reserveClauses - Grow the size of the operand list to accomodate the new
   2241   /// number of clauses.
   2242   void reserveClauses(unsigned Size) { growOperands(Size); }
   2243 
   2244   // Methods for support type inquiry through isa, cast, and dyn_cast:
   2245   static inline bool classof(const LandingPadInst *) { return true; }
   2246   static inline bool classof(const Instruction *I) {
   2247     return I->getOpcode() == Instruction::LandingPad;
   2248   }
   2249   static inline bool classof(const Value *V) {
   2250     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   2251   }
   2252 };
   2253 
   2254 template <>
   2255 struct OperandTraits<LandingPadInst> : public HungoffOperandTraits<2> {
   2256 };
   2257 
   2258 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(LandingPadInst, Value)
   2259 
   2260 //===----------------------------------------------------------------------===//
   2261 //                               ReturnInst Class
   2262 //===----------------------------------------------------------------------===//
   2263 
   2264 //===---------------------------------------------------------------------------
   2265 /// ReturnInst - Return a value (possibly void), from a function.  Execution
   2266 /// does not continue in this function any longer.
   2267 ///
   2268 class ReturnInst : public TerminatorInst {
   2269   ReturnInst(const ReturnInst &RI);
   2270 
   2271 private:
   2272   // ReturnInst constructors:
   2273   // ReturnInst()                  - 'ret void' instruction
   2274   // ReturnInst(    null)          - 'ret void' instruction
   2275   // ReturnInst(Value* X)          - 'ret X'    instruction
   2276   // ReturnInst(    null, Inst *I) - 'ret void' instruction, insert before I
   2277   // ReturnInst(Value* X, Inst *I) - 'ret X'    instruction, insert before I
   2278   // ReturnInst(    null, BB *B)   - 'ret void' instruction, insert @ end of B
   2279   // ReturnInst(Value* X, BB *B)   - 'ret X'    instruction, insert @ end of B
   2280   //
   2281   // NOTE: If the Value* passed is of type void then the constructor behaves as
   2282   // if it was passed NULL.
   2283   explicit ReturnInst(LLVMContext &C, Value *retVal = 0,
   2284                       Instruction *InsertBefore = 0);
   2285   ReturnInst(LLVMContext &C, Value *retVal, BasicBlock *InsertAtEnd);
   2286   explicit ReturnInst(LLVMContext &C, BasicBlock *InsertAtEnd);
   2287 protected:
   2288   virtual ReturnInst *clone_impl() const;
   2289 public:
   2290   static ReturnInst* Create(LLVMContext &C, Value *retVal = 0,
   2291                             Instruction *InsertBefore = 0) {
   2292     return new(!!retVal) ReturnInst(C, retVal, InsertBefore);
   2293   }
   2294   static ReturnInst* Create(LLVMContext &C, Value *retVal,
   2295                             BasicBlock *InsertAtEnd) {
   2296     return new(!!retVal) ReturnInst(C, retVal, InsertAtEnd);
   2297   }
   2298   static ReturnInst* Create(LLVMContext &C, BasicBlock *InsertAtEnd) {
   2299     return new(0) ReturnInst(C, InsertAtEnd);
   2300   }
   2301   virtual ~ReturnInst();
   2302 
   2303   /// Provide fast operand accessors
   2304   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   2305 
   2306   /// Convenience accessor. Returns null if there is no return value.
   2307   Value *getReturnValue() const {
   2308     return getNumOperands() != 0 ? getOperand(0) : 0;
   2309   }
   2310 
   2311   unsigned getNumSuccessors() const { return 0; }
   2312 
   2313   // Methods for support type inquiry through isa, cast, and dyn_cast:
   2314   static inline bool classof(const ReturnInst *) { return true; }
   2315   static inline bool classof(const Instruction *I) {
   2316     return (I->getOpcode() == Instruction::Ret);
   2317   }
   2318   static inline bool classof(const Value *V) {
   2319     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   2320   }
   2321  private:
   2322   virtual BasicBlock *getSuccessorV(unsigned idx) const;
   2323   virtual unsigned getNumSuccessorsV() const;
   2324   virtual void setSuccessorV(unsigned idx, BasicBlock *B);
   2325 };
   2326 
   2327 template <>
   2328 struct OperandTraits<ReturnInst> : public VariadicOperandTraits<ReturnInst> {
   2329 };
   2330 
   2331 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(ReturnInst, Value)
   2332 
   2333 //===----------------------------------------------------------------------===//
   2334 //                               BranchInst Class
   2335 //===----------------------------------------------------------------------===//
   2336 
   2337 //===---------------------------------------------------------------------------
   2338 /// BranchInst - Conditional or Unconditional Branch instruction.
   2339 ///
   2340 class BranchInst : public TerminatorInst {
   2341   /// Ops list - Branches are strange.  The operands are ordered:
   2342   ///  [Cond, FalseDest,] TrueDest.  This makes some accessors faster because
   2343   /// they don't have to check for cond/uncond branchness. These are mostly
   2344   /// accessed relative from op_end().
   2345   BranchInst(const BranchInst &BI);
   2346   void AssertOK();
   2347   // BranchInst constructors (where {B, T, F} are blocks, and C is a condition):
   2348   // BranchInst(BB *B)                           - 'br B'
   2349   // BranchInst(BB* T, BB *F, Value *C)          - 'br C, T, F'
   2350   // BranchInst(BB* B, Inst *I)                  - 'br B'        insert before I
   2351   // BranchInst(BB* T, BB *F, Value *C, Inst *I) - 'br C, T, F', insert before I
   2352   // BranchInst(BB* B, BB *I)                    - 'br B'        insert at end
   2353   // BranchInst(BB* T, BB *F, Value *C, BB *I)   - 'br C, T, F', insert at end
   2354   explicit BranchInst(BasicBlock *IfTrue, Instruction *InsertBefore = 0);
   2355   BranchInst(BasicBlock *IfTrue, BasicBlock *IfFalse, Value *Cond,
   2356              Instruction *InsertBefore = 0);
   2357   BranchInst(BasicBlock *IfTrue, BasicBlock *InsertAtEnd);
   2358   BranchInst(BasicBlock *IfTrue, BasicBlock *IfFalse, Value *Cond,
   2359              BasicBlock *InsertAtEnd);
   2360 protected:
   2361   virtual BranchInst *clone_impl() const;
   2362 public:
   2363   static BranchInst *Create(BasicBlock *IfTrue, Instruction *InsertBefore = 0) {
   2364     return new(1) BranchInst(IfTrue, InsertBefore);
   2365   }
   2366   static BranchInst *Create(BasicBlock *IfTrue, BasicBlock *IfFalse,
   2367                             Value *Cond, Instruction *InsertBefore = 0) {
   2368     return new(3) BranchInst(IfTrue, IfFalse, Cond, InsertBefore);
   2369   }
   2370   static BranchInst *Create(BasicBlock *IfTrue, BasicBlock *InsertAtEnd) {
   2371     return new(1) BranchInst(IfTrue, InsertAtEnd);
   2372   }
   2373   static BranchInst *Create(BasicBlock *IfTrue, BasicBlock *IfFalse,
   2374                             Value *Cond, BasicBlock *InsertAtEnd) {
   2375     return new(3) BranchInst(IfTrue, IfFalse, Cond, InsertAtEnd);
   2376   }
   2377 
   2378   /// Transparently provide more efficient getOperand methods.
   2379   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   2380 
   2381   bool isUnconditional() const { return getNumOperands() == 1; }
   2382   bool isConditional()   const { return getNumOperands() == 3; }
   2383 
   2384   Value *getCondition() const {
   2385     assert(isConditional() && "Cannot get condition of an uncond branch!");
   2386     return Op<-3>();
   2387   }
   2388 
   2389   void setCondition(Value *V) {
   2390     assert(isConditional() && "Cannot set condition of unconditional branch!");
   2391     Op<-3>() = V;
   2392   }
   2393 
   2394   unsigned getNumSuccessors() const { return 1+isConditional(); }
   2395 
   2396   BasicBlock *getSuccessor(unsigned i) const {
   2397     assert(i < getNumSuccessors() && "Successor # out of range for Branch!");
   2398     return cast_or_null<BasicBlock>((&Op<-1>() - i)->get());
   2399   }
   2400 
   2401   void setSuccessor(unsigned idx, BasicBlock *NewSucc) {
   2402     assert(idx < getNumSuccessors() && "Successor # out of range for Branch!");
   2403     *(&Op<-1>() - idx) = (Value*)NewSucc;
   2404   }
   2405 
   2406   /// \brief Swap the successors of this branch instruction.
   2407   ///
   2408   /// Swaps the successors of the branch instruction. This also swaps any
   2409   /// branch weight metadata associated with the instruction so that it
   2410   /// continues to map correctly to each operand.
   2411   void swapSuccessors();
   2412 
   2413   // Methods for support type inquiry through isa, cast, and dyn_cast:
   2414   static inline bool classof(const BranchInst *) { return true; }
   2415   static inline bool classof(const Instruction *I) {
   2416     return (I->getOpcode() == Instruction::Br);
   2417   }
   2418   static inline bool classof(const Value *V) {
   2419     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   2420   }
   2421 private:
   2422   virtual BasicBlock *getSuccessorV(unsigned idx) const;
   2423   virtual unsigned getNumSuccessorsV() const;
   2424   virtual void setSuccessorV(unsigned idx, BasicBlock *B);
   2425 };
   2426 
   2427 template <>
   2428 struct OperandTraits<BranchInst> : public VariadicOperandTraits<BranchInst, 1> {
   2429 };
   2430 
   2431 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(BranchInst, Value)
   2432 
   2433 //===----------------------------------------------------------------------===//
   2434 //                               SwitchInst Class
   2435 //===----------------------------------------------------------------------===//
   2436 
   2437 //===---------------------------------------------------------------------------
   2438 /// SwitchInst - Multiway switch
   2439 ///
   2440 class SwitchInst : public TerminatorInst {
   2441   void *operator new(size_t, unsigned);  // DO NOT IMPLEMENT
   2442   unsigned ReservedSpace;
   2443   // Operand[0]    = Value to switch on
   2444   // Operand[1]    = Default basic block destination
   2445   // Operand[2n  ] = Value to match
   2446   // Operand[2n+1] = BasicBlock to go to on match
   2447   SwitchInst(const SwitchInst &SI);
   2448   void init(Value *Value, BasicBlock *Default, unsigned NumReserved);
   2449   void growOperands();
   2450   // allocate space for exactly zero operands
   2451   void *operator new(size_t s) {
   2452     return User::operator new(s, 0);
   2453   }
   2454   /// SwitchInst ctor - Create a new switch instruction, specifying a value to
   2455   /// switch on and a default destination.  The number of additional cases can
   2456   /// be specified here to make memory allocation more efficient.  This
   2457   /// constructor can also autoinsert before another instruction.
   2458   SwitchInst(Value *Value, BasicBlock *Default, unsigned NumCases,
   2459              Instruction *InsertBefore);
   2460 
   2461   /// SwitchInst ctor - Create a new switch instruction, specifying a value to
   2462   /// switch on and a default destination.  The number of additional cases can
   2463   /// be specified here to make memory allocation more efficient.  This
   2464   /// constructor also autoinserts at the end of the specified BasicBlock.
   2465   SwitchInst(Value *Value, BasicBlock *Default, unsigned NumCases,
   2466              BasicBlock *InsertAtEnd);
   2467 protected:
   2468   virtual SwitchInst *clone_impl() const;
   2469 public:
   2470 
   2471   // -2
   2472   static const unsigned DefaultPseudoIndex = static_cast<unsigned>(~0L-1);
   2473 
   2474   template <class SwitchInstTy, class ConstantIntTy, class BasicBlockTy>
   2475   class CaseIteratorT {
   2476   protected:
   2477 
   2478     SwitchInstTy *SI;
   2479     unsigned Index;
   2480 
   2481   public:
   2482 
   2483     typedef CaseIteratorT<SwitchInstTy, ConstantIntTy, BasicBlockTy> Self;
   2484 
   2485     /// Initializes case iterator for given SwitchInst and for given
   2486     /// case number.
   2487     CaseIteratorT(SwitchInstTy *SI, unsigned CaseNum) {
   2488       this->SI = SI;
   2489       Index = CaseNum;
   2490     }
   2491 
   2492     /// Initializes case iterator for given SwitchInst and for given
   2493     /// TerminatorInst's successor index.
   2494     static Self fromSuccessorIndex(SwitchInstTy *SI, unsigned SuccessorIndex) {
   2495       assert(SuccessorIndex < SI->getNumSuccessors() &&
   2496              "Successor index # out of range!");
   2497       return SuccessorIndex != 0 ?
   2498              Self(SI, SuccessorIndex - 1) :
   2499              Self(SI, DefaultPseudoIndex);
   2500     }
   2501 
   2502     /// Resolves case value for current case.
   2503     ConstantIntTy *getCaseValue() {
   2504       assert(Index < SI->getNumCases() && "Index out the number of cases.");
   2505       return reinterpret_cast<ConstantIntTy*>(SI->getOperand(2 + Index*2));
   2506     }
   2507 
   2508     /// Resolves successor for current case.
   2509     BasicBlockTy *getCaseSuccessor() {
   2510       assert((Index < SI->getNumCases() ||
   2511               Index == DefaultPseudoIndex) &&
   2512              "Index out the number of cases.");
   2513       return SI->getSuccessor(getSuccessorIndex());
   2514     }
   2515 
   2516     /// Returns number of current case.
   2517     unsigned getCaseIndex() const { return Index; }
   2518 
   2519     /// Returns TerminatorInst's successor index for current case successor.
   2520     unsigned getSuccessorIndex() const {
   2521       assert((Index == DefaultPseudoIndex || Index < SI->getNumCases()) &&
   2522              "Index out the number of cases.");
   2523       return Index != DefaultPseudoIndex ? Index + 1 : 0;
   2524     }
   2525 
   2526     Self operator++() {
   2527       // Check index correctness after increment.
   2528       // Note: Index == getNumCases() means end().
   2529       assert(Index+1 <= SI->getNumCases() && "Index out the number of cases.");
   2530       ++Index;
   2531       return *this;
   2532     }
   2533     Self operator++(int) {
   2534       Self tmp = *this;
   2535       ++(*this);
   2536       return tmp;
   2537     }
   2538     Self operator--() {
   2539       // Check index correctness after decrement.
   2540       // Note: Index == getNumCases() means end().
   2541       // Also allow "-1" iterator here. That will became valid after ++.
   2542       assert((Index == 0 || Index-1 <= SI->getNumCases()) &&
   2543              "Index out the number of cases.");
   2544       --Index;
   2545       return *this;
   2546     }
   2547     Self operator--(int) {
   2548       Self tmp = *this;
   2549       --(*this);
   2550       return tmp;
   2551     }
   2552     bool operator==(const Self& RHS) const {
   2553       assert(RHS.SI == SI && "Incompatible operators.");
   2554       return RHS.Index == Index;
   2555     }
   2556     bool operator!=(const Self& RHS) const {
   2557       assert(RHS.SI == SI && "Incompatible operators.");
   2558       return RHS.Index != Index;
   2559     }
   2560   };
   2561 
   2562   typedef CaseIteratorT<const SwitchInst, const ConstantInt, const BasicBlock>
   2563     ConstCaseIt;
   2564 
   2565   class CaseIt : public CaseIteratorT<SwitchInst, ConstantInt, BasicBlock> {
   2566 
   2567     typedef CaseIteratorT<SwitchInst, ConstantInt, BasicBlock> ParentTy;
   2568 
   2569   public:
   2570 
   2571     CaseIt(const ParentTy& Src) : ParentTy(Src) {}
   2572     CaseIt(SwitchInst *SI, unsigned CaseNum) : ParentTy(SI, CaseNum) {}
   2573 
   2574     /// Sets the new value for current case.
   2575     void setValue(ConstantInt *V) {
   2576       assert(Index < SI->getNumCases() && "Index out the number of cases.");
   2577       SI->setOperand(2 + Index*2, reinterpret_cast<Value*>(V));
   2578     }
   2579 
   2580     /// Sets the new successor for current case.
   2581     void setSuccessor(BasicBlock *S) {
   2582       SI->setSuccessor(getSuccessorIndex(), S);
   2583     }
   2584   };
   2585 
   2586   static SwitchInst *Create(Value *Value, BasicBlock *Default,
   2587                             unsigned NumCases, Instruction *InsertBefore = 0) {
   2588     return new SwitchInst(Value, Default, NumCases, InsertBefore);
   2589   }
   2590   static SwitchInst *Create(Value *Value, BasicBlock *Default,
   2591                             unsigned NumCases, BasicBlock *InsertAtEnd) {
   2592     return new SwitchInst(Value, Default, NumCases, InsertAtEnd);
   2593   }
   2594 
   2595   ~SwitchInst();
   2596 
   2597   /// Provide fast operand accessors
   2598   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   2599 
   2600   // Accessor Methods for Switch stmt
   2601   Value *getCondition() const { return getOperand(0); }
   2602   void setCondition(Value *V) { setOperand(0, V); }
   2603 
   2604   BasicBlock *getDefaultDest() const {
   2605     return cast<BasicBlock>(getOperand(1));
   2606   }
   2607 
   2608   void setDefaultDest(BasicBlock *DefaultCase) {
   2609     setOperand(1, reinterpret_cast<Value*>(DefaultCase));
   2610   }
   2611 
   2612   /// getNumCases - return the number of 'cases' in this switch instruction,
   2613   /// except the default case
   2614   unsigned getNumCases() const {
   2615     return getNumOperands()/2 - 1;
   2616   }
   2617 
   2618   /// Returns a read/write iterator that points to the first
   2619   /// case in SwitchInst.
   2620   CaseIt case_begin() {
   2621     return CaseIt(this, 0);
   2622   }
   2623   /// Returns a read-only iterator that points to the first
   2624   /// case in the SwitchInst.
   2625   ConstCaseIt case_begin() const {
   2626     return ConstCaseIt(this, 0);
   2627   }
   2628 
   2629   /// Returns a read/write iterator that points one past the last
   2630   /// in the SwitchInst.
   2631   CaseIt case_end() {
   2632     return CaseIt(this, getNumCases());
   2633   }
   2634   /// Returns a read-only iterator that points one past the last
   2635   /// in the SwitchInst.
   2636   ConstCaseIt case_end() const {
   2637     return ConstCaseIt(this, getNumCases());
   2638   }
   2639   /// Returns an iterator that points to the default case.
   2640   /// Note: this iterator allows to resolve successor only. Attempt
   2641   /// to resolve case value causes an assertion.
   2642   /// Also note, that increment and decrement also causes an assertion and
   2643   /// makes iterator invalid.
   2644   CaseIt case_default() {
   2645     return CaseIt(this, DefaultPseudoIndex);
   2646   }
   2647   ConstCaseIt case_default() const {
   2648     return ConstCaseIt(this, DefaultPseudoIndex);
   2649   }
   2650 
   2651   /// findCaseValue - Search all of the case values for the specified constant.
   2652   /// If it is explicitly handled, return the case iterator of it, otherwise
   2653   /// return default case iterator to indicate
   2654   /// that it is handled by the default handler.
   2655   CaseIt findCaseValue(const ConstantInt *C) {
   2656     for (CaseIt i = case_begin(), e = case_end(); i != e; ++i)
   2657       if (i.getCaseValue() == C)
   2658         return i;
   2659     return case_default();
   2660   }
   2661   ConstCaseIt findCaseValue(const ConstantInt *C) const {
   2662     for (ConstCaseIt i = case_begin(), e = case_end(); i != e; ++i)
   2663       if (i.getCaseValue() == C)
   2664         return i;
   2665     return case_default();
   2666   }
   2667 
   2668   /// findCaseDest - Finds the unique case value for a given successor. Returns
   2669   /// null if the successor is not found, not unique, or is the default case.
   2670   ConstantInt *findCaseDest(BasicBlock *BB) {
   2671     if (BB == getDefaultDest()) return NULL;
   2672 
   2673     ConstantInt *CI = NULL;
   2674     for (CaseIt i = case_begin(), e = case_end(); i != e; ++i) {
   2675       if (i.getCaseSuccessor() == BB) {
   2676         if (CI) return NULL;   // Multiple cases lead to BB.
   2677         else CI = i.getCaseValue();
   2678       }
   2679     }
   2680     return CI;
   2681   }
   2682 
   2683   /// addCase - Add an entry to the switch instruction...
   2684   /// Note:
   2685   /// This action invalidates case_end(). Old case_end() iterator will
   2686   /// point to the added case.
   2687   void addCase(ConstantInt *OnVal, BasicBlock *Dest);
   2688 
   2689   /// removeCase - This method removes the specified case and its successor
   2690   /// from the switch instruction. Note that this operation may reorder the
   2691   /// remaining cases at index idx and above.
   2692   /// Note:
   2693   /// This action invalidates iterators for all cases following the one removed,
   2694   /// including the case_end() iterator.
   2695   void removeCase(CaseIt i);
   2696 
   2697   unsigned getNumSuccessors() const { return getNumOperands()/2; }
   2698   BasicBlock *getSuccessor(unsigned idx) const {
   2699     assert(idx < getNumSuccessors() &&"Successor idx out of range for switch!");
   2700     return cast<BasicBlock>(getOperand(idx*2+1));
   2701   }
   2702   void setSuccessor(unsigned idx, BasicBlock *NewSucc) {
   2703     assert(idx < getNumSuccessors() && "Successor # out of range for switch!");
   2704     setOperand(idx*2+1, (Value*)NewSucc);
   2705   }
   2706 
   2707   // Methods for support type inquiry through isa, cast, and dyn_cast:
   2708   static inline bool classof(const SwitchInst *) { return true; }
   2709   static inline bool classof(const Instruction *I) {
   2710     return I->getOpcode() == Instruction::Switch;
   2711   }
   2712   static inline bool classof(const Value *V) {
   2713     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   2714   }
   2715 private:
   2716   virtual BasicBlock *getSuccessorV(unsigned idx) const;
   2717   virtual unsigned getNumSuccessorsV() const;
   2718   virtual void setSuccessorV(unsigned idx, BasicBlock *B);
   2719 };
   2720 
   2721 template <>
   2722 struct OperandTraits<SwitchInst> : public HungoffOperandTraits<2> {
   2723 };
   2724 
   2725 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(SwitchInst, Value)
   2726 
   2727 
   2728 //===----------------------------------------------------------------------===//
   2729 //                             IndirectBrInst Class
   2730 //===----------------------------------------------------------------------===//
   2731 
   2732 //===---------------------------------------------------------------------------
   2733 /// IndirectBrInst - Indirect Branch Instruction.
   2734 ///
   2735 class IndirectBrInst : public TerminatorInst {
   2736   void *operator new(size_t, unsigned);  // DO NOT IMPLEMENT
   2737   unsigned ReservedSpace;
   2738   // Operand[0]    = Value to switch on
   2739   // Operand[1]    = Default basic block destination
   2740   // Operand[2n  ] = Value to match
   2741   // Operand[2n+1] = BasicBlock to go to on match
   2742   IndirectBrInst(const IndirectBrInst &IBI);
   2743   void init(Value *Address, unsigned NumDests);
   2744   void growOperands();
   2745   // allocate space for exactly zero operands
   2746   void *operator new(size_t s) {
   2747     return User::operator new(s, 0);
   2748   }
   2749   /// IndirectBrInst ctor - Create a new indirectbr instruction, specifying an
   2750   /// Address to jump to.  The number of expected destinations can be specified
   2751   /// here to make memory allocation more efficient.  This constructor can also
   2752   /// autoinsert before another instruction.
   2753   IndirectBrInst(Value *Address, unsigned NumDests, Instruction *InsertBefore);
   2754 
   2755   /// IndirectBrInst ctor - Create a new indirectbr instruction, specifying an
   2756   /// Address to jump to.  The number of expected destinations can be specified
   2757   /// here to make memory allocation more efficient.  This constructor also
   2758   /// autoinserts at the end of the specified BasicBlock.
   2759   IndirectBrInst(Value *Address, unsigned NumDests, BasicBlock *InsertAtEnd);
   2760 protected:
   2761   virtual IndirectBrInst *clone_impl() const;
   2762 public:
   2763   static IndirectBrInst *Create(Value *Address, unsigned NumDests,
   2764                                 Instruction *InsertBefore = 0) {
   2765     return new IndirectBrInst(Address, NumDests, InsertBefore);
   2766   }
   2767   static IndirectBrInst *Create(Value *Address, unsigned NumDests,
   2768                                 BasicBlock *InsertAtEnd) {
   2769     return new IndirectBrInst(Address, NumDests, InsertAtEnd);
   2770   }
   2771   ~IndirectBrInst();
   2772 
   2773   /// Provide fast operand accessors.
   2774   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   2775 
   2776   // Accessor Methods for IndirectBrInst instruction.
   2777   Value *getAddress() { return getOperand(0); }
   2778   const Value *getAddress() const { return getOperand(0); }
   2779   void setAddress(Value *V) { setOperand(0, V); }
   2780 
   2781 
   2782   /// getNumDestinations - return the number of possible destinations in this
   2783   /// indirectbr instruction.
   2784   unsigned getNumDestinations() const { return getNumOperands()-1; }
   2785 
   2786   /// getDestination - Return the specified destination.
   2787   BasicBlock *getDestination(unsigned i) { return getSuccessor(i); }
   2788   const BasicBlock *getDestination(unsigned i) const { return getSuccessor(i); }
   2789 
   2790   /// addDestination - Add a destination.
   2791   ///
   2792   void addDestination(BasicBlock *Dest);
   2793 
   2794   /// removeDestination - This method removes the specified successor from the
   2795   /// indirectbr instruction.
   2796   void removeDestination(unsigned i);
   2797 
   2798   unsigned getNumSuccessors() const { return getNumOperands()-1; }
   2799   BasicBlock *getSuccessor(unsigned i) const {
   2800     return cast<BasicBlock>(getOperand(i+1));
   2801   }
   2802   void setSuccessor(unsigned i, BasicBlock *NewSucc) {
   2803     setOperand(i+1, (Value*)NewSucc);
   2804   }
   2805 
   2806   // Methods for support type inquiry through isa, cast, and dyn_cast:
   2807   static inline bool classof(const IndirectBrInst *) { return true; }
   2808   static inline bool classof(const Instruction *I) {
   2809     return I->getOpcode() == Instruction::IndirectBr;
   2810   }
   2811   static inline bool classof(const Value *V) {
   2812     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   2813   }
   2814 private:
   2815   virtual BasicBlock *getSuccessorV(unsigned idx) const;
   2816   virtual unsigned getNumSuccessorsV() const;
   2817   virtual void setSuccessorV(unsigned idx, BasicBlock *B);
   2818 };
   2819 
   2820 template <>
   2821 struct OperandTraits<IndirectBrInst> : public HungoffOperandTraits<1> {
   2822 };
   2823 
   2824 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(IndirectBrInst, Value)
   2825 
   2826 
   2827 //===----------------------------------------------------------------------===//
   2828 //                               InvokeInst Class
   2829 //===----------------------------------------------------------------------===//
   2830 
   2831 /// InvokeInst - Invoke instruction.  The SubclassData field is used to hold the
   2832 /// calling convention of the call.
   2833 ///
   2834 class InvokeInst : public TerminatorInst {
   2835   AttrListPtr AttributeList;
   2836   InvokeInst(const InvokeInst &BI);
   2837   void init(Value *Func, BasicBlock *IfNormal, BasicBlock *IfException,
   2838             ArrayRef<Value *> Args, const Twine &NameStr);
   2839 
   2840   /// Construct an InvokeInst given a range of arguments.
   2841   ///
   2842   /// @brief Construct an InvokeInst from a range of arguments
   2843   inline InvokeInst(Value *Func, BasicBlock *IfNormal, BasicBlock *IfException,
   2844                     ArrayRef<Value *> Args, unsigned Values,
   2845                     const Twine &NameStr, Instruction *InsertBefore);
   2846 
   2847   /// Construct an InvokeInst given a range of arguments.
   2848   ///
   2849   /// @brief Construct an InvokeInst from a range of arguments
   2850   inline InvokeInst(Value *Func, BasicBlock *IfNormal, BasicBlock *IfException,
   2851                     ArrayRef<Value *> Args, unsigned Values,
   2852                     const Twine &NameStr, BasicBlock *InsertAtEnd);
   2853 protected:
   2854   virtual InvokeInst *clone_impl() const;
   2855 public:
   2856   static InvokeInst *Create(Value *Func,
   2857                             BasicBlock *IfNormal, BasicBlock *IfException,
   2858                             ArrayRef<Value *> Args, const Twine &NameStr = "",
   2859                             Instruction *InsertBefore = 0) {
   2860     unsigned Values = unsigned(Args.size()) + 3;
   2861     return new(Values) InvokeInst(Func, IfNormal, IfException, Args,
   2862                                   Values, NameStr, InsertBefore);
   2863   }
   2864   static InvokeInst *Create(Value *Func,
   2865                             BasicBlock *IfNormal, BasicBlock *IfException,
   2866                             ArrayRef<Value *> Args, const Twine &NameStr,
   2867                             BasicBlock *InsertAtEnd) {
   2868     unsigned Values = unsigned(Args.size()) + 3;
   2869     return new(Values) InvokeInst(Func, IfNormal, IfException, Args,
   2870                                   Values, NameStr, InsertAtEnd);
   2871   }
   2872 
   2873   /// Provide fast operand accessors
   2874   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   2875 
   2876   /// getNumArgOperands - Return the number of invoke arguments.
   2877   ///
   2878   unsigned getNumArgOperands() const { return getNumOperands() - 3; }
   2879 
   2880   /// getArgOperand/setArgOperand - Return/set the i-th invoke argument.
   2881   ///
   2882   Value *getArgOperand(unsigned i) const { return getOperand(i); }
   2883   void setArgOperand(unsigned i, Value *v) { setOperand(i, v); }
   2884 
   2885   /// getCallingConv/setCallingConv - Get or set the calling convention of this
   2886   /// function call.
   2887   CallingConv::ID getCallingConv() const {
   2888     return static_cast<CallingConv::ID>(getSubclassDataFromInstruction());
   2889   }
   2890   void setCallingConv(CallingConv::ID CC) {
   2891     setInstructionSubclassData(static_cast<unsigned>(CC));
   2892   }
   2893 
   2894   /// getAttributes - Return the parameter attributes for this invoke.
   2895   ///
   2896   const AttrListPtr &getAttributes() const { return AttributeList; }
   2897 
   2898   /// setAttributes - Set the parameter attributes for this invoke.
   2899   ///
   2900   void setAttributes(const AttrListPtr &Attrs) { AttributeList = Attrs; }
   2901 
   2902   /// addAttribute - adds the attribute to the list of attributes.
   2903   void addAttribute(unsigned i, Attributes attr);
   2904 
   2905   /// removeAttribute - removes the attribute from the list of attributes.
   2906   void removeAttribute(unsigned i, Attributes attr);
   2907 
   2908   /// @brief Determine whether the call or the callee has the given attribute.
   2909   bool paramHasAttr(unsigned i, Attributes attr) const;
   2910 
   2911   /// @brief Extract the alignment for a call or parameter (0=unknown).
   2912   unsigned getParamAlignment(unsigned i) const {
   2913     return AttributeList.getParamAlignment(i);
   2914   }
   2915 
   2916   /// @brief Return true if the call should not be inlined.
   2917   bool isNoInline() const { return paramHasAttr(~0, Attribute::NoInline); }
   2918   void setIsNoInline(bool Value = true) {
   2919     if (Value) addAttribute(~0, Attribute::NoInline);
   2920     else removeAttribute(~0, Attribute::NoInline);
   2921   }
   2922 
   2923   /// @brief Determine if the call does not access memory.
   2924   bool doesNotAccessMemory() const {
   2925     return paramHasAttr(~0, Attribute::ReadNone);
   2926   }
   2927   void setDoesNotAccessMemory(bool NotAccessMemory = true) {
   2928     if (NotAccessMemory) addAttribute(~0, Attribute::ReadNone);
   2929     else removeAttribute(~0, Attribute::ReadNone);
   2930   }
   2931 
   2932   /// @brief Determine if the call does not access or only reads memory.
   2933   bool onlyReadsMemory() const {
   2934     return doesNotAccessMemory() || paramHasAttr(~0, Attribute::ReadOnly);
   2935   }
   2936   void setOnlyReadsMemory(bool OnlyReadsMemory = true) {
   2937     if (OnlyReadsMemory) addAttribute(~0, Attribute::ReadOnly);
   2938     else removeAttribute(~0, Attribute::ReadOnly | Attribute::ReadNone);
   2939   }
   2940 
   2941   /// @brief Determine if the call cannot return.
   2942   bool doesNotReturn() const { return paramHasAttr(~0, Attribute::NoReturn); }
   2943   void setDoesNotReturn(bool DoesNotReturn = true) {
   2944     if (DoesNotReturn) addAttribute(~0, Attribute::NoReturn);
   2945     else removeAttribute(~0, Attribute::NoReturn);
   2946   }
   2947 
   2948   /// @brief Determine if the call cannot unwind.
   2949   bool doesNotThrow() const { return paramHasAttr(~0, Attribute::NoUnwind); }
   2950   void setDoesNotThrow(bool DoesNotThrow = true) {
   2951     if (DoesNotThrow) addAttribute(~0, Attribute::NoUnwind);
   2952     else removeAttribute(~0, Attribute::NoUnwind);
   2953   }
   2954 
   2955   /// @brief Determine if the call returns a structure through first
   2956   /// pointer argument.
   2957   bool hasStructRetAttr() const {
   2958     // Be friendly and also check the callee.
   2959     return paramHasAttr(1, Attribute::StructRet);
   2960   }
   2961 
   2962   /// @brief Determine if any call argument is an aggregate passed by value.
   2963   bool hasByValArgument() const {
   2964     return AttributeList.hasAttrSomewhere(Attribute::ByVal);
   2965   }
   2966 
   2967   /// getCalledFunction - Return the function called, or null if this is an
   2968   /// indirect function invocation.
   2969   ///
   2970   Function *getCalledFunction() const {
   2971     return dyn_cast<Function>(Op<-3>());
   2972   }
   2973 
   2974   /// getCalledValue - Get a pointer to the function that is invoked by this
   2975   /// instruction
   2976   const Value *getCalledValue() const { return Op<-3>(); }
   2977         Value *getCalledValue()       { return Op<-3>(); }
   2978 
   2979   /// setCalledFunction - Set the function called.
   2980   void setCalledFunction(Value* Fn) {
   2981     Op<-3>() = Fn;
   2982   }
   2983 
   2984   // get*Dest - Return the destination basic blocks...
   2985   BasicBlock *getNormalDest() const {
   2986     return cast<BasicBlock>(Op<-2>());
   2987   }
   2988   BasicBlock *getUnwindDest() const {
   2989     return cast<BasicBlock>(Op<-1>());
   2990   }
   2991   void setNormalDest(BasicBlock *B) {
   2992     Op<-2>() = reinterpret_cast<Value*>(B);
   2993   }
   2994   void setUnwindDest(BasicBlock *B) {
   2995     Op<-1>() = reinterpret_cast<Value*>(B);
   2996   }
   2997 
   2998   /// getLandingPadInst - Get the landingpad instruction from the landing pad
   2999   /// block (the unwind destination).
   3000   LandingPadInst *getLandingPadInst() const;
   3001 
   3002   BasicBlock *getSuccessor(unsigned i) const {
   3003     assert(i < 2 && "Successor # out of range for invoke!");
   3004     return i == 0 ? getNormalDest() : getUnwindDest();
   3005   }
   3006 
   3007   void setSuccessor(unsigned idx, BasicBlock *NewSucc) {
   3008     assert(idx < 2 && "Successor # out of range for invoke!");
   3009     *(&Op<-2>() + idx) = reinterpret_cast<Value*>(NewSucc);
   3010   }
   3011 
   3012   unsigned getNumSuccessors() const { return 2; }
   3013 
   3014   // Methods for support type inquiry through isa, cast, and dyn_cast:
   3015   static inline bool classof(const InvokeInst *) { return true; }
   3016   static inline bool classof(const Instruction *I) {
   3017     return (I->getOpcode() == Instruction::Invoke);
   3018   }
   3019   static inline bool classof(const Value *V) {
   3020     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   3021   }
   3022 
   3023 private:
   3024   virtual BasicBlock *getSuccessorV(unsigned idx) const;
   3025   virtual unsigned getNumSuccessorsV() const;
   3026   virtual void setSuccessorV(unsigned idx, BasicBlock *B);
   3027 
   3028   // Shadow Instruction::setInstructionSubclassData with a private forwarding
   3029   // method so that subclasses cannot accidentally use it.
   3030   void setInstructionSubclassData(unsigned short D) {
   3031     Instruction::setInstructionSubclassData(D);
   3032   }
   3033 };
   3034 
   3035 template <>
   3036 struct OperandTraits<InvokeInst> : public VariadicOperandTraits<InvokeInst, 3> {
   3037 };
   3038 
   3039 InvokeInst::InvokeInst(Value *Func,
   3040                        BasicBlock *IfNormal, BasicBlock *IfException,
   3041                        ArrayRef<Value *> Args, unsigned Values,
   3042                        const Twine &NameStr, Instruction *InsertBefore)
   3043   : TerminatorInst(cast<FunctionType>(cast<PointerType>(Func->getType())
   3044                                       ->getElementType())->getReturnType(),
   3045                    Instruction::Invoke,
   3046                    OperandTraits<InvokeInst>::op_end(this) - Values,
   3047                    Values, InsertBefore) {
   3048   init(Func, IfNormal, IfException, Args, NameStr);
   3049 }
   3050 InvokeInst::InvokeInst(Value *Func,
   3051                        BasicBlock *IfNormal, BasicBlock *IfException,
   3052                        ArrayRef<Value *> Args, unsigned Values,
   3053                        const Twine &NameStr, BasicBlock *InsertAtEnd)
   3054   : TerminatorInst(cast<FunctionType>(cast<PointerType>(Func->getType())
   3055                                       ->getElementType())->getReturnType(),
   3056                    Instruction::Invoke,
   3057                    OperandTraits<InvokeInst>::op_end(this) - Values,
   3058                    Values, InsertAtEnd) {
   3059   init(Func, IfNormal, IfException, Args, NameStr);
   3060 }
   3061 
   3062 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(InvokeInst, Value)
   3063 
   3064 //===----------------------------------------------------------------------===//
   3065 //                              ResumeInst Class
   3066 //===----------------------------------------------------------------------===//
   3067 
   3068 //===---------------------------------------------------------------------------
   3069 /// ResumeInst - Resume the propagation of an exception.
   3070 ///
   3071 class ResumeInst : public TerminatorInst {
   3072   ResumeInst(const ResumeInst &RI);
   3073 
   3074   explicit ResumeInst(Value *Exn, Instruction *InsertBefore=0);
   3075   ResumeInst(Value *Exn, BasicBlock *InsertAtEnd);
   3076 protected:
   3077   virtual ResumeInst *clone_impl() const;
   3078 public:
   3079   static ResumeInst *Create(Value *Exn, Instruction *InsertBefore = 0) {
   3080     return new(1) ResumeInst(Exn, InsertBefore);
   3081   }
   3082   static ResumeInst *Create(Value *Exn, BasicBlock *InsertAtEnd) {
   3083     return new(1) ResumeInst(Exn, InsertAtEnd);
   3084   }
   3085 
   3086   /// Provide fast operand accessors
   3087   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
   3088 
   3089   /// Convenience accessor.
   3090   Value *getValue() const { return Op<0>(); }
   3091 
   3092   unsigned getNumSuccessors() const { return 0; }
   3093 
   3094   // Methods for support type inquiry through isa, cast, and dyn_cast:
   3095   static inline bool classof(const ResumeInst *) { return true; }
   3096   static inline bool classof(const Instruction *I) {
   3097     return I->getOpcode() == Instruction::Resume;
   3098   }
   3099   static inline bool classof(const Value *V) {
   3100     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   3101   }
   3102 private:
   3103   virtual BasicBlock *getSuccessorV(unsigned idx) const;
   3104   virtual unsigned getNumSuccessorsV() const;
   3105   virtual void setSuccessorV(unsigned idx, BasicBlock *B);
   3106 };
   3107 
   3108 template <>
   3109 struct OperandTraits<ResumeInst> :
   3110     public FixedNumOperandTraits<ResumeInst, 1> {
   3111 };
   3112 
   3113 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(ResumeInst, Value)
   3114 
   3115 //===----------------------------------------------------------------------===//
   3116 //                           UnreachableInst Class
   3117 //===----------------------------------------------------------------------===//
   3118 
   3119 //===---------------------------------------------------------------------------
   3120 /// UnreachableInst - This function has undefined behavior.  In particular, the
   3121 /// presence of this instruction indicates some higher level knowledge that the
   3122 /// end of the block cannot be reached.
   3123 ///
   3124 class UnreachableInst : public TerminatorInst {
   3125   void *operator new(size_t, unsigned);  // DO NOT IMPLEMENT
   3126 protected:
   3127   virtual UnreachableInst *clone_impl() const;
   3128 
   3129 public:
   3130   // allocate space for exactly zero operands
   3131   void *operator new(size_t s) {
   3132     return User::operator new(s, 0);
   3133   }
   3134   explicit UnreachableInst(LLVMContext &C, Instruction *InsertBefore = 0);
   3135   explicit UnreachableInst(LLVMContext &C, BasicBlock *InsertAtEnd);
   3136 
   3137   unsigned getNumSuccessors() const { return 0; }
   3138 
   3139   // Methods for support type inquiry through isa, cast, and dyn_cast:
   3140   static inline bool classof(const UnreachableInst *) { return true; }
   3141   static inline bool classof(const Instruction *I) {
   3142     return I->getOpcode() == Instruction::Unreachable;
   3143   }
   3144   static inline bool classof(const Value *V) {
   3145     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   3146   }
   3147 private:
   3148   virtual BasicBlock *getSuccessorV(unsigned idx) const;
   3149   virtual unsigned getNumSuccessorsV() const;
   3150   virtual void setSuccessorV(unsigned idx, BasicBlock *B);
   3151 };
   3152 
   3153 //===----------------------------------------------------------------------===//
   3154 //                                 TruncInst Class
   3155 //===----------------------------------------------------------------------===//
   3156 
   3157 /// @brief This class represents a truncation of integer types.
   3158 class TruncInst : public CastInst {
   3159 protected:
   3160   /// @brief Clone an identical TruncInst
   3161   virtual TruncInst *clone_impl() const;
   3162 
   3163 public:
   3164   /// @brief Constructor with insert-before-instruction semantics
   3165   TruncInst(
   3166     Value *S,                     ///< The value to be truncated
   3167     Type *Ty,               ///< The (smaller) type to truncate to
   3168     const Twine &NameStr = "",    ///< A name for the new instruction
   3169     Instruction *InsertBefore = 0 ///< Where to insert the new instruction
   3170   );
   3171 
   3172   /// @brief Constructor with insert-at-end-of-block semantics
   3173   TruncInst(
   3174     Value *S,                     ///< The value to be truncated
   3175     Type *Ty,               ///< The (smaller) type to truncate to
   3176     const Twine &NameStr,         ///< A name for the new instruction
   3177     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
   3178   );
   3179 
   3180   /// @brief Methods for support type inquiry through isa, cast, and dyn_cast:
   3181   static inline bool classof(const TruncInst *) { return true; }
   3182   static inline bool classof(const Instruction *I) {
   3183     return I->getOpcode() == Trunc;
   3184   }
   3185   static inline bool classof(const Value *V) {
   3186     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   3187   }
   3188 };
   3189 
   3190 //===----------------------------------------------------------------------===//
   3191 //                                 ZExtInst Class
   3192 //===----------------------------------------------------------------------===//
   3193 
   3194 /// @brief This class represents zero extension of integer types.
   3195 class ZExtInst : public CastInst {
   3196 protected:
   3197   /// @brief Clone an identical ZExtInst
   3198   virtual ZExtInst *clone_impl() const;
   3199 
   3200 public:
   3201   /// @brief Constructor with insert-before-instruction semantics
   3202   ZExtInst(
   3203     Value *S,                     ///< The value to be zero extended
   3204     Type *Ty,               ///< The type to zero extend to
   3205     const Twine &NameStr = "",    ///< A name for the new instruction
   3206     Instruction *InsertBefore = 0 ///< Where to insert the new instruction
   3207   );
   3208 
   3209   /// @brief Constructor with insert-at-end semantics.
   3210   ZExtInst(
   3211     Value *S,                     ///< The value to be zero extended
   3212     Type *Ty,               ///< The type to zero extend to
   3213     const Twine &NameStr,         ///< A name for the new instruction
   3214     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
   3215   );
   3216 
   3217   /// @brief Methods for support type inquiry through isa, cast, and dyn_cast:
   3218   static inline bool classof(const ZExtInst *) { return true; }
   3219   static inline bool classof(const Instruction *I) {
   3220     return I->getOpcode() == ZExt;
   3221   }
   3222   static inline bool classof(const Value *V) {
   3223     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   3224   }
   3225 };
   3226 
   3227 //===----------------------------------------------------------------------===//
   3228 //                                 SExtInst Class
   3229 //===----------------------------------------------------------------------===//
   3230 
   3231 /// @brief This class represents a sign extension of integer types.
   3232 class SExtInst : public CastInst {
   3233 protected:
   3234   /// @brief Clone an identical SExtInst
   3235   virtual SExtInst *clone_impl() const;
   3236 
   3237 public:
   3238   /// @brief Constructor with insert-before-instruction semantics
   3239   SExtInst(
   3240     Value *S,                     ///< The value to be sign extended
   3241     Type *Ty,               ///< The type to sign extend to
   3242     const Twine &NameStr = "",    ///< A name for the new instruction
   3243     Instruction *InsertBefore = 0 ///< Where to insert the new instruction
   3244   );
   3245 
   3246   /// @brief Constructor with insert-at-end-of-block semantics
   3247   SExtInst(
   3248     Value *S,                     ///< The value to be sign extended
   3249     Type *Ty,               ///< The type to sign extend to
   3250     const Twine &NameStr,         ///< A name for the new instruction
   3251     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
   3252   );
   3253 
   3254   /// @brief Methods for support type inquiry through isa, cast, and dyn_cast:
   3255   static inline bool classof(const SExtInst *) { return true; }
   3256   static inline bool classof(const Instruction *I) {
   3257     return I->getOpcode() == SExt;
   3258   }
   3259   static inline bool classof(const Value *V) {
   3260     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   3261   }
   3262 };
   3263 
   3264 //===----------------------------------------------------------------------===//
   3265 //                                 FPTruncInst Class
   3266 //===----------------------------------------------------------------------===//
   3267 
   3268 /// @brief This class represents a truncation of floating point types.
   3269 class FPTruncInst : public CastInst {
   3270 protected:
   3271   /// @brief Clone an identical FPTruncInst
   3272   virtual FPTruncInst *clone_impl() const;
   3273 
   3274 public:
   3275   /// @brief Constructor with insert-before-instruction semantics
   3276   FPTruncInst(
   3277     Value *S,                     ///< The value to be truncated
   3278     Type *Ty,               ///< The type to truncate to
   3279     const Twine &NameStr = "",    ///< A name for the new instruction
   3280     Instruction *InsertBefore = 0 ///< Where to insert the new instruction
   3281   );
   3282 
   3283   /// @brief Constructor with insert-before-instruction semantics
   3284   FPTruncInst(
   3285     Value *S,                     ///< The value to be truncated
   3286     Type *Ty,               ///< The type to truncate to
   3287     const Twine &NameStr,         ///< A name for the new instruction
   3288     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
   3289   );
   3290 
   3291   /// @brief Methods for support type inquiry through isa, cast, and dyn_cast:
   3292   static inline bool classof(const FPTruncInst *) { return true; }
   3293   static inline bool classof(const Instruction *I) {
   3294     return I->getOpcode() == FPTrunc;
   3295   }
   3296   static inline bool classof(const Value *V) {
   3297     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   3298   }
   3299 };
   3300 
   3301 //===----------------------------------------------------------------------===//
   3302 //                                 FPExtInst Class
   3303 //===----------------------------------------------------------------------===//
   3304 
   3305 /// @brief This class represents an extension of floating point types.
   3306 class FPExtInst : public CastInst {
   3307 protected:
   3308   /// @brief Clone an identical FPExtInst
   3309   virtual FPExtInst *clone_impl() const;
   3310 
   3311 public:
   3312   /// @brief Constructor with insert-before-instruction semantics
   3313   FPExtInst(
   3314     Value *S,                     ///< The value to be extended
   3315     Type *Ty,               ///< The type to extend to
   3316     const Twine &NameStr = "",    ///< A name for the new instruction
   3317     Instruction *InsertBefore = 0 ///< Where to insert the new instruction
   3318   );
   3319 
   3320   /// @brief Constructor with insert-at-end-of-block semantics
   3321   FPExtInst(
   3322     Value *S,                     ///< The value to be extended
   3323     Type *Ty,               ///< The type to extend to
   3324     const Twine &NameStr,         ///< A name for the new instruction
   3325     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
   3326   );
   3327 
   3328   /// @brief Methods for support type inquiry through isa, cast, and dyn_cast:
   3329   static inline bool classof(const FPExtInst *) { return true; }
   3330   static inline bool classof(const Instruction *I) {
   3331     return I->getOpcode() == FPExt;
   3332   }
   3333   static inline bool classof(const Value *V) {
   3334     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   3335   }
   3336 };
   3337 
   3338 //===----------------------------------------------------------------------===//
   3339 //                                 UIToFPInst Class
   3340 //===----------------------------------------------------------------------===//
   3341 
   3342 /// @brief This class represents a cast unsigned integer to floating point.
   3343 class UIToFPInst : public CastInst {
   3344 protected:
   3345   /// @brief Clone an identical UIToFPInst
   3346   virtual UIToFPInst *clone_impl() const;
   3347 
   3348 public:
   3349   /// @brief Constructor with insert-before-instruction semantics
   3350   UIToFPInst(
   3351     Value *S,                     ///< The value to be converted
   3352     Type *Ty,               ///< The type to convert to
   3353     const Twine &NameStr = "",    ///< A name for the new instruction
   3354     Instruction *InsertBefore = 0 ///< Where to insert the new instruction
   3355   );
   3356 
   3357   /// @brief Constructor with insert-at-end-of-block semantics
   3358   UIToFPInst(
   3359     Value *S,                     ///< The value to be converted
   3360     Type *Ty,               ///< The type to convert to
   3361     const Twine &NameStr,         ///< A name for the new instruction
   3362     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
   3363   );
   3364 
   3365   /// @brief Methods for support type inquiry through isa, cast, and dyn_cast:
   3366   static inline bool classof(const UIToFPInst *) { return true; }
   3367   static inline bool classof(const Instruction *I) {
   3368     return I->getOpcode() == UIToFP;
   3369   }
   3370   static inline bool classof(const Value *V) {
   3371     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   3372   }
   3373 };
   3374 
   3375 //===----------------------------------------------------------------------===//
   3376 //                                 SIToFPInst Class
   3377 //===----------------------------------------------------------------------===//
   3378 
   3379 /// @brief This class represents a cast from signed integer to floating point.
   3380 class SIToFPInst : public CastInst {
   3381 protected:
   3382   /// @brief Clone an identical SIToFPInst
   3383   virtual SIToFPInst *clone_impl() const;
   3384 
   3385 public:
   3386   /// @brief Constructor with insert-before-instruction semantics
   3387   SIToFPInst(
   3388     Value *S,                     ///< The value to be converted
   3389     Type *Ty,               ///< The type to convert to
   3390     const Twine &NameStr = "",    ///< A name for the new instruction
   3391     Instruction *InsertBefore = 0 ///< Where to insert the new instruction
   3392   );
   3393 
   3394   /// @brief Constructor with insert-at-end-of-block semantics
   3395   SIToFPInst(
   3396     Value *S,                     ///< The value to be converted
   3397     Type *Ty,               ///< The type to convert to
   3398     const Twine &NameStr,         ///< A name for the new instruction
   3399     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
   3400   );
   3401 
   3402   /// @brief Methods for support type inquiry through isa, cast, and dyn_cast:
   3403   static inline bool classof(const SIToFPInst *) { return true; }
   3404   static inline bool classof(const Instruction *I) {
   3405     return I->getOpcode() == SIToFP;
   3406   }
   3407   static inline bool classof(const Value *V) {
   3408     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   3409   }
   3410 };
   3411 
   3412 //===----------------------------------------------------------------------===//
   3413 //                                 FPToUIInst Class
   3414 //===----------------------------------------------------------------------===//
   3415 
   3416 /// @brief This class represents a cast from floating point to unsigned integer
   3417 class FPToUIInst  : public CastInst {
   3418 protected:
   3419   /// @brief Clone an identical FPToUIInst
   3420   virtual FPToUIInst *clone_impl() const;
   3421 
   3422 public:
   3423   /// @brief Constructor with insert-before-instruction semantics
   3424   FPToUIInst(
   3425     Value *S,                     ///< The value to be converted
   3426     Type *Ty,               ///< The type to convert to
   3427     const Twine &NameStr = "",    ///< A name for the new instruction
   3428     Instruction *InsertBefore = 0 ///< Where to insert the new instruction
   3429   );
   3430 
   3431   /// @brief Constructor with insert-at-end-of-block semantics
   3432   FPToUIInst(
   3433     Value *S,                     ///< The value to be converted
   3434     Type *Ty,               ///< The type to convert to
   3435     const Twine &NameStr,         ///< A name for the new instruction
   3436     BasicBlock *InsertAtEnd       ///< Where to insert the new instruction
   3437   );
   3438 
   3439   /// @brief Methods for support type inquiry through isa, cast, and dyn_cast:
   3440   static inline bool classof(const FPToUIInst *) { return true; }
   3441   static inline bool classof(const Instruction *I) {
   3442     return I->getOpcode() == FPToUI;
   3443   }
   3444   static inline bool classof(const Value *V) {
   3445     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   3446   }
   3447 };
   3448 
   3449 //===----------------------------------------------------------------------===//
   3450 //                                 FPToSIInst Class
   3451 //===----------------------------------------------------------------------===//
   3452 
   3453 /// @brief This class represents a cast from floating point to signed integer.
   3454 class FPToSIInst  : public CastInst {
   3455 protected:
   3456   /// @brief Clone an identical FPToSIInst
   3457   virtual FPToSIInst *clone_impl() const;
   3458 
   3459 public:
   3460   /// @brief Constructor with insert-before-instruction semantics
   3461   FPToSIInst(
   3462     Value *S,                     ///< The value to be converted
   3463     Type *Ty,               ///< The type to convert to
   3464     const Twine &NameStr = "",    ///< A name for the new instruction
   3465     Instruction *InsertBefore = 0 ///< Where to insert the new instruction
   3466   );
   3467 
   3468   /// @brief Constructor with insert-at-end-of-block semantics
   3469   FPToSIInst(
   3470     Value *S,                     ///< The value to be converted
   3471     Type *Ty,               ///< The type to convert to
   3472     const Twine &NameStr,         ///< A name for the new instruction
   3473     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
   3474   );
   3475 
   3476   /// @brief Methods for support type inquiry through isa, cast, and dyn_cast:
   3477   static inline bool classof(const FPToSIInst *) { return true; }
   3478   static inline bool classof(const Instruction *I) {
   3479     return I->getOpcode() == FPToSI;
   3480   }
   3481   static inline bool classof(const Value *V) {
   3482     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   3483   }
   3484 };
   3485 
   3486 //===----------------------------------------------------------------------===//
   3487 //                                 IntToPtrInst Class
   3488 //===----------------------------------------------------------------------===//
   3489 
   3490 /// @brief This class represents a cast from an integer to a pointer.
   3491 class IntToPtrInst : public CastInst {
   3492 public:
   3493   /// @brief Constructor with insert-before-instruction semantics
   3494   IntToPtrInst(
   3495     Value *S,                     ///< The value to be converted
   3496     Type *Ty,               ///< The type to convert to
   3497     const Twine &NameStr = "",    ///< A name for the new instruction
   3498     Instruction *InsertBefore = 0 ///< Where to insert the new instruction
   3499   );
   3500 
   3501   /// @brief Constructor with insert-at-end-of-block semantics
   3502   IntToPtrInst(
   3503     Value *S,                     ///< The value to be converted
   3504     Type *Ty,               ///< The type to convert to
   3505     const Twine &NameStr,         ///< A name for the new instruction
   3506     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
   3507   );
   3508 
   3509   /// @brief Clone an identical IntToPtrInst
   3510   virtual IntToPtrInst *clone_impl() const;
   3511 
   3512   // Methods for support type inquiry through isa, cast, and dyn_cast:
   3513   static inline bool classof(const IntToPtrInst *) { return true; }
   3514   static inline bool classof(const Instruction *I) {
   3515     return I->getOpcode() == IntToPtr;
   3516   }
   3517   static inline bool classof(const Value *V) {
   3518     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   3519   }
   3520 };
   3521 
   3522 //===----------------------------------------------------------------------===//
   3523 //                                 PtrToIntInst Class
   3524 //===----------------------------------------------------------------------===//
   3525 
   3526 /// @brief This class represents a cast from a pointer to an integer
   3527 class PtrToIntInst : public CastInst {
   3528 protected:
   3529   /// @brief Clone an identical PtrToIntInst
   3530   virtual PtrToIntInst *clone_impl() const;
   3531 
   3532 public:
   3533   /// @brief Constructor with insert-before-instruction semantics
   3534   PtrToIntInst(
   3535     Value *S,                     ///< The value to be converted
   3536     Type *Ty,               ///< The type to convert to
   3537     const Twine &NameStr = "",    ///< A name for the new instruction
   3538     Instruction *InsertBefore = 0 ///< Where to insert the new instruction
   3539   );
   3540 
   3541   /// @brief Constructor with insert-at-end-of-block semantics
   3542   PtrToIntInst(
   3543     Value *S,                     ///< The value to be converted
   3544     Type *Ty,               ///< The type to convert to
   3545     const Twine &NameStr,         ///< A name for the new instruction
   3546     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
   3547   );
   3548 
   3549   // Methods for support type inquiry through isa, cast, and dyn_cast:
   3550   static inline bool classof(const PtrToIntInst *) { return true; }
   3551   static inline bool classof(const Instruction *I) {
   3552     return I->getOpcode() == PtrToInt;
   3553   }
   3554   static inline bool classof(const Value *V) {
   3555     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   3556   }
   3557 };
   3558 
   3559 //===----------------------------------------------------------------------===//
   3560 //                             BitCastInst Class
   3561 //===----------------------------------------------------------------------===//
   3562 
   3563 /// @brief This class represents a no-op cast from one type to another.
   3564 class BitCastInst : public CastInst {
   3565 protected:
   3566   /// @brief Clone an identical BitCastInst
   3567   virtual BitCastInst *clone_impl() const;
   3568 
   3569 public:
   3570   /// @brief Constructor with insert-before-instruction semantics
   3571   BitCastInst(
   3572     Value *S,                     ///< The value to be casted
   3573     Type *Ty,               ///< The type to casted to
   3574     const Twine &NameStr = "",    ///< A name for the new instruction
   3575     Instruction *InsertBefore = 0 ///< Where to insert the new instruction
   3576   );
   3577 
   3578   /// @brief Constructor with insert-at-end-of-block semantics
   3579   BitCastInst(
   3580     Value *S,                     ///< The value to be casted
   3581     Type *Ty,               ///< The type to casted to
   3582     const Twine &NameStr,         ///< A name for the new instruction
   3583     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
   3584   );
   3585 
   3586   // Methods for support type inquiry through isa, cast, and dyn_cast:
   3587   static inline bool classof(const BitCastInst *) { return true; }
   3588   static inline bool classof(const Instruction *I) {
   3589     return I->getOpcode() == BitCast;
   3590   }
   3591   static inline bool classof(const Value *V) {
   3592     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   3593   }
   3594 };
   3595 
   3596 } // End llvm namespace
   3597 
   3598 #endif
   3599