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