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