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