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