LLVM  8.0.1
Instructions.h
Go to the documentation of this file.
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/None.h"
21 #include "llvm/ADT/STLExtras.h"
22 #include "llvm/ADT/SmallVector.h"
23 #include "llvm/ADT/StringRef.h"
24 #include "llvm/ADT/Twine.h"
25 #include "llvm/ADT/iterator.h"
27 #include "llvm/IR/Attributes.h"
28 #include "llvm/IR/BasicBlock.h"
29 #include "llvm/IR/CallingConv.h"
30 #include "llvm/IR/Constant.h"
31 #include "llvm/IR/DerivedTypes.h"
32 #include "llvm/IR/Function.h"
33 #include "llvm/IR/InstrTypes.h"
34 #include "llvm/IR/Instruction.h"
35 #include "llvm/IR/OperandTraits.h"
36 #include "llvm/IR/Type.h"
37 #include "llvm/IR/Use.h"
38 #include "llvm/IR/User.h"
39 #include "llvm/IR/Value.h"
41 #include "llvm/Support/Casting.h"
43 #include <cassert>
44 #include <cstddef>
45 #include <cstdint>
46 #include <iterator>
47 
48 namespace llvm {
49 
50 class APInt;
51 class ConstantInt;
52 class DataLayout;
53 class LLVMContext;
54 
55 //===----------------------------------------------------------------------===//
56 // AllocaInst Class
57 //===----------------------------------------------------------------------===//
58 
59 /// an instruction to allocate memory on the stack
60 class AllocaInst : public UnaryInstruction {
61  Type *AllocatedType;
62 
63 protected:
64  // Note: Instruction needs to be a friend here to call cloneImpl.
65  friend class Instruction;
66 
67  AllocaInst *cloneImpl() const;
68 
69 public:
70  explicit AllocaInst(Type *Ty, unsigned AddrSpace,
71  Value *ArraySize = nullptr,
72  const Twine &Name = "",
73  Instruction *InsertBefore = nullptr);
74  AllocaInst(Type *Ty, unsigned AddrSpace, Value *ArraySize,
75  const Twine &Name, BasicBlock *InsertAtEnd);
76 
77  AllocaInst(Type *Ty, unsigned AddrSpace,
78  const Twine &Name, Instruction *InsertBefore = nullptr);
79  AllocaInst(Type *Ty, unsigned AddrSpace,
80  const Twine &Name, BasicBlock *InsertAtEnd);
81 
82  AllocaInst(Type *Ty, unsigned AddrSpace, Value *ArraySize, unsigned Align,
83  const Twine &Name = "", Instruction *InsertBefore = nullptr);
84  AllocaInst(Type *Ty, unsigned AddrSpace, Value *ArraySize, unsigned Align,
85  const Twine &Name, BasicBlock *InsertAtEnd);
86 
87  /// Return true if there is an allocation size parameter to the allocation
88  /// instruction that is not 1.
89  bool isArrayAllocation() const;
90 
91  /// Get the number of elements allocated. For a simple allocation of a single
92  /// element, this will return a constant 1 value.
93  const Value *getArraySize() const { return getOperand(0); }
94  Value *getArraySize() { return getOperand(0); }
95 
96  /// Overload to return most specific pointer type.
97  PointerType *getType() const {
98  return cast<PointerType>(Instruction::getType());
99  }
100 
101  /// Get allocation size in bits. Returns None if size can't be determined,
102  /// e.g. in case of a VLA.
104 
105  /// Return the type that is being allocated by the instruction.
106  Type *getAllocatedType() const { return AllocatedType; }
107  /// for use only in special circumstances that need to generically
108  /// transform a whole instruction (eg: IR linking and vectorization).
109  void setAllocatedType(Type *Ty) { AllocatedType = Ty; }
110 
111  /// Return the alignment of the memory that is being allocated by the
112  /// instruction.
113  unsigned getAlignment() const {
114  return (1u << (getSubclassDataFromInstruction() & 31)) >> 1;
115  }
116  void setAlignment(unsigned Align);
117 
118  /// Return true if this alloca is in the entry block of the function and is a
119  /// constant size. If so, the code generator will fold it into the
120  /// prolog/epilog code, so it is basically free.
121  bool isStaticAlloca() const;
122 
123  /// Return true if this alloca is used as an inalloca argument to a call. Such
124  /// allocas are never considered static even if they are in the entry block.
125  bool isUsedWithInAlloca() const {
126  return getSubclassDataFromInstruction() & 32;
127  }
128 
129  /// Specify whether this alloca is used to represent the arguments to a call.
130  void setUsedWithInAlloca(bool V) {
131  setInstructionSubclassData((getSubclassDataFromInstruction() & ~32) |
132  (V ? 32 : 0));
133  }
134 
135  /// Return true if this alloca is used as a swifterror argument to a call.
136  bool isSwiftError() const {
137  return getSubclassDataFromInstruction() & 64;
138  }
139 
140  /// Specify whether this alloca is used to represent a swifterror.
141  void setSwiftError(bool V) {
142  setInstructionSubclassData((getSubclassDataFromInstruction() & ~64) |
143  (V ? 64 : 0));
144  }
145 
146  // Methods for support type inquiry through isa, cast, and dyn_cast:
147  static bool classof(const Instruction *I) {
148  return (I->getOpcode() == Instruction::Alloca);
149  }
150  static bool classof(const Value *V) {
151  return isa<Instruction>(V) && classof(cast<Instruction>(V));
152  }
153 
154 private:
155  // Shadow Instruction::setInstructionSubclassData with a private forwarding
156  // method so that subclasses cannot accidentally use it.
157  void setInstructionSubclassData(unsigned short D) {
159  }
160 };
161 
162 //===----------------------------------------------------------------------===//
163 // LoadInst Class
164 //===----------------------------------------------------------------------===//
165 
166 /// An instruction for reading from memory. This uses the SubclassData field in
167 /// Value to store whether or not the load is volatile.
168 class LoadInst : public UnaryInstruction {
169  void AssertOK();
170 
171 protected:
172  // Note: Instruction needs to be a friend here to call cloneImpl.
173  friend class Instruction;
174 
175  LoadInst *cloneImpl() const;
176 
177 public:
178  LoadInst(Type *Ty, Value *Ptr, const Twine &NameStr = "",
179  Instruction *InsertBefore = nullptr);
180  LoadInst(Type *Ty, Value *Ptr, const Twine &NameStr, BasicBlock *InsertAtEnd);
181  LoadInst(Type *Ty, Value *Ptr, const Twine &NameStr, bool isVolatile,
182  Instruction *InsertBefore = nullptr);
183  LoadInst(Type *Ty, Value *Ptr, const Twine &NameStr, bool isVolatile,
184  BasicBlock *InsertAtEnd);
185  LoadInst(Type *Ty, Value *Ptr, const Twine &NameStr, bool isVolatile,
186  unsigned Align, Instruction *InsertBefore = nullptr);
187  LoadInst(Type *Ty, Value *Ptr, const Twine &NameStr, bool isVolatile,
188  unsigned Align, BasicBlock *InsertAtEnd);
189  LoadInst(Type *Ty, Value *Ptr, const Twine &NameStr, bool isVolatile,
190  unsigned Align, AtomicOrdering Order,
192  Instruction *InsertBefore = nullptr);
193  LoadInst(Type *Ty, Value *Ptr, const Twine &NameStr, bool isVolatile,
194  unsigned Align, AtomicOrdering Order, SyncScope::ID SSID,
195  BasicBlock *InsertAtEnd);
196 
197  // Deprecated [opaque pointer types]
198  explicit LoadInst(Value *Ptr, const Twine &NameStr = "",
199  Instruction *InsertBefore = nullptr)
200  : LoadInst(Ptr->getType()->getPointerElementType(), Ptr, NameStr,
201  InsertBefore) {}
202  LoadInst(Value *Ptr, const Twine &NameStr, BasicBlock *InsertAtEnd)
203  : LoadInst(Ptr->getType()->getPointerElementType(), Ptr, NameStr,
204  InsertAtEnd) {}
205  LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile,
206  Instruction *InsertBefore = nullptr)
207  : LoadInst(Ptr->getType()->getPointerElementType(), Ptr, NameStr,
208  isVolatile, InsertBefore) {}
209  LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile,
210  BasicBlock *InsertAtEnd)
211  : LoadInst(Ptr->getType()->getPointerElementType(), Ptr, NameStr,
212  isVolatile, InsertAtEnd) {}
213  LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile, unsigned Align,
214  Instruction *InsertBefore = nullptr)
215  : LoadInst(Ptr->getType()->getPointerElementType(), Ptr, NameStr,
216  isVolatile, Align, InsertBefore) {}
217  LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile, unsigned Align,
218  BasicBlock *InsertAtEnd)
219  : LoadInst(Ptr->getType()->getPointerElementType(), Ptr, NameStr,
220  isVolatile, Align, InsertAtEnd) {}
221  LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile, unsigned Align,
223  Instruction *InsertBefore = nullptr)
224  : LoadInst(Ptr->getType()->getPointerElementType(), Ptr, NameStr,
225  isVolatile, Align, Order, SSID, InsertBefore) {}
226  LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile, unsigned Align,
227  AtomicOrdering Order, SyncScope::ID SSID, BasicBlock *InsertAtEnd)
228  : LoadInst(Ptr->getType()->getPointerElementType(), Ptr, NameStr,
229  isVolatile, Align, Order, SSID, InsertAtEnd) {}
230 
231  /// Return true if this is a load from a volatile memory location.
232  bool isVolatile() const { return getSubclassDataFromInstruction() & 1; }
233 
234  /// Specify whether this is a volatile load or not.
235  void setVolatile(bool V) {
236  setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) |
237  (V ? 1 : 0));
238  }
239 
240  /// Return the alignment of the access that is being performed.
241  unsigned getAlignment() const {
242  return (1 << ((getSubclassDataFromInstruction() >> 1) & 31)) >> 1;
243  }
244 
245  void setAlignment(unsigned Align);
246 
247  /// Returns the ordering constraint of this load instruction.
249  return AtomicOrdering((getSubclassDataFromInstruction() >> 7) & 7);
250  }
251 
252  /// Sets the ordering constraint of this load instruction. May not be Release
253  /// or AcquireRelease.
254  void setOrdering(AtomicOrdering Ordering) {
255  setInstructionSubclassData((getSubclassDataFromInstruction() & ~(7 << 7)) |
256  ((unsigned)Ordering << 7));
257  }
258 
259  /// Returns the synchronization scope ID of this load instruction.
261  return SSID;
262  }
263 
264  /// Sets the synchronization scope ID of this load instruction.
266  this->SSID = SSID;
267  }
268 
269  /// Sets the ordering constraint and the synchronization scope ID of this load
270  /// instruction.
271  void setAtomic(AtomicOrdering Ordering,
273  setOrdering(Ordering);
274  setSyncScopeID(SSID);
275  }
276 
277  bool isSimple() const { return !isAtomic() && !isVolatile(); }
278 
279  bool isUnordered() const {
280  return (getOrdering() == AtomicOrdering::NotAtomic ||
281  getOrdering() == AtomicOrdering::Unordered) &&
282  !isVolatile();
283  }
284 
286  const Value *getPointerOperand() const { return getOperand(0); }
287  static unsigned getPointerOperandIndex() { return 0U; }
289 
290  /// Returns the address space of the pointer operand.
291  unsigned getPointerAddressSpace() const {
292  return getPointerOperandType()->getPointerAddressSpace();
293  }
294 
295  // Methods for support type inquiry through isa, cast, and dyn_cast:
296  static bool classof(const Instruction *I) {
297  return I->getOpcode() == Instruction::Load;
298  }
299  static bool classof(const Value *V) {
300  return isa<Instruction>(V) && classof(cast<Instruction>(V));
301  }
302 
303 private:
304  // Shadow Instruction::setInstructionSubclassData with a private forwarding
305  // method so that subclasses cannot accidentally use it.
306  void setInstructionSubclassData(unsigned short D) {
308  }
309 
310  /// The synchronization scope ID of this load instruction. Not quite enough
311  /// room in SubClassData for everything, so synchronization scope ID gets its
312  /// own field.
313  SyncScope::ID SSID;
314 };
315 
316 //===----------------------------------------------------------------------===//
317 // StoreInst Class
318 //===----------------------------------------------------------------------===//
319 
320 /// An instruction for storing to memory.
321 class StoreInst : public Instruction {
322  void AssertOK();
323 
324 protected:
325  // Note: Instruction needs to be a friend here to call cloneImpl.
326  friend class Instruction;
327 
328  StoreInst *cloneImpl() const;
329 
330 public:
331  StoreInst(Value *Val, Value *Ptr, Instruction *InsertBefore);
332  StoreInst(Value *Val, Value *Ptr, BasicBlock *InsertAtEnd);
333  StoreInst(Value *Val, Value *Ptr, bool isVolatile = false,
334  Instruction *InsertBefore = nullptr);
335  StoreInst(Value *Val, Value *Ptr, bool isVolatile, BasicBlock *InsertAtEnd);
336  StoreInst(Value *Val, Value *Ptr, bool isVolatile,
337  unsigned Align, Instruction *InsertBefore = nullptr);
338  StoreInst(Value *Val, Value *Ptr, bool isVolatile,
339  unsigned Align, BasicBlock *InsertAtEnd);
340  StoreInst(Value *Val, Value *Ptr, bool isVolatile,
341  unsigned Align, AtomicOrdering Order,
343  Instruction *InsertBefore = nullptr);
344  StoreInst(Value *Val, Value *Ptr, bool isVolatile,
345  unsigned Align, AtomicOrdering Order, SyncScope::ID SSID,
346  BasicBlock *InsertAtEnd);
347 
348  // allocate space for exactly two operands
349  void *operator new(size_t s) {
350  return User::operator new(s, 2);
351  }
352 
353  /// Return true if this is a store to a volatile memory location.
354  bool isVolatile() const { return getSubclassDataFromInstruction() & 1; }
355 
356  /// Specify whether this is a volatile store or not.
357  void setVolatile(bool V) {
358  setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) |
359  (V ? 1 : 0));
360  }
361 
362  /// Transparently provide more efficient getOperand methods.
364 
365  /// Return the alignment of the access that is being performed
366  unsigned getAlignment() const {
367  return (1 << ((getSubclassDataFromInstruction() >> 1) & 31)) >> 1;
368  }
369 
370  void setAlignment(unsigned Align);
371 
372  /// Returns the ordering constraint of this store instruction.
374  return AtomicOrdering((getSubclassDataFromInstruction() >> 7) & 7);
375  }
376 
377  /// Sets the ordering constraint of this store instruction. May not be
378  /// Acquire or AcquireRelease.
379  void setOrdering(AtomicOrdering Ordering) {
380  setInstructionSubclassData((getSubclassDataFromInstruction() & ~(7 << 7)) |
381  ((unsigned)Ordering << 7));
382  }
383 
384  /// Returns the synchronization scope ID of this store instruction.
386  return SSID;
387  }
388 
389  /// Sets the synchronization scope ID of this store instruction.
391  this->SSID = SSID;
392  }
393 
394  /// Sets the ordering constraint and the synchronization scope ID of this
395  /// store instruction.
396  void setAtomic(AtomicOrdering Ordering,
398  setOrdering(Ordering);
399  setSyncScopeID(SSID);
400  }
401 
402  bool isSimple() const { return !isAtomic() && !isVolatile(); }
403 
404  bool isUnordered() const {
405  return (getOrdering() == AtomicOrdering::NotAtomic ||
406  getOrdering() == AtomicOrdering::Unordered) &&
407  !isVolatile();
408  }
409 
410  Value *getValueOperand() { return getOperand(0); }
411  const Value *getValueOperand() const { return getOperand(0); }
412 
414  const Value *getPointerOperand() const { return getOperand(1); }
415  static unsigned getPointerOperandIndex() { return 1U; }
417 
418  /// Returns the address space of the pointer operand.
419  unsigned getPointerAddressSpace() const {
420  return getPointerOperandType()->getPointerAddressSpace();
421  }
422 
423  // Methods for support type inquiry through isa, cast, and dyn_cast:
424  static bool classof(const Instruction *I) {
425  return I->getOpcode() == Instruction::Store;
426  }
427  static bool classof(const Value *V) {
428  return isa<Instruction>(V) && classof(cast<Instruction>(V));
429  }
430 
431 private:
432  // Shadow Instruction::setInstructionSubclassData with a private forwarding
433  // method so that subclasses cannot accidentally use it.
434  void setInstructionSubclassData(unsigned short D) {
436  }
437 
438  /// The synchronization scope ID of this store instruction. Not quite enough
439  /// room in SubClassData for everything, so synchronization scope ID gets its
440  /// own field.
441  SyncScope::ID SSID;
442 };
443 
444 template <>
445 struct OperandTraits<StoreInst> : public FixedNumOperandTraits<StoreInst, 2> {
446 };
447 
449 
450 //===----------------------------------------------------------------------===//
451 // FenceInst Class
452 //===----------------------------------------------------------------------===//
453 
454 /// An instruction for ordering other memory operations.
455 class FenceInst : public Instruction {
456  void Init(AtomicOrdering Ordering, SyncScope::ID SSID);
457 
458 protected:
459  // Note: Instruction needs to be a friend here to call cloneImpl.
460  friend class Instruction;
461 
462  FenceInst *cloneImpl() const;
463 
464 public:
465  // Ordering may only be Acquire, Release, AcquireRelease, or
466  // SequentiallyConsistent.
469  Instruction *InsertBefore = nullptr);
471  BasicBlock *InsertAtEnd);
472 
473  // allocate space for exactly zero operands
474  void *operator new(size_t s) {
475  return User::operator new(s, 0);
476  }
477 
478  /// Returns the ordering constraint of this fence instruction.
481  }
482 
483  /// Sets the ordering constraint of this fence instruction. May only be
484  /// Acquire, Release, AcquireRelease, or SequentiallyConsistent.
485  void setOrdering(AtomicOrdering Ordering) {
486  setInstructionSubclassData((getSubclassDataFromInstruction() & 1) |
487  ((unsigned)Ordering << 1));
488  }
489 
490  /// Returns the synchronization scope ID of this fence instruction.
492  return SSID;
493  }
494 
495  /// Sets the synchronization scope ID of this fence instruction.
497  this->SSID = SSID;
498  }
499 
500  // Methods for support type inquiry through isa, cast, and dyn_cast:
501  static bool classof(const Instruction *I) {
502  return I->getOpcode() == Instruction::Fence;
503  }
504  static bool classof(const Value *V) {
505  return isa<Instruction>(V) && classof(cast<Instruction>(V));
506  }
507 
508 private:
509  // Shadow Instruction::setInstructionSubclassData with a private forwarding
510  // method so that subclasses cannot accidentally use it.
511  void setInstructionSubclassData(unsigned short D) {
513  }
514 
515  /// The synchronization scope ID of this fence instruction. Not quite enough
516  /// room in SubClassData for everything, so synchronization scope ID gets its
517  /// own field.
518  SyncScope::ID SSID;
519 };
520 
521 //===----------------------------------------------------------------------===//
522 // AtomicCmpXchgInst Class
523 //===----------------------------------------------------------------------===//
524 
525 /// an instruction that atomically checks whether a
526 /// specified value is in a memory location, and, if it is, stores a new value
527 /// there. Returns the value that was loaded.
528 ///
530  void Init(Value *Ptr, Value *Cmp, Value *NewVal,
531  AtomicOrdering SuccessOrdering, AtomicOrdering FailureOrdering,
532  SyncScope::ID SSID);
533 
534 protected:
535  // Note: Instruction needs to be a friend here to call cloneImpl.
536  friend class Instruction;
537 
538  AtomicCmpXchgInst *cloneImpl() const;
539 
540 public:
541  AtomicCmpXchgInst(Value *Ptr, Value *Cmp, Value *NewVal,
542  AtomicOrdering SuccessOrdering,
543  AtomicOrdering FailureOrdering,
544  SyncScope::ID SSID, Instruction *InsertBefore = nullptr);
545  AtomicCmpXchgInst(Value *Ptr, Value *Cmp, Value *NewVal,
546  AtomicOrdering SuccessOrdering,
547  AtomicOrdering FailureOrdering,
548  SyncScope::ID SSID, BasicBlock *InsertAtEnd);
549 
550  // allocate space for exactly three operands
551  void *operator new(size_t s) {
552  return User::operator new(s, 3);
553  }
554 
555  /// Return true if this is a cmpxchg from a volatile memory
556  /// location.
557  ///
558  bool isVolatile() const {
559  return getSubclassDataFromInstruction() & 1;
560  }
561 
562  /// Specify whether this is a volatile cmpxchg.
563  ///
564  void setVolatile(bool V) {
565  setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) |
566  (unsigned)V);
567  }
568 
569  /// Return true if this cmpxchg may spuriously fail.
570  bool isWeak() const {
571  return getSubclassDataFromInstruction() & 0x100;
572  }
573 
574  void setWeak(bool IsWeak) {
575  setInstructionSubclassData((getSubclassDataFromInstruction() & ~0x100) |
576  (IsWeak << 8));
577  }
578 
579  /// Transparently provide more efficient getOperand methods.
581 
582  /// Returns the success ordering constraint of this cmpxchg instruction.
584  return AtomicOrdering((getSubclassDataFromInstruction() >> 2) & 7);
585  }
586 
587  /// Sets the success ordering constraint of this cmpxchg instruction.
589  assert(Ordering != AtomicOrdering::NotAtomic &&
590  "CmpXchg instructions can only be atomic.");
591  setInstructionSubclassData((getSubclassDataFromInstruction() & ~0x1c) |
592  ((unsigned)Ordering << 2));
593  }
594 
595  /// Returns the failure ordering constraint of this cmpxchg instruction.
597  return AtomicOrdering((getSubclassDataFromInstruction() >> 5) & 7);
598  }
599 
600  /// Sets the failure ordering constraint of this cmpxchg instruction.
602  assert(Ordering != AtomicOrdering::NotAtomic &&
603  "CmpXchg instructions can only be atomic.");
604  setInstructionSubclassData((getSubclassDataFromInstruction() & ~0xe0) |
605  ((unsigned)Ordering << 5));
606  }
607 
608  /// Returns the synchronization scope ID of this cmpxchg instruction.
610  return SSID;
611  }
612 
613  /// Sets the synchronization scope ID of this cmpxchg instruction.
615  this->SSID = SSID;
616  }
617 
619  const Value *getPointerOperand() const { return getOperand(0); }
620  static unsigned getPointerOperandIndex() { return 0U; }
621 
623  const Value *getCompareOperand() const { return getOperand(1); }
624 
626  const Value *getNewValOperand() const { return getOperand(2); }
627 
628  /// Returns the address space of the pointer operand.
629  unsigned getPointerAddressSpace() const {
631  }
632 
633  /// Returns the strongest permitted ordering on failure, given the
634  /// desired ordering on success.
635  ///
636  /// If the comparison in a cmpxchg operation fails, there is no atomic store
637  /// so release semantics cannot be provided. So this function drops explicit
638  /// Release requests from the AtomicOrdering. A SequentiallyConsistent
639  /// operation would remain SequentiallyConsistent.
640  static AtomicOrdering
642  switch (SuccessOrdering) {
643  default:
644  llvm_unreachable("invalid cmpxchg success ordering");
653  }
654  }
655 
656  // Methods for support type inquiry through isa, cast, and dyn_cast:
657  static bool classof(const Instruction *I) {
658  return I->getOpcode() == Instruction::AtomicCmpXchg;
659  }
660  static bool classof(const Value *V) {
661  return isa<Instruction>(V) && classof(cast<Instruction>(V));
662  }
663 
664 private:
665  // Shadow Instruction::setInstructionSubclassData with a private forwarding
666  // method so that subclasses cannot accidentally use it.
667  void setInstructionSubclassData(unsigned short D) {
669  }
670 
671  /// The synchronization scope ID of this cmpxchg instruction. Not quite
672  /// enough room in SubClassData for everything, so synchronization scope ID
673  /// gets its own field.
674  SyncScope::ID SSID;
675 };
676 
677 template <>
679  public FixedNumOperandTraits<AtomicCmpXchgInst, 3> {
680 };
681 
683 
684 //===----------------------------------------------------------------------===//
685 // AtomicRMWInst Class
686 //===----------------------------------------------------------------------===//
687 
688 /// an instruction that atomically reads a memory location,
689 /// combines it with another value, and then stores the result back. Returns
690 /// the old value.
691 ///
692 class AtomicRMWInst : public Instruction {
693 protected:
694  // Note: Instruction needs to be a friend here to call cloneImpl.
695  friend class Instruction;
696 
697  AtomicRMWInst *cloneImpl() const;
698 
699 public:
700  /// This enumeration lists the possible modifications atomicrmw can make. In
701  /// the descriptions, 'p' is the pointer to the instruction's memory location,
702  /// 'old' is the initial value of *p, and 'v' is the other value passed to the
703  /// instruction. These instructions always return 'old'.
704  enum BinOp {
705  /// *p = v
707  /// *p = old + v
709  /// *p = old - v
711  /// *p = old & v
713  /// *p = ~(old & v)
715  /// *p = old | v
716  Or,
717  /// *p = old ^ v
719  /// *p = old >signed v ? old : v
721  /// *p = old <signed v ? old : v
723  /// *p = old >unsigned v ? old : v
725  /// *p = old <unsigned v ? old : v
727 
728  FIRST_BINOP = Xchg,
729  LAST_BINOP = UMin,
730  BAD_BINOP
731  };
732 
734  AtomicOrdering Ordering, SyncScope::ID SSID,
735  Instruction *InsertBefore = nullptr);
737  AtomicOrdering Ordering, SyncScope::ID SSID,
738  BasicBlock *InsertAtEnd);
739 
740  // allocate space for exactly two operands
741  void *operator new(size_t s) {
742  return User::operator new(s, 2);
743  }
744 
745  BinOp getOperation() const {
746  return static_cast<BinOp>(getSubclassDataFromInstruction() >> 5);
747  }
748 
749  static StringRef getOperationName(BinOp Op);
750 
752  unsigned short SubclassData = getSubclassDataFromInstruction();
753  setInstructionSubclassData((SubclassData & 31) |
754  (Operation << 5));
755  }
756 
757  /// Return true if this is a RMW on a volatile memory location.
758  ///
759  bool isVolatile() const {
760  return getSubclassDataFromInstruction() & 1;
761  }
762 
763  /// Specify whether this is a volatile RMW or not.
764  ///
765  void setVolatile(bool V) {
766  setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) |
767  (unsigned)V);
768  }
769 
770  /// Transparently provide more efficient getOperand methods.
772 
773  /// Returns the ordering constraint of this rmw instruction.
775  return AtomicOrdering((getSubclassDataFromInstruction() >> 2) & 7);
776  }
777 
778  /// Sets the ordering constraint of this rmw instruction.
779  void setOrdering(AtomicOrdering Ordering) {
780  assert(Ordering != AtomicOrdering::NotAtomic &&
781  "atomicrmw instructions can only be atomic.");
782  setInstructionSubclassData((getSubclassDataFromInstruction() & ~(7 << 2)) |
783  ((unsigned)Ordering << 2));
784  }
785 
786  /// Returns the synchronization scope ID of this rmw instruction.
788  return SSID;
789  }
790 
791  /// Sets the synchronization scope ID of this rmw instruction.
793  this->SSID = SSID;
794  }
795 
797  const Value *getPointerOperand() const { return getOperand(0); }
798  static unsigned getPointerOperandIndex() { return 0U; }
799 
800  Value *getValOperand() { return getOperand(1); }
801  const Value *getValOperand() const { return getOperand(1); }
802 
803  /// Returns the address space of the pointer operand.
804  unsigned getPointerAddressSpace() const {
806  }
807 
808  // Methods for support type inquiry through isa, cast, and dyn_cast:
809  static bool classof(const Instruction *I) {
810  return I->getOpcode() == Instruction::AtomicRMW;
811  }
812  static bool classof(const Value *V) {
813  return isa<Instruction>(V) && classof(cast<Instruction>(V));
814  }
815 
816 private:
817  void Init(BinOp Operation, Value *Ptr, Value *Val,
818  AtomicOrdering Ordering, SyncScope::ID SSID);
819 
820  // Shadow Instruction::setInstructionSubclassData with a private forwarding
821  // method so that subclasses cannot accidentally use it.
822  void setInstructionSubclassData(unsigned short D) {
824  }
825 
826  /// The synchronization scope ID of this rmw instruction. Not quite enough
827  /// room in SubClassData for everything, so synchronization scope ID gets its
828  /// own field.
829  SyncScope::ID SSID;
830 };
831 
832 template <>
834  : public FixedNumOperandTraits<AtomicRMWInst,2> {
835 };
836 
838 
839 //===----------------------------------------------------------------------===//
840 // GetElementPtrInst Class
841 //===----------------------------------------------------------------------===//
842 
843 // checkGEPType - Simple wrapper function to give a better assertion failure
844 // message on bad indexes for a gep instruction.
845 //
847  assert(Ty && "Invalid GetElementPtrInst indices for type!");
848  return Ty;
849 }
850 
851 /// an instruction for type-safe pointer arithmetic to
852 /// access elements of arrays and structs
853 ///
855  Type *SourceElementType;
856  Type *ResultElementType;
857 
859 
860  /// Constructors - Create a getelementptr instruction with a base pointer an
861  /// list of indices. The first ctor can optionally insert before an existing
862  /// instruction, the second appends the new instruction to the specified
863  /// BasicBlock.
864  inline GetElementPtrInst(Type *PointeeType, Value *Ptr,
865  ArrayRef<Value *> IdxList, unsigned Values,
866  const Twine &NameStr, Instruction *InsertBefore);
867  inline GetElementPtrInst(Type *PointeeType, Value *Ptr,
868  ArrayRef<Value *> IdxList, unsigned Values,
869  const Twine &NameStr, BasicBlock *InsertAtEnd);
870 
871  void init(Value *Ptr, ArrayRef<Value *> IdxList, const Twine &NameStr);
872 
873 protected:
874  // Note: Instruction needs to be a friend here to call cloneImpl.
875  friend class Instruction;
876 
877  GetElementPtrInst *cloneImpl() const;
878 
879 public:
880  static GetElementPtrInst *Create(Type *PointeeType, Value *Ptr,
881  ArrayRef<Value *> IdxList,
882  const Twine &NameStr = "",
883  Instruction *InsertBefore = nullptr) {
884  unsigned Values = 1 + unsigned(IdxList.size());
885  if (!PointeeType)
886  PointeeType =
887  cast<PointerType>(Ptr->getType()->getScalarType())->getElementType();
888  else
889  assert(
890  PointeeType ==
891  cast<PointerType>(Ptr->getType()->getScalarType())->getElementType());
892  return new (Values) GetElementPtrInst(PointeeType, Ptr, IdxList, Values,
893  NameStr, InsertBefore);
894  }
895 
896  static GetElementPtrInst *Create(Type *PointeeType, Value *Ptr,
897  ArrayRef<Value *> IdxList,
898  const Twine &NameStr,
899  BasicBlock *InsertAtEnd) {
900  unsigned Values = 1 + unsigned(IdxList.size());
901  if (!PointeeType)
902  PointeeType =
903  cast<PointerType>(Ptr->getType()->getScalarType())->getElementType();
904  else
905  assert(
906  PointeeType ==
907  cast<PointerType>(Ptr->getType()->getScalarType())->getElementType());
908  return new (Values) GetElementPtrInst(PointeeType, Ptr, IdxList, Values,
909  NameStr, InsertAtEnd);
910  }
911 
912  /// Create an "inbounds" getelementptr. See the documentation for the
913  /// "inbounds" flag in LangRef.html for details.
915  ArrayRef<Value *> IdxList,
916  const Twine &NameStr = "",
917  Instruction *InsertBefore = nullptr){
918  return CreateInBounds(nullptr, Ptr, IdxList, NameStr, InsertBefore);
919  }
920 
921  static GetElementPtrInst *
922  CreateInBounds(Type *PointeeType, Value *Ptr, ArrayRef<Value *> IdxList,
923  const Twine &NameStr = "",
924  Instruction *InsertBefore = nullptr) {
926  Create(PointeeType, Ptr, IdxList, NameStr, InsertBefore);
927  GEP->setIsInBounds(true);
928  return GEP;
929  }
930 
932  ArrayRef<Value *> IdxList,
933  const Twine &NameStr,
934  BasicBlock *InsertAtEnd) {
935  return CreateInBounds(nullptr, Ptr, IdxList, NameStr, InsertAtEnd);
936  }
937 
938  static GetElementPtrInst *CreateInBounds(Type *PointeeType, Value *Ptr,
939  ArrayRef<Value *> IdxList,
940  const Twine &NameStr,
941  BasicBlock *InsertAtEnd) {
943  Create(PointeeType, Ptr, IdxList, NameStr, InsertAtEnd);
944  GEP->setIsInBounds(true);
945  return GEP;
946  }
947 
948  /// Transparently provide more efficient getOperand methods.
950 
951  Type *getSourceElementType() const { return SourceElementType; }
952 
953  void setSourceElementType(Type *Ty) { SourceElementType = Ty; }
954  void setResultElementType(Type *Ty) { ResultElementType = Ty; }
955 
957  assert(ResultElementType ==
958  cast<PointerType>(getType()->getScalarType())->getElementType());
959  return ResultElementType;
960  }
961 
962  /// Returns the address space of this instruction's pointer type.
963  unsigned getAddressSpace() const {
964  // Note that this is always the same as the pointer operand's address space
965  // and that is cheaper to compute, so cheat here.
966  return getPointerAddressSpace();
967  }
968 
969  /// Returns the type of the element that would be loaded with
970  /// a load instruction with the specified parameters.
971  ///
972  /// Null is returned if the indices are invalid for the specified
973  /// pointer type.
974  ///
975  static Type *getIndexedType(Type *Ty, ArrayRef<Value *> IdxList);
976  static Type *getIndexedType(Type *Ty, ArrayRef<Constant *> IdxList);
977  static Type *getIndexedType(Type *Ty, ArrayRef<uint64_t> IdxList);
978 
979  inline op_iterator idx_begin() { return op_begin()+1; }
980  inline const_op_iterator idx_begin() const { return op_begin()+1; }
981  inline op_iterator idx_end() { return op_end(); }
982  inline const_op_iterator idx_end() const { return op_end(); }
983 
985  return make_range(idx_begin(), idx_end());
986  }
987 
989  return make_range(idx_begin(), idx_end());
990  }
991 
993  return getOperand(0);
994  }
995  const Value *getPointerOperand() const {
996  return getOperand(0);
997  }
998  static unsigned getPointerOperandIndex() {
999  return 0U; // get index for modifying correct operand.
1000  }
1001 
1002  /// Method to return the pointer operand as a
1003  /// PointerType.
1005  return getPointerOperand()->getType();
1006  }
1007 
1008  /// Returns the address space of the pointer operand.
1009  unsigned getPointerAddressSpace() const {
1010  return getPointerOperandType()->getPointerAddressSpace();
1011  }
1012 
1013  /// Returns the pointer type returned by the GEP
1014  /// instruction, which may be a vector of pointers.
1016  return getGEPReturnType(
1017  cast<PointerType>(Ptr->getType()->getScalarType())->getElementType(),
1018  Ptr, IdxList);
1019  }
1020  static Type *getGEPReturnType(Type *ElTy, Value *Ptr,
1021  ArrayRef<Value *> IdxList) {
1022  Type *PtrTy = PointerType::get(checkGEPType(getIndexedType(ElTy, IdxList)),
1023  Ptr->getType()->getPointerAddressSpace());
1024  // Vector GEP
1025  if (Ptr->getType()->isVectorTy()) {
1026  unsigned NumElem = Ptr->getType()->getVectorNumElements();
1027  return VectorType::get(PtrTy, NumElem);
1028  }
1029  for (Value *Index : IdxList)
1030  if (Index->getType()->isVectorTy()) {
1031  unsigned NumElem = Index->getType()->getVectorNumElements();
1032  return VectorType::get(PtrTy, NumElem);
1033  }
1034  // Scalar GEP
1035  return PtrTy;
1036  }
1037 
1038  unsigned getNumIndices() const { // Note: always non-negative
1039  return getNumOperands() - 1;
1040  }
1041 
1042  bool hasIndices() const {
1043  return getNumOperands() > 1;
1044  }
1045 
1046  /// Return true if all of the indices of this GEP are
1047  /// zeros. If so, the result pointer and the first operand have the same
1048  /// value, just potentially different types.
1049  bool hasAllZeroIndices() const;
1050 
1051  /// Return true if all of the indices of this GEP are
1052  /// constant integers. If so, the result pointer and the first operand have
1053  /// a constant offset between them.
1054  bool hasAllConstantIndices() const;
1055 
1056  /// Set or clear the inbounds flag on this GEP instruction.
1057  /// See LangRef.html for the meaning of inbounds on a getelementptr.
1058  void setIsInBounds(bool b = true);
1059 
1060  /// Determine whether the GEP has the inbounds flag.
1061  bool isInBounds() const;
1062 
1063  /// Accumulate the constant address offset of this GEP if possible.
1064  ///
1065  /// This routine accepts an APInt into which it will accumulate the constant
1066  /// offset of this GEP if the GEP is in fact constant. If the GEP is not
1067  /// all-constant, it returns false and the value of the offset APInt is
1068  /// undefined (it is *not* preserved!). The APInt passed into this routine
1069  /// must be at least as wide as the IntPtr type for the address space of
1070  /// the base GEP pointer.
1071  bool accumulateConstantOffset(const DataLayout &DL, APInt &Offset) const;
1072 
1073  // Methods for support type inquiry through isa, cast, and dyn_cast:
1074  static bool classof(const Instruction *I) {
1075  return (I->getOpcode() == Instruction::GetElementPtr);
1076  }
1077  static bool classof(const Value *V) {
1078  return isa<Instruction>(V) && classof(cast<Instruction>(V));
1079  }
1080 };
1081 
1082 template <>
1084  public VariadicOperandTraits<GetElementPtrInst, 1> {
1085 };
1086 
1087 GetElementPtrInst::GetElementPtrInst(Type *PointeeType, Value *Ptr,
1088  ArrayRef<Value *> IdxList, unsigned Values,
1089  const Twine &NameStr,
1090  Instruction *InsertBefore)
1091  : Instruction(getGEPReturnType(PointeeType, Ptr, IdxList), GetElementPtr,
1093  Values, InsertBefore),
1094  SourceElementType(PointeeType),
1095  ResultElementType(getIndexedType(PointeeType, IdxList)) {
1096  assert(ResultElementType ==
1097  cast<PointerType>(getType()->getScalarType())->getElementType());
1098  init(Ptr, IdxList, NameStr);
1099 }
1100 
1101 GetElementPtrInst::GetElementPtrInst(Type *PointeeType, Value *Ptr,
1102  ArrayRef<Value *> IdxList, unsigned Values,
1103  const Twine &NameStr,
1104  BasicBlock *InsertAtEnd)
1105  : Instruction(getGEPReturnType(PointeeType, Ptr, IdxList), GetElementPtr,
1107  Values, InsertAtEnd),
1108  SourceElementType(PointeeType),
1109  ResultElementType(getIndexedType(PointeeType, IdxList)) {
1110  assert(ResultElementType ==
1111  cast<PointerType>(getType()->getScalarType())->getElementType());
1112  init(Ptr, IdxList, NameStr);
1113 }
1114 
1115 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(GetElementPtrInst, Value)
1116 
1117 //===----------------------------------------------------------------------===//
1118 // UnaryOperator Class
1119 //===----------------------------------------------------------------------===//
1120 
1121 /// a unary instruction
1123  void AssertOK();
1124 
1125 protected:
1126  UnaryOperator(UnaryOps iType, Value *S, Type *Ty,
1127  const Twine &Name, Instruction *InsertBefore);
1128  UnaryOperator(UnaryOps iType, Value *S, Type *Ty,
1129  const Twine &Name, BasicBlock *InsertAtEnd);
1130 
1131  // Note: Instruction needs to be a friend here to call cloneImpl.
1132  friend class Instruction;
1133 
1134  UnaryOperator *cloneImpl() const;
1135 
1136 public:
1137 
1138  /// Construct a unary instruction, given the opcode and an operand.
1139  /// Optionally (if InstBefore is specified) insert the instruction
1140  /// into a BasicBlock right before the specified instruction. The specified
1141  /// Instruction is allowed to be a dereferenced end iterator.
1142  ///
1143  static UnaryOperator *Create(UnaryOps Op, Value *S,
1144  const Twine &Name = Twine(),
1145  Instruction *InsertBefore = nullptr);
1146 
1147  /// Construct a unary instruction, given the opcode and an operand.
1148  /// Also automatically insert this instruction to the end of the
1149  /// BasicBlock specified.
1150  ///
1151  static UnaryOperator *Create(UnaryOps Op, Value *S,
1152  const Twine &Name,
1153  BasicBlock *InsertAtEnd);
1154 
1155  /// These methods just forward to Create, and are useful when you
1156  /// statically know what type of instruction you're going to create. These
1157  /// helpers just save some typing.
1158 #define HANDLE_UNARY_INST(N, OPC, CLASS) \
1159  static UnaryInstruction *Create##OPC(Value *V, \
1160  const Twine &Name = "") {\
1161  return Create(Instruction::OPC, V, Name);\
1162  }
1163 #include "llvm/IR/Instruction.def"
1164 #define HANDLE_UNARY_INST(N, OPC, CLASS) \
1165  static UnaryInstruction *Create##OPC(Value *V, \
1166  const Twine &Name, BasicBlock *BB) {\
1167  return Create(Instruction::OPC, V, Name, BB);\
1168  }
1169 #include "llvm/IR/Instruction.def"
1170 #define HANDLE_UNARY_INST(N, OPC, CLASS) \
1171  static UnaryInstruction *Create##OPC(Value *V, \
1172  const Twine &Name, Instruction *I) {\
1173  return Create(Instruction::OPC, V, Name, I);\
1174  }
1175 #include "llvm/IR/Instruction.def"
1176 
1178  return static_cast<UnaryOps>(Instruction::getOpcode());
1179  }
1180 };
1181 
1182 //===----------------------------------------------------------------------===//
1183 // ICmpInst Class
1184 //===----------------------------------------------------------------------===//
1185 
1186 /// This instruction compares its operands according to the predicate given
1187 /// to the constructor. It only operates on integers or pointers. The operands
1188 /// must be identical types.
1189 /// Represent an integer comparison operator.
1190 class ICmpInst: public CmpInst {
1191  void AssertOK() {
1192  assert(isIntPredicate() &&
1193  "Invalid ICmp predicate value");
1194  assert(getOperand(0)->getType() == getOperand(1)->getType() &&
1195  "Both operands to ICmp instruction are not of the same type!");
1196  // Check that the operands are the right type
1197  assert((getOperand(0)->getType()->isIntOrIntVectorTy() ||
1198  getOperand(0)->getType()->isPtrOrPtrVectorTy()) &&
1199  "Invalid operand types for ICmp instruction");
1200  }
1201 
1202 protected:
1203  // Note: Instruction needs to be a friend here to call cloneImpl.
1204  friend class Instruction;
1205 
1206  /// Clone an identical ICmpInst
1207  ICmpInst *cloneImpl() const;
1208 
1209 public:
1210  /// Constructor with insert-before-instruction semantics.
1212  Instruction *InsertBefore, ///< Where to insert
1213  Predicate pred, ///< The predicate to use for the comparison
1214  Value *LHS, ///< The left-hand-side of the expression
1215  Value *RHS, ///< The right-hand-side of the expression
1216  const Twine &NameStr = "" ///< Name of the instruction
1217  ) : CmpInst(makeCmpResultType(LHS->getType()),
1218  Instruction::ICmp, pred, LHS, RHS, NameStr,
1219  InsertBefore) {
1220 #ifndef NDEBUG
1221  AssertOK();
1222 #endif
1223  }
1224 
1225  /// Constructor with insert-at-end semantics.
1227  BasicBlock &InsertAtEnd, ///< Block to insert into.
1228  Predicate pred, ///< The predicate to use for the comparison
1229  Value *LHS, ///< The left-hand-side of the expression
1230  Value *RHS, ///< The right-hand-side of the expression
1231  const Twine &NameStr = "" ///< Name of the instruction
1232  ) : CmpInst(makeCmpResultType(LHS->getType()),
1233  Instruction::ICmp, pred, LHS, RHS, NameStr,
1234  &InsertAtEnd) {
1235 #ifndef NDEBUG
1236  AssertOK();
1237 #endif
1238  }
1239 
1240  /// Constructor with no-insertion semantics
1242  Predicate pred, ///< The predicate to use for the comparison
1243  Value *LHS, ///< The left-hand-side of the expression
1244  Value *RHS, ///< The right-hand-side of the expression
1245  const Twine &NameStr = "" ///< Name of the instruction
1246  ) : CmpInst(makeCmpResultType(LHS->getType()),
1247  Instruction::ICmp, pred, LHS, RHS, NameStr) {
1248 #ifndef NDEBUG
1249  AssertOK();
1250 #endif
1251  }
1252 
1253  /// For example, EQ->EQ, SLE->SLE, UGT->SGT, etc.
1254  /// @returns the predicate that would be the result if the operand were
1255  /// regarded as signed.
1256  /// Return the signed version of the predicate
1258  return getSignedPredicate(getPredicate());
1259  }
1260 
1261  /// This is a static version that you can use without an instruction.
1262  /// Return the signed version of the predicate.
1263  static Predicate getSignedPredicate(Predicate pred);
1264 
1265  /// For example, EQ->EQ, SLE->ULE, UGT->UGT, etc.
1266  /// @returns the predicate that would be the result if the operand were
1267  /// regarded as unsigned.
1268  /// Return the unsigned version of the predicate
1270  return getUnsignedPredicate(getPredicate());
1271  }
1272 
1273  /// This is a static version that you can use without an instruction.
1274  /// Return the unsigned version of the predicate.
1275  static Predicate getUnsignedPredicate(Predicate pred);
1276 
1277  /// Return true if this predicate is either EQ or NE. This also
1278  /// tests for commutativity.
1279  static bool isEquality(Predicate P) {
1280  return P == ICMP_EQ || P == ICMP_NE;
1281  }
1282 
1283  /// Return true if this predicate is either EQ or NE. This also
1284  /// tests for commutativity.
1285  bool isEquality() const {
1286  return isEquality(getPredicate());
1287  }
1288 
1289  /// @returns true if the predicate of this ICmpInst is commutative
1290  /// Determine if this relation is commutative.
1291  bool isCommutative() const { return isEquality(); }
1292 
1293  /// Return true if the predicate is relational (not EQ or NE).
1294  ///
1295  bool isRelational() const {
1296  return !isEquality();
1297  }
1298 
1299  /// Return true if the predicate is relational (not EQ or NE).
1300  ///
1301  static bool isRelational(Predicate P) {
1302  return !isEquality(P);
1303  }
1304 
1305  /// Exchange the two operands to this instruction in such a way that it does
1306  /// not modify the semantics of the instruction. The predicate value may be
1307  /// changed to retain the same result if the predicate is order dependent
1308  /// (e.g. ult).
1309  /// Swap operands and adjust predicate.
1310  void swapOperands() {
1311  setPredicate(getSwappedPredicate());
1312  Op<0>().swap(Op<1>());
1313  }
1314 
1315  // Methods for support type inquiry through isa, cast, and dyn_cast:
1316  static bool classof(const Instruction *I) {
1317  return I->getOpcode() == Instruction::ICmp;
1318  }
1319  static bool classof(const Value *V) {
1320  return isa<Instruction>(V) && classof(cast<Instruction>(V));
1321  }
1322 };
1323 
1324 //===----------------------------------------------------------------------===//
1325 // FCmpInst Class
1326 //===----------------------------------------------------------------------===//
1327 
1328 /// This instruction compares its operands according to the predicate given
1329 /// to the constructor. It only operates on floating point values or packed
1330 /// vectors of floating point values. The operands must be identical types.
1331 /// Represents a floating point comparison operator.
1332 class FCmpInst: public CmpInst {
1333  void AssertOK() {
1334  assert(isFPPredicate() && "Invalid FCmp predicate value");
1335  assert(getOperand(0)->getType() == getOperand(1)->getType() &&
1336  "Both operands to FCmp instruction are not of the same type!");
1337  // Check that the operands are the right type
1338  assert(getOperand(0)->getType()->isFPOrFPVectorTy() &&
1339  "Invalid operand types for FCmp instruction");
1340  }
1341 
1342 protected:
1343  // Note: Instruction needs to be a friend here to call cloneImpl.
1344  friend class Instruction;
1345 
1346  /// Clone an identical FCmpInst
1347  FCmpInst *cloneImpl() const;
1348 
1349 public:
1350  /// Constructor with insert-before-instruction semantics.
1352  Instruction *InsertBefore, ///< Where to insert
1353  Predicate pred, ///< The predicate to use for the comparison
1354  Value *LHS, ///< The left-hand-side of the expression
1355  Value *RHS, ///< The right-hand-side of the expression
1356  const Twine &NameStr = "" ///< Name of the instruction
1357  ) : CmpInst(makeCmpResultType(LHS->getType()),
1358  Instruction::FCmp, pred, LHS, RHS, NameStr,
1359  InsertBefore) {
1360  AssertOK();
1361  }
1362 
1363  /// Constructor with insert-at-end semantics.
1365  BasicBlock &InsertAtEnd, ///< Block to insert into.
1366  Predicate pred, ///< The predicate to use for the comparison
1367  Value *LHS, ///< The left-hand-side of the expression
1368  Value *RHS, ///< The right-hand-side of the expression
1369  const Twine &NameStr = "" ///< Name of the instruction
1370  ) : CmpInst(makeCmpResultType(LHS->getType()),
1371  Instruction::FCmp, pred, LHS, RHS, NameStr,
1372  &InsertAtEnd) {
1373  AssertOK();
1374  }
1375 
1376  /// Constructor with no-insertion semantics
1378  Predicate Pred, ///< The predicate to use for the comparison
1379  Value *LHS, ///< The left-hand-side of the expression
1380  Value *RHS, ///< The right-hand-side of the expression
1381  const Twine &NameStr = "", ///< Name of the instruction
1382  Instruction *FlagsSource = nullptr
1383  ) : CmpInst(makeCmpResultType(LHS->getType()), Instruction::FCmp, Pred, LHS,
1384  RHS, NameStr, nullptr, FlagsSource) {
1385  AssertOK();
1386  }
1387 
1388  /// @returns true if the predicate of this instruction is EQ or NE.
1389  /// Determine if this is an equality predicate.
1390  static bool isEquality(Predicate Pred) {
1391  return Pred == FCMP_OEQ || Pred == FCMP_ONE || Pred == FCMP_UEQ ||
1392  Pred == FCMP_UNE;
1393  }
1394 
1395  /// @returns true if the predicate of this instruction is EQ or NE.
1396  /// Determine if this is an equality predicate.
1397  bool isEquality() const { return isEquality(getPredicate()); }
1398 
1399  /// @returns true if the predicate of this instruction is commutative.
1400  /// Determine if this is a commutative predicate.
1401  bool isCommutative() const {
1402  return isEquality() ||
1403  getPredicate() == FCMP_FALSE ||
1404  getPredicate() == FCMP_TRUE ||
1405  getPredicate() == FCMP_ORD ||
1406  getPredicate() == FCMP_UNO;
1407  }
1408 
1409  /// @returns true if the predicate is relational (not EQ or NE).
1410  /// Determine if this a relational predicate.
1411  bool isRelational() const { return !isEquality(); }
1412 
1413  /// Exchange the two operands to this instruction in such a way that it does
1414  /// not modify the semantics of the instruction. The predicate value may be
1415  /// changed to retain the same result if the predicate is order dependent
1416  /// (e.g. ult).
1417  /// Swap operands and adjust predicate.
1418  void swapOperands() {
1419  setPredicate(getSwappedPredicate());
1420  Op<0>().swap(Op<1>());
1421  }
1422 
1423  /// Methods for support type inquiry through isa, cast, and dyn_cast:
1424  static bool classof(const Instruction *I) {
1425  return I->getOpcode() == Instruction::FCmp;
1426  }
1427  static bool classof(const Value *V) {
1428  return isa<Instruction>(V) && classof(cast<Instruction>(V));
1429  }
1430 };
1431 
1432 //===----------------------------------------------------------------------===//
1433 /// This class represents a function call, abstracting a target
1434 /// machine's calling convention. This class uses low bit of the SubClassData
1435 /// field to indicate whether or not this is a tail call. The rest of the bits
1436 /// hold the calling convention of the call.
1437 ///
1438 class CallInst : public CallBase {
1439  CallInst(const CallInst &CI);
1440 
1441  /// Construct a CallInst given a range of arguments.
1442  /// Construct a CallInst from a range of arguments
1443  inline CallInst(FunctionType *Ty, Value *Func, ArrayRef<Value *> Args,
1444  ArrayRef<OperandBundleDef> Bundles, const Twine &NameStr,
1445  Instruction *InsertBefore);
1446 
1447  inline CallInst(FunctionType *Ty, Value *Func, ArrayRef<Value *> Args,
1448  const Twine &NameStr, Instruction *InsertBefore)
1449  : CallInst(Ty, Func, Args, None, NameStr, InsertBefore) {}
1450 
1451  /// Construct a CallInst given a range of arguments.
1452  /// Construct a CallInst from a range of arguments
1453  inline CallInst(FunctionType *Ty, Value *Func, ArrayRef<Value *> Args,
1454  ArrayRef<OperandBundleDef> Bundles, const Twine &NameStr,
1455  BasicBlock *InsertAtEnd);
1456 
1457  explicit CallInst(FunctionType *Ty, Value *F, const Twine &NameStr,
1458  Instruction *InsertBefore);
1459 
1460  CallInst(FunctionType *ty, Value *F, const Twine &NameStr,
1461  BasicBlock *InsertAtEnd);
1462 
1463  void init(FunctionType *FTy, Value *Func, ArrayRef<Value *> Args,
1464  ArrayRef<OperandBundleDef> Bundles, const Twine &NameStr);
1465  void init(FunctionType *FTy, Value *Func, const Twine &NameStr);
1466 
1467  /// Compute the number of operands to allocate.
1468  static int ComputeNumOperands(int NumArgs, int NumBundleInputs = 0) {
1469  // We need one operand for the called function, plus the input operand
1470  // counts provided.
1471  return 1 + NumArgs + NumBundleInputs;
1472  }
1473 
1474 protected:
1475  // Note: Instruction needs to be a friend here to call cloneImpl.
1476  friend class Instruction;
1477 
1478  CallInst *cloneImpl() const;
1479 
1480 public:
1481  static CallInst *Create(FunctionType *Ty, Value *F, const Twine &NameStr = "",
1482  Instruction *InsertBefore = nullptr) {
1483  return new (ComputeNumOperands(0)) CallInst(Ty, F, NameStr, InsertBefore);
1484  }
1485 
1487  const Twine &NameStr,
1488  Instruction *InsertBefore = nullptr) {
1489  return new (ComputeNumOperands(Args.size()))
1490  CallInst(Ty, Func, Args, None, NameStr, InsertBefore);
1491  }
1492 
1494  ArrayRef<OperandBundleDef> Bundles = None,
1495  const Twine &NameStr = "",
1496  Instruction *InsertBefore = nullptr) {
1497  const int NumOperands =
1498  ComputeNumOperands(Args.size(), CountBundleInputs(Bundles));
1499  const unsigned DescriptorBytes = Bundles.size() * sizeof(BundleOpInfo);
1500 
1501  return new (NumOperands, DescriptorBytes)
1502  CallInst(Ty, Func, Args, Bundles, NameStr, InsertBefore);
1503  }
1504 
1505  static CallInst *Create(FunctionType *Ty, Value *F, const Twine &NameStr,
1506  BasicBlock *InsertAtEnd) {
1507  return new (ComputeNumOperands(0)) CallInst(Ty, F, NameStr, InsertAtEnd);
1508  }
1509 
1511  const Twine &NameStr, BasicBlock *InsertAtEnd) {
1512  return new (ComputeNumOperands(Args.size()))
1513  CallInst(Ty, Func, Args, None, NameStr, InsertAtEnd);
1514  }
1515 
1518  const Twine &NameStr, BasicBlock *InsertAtEnd) {
1519  const int NumOperands =
1520  ComputeNumOperands(Args.size(), CountBundleInputs(Bundles));
1521  const unsigned DescriptorBytes = Bundles.size() * sizeof(BundleOpInfo);
1522 
1523  return new (NumOperands, DescriptorBytes)
1524  CallInst(Ty, Func, Args, Bundles, NameStr, InsertAtEnd);
1525  }
1526 
1527  static CallInst *Create(Function *Func, const Twine &NameStr = "",
1528  Instruction *InsertBefore = nullptr) {
1529  return Create(Func->getFunctionType(), Func, NameStr, InsertBefore);
1530  }
1531 
1533  const Twine &NameStr = "",
1534  Instruction *InsertBefore = nullptr) {
1535  return Create(Func->getFunctionType(), Func, Args, NameStr, InsertBefore);
1536  }
1537 
1538  static CallInst *Create(Function *Func, const Twine &NameStr,
1539  BasicBlock *InsertAtEnd) {
1540  return Create(Func->getFunctionType(), Func, NameStr, InsertAtEnd);
1541  }
1542 
1544  const Twine &NameStr, BasicBlock *InsertAtEnd) {
1545  return Create(Func->getFunctionType(), Func, Args, NameStr, InsertAtEnd);
1546  }
1547 
1548  // Deprecated [opaque pointer types]
1549  static CallInst *Create(Value *Func, const Twine &NameStr = "",
1550  Instruction *InsertBefore = nullptr) {
1551  return Create(cast<FunctionType>(
1552  cast<PointerType>(Func->getType())->getElementType()),
1553  Func, NameStr, InsertBefore);
1554  }
1555 
1556  // Deprecated [opaque pointer types]
1558  const Twine &NameStr,
1559  Instruction *InsertBefore = nullptr) {
1560  return Create(cast<FunctionType>(
1561  cast<PointerType>(Func->getType())->getElementType()),
1562  Func, Args, NameStr, InsertBefore);
1563  }
1564 
1565  // Deprecated [opaque pointer types]
1567  ArrayRef<OperandBundleDef> Bundles = None,
1568  const Twine &NameStr = "",
1569  Instruction *InsertBefore = nullptr) {
1570  return Create(cast<FunctionType>(
1571  cast<PointerType>(Func->getType())->getElementType()),
1572  Func, Args, Bundles, NameStr, InsertBefore);
1573  }
1574 
1575  // Deprecated [opaque pointer types]
1576  static CallInst *Create(Value *Func, const Twine &NameStr,
1577  BasicBlock *InsertAtEnd) {
1578  return Create(cast<FunctionType>(
1579  cast<PointerType>(Func->getType())->getElementType()),
1580  Func, NameStr, InsertAtEnd);
1581  }
1582 
1583  // Deprecated [opaque pointer types]
1585  const Twine &NameStr, BasicBlock *InsertAtEnd) {
1586  return Create(cast<FunctionType>(
1587  cast<PointerType>(Func->getType())->getElementType()),
1588  Func, Args, NameStr, InsertAtEnd);
1589  }
1590 
1591  // Deprecated [opaque pointer types]
1594  const Twine &NameStr, BasicBlock *InsertAtEnd) {
1595  return Create(cast<FunctionType>(
1596  cast<PointerType>(Func->getType())->getElementType()),
1597  Func, Args, Bundles, NameStr, InsertAtEnd);
1598  }
1599 
1600  /// Create a clone of \p CI with a different set of operand bundles and
1601  /// insert it before \p InsertPt.
1602  ///
1603  /// The returned call instruction is identical \p CI in every way except that
1604  /// the operand bundles for the new instruction are set to the operand bundles
1605  /// in \p Bundles.
1606  static CallInst *Create(CallInst *CI, ArrayRef<OperandBundleDef> Bundles,
1607  Instruction *InsertPt = nullptr);
1608 
1609  /// Generate the IR for a call to malloc:
1610  /// 1. Compute the malloc call's argument as the specified type's size,
1611  /// possibly multiplied by the array size if the array size is not
1612  /// constant 1.
1613  /// 2. Call malloc with that argument.
1614  /// 3. Bitcast the result of the malloc call to the specified type.
1615  static Instruction *CreateMalloc(Instruction *InsertBefore, Type *IntPtrTy,
1616  Type *AllocTy, Value *AllocSize,
1617  Value *ArraySize = nullptr,
1618  Function *MallocF = nullptr,
1619  const Twine &Name = "");
1620  static Instruction *CreateMalloc(BasicBlock *InsertAtEnd, Type *IntPtrTy,
1621  Type *AllocTy, Value *AllocSize,
1622  Value *ArraySize = nullptr,
1623  Function *MallocF = nullptr,
1624  const Twine &Name = "");
1625  static Instruction *CreateMalloc(Instruction *InsertBefore, Type *IntPtrTy,
1626  Type *AllocTy, Value *AllocSize,
1627  Value *ArraySize = nullptr,
1628  ArrayRef<OperandBundleDef> Bundles = None,
1629  Function *MallocF = nullptr,
1630  const Twine &Name = "");
1631  static Instruction *CreateMalloc(BasicBlock *InsertAtEnd, Type *IntPtrTy,
1632  Type *AllocTy, Value *AllocSize,
1633  Value *ArraySize = nullptr,
1634  ArrayRef<OperandBundleDef> Bundles = None,
1635  Function *MallocF = nullptr,
1636  const Twine &Name = "");
1637  /// Generate the IR for a call to the builtin free function.
1638  static Instruction *CreateFree(Value *Source, Instruction *InsertBefore);
1639  static Instruction *CreateFree(Value *Source, BasicBlock *InsertAtEnd);
1640  static Instruction *CreateFree(Value *Source,
1642  Instruction *InsertBefore);
1643  static Instruction *CreateFree(Value *Source,
1645  BasicBlock *InsertAtEnd);
1646 
1647  // Note that 'musttail' implies 'tail'.
1649  TCK_None = 0,
1650  TCK_Tail = 1,
1651  TCK_MustTail = 2,
1652  TCK_NoTail = 3
1653  };
1656  }
1657 
1658  bool isTailCall() const {
1659  unsigned Kind = getSubclassDataFromInstruction() & 3;
1660  return Kind == TCK_Tail || Kind == TCK_MustTail;
1661  }
1662 
1663  bool isMustTailCall() const {
1664  return (getSubclassDataFromInstruction() & 3) == TCK_MustTail;
1665  }
1666 
1667  bool isNoTailCall() const {
1668  return (getSubclassDataFromInstruction() & 3) == TCK_NoTail;
1669  }
1670 
1671  void setTailCall(bool isTC = true) {
1672  setInstructionSubclassData((getSubclassDataFromInstruction() & ~3) |
1673  unsigned(isTC ? TCK_Tail : TCK_None));
1674  }
1675 
1677  setInstructionSubclassData((getSubclassDataFromInstruction() & ~3) |
1678  unsigned(TCK));
1679  }
1680 
1681  /// Return true if the call can return twice
1682  bool canReturnTwice() const { return hasFnAttr(Attribute::ReturnsTwice); }
1685  }
1686 
1687  /// Check if this call is an inline asm statement.
1688  bool isInlineAsm() const { return isa<InlineAsm>(getCalledOperand()); }
1689 
1690  // Methods for support type inquiry through isa, cast, and dyn_cast:
1691  static bool classof(const Instruction *I) {
1692  return I->getOpcode() == Instruction::Call;
1693  }
1694  static bool classof(const Value *V) {
1695  return isa<Instruction>(V) && classof(cast<Instruction>(V));
1696  }
1697 
1698 private:
1699  // Shadow Instruction::setInstructionSubclassData with a private forwarding
1700  // method so that subclasses cannot accidentally use it.
1701  void setInstructionSubclassData(unsigned short D) {
1703  }
1704 };
1705 
1706 CallInst::CallInst(FunctionType *Ty, Value *Func, ArrayRef<Value *> Args,
1707  ArrayRef<OperandBundleDef> Bundles, const Twine &NameStr,
1708  BasicBlock *InsertAtEnd)
1711  (Args.size() + CountBundleInputs(Bundles) + 1),
1712  unsigned(Args.size() + CountBundleInputs(Bundles) + 1),
1713  InsertAtEnd) {
1714  init(Ty, Func, Args, Bundles, NameStr);
1715 }
1716 
1717 CallInst::CallInst(FunctionType *Ty, Value *Func, ArrayRef<Value *> Args,
1718  ArrayRef<OperandBundleDef> Bundles, const Twine &NameStr,
1719  Instruction *InsertBefore)
1722  (Args.size() + CountBundleInputs(Bundles) + 1),
1723  unsigned(Args.size() + CountBundleInputs(Bundles) + 1),
1724  InsertBefore) {
1725  init(Ty, Func, Args, Bundles, NameStr);
1726 }
1727 
1728 //===----------------------------------------------------------------------===//
1729 // SelectInst Class
1730 //===----------------------------------------------------------------------===//
1731 
1732 /// This class represents the LLVM 'select' instruction.
1733 ///
1734 class SelectInst : public Instruction {
1735  SelectInst(Value *C, Value *S1, Value *S2, const Twine &NameStr,
1736  Instruction *InsertBefore)
1738  &Op<0>(), 3, InsertBefore) {
1739  init(C, S1, S2);
1740  setName(NameStr);
1741  }
1742 
1743  SelectInst(Value *C, Value *S1, Value *S2, const Twine &NameStr,
1744  BasicBlock *InsertAtEnd)
1746  &Op<0>(), 3, InsertAtEnd) {
1747  init(C, S1, S2);
1748  setName(NameStr);
1749  }
1750 
1751  void init(Value *C, Value *S1, Value *S2) {
1752  assert(!areInvalidOperands(C, S1, S2) && "Invalid operands for select");
1753  Op<0>() = C;
1754  Op<1>() = S1;
1755  Op<2>() = S2;
1756  }
1757 
1758 protected:
1759  // Note: Instruction needs to be a friend here to call cloneImpl.
1760  friend class Instruction;
1761 
1762  SelectInst *cloneImpl() const;
1763 
1764 public:
1765  static SelectInst *Create(Value *C, Value *S1, Value *S2,
1766  const Twine &NameStr = "",
1767  Instruction *InsertBefore = nullptr,
1768  Instruction *MDFrom = nullptr) {
1769  SelectInst *Sel = new(3) SelectInst(C, S1, S2, NameStr, InsertBefore);
1770  if (MDFrom)
1771  Sel->copyMetadata(*MDFrom);
1772  return Sel;
1773  }
1774 
1775  static SelectInst *Create(Value *C, Value *S1, Value *S2,
1776  const Twine &NameStr,
1777  BasicBlock *InsertAtEnd) {
1778  return new(3) SelectInst(C, S1, S2, NameStr, InsertAtEnd);
1779  }
1780 
1781  const Value *getCondition() const { return Op<0>(); }
1782  const Value *getTrueValue() const { return Op<1>(); }
1783  const Value *getFalseValue() const { return Op<2>(); }
1784  Value *getCondition() { return Op<0>(); }
1785  Value *getTrueValue() { return Op<1>(); }
1786  Value *getFalseValue() { return Op<2>(); }
1787 
1788  void setCondition(Value *V) { Op<0>() = V; }
1789  void setTrueValue(Value *V) { Op<1>() = V; }
1790  void setFalseValue(Value *V) { Op<2>() = V; }
1791 
1792  /// Return a string if the specified operands are invalid
1793  /// for a select operation, otherwise return null.
1794  static const char *areInvalidOperands(Value *Cond, Value *True, Value *False);
1795 
1796  /// Transparently provide more efficient getOperand methods.
1798 
1800  return static_cast<OtherOps>(Instruction::getOpcode());
1801  }
1802 
1803  // Methods for support type inquiry through isa, cast, and dyn_cast:
1804  static bool classof(const Instruction *I) {
1805  return I->getOpcode() == Instruction::Select;
1806  }
1807  static bool classof(const Value *V) {
1808  return isa<Instruction>(V) && classof(cast<Instruction>(V));
1809  }
1810 };
1811 
1812 template <>
1813 struct OperandTraits<SelectInst> : public FixedNumOperandTraits<SelectInst, 3> {
1814 };
1815 
1817 
1818 //===----------------------------------------------------------------------===//
1819 // VAArgInst Class
1820 //===----------------------------------------------------------------------===//
1821 
1822 /// This class represents the va_arg llvm instruction, which returns
1823 /// an argument of the specified type given a va_list and increments that list
1824 ///
1825 class VAArgInst : public UnaryInstruction {
1826 protected:
1827  // Note: Instruction needs to be a friend here to call cloneImpl.
1828  friend class Instruction;
1829 
1830  VAArgInst *cloneImpl() const;
1831 
1832 public:
1833  VAArgInst(Value *List, Type *Ty, const Twine &NameStr = "",
1834  Instruction *InsertBefore = nullptr)
1835  : UnaryInstruction(Ty, VAArg, List, InsertBefore) {
1836  setName(NameStr);
1837  }
1838 
1839  VAArgInst(Value *List, Type *Ty, const Twine &NameStr,
1840  BasicBlock *InsertAtEnd)
1841  : UnaryInstruction(Ty, VAArg, List, InsertAtEnd) {
1842  setName(NameStr);
1843  }
1844 
1846  const Value *getPointerOperand() const { return getOperand(0); }
1847  static unsigned getPointerOperandIndex() { return 0U; }
1848 
1849  // Methods for support type inquiry through isa, cast, and dyn_cast:
1850  static bool classof(const Instruction *I) {
1851  return I->getOpcode() == VAArg;
1852  }
1853  static bool classof(const Value *V) {
1854  return isa<Instruction>(V) && classof(cast<Instruction>(V));
1855  }
1856 };
1857 
1858 //===----------------------------------------------------------------------===//
1859 // ExtractElementInst Class
1860 //===----------------------------------------------------------------------===//
1861 
1862 /// This instruction extracts a single (scalar)
1863 /// element from a VectorType value
1864 ///
1866  ExtractElementInst(Value *Vec, Value *Idx, const Twine &NameStr = "",
1867  Instruction *InsertBefore = nullptr);
1868  ExtractElementInst(Value *Vec, Value *Idx, const Twine &NameStr,
1869  BasicBlock *InsertAtEnd);
1870 
1871 protected:
1872  // Note: Instruction needs to be a friend here to call cloneImpl.
1873  friend class Instruction;
1874 
1875  ExtractElementInst *cloneImpl() const;
1876 
1877 public:
1878  static ExtractElementInst *Create(Value *Vec, Value *Idx,
1879  const Twine &NameStr = "",
1880  Instruction *InsertBefore = nullptr) {
1881  return new(2) ExtractElementInst(Vec, Idx, NameStr, InsertBefore);
1882  }
1883 
1884  static ExtractElementInst *Create(Value *Vec, Value *Idx,
1885  const Twine &NameStr,
1886  BasicBlock *InsertAtEnd) {
1887  return new(2) ExtractElementInst(Vec, Idx, NameStr, InsertAtEnd);
1888  }
1889 
1890  /// Return true if an extractelement instruction can be
1891  /// formed with the specified operands.
1892  static bool isValidOperands(const Value *Vec, const Value *Idx);
1893 
1894  Value *getVectorOperand() { return Op<0>(); }
1895  Value *getIndexOperand() { return Op<1>(); }
1896  const Value *getVectorOperand() const { return Op<0>(); }
1897  const Value *getIndexOperand() const { return Op<1>(); }
1898 
1900  return cast<VectorType>(getVectorOperand()->getType());
1901  }
1902 
1903  /// Transparently provide more efficient getOperand methods.
1905 
1906  // Methods for support type inquiry through isa, cast, and dyn_cast:
1907  static bool classof(const Instruction *I) {
1908  return I->getOpcode() == Instruction::ExtractElement;
1909  }
1910  static bool classof(const Value *V) {
1911  return isa<Instruction>(V) && classof(cast<Instruction>(V));
1912  }
1913 };
1914 
1915 template <>
1917  public FixedNumOperandTraits<ExtractElementInst, 2> {
1918 };
1919 
1920 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(ExtractElementInst, Value)
1921 
1922 //===----------------------------------------------------------------------===//
1923 // InsertElementInst Class
1924 //===----------------------------------------------------------------------===//
1925 
1926 /// This instruction inserts a single (scalar)
1927 /// element into a VectorType value
1928 ///
1930  InsertElementInst(Value *Vec, Value *NewElt, Value *Idx,
1931  const Twine &NameStr = "",
1932  Instruction *InsertBefore = nullptr);
1933  InsertElementInst(Value *Vec, Value *NewElt, Value *Idx, const Twine &NameStr,
1934  BasicBlock *InsertAtEnd);
1935 
1936 protected:
1937  // Note: Instruction needs to be a friend here to call cloneImpl.
1938  friend class Instruction;
1939 
1940  InsertElementInst *cloneImpl() const;
1941 
1942 public:
1943  static InsertElementInst *Create(Value *Vec, Value *NewElt, Value *Idx,
1944  const Twine &NameStr = "",
1945  Instruction *InsertBefore = nullptr) {
1946  return new(3) InsertElementInst(Vec, NewElt, Idx, NameStr, InsertBefore);
1947  }
1948 
1949  static InsertElementInst *Create(Value *Vec, Value *NewElt, Value *Idx,
1950  const Twine &NameStr,
1951  BasicBlock *InsertAtEnd) {
1952  return new(3) InsertElementInst(Vec, NewElt, Idx, NameStr, InsertAtEnd);
1953  }
1954 
1955  /// Return true if an insertelement instruction can be
1956  /// formed with the specified operands.
1957  static bool isValidOperands(const Value *Vec, const Value *NewElt,
1958  const Value *Idx);
1959 
1960  /// Overload to return most specific vector type.
1961  ///
1962  VectorType *getType() const {
1963  return cast<VectorType>(Instruction::getType());
1964  }
1965 
1966  /// Transparently provide more efficient getOperand methods.
1968 
1969  // Methods for support type inquiry through isa, cast, and dyn_cast:
1970  static bool classof(const Instruction *I) {
1971  return I->getOpcode() == Instruction::InsertElement;
1972  }
1973  static bool classof(const Value *V) {
1974  return isa<Instruction>(V) && classof(cast<Instruction>(V));
1975  }
1976 };
1977 
1978 template <>
1980  public FixedNumOperandTraits<InsertElementInst, 3> {
1981 };
1982 
1983 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(InsertElementInst, Value)
1984 
1985 //===----------------------------------------------------------------------===//
1986 // ShuffleVectorInst Class
1987 //===----------------------------------------------------------------------===//
1988 
1989 /// This instruction constructs a fixed permutation of two
1990 /// input vectors.
1991 ///
1993 protected:
1994  // Note: Instruction needs to be a friend here to call cloneImpl.
1995  friend class Instruction;
1996 
1997  ShuffleVectorInst *cloneImpl() const;
1998 
1999 public:
2001  const Twine &NameStr = "",
2002  Instruction *InsertBefor = nullptr);
2004  const Twine &NameStr, BasicBlock *InsertAtEnd);
2005 
2006  // allocate space for exactly three operands
2007  void *operator new(size_t s) {
2008  return User::operator new(s, 3);
2009  }
2010 
2011  /// Return true if a shufflevector instruction can be
2012  /// formed with the specified operands.
2013  static bool isValidOperands(const Value *V1, const Value *V2,
2014  const Value *Mask);
2015 
2016  /// Overload to return most specific vector type.
2017  ///
2018  VectorType *getType() const {
2019  return cast<VectorType>(Instruction::getType());
2020  }
2021 
2022  /// Transparently provide more efficient getOperand methods.
2024 
2025  Constant *getMask() const {
2026  return cast<Constant>(getOperand(2));
2027  }
2028 
2029  /// Return the shuffle mask value for the specified element of the mask.
2030  /// Return -1 if the element is undef.
2031  static int getMaskValue(const Constant *Mask, unsigned Elt);
2032 
2033  /// Return the shuffle mask value of this instruction for the given element
2034  /// index. Return -1 if the element is undef.
2035  int getMaskValue(unsigned Elt) const {
2036  return getMaskValue(getMask(), Elt);
2037  }
2038 
2039  /// Convert the input shuffle mask operand to a vector of integers. Undefined
2040  /// elements of the mask are returned as -1.
2041  static void getShuffleMask(const Constant *Mask,
2042  SmallVectorImpl<int> &Result);
2043 
2044  /// Return the mask for this instruction as a vector of integers. Undefined
2045  /// elements of the mask are returned as -1.
2046  void getShuffleMask(SmallVectorImpl<int> &Result) const {
2047  return getShuffleMask(getMask(), Result);
2048  }
2049 
2052  getShuffleMask(Mask);
2053  return Mask;
2054  }
2055 
2056  /// Return true if this shuffle returns a vector with a different number of
2057  /// elements than its source vectors.
2058  /// Examples: shufflevector <4 x n> A, <4 x n> B, <1,2,3>
2059  /// shufflevector <4 x n> A, <4 x n> B, <1,2,3,4,5>
2060  bool changesLength() const {
2061  unsigned NumSourceElts = Op<0>()->getType()->getVectorNumElements();
2062  unsigned NumMaskElts = getMask()->getType()->getVectorNumElements();
2063  return NumSourceElts != NumMaskElts;
2064  }
2065 
2066  /// Return true if this shuffle returns a vector with a greater number of
2067  /// elements than its source vectors.
2068  /// Example: shufflevector <2 x n> A, <2 x n> B, <1,2,3>
2069  bool increasesLength() const {
2070  unsigned NumSourceElts = Op<0>()->getType()->getVectorNumElements();
2071  unsigned NumMaskElts = getMask()->getType()->getVectorNumElements();
2072  return NumSourceElts < NumMaskElts;
2073  }
2074 
2075  /// Return true if this shuffle mask chooses elements from exactly one source
2076  /// vector.
2077  /// Example: <7,5,undef,7>
2078  /// This assumes that vector operands are the same length as the mask.
2079  static bool isSingleSourceMask(ArrayRef<int> Mask);
2080  static bool isSingleSourceMask(const Constant *Mask) {
2081  assert(Mask->getType()->isVectorTy() && "Shuffle needs vector constant.");
2082  SmallVector<int, 16> MaskAsInts;
2083  getShuffleMask(Mask, MaskAsInts);
2084  return isSingleSourceMask(MaskAsInts);
2085  }
2086 
2087  /// Return true if this shuffle chooses elements from exactly one source
2088  /// vector without changing the length of that vector.
2089  /// Example: shufflevector <4 x n> A, <4 x n> B, <3,0,undef,3>
2090  /// TODO: Optionally allow length-changing shuffles.
2091  bool isSingleSource() const {
2092  return !changesLength() && isSingleSourceMask(getMask());
2093  }
2094 
2095  /// Return true if this shuffle mask chooses elements from exactly one source
2096  /// vector without lane crossings. A shuffle using this mask is not
2097  /// necessarily a no-op because it may change the number of elements from its
2098  /// input vectors or it may provide demanded bits knowledge via undef lanes.
2099  /// Example: <undef,undef,2,3>
2100  static bool isIdentityMask(ArrayRef<int> Mask);
2101  static bool isIdentityMask(const Constant *Mask) {
2102  assert(Mask->getType()->isVectorTy() && "Shuffle needs vector constant.");
2103  SmallVector<int, 16> MaskAsInts;
2104  getShuffleMask(Mask, MaskAsInts);
2105  return isIdentityMask(MaskAsInts);
2106  }
2107 
2108  /// Return true if this shuffle chooses elements from exactly one source
2109  /// vector without lane crossings and does not change the number of elements
2110  /// from its input vectors.
2111  /// Example: shufflevector <4 x n> A, <4 x n> B, <4,undef,6,undef>
2112  bool isIdentity() const {
2113  return !changesLength() && isIdentityMask(getShuffleMask());
2114  }
2115 
2116  /// Return true if this shuffle lengthens exactly one source vector with
2117  /// undefs in the high elements.
2118  bool isIdentityWithPadding() const;
2119 
2120  /// Return true if this shuffle extracts the first N elements of exactly one
2121  /// source vector.
2122  bool isIdentityWithExtract() const;
2123 
2124  /// Return true if this shuffle concatenates its 2 source vectors. This
2125  /// returns false if either input is undefined. In that case, the shuffle is
2126  /// is better classified as an identity with padding operation.
2127  bool isConcat() const;
2128 
2129  /// Return true if this shuffle mask chooses elements from its source vectors
2130  /// without lane crossings. A shuffle using this mask would be
2131  /// equivalent to a vector select with a constant condition operand.
2132  /// Example: <4,1,6,undef>
2133  /// This returns false if the mask does not choose from both input vectors.
2134  /// In that case, the shuffle is better classified as an identity shuffle.
2135  /// This assumes that vector operands are the same length as the mask
2136  /// (a length-changing shuffle can never be equivalent to a vector select).
2137  static bool isSelectMask(ArrayRef<int> Mask);
2138  static bool isSelectMask(const Constant *Mask) {
2139  assert(Mask->getType()->isVectorTy() && "Shuffle needs vector constant.");
2140  SmallVector<int, 16> MaskAsInts;
2141  getShuffleMask(Mask, MaskAsInts);
2142  return isSelectMask(MaskAsInts);
2143  }
2144 
2145  /// Return true if this shuffle chooses elements from its source vectors
2146  /// without lane crossings and all operands have the same number of elements.
2147  /// In other words, this shuffle is equivalent to a vector select with a
2148  /// constant condition operand.
2149  /// Example: shufflevector <4 x n> A, <4 x n> B, <undef,1,6,3>
2150  /// This returns false if the mask does not choose from both input vectors.
2151  /// In that case, the shuffle is better classified as an identity shuffle.
2152  /// TODO: Optionally allow length-changing shuffles.
2153  bool isSelect() const {
2154  return !changesLength() && isSelectMask(getMask());
2155  }
2156 
2157  /// Return true if this shuffle mask swaps the order of elements from exactly
2158  /// one source vector.
2159  /// Example: <7,6,undef,4>
2160  /// This assumes that vector operands are the same length as the mask.
2161  static bool isReverseMask(ArrayRef<int> Mask);
2162  static bool isReverseMask(const Constant *Mask) {
2163  assert(Mask->getType()->isVectorTy() && "Shuffle needs vector constant.");
2164  SmallVector<int, 16> MaskAsInts;
2165  getShuffleMask(Mask, MaskAsInts);
2166  return isReverseMask(MaskAsInts);
2167  }
2168 
2169  /// Return true if this shuffle swaps the order of elements from exactly
2170  /// one source vector.
2171  /// Example: shufflevector <4 x n> A, <4 x n> B, <3,undef,1,undef>
2172  /// TODO: Optionally allow length-changing shuffles.
2173  bool isReverse() const {
2174  return !changesLength() && isReverseMask(getMask());
2175  }
2176 
2177  /// Return true if this shuffle mask chooses all elements with the same value
2178  /// as the first element of exactly one source vector.
2179  /// Example: <4,undef,undef,4>
2180  /// This assumes that vector operands are the same length as the mask.
2181  static bool isZeroEltSplatMask(ArrayRef<int> Mask);
2182  static bool isZeroEltSplatMask(const Constant *Mask) {
2183  assert(Mask->getType()->isVectorTy() && "Shuffle needs vector constant.");
2184  SmallVector<int, 16> MaskAsInts;
2185  getShuffleMask(Mask, MaskAsInts);
2186  return isZeroEltSplatMask(MaskAsInts);
2187  }
2188 
2189  /// Return true if all elements of this shuffle are the same value as the
2190  /// first element of exactly one source vector without changing the length
2191  /// of that vector.
2192  /// Example: shufflevector <4 x n> A, <4 x n> B, <undef,0,undef,0>
2193  /// TODO: Optionally allow length-changing shuffles.
2194  /// TODO: Optionally allow splats from other elements.
2195  bool isZeroEltSplat() const {
2196  return !changesLength() && isZeroEltSplatMask(getMask());
2197  }
2198 
2199  /// Return true if this shuffle mask is a transpose mask.
2200  /// Transpose vector masks transpose a 2xn matrix. They read corresponding
2201  /// even- or odd-numbered vector elements from two n-dimensional source
2202  /// vectors and write each result into consecutive elements of an
2203  /// n-dimensional destination vector. Two shuffles are necessary to complete
2204  /// the transpose, one for the even elements and another for the odd elements.
2205  /// This description closely follows how the TRN1 and TRN2 AArch64
2206  /// instructions operate.
2207  ///
2208  /// For example, a simple 2x2 matrix can be transposed with:
2209  ///
2210  /// ; Original matrix
2211  /// m0 = < a, b >
2212  /// m1 = < c, d >
2213  ///
2214  /// ; Transposed matrix
2215  /// t0 = < a, c > = shufflevector m0, m1, < 0, 2 >
2216  /// t1 = < b, d > = shufflevector m0, m1, < 1, 3 >
2217  ///
2218  /// For matrices having greater than n columns, the resulting nx2 transposed
2219  /// matrix is stored in two result vectors such that one vector contains
2220  /// interleaved elements from all the even-numbered rows and the other vector
2221  /// contains interleaved elements from all the odd-numbered rows. For example,
2222  /// a 2x4 matrix can be transposed with:
2223  ///
2224  /// ; Original matrix
2225  /// m0 = < a, b, c, d >
2226  /// m1 = < e, f, g, h >
2227  ///
2228  /// ; Transposed matrix
2229  /// t0 = < a, e, c, g > = shufflevector m0, m1 < 0, 4, 2, 6 >
2230  /// t1 = < b, f, d, h > = shufflevector m0, m1 < 1, 5, 3, 7 >
2231  static bool isTransposeMask(ArrayRef<int> Mask);
2232  static bool isTransposeMask(const Constant *Mask) {
2233  assert(Mask->getType()->isVectorTy() && "Shuffle needs vector constant.");
2234  SmallVector<int, 16> MaskAsInts;
2235  getShuffleMask(Mask, MaskAsInts);
2236  return isTransposeMask(MaskAsInts);
2237  }
2238 
2239  /// Return true if this shuffle transposes the elements of its inputs without
2240  /// changing the length of the vectors. This operation may also be known as a
2241  /// merge or interleave. See the description for isTransposeMask() for the
2242  /// exact specification.
2243  /// Example: shufflevector <4 x n> A, <4 x n> B, <0,4,2,6>
2244  bool isTranspose() const {
2245  return !changesLength() && isTransposeMask(getMask());
2246  }
2247 
2248  /// Return true if this shuffle mask is an extract subvector mask.
2249  /// A valid extract subvector mask returns a smaller vector from a single
2250  /// source operand. The base extraction index is returned as well.
2251  static bool isExtractSubvectorMask(ArrayRef<int> Mask, int NumSrcElts,
2252  int &Index);
2253  static bool isExtractSubvectorMask(const Constant *Mask, int NumSrcElts,
2254  int &Index) {
2255  assert(Mask->getType()->isVectorTy() && "Shuffle needs vector constant.");
2256  SmallVector<int, 16> MaskAsInts;
2257  getShuffleMask(Mask, MaskAsInts);
2258  return isExtractSubvectorMask(MaskAsInts, NumSrcElts, Index);
2259  }
2260 
2261  /// Return true if this shuffle mask is an extract subvector mask.
2262  bool isExtractSubvectorMask(int &Index) const {
2263  int NumSrcElts = Op<0>()->getType()->getVectorNumElements();
2264  return isExtractSubvectorMask(getMask(), NumSrcElts, Index);
2265  }
2266 
2267  /// Change values in a shuffle permute mask assuming the two vector operands
2268  /// of length InVecNumElts have swapped position.
2270  unsigned InVecNumElts) {
2271  for (int &Idx : Mask) {
2272  if (Idx == -1)
2273  continue;
2274  Idx = Idx < (int)InVecNumElts ? Idx + InVecNumElts : Idx - InVecNumElts;
2275  assert(Idx >= 0 && Idx < (int)InVecNumElts * 2 &&
2276  "shufflevector mask index out of range");
2277  }
2278  }
2279 
2280  // Methods for support type inquiry through isa, cast, and dyn_cast:
2281  static bool classof(const Instruction *I) {
2282  return I->getOpcode() == Instruction::ShuffleVector;
2283  }
2284  static bool classof(const Value *V) {
2285  return isa<Instruction>(V) && classof(cast<Instruction>(V));
2286  }
2287 };
2288 
2289 template <>
2291  public FixedNumOperandTraits<ShuffleVectorInst, 3> {
2292 };
2293 
2294 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(ShuffleVectorInst, Value)
2295 
2296 //===----------------------------------------------------------------------===//
2297 // ExtractValueInst Class
2298 //===----------------------------------------------------------------------===//
2299 
2300 /// This instruction extracts a struct member or array
2301 /// element value from an aggregate value.
2302 ///
2304  SmallVector<unsigned, 4> Indices;
2305 
2306  ExtractValueInst(const ExtractValueInst &EVI);
2307 
2308  /// Constructors - Create a extractvalue instruction with a base aggregate
2309  /// value and a list of indices. The first ctor can optionally insert before
2310  /// an existing instruction, the second appends the new instruction to the
2311  /// specified BasicBlock.
2312  inline ExtractValueInst(Value *Agg,
2313  ArrayRef<unsigned> Idxs,
2314  const Twine &NameStr,
2315  Instruction *InsertBefore);
2316  inline ExtractValueInst(Value *Agg,
2317  ArrayRef<unsigned> Idxs,
2318  const Twine &NameStr, BasicBlock *InsertAtEnd);
2319 
2320  void init(ArrayRef<unsigned> Idxs, const Twine &NameStr);
2321 
2322 protected:
2323  // Note: Instruction needs to be a friend here to call cloneImpl.
2324  friend class Instruction;
2325 
2326  ExtractValueInst *cloneImpl() const;
2327 
2328 public:
2330  ArrayRef<unsigned> Idxs,
2331  const Twine &NameStr = "",
2332  Instruction *InsertBefore = nullptr) {
2333  return new
2334  ExtractValueInst(Agg, Idxs, NameStr, InsertBefore);
2335  }
2336 
2338  ArrayRef<unsigned> Idxs,
2339  const Twine &NameStr,
2340  BasicBlock *InsertAtEnd) {
2341  return new ExtractValueInst(Agg, Idxs, NameStr, InsertAtEnd);
2342  }
2343 
2344  /// Returns the type of the element that would be extracted
2345  /// with an extractvalue instruction with the specified parameters.
2346  ///
2347  /// Null is returned if the indices are invalid for the specified type.
2348  static Type *getIndexedType(Type *Agg, ArrayRef<unsigned> Idxs);
2349 
2350  using idx_iterator = const unsigned*;
2351 
2352  inline idx_iterator idx_begin() const { return Indices.begin(); }
2353  inline idx_iterator idx_end() const { return Indices.end(); }
2355  return make_range(idx_begin(), idx_end());
2356  }
2357 
2359  return getOperand(0);
2360  }
2361  const Value *getAggregateOperand() const {
2362  return getOperand(0);
2363  }
2364  static unsigned getAggregateOperandIndex() {
2365  return 0U; // get index for modifying correct operand
2366  }
2367 
2369  return Indices;
2370  }
2371 
2372  unsigned getNumIndices() const {
2373  return (unsigned)Indices.size();
2374  }
2375 
2376  bool hasIndices() const {
2377  return true;
2378  }
2379 
2380  // Methods for support type inquiry through isa, cast, and dyn_cast:
2381  static bool classof(const Instruction *I) {
2382  return I->getOpcode() == Instruction::ExtractValue;
2383  }
2384  static bool classof(const Value *V) {
2385  return isa<Instruction>(V) && classof(cast<Instruction>(V));
2386  }
2387 };
2388 
2389 ExtractValueInst::ExtractValueInst(Value *Agg,
2390  ArrayRef<unsigned> Idxs,
2391  const Twine &NameStr,
2392  Instruction *InsertBefore)
2393  : UnaryInstruction(checkGEPType(getIndexedType(Agg->getType(), Idxs)),
2394  ExtractValue, Agg, InsertBefore) {
2395  init(Idxs, NameStr);
2396 }
2397 
2398 ExtractValueInst::ExtractValueInst(Value *Agg,
2399  ArrayRef<unsigned> Idxs,
2400  const Twine &NameStr,
2401  BasicBlock *InsertAtEnd)
2402  : UnaryInstruction(checkGEPType(getIndexedType(Agg->getType(), Idxs)),
2403  ExtractValue, Agg, InsertAtEnd) {
2404  init(Idxs, NameStr);
2405 }
2406 
2407 //===----------------------------------------------------------------------===//
2408 // InsertValueInst Class
2409 //===----------------------------------------------------------------------===//
2410 
2411 /// This instruction inserts a struct field of array element
2412 /// value into an aggregate value.
2413 ///
2415  SmallVector<unsigned, 4> Indices;
2416 
2417  InsertValueInst(const InsertValueInst &IVI);
2418 
2419  /// Constructors - Create a insertvalue instruction with a base aggregate
2420  /// value, a value to insert, and a list of indices. The first ctor can
2421  /// optionally insert before an existing instruction, the second appends
2422  /// the new instruction to the specified BasicBlock.
2423  inline InsertValueInst(Value *Agg, Value *Val,
2424  ArrayRef<unsigned> Idxs,
2425  const Twine &NameStr,
2426  Instruction *InsertBefore);
2427  inline InsertValueInst(Value *Agg, Value *Val,
2428  ArrayRef<unsigned> Idxs,
2429  const Twine &NameStr, BasicBlock *InsertAtEnd);
2430 
2431  /// Constructors - These two constructors are convenience methods because one
2432  /// and two index insertvalue instructions are so common.
2433  InsertValueInst(Value *Agg, Value *Val, unsigned Idx,
2434  const Twine &NameStr = "",
2435  Instruction *InsertBefore = nullptr);
2436  InsertValueInst(Value *Agg, Value *Val, unsigned Idx, const Twine &NameStr,
2437  BasicBlock *InsertAtEnd);
2438 
2439  void init(Value *Agg, Value *Val, ArrayRef<unsigned> Idxs,
2440  const Twine &NameStr);
2441 
2442 protected:
2443  // Note: Instruction needs to be a friend here to call cloneImpl.
2444  friend class Instruction;
2445 
2446  InsertValueInst *cloneImpl() const;
2447 
2448 public:
2449  // allocate space for exactly two operands
2450  void *operator new(size_t s) {
2451  return User::operator new(s, 2);
2452  }
2453 
2454  static InsertValueInst *Create(Value *Agg, Value *Val,
2455  ArrayRef<unsigned> Idxs,
2456  const Twine &NameStr = "",
2457  Instruction *InsertBefore = nullptr) {
2458  return new InsertValueInst(Agg, Val, Idxs, NameStr, InsertBefore);
2459  }
2460 
2461  static InsertValueInst *Create(Value *Agg, Value *Val,
2462  ArrayRef<unsigned> Idxs,
2463  const Twine &NameStr,
2464  BasicBlock *InsertAtEnd) {
2465  return new InsertValueInst(Agg, Val, Idxs, NameStr, InsertAtEnd);
2466  }
2467 
2468  /// Transparently provide more efficient getOperand methods.
2470 
2471  using idx_iterator = const unsigned*;
2472 
2473  inline idx_iterator idx_begin() const { return Indices.begin(); }
2474  inline idx_iterator idx_end() const { return Indices.end(); }
2476  return make_range(idx_begin(), idx_end());
2477  }
2478 
2480  return getOperand(0);
2481  }
2482  const Value *getAggregateOperand() const {
2483  return getOperand(0);
2484  }
2485  static unsigned getAggregateOperandIndex() {
2486  return 0U; // get index for modifying correct operand
2487  }
2488 
2490  return getOperand(1);
2491  }
2493  return getOperand(1);
2494  }
2495  static unsigned getInsertedValueOperandIndex() {
2496  return 1U; // get index for modifying correct operand
2497  }
2498 
2500  return Indices;
2501  }
2502 
2503  unsigned getNumIndices() const {
2504  return (unsigned)Indices.size();
2505  }
2506 
2507  bool hasIndices() const {
2508  return true;
2509  }
2510 
2511  // Methods for support type inquiry through isa, cast, and dyn_cast:
2512  static bool classof(const Instruction *I) {
2513  return I->getOpcode() == Instruction::InsertValue;
2514  }
2515  static bool classof(const Value *V) {
2516  return isa<Instruction>(V) && classof(cast<Instruction>(V));
2517  }
2518 };
2519 
2520 template <>
2522  public FixedNumOperandTraits<InsertValueInst, 2> {
2523 };
2524 
2525 InsertValueInst::InsertValueInst(Value *Agg,
2526  Value *Val,
2527  ArrayRef<unsigned> Idxs,
2528  const Twine &NameStr,
2529  Instruction *InsertBefore)
2530  : Instruction(Agg->getType(), InsertValue,
2532  2, InsertBefore) {
2533  init(Agg, Val, Idxs, NameStr);
2534 }
2535 
2536 InsertValueInst::InsertValueInst(Value *Agg,
2537  Value *Val,
2538  ArrayRef<unsigned> Idxs,
2539  const Twine &NameStr,
2540  BasicBlock *InsertAtEnd)
2541  : Instruction(Agg->getType(), InsertValue,
2543  2, InsertAtEnd) {
2544  init(Agg, Val, Idxs, NameStr);
2545 }
2546 
2548 
2549 //===----------------------------------------------------------------------===//
2550 // PHINode Class
2551 //===----------------------------------------------------------------------===//
2552 
2553 // PHINode - The PHINode class is used to represent the magical mystical PHI
2554 // node, that can not exist in nature, but can be synthesized in a computer
2555 // scientist's overactive imagination.
2556 //
2557 class PHINode : public Instruction {
2558  /// The number of operands actually allocated. NumOperands is
2559  /// the number actually in use.
2560  unsigned ReservedSpace;
2561 
2562  PHINode(const PHINode &PN);
2563 
2564  explicit PHINode(Type *Ty, unsigned NumReservedValues,
2565  const Twine &NameStr = "",
2566  Instruction *InsertBefore = nullptr)
2567  : Instruction(Ty, Instruction::PHI, nullptr, 0, InsertBefore),
2568  ReservedSpace(NumReservedValues) {
2569  setName(NameStr);
2570  allocHungoffUses(ReservedSpace);
2571  }
2572 
2573  PHINode(Type *Ty, unsigned NumReservedValues, const Twine &NameStr,
2574  BasicBlock *InsertAtEnd)
2575  : Instruction(Ty, Instruction::PHI, nullptr, 0, InsertAtEnd),
2576  ReservedSpace(NumReservedValues) {
2577  setName(NameStr);
2578  allocHungoffUses(ReservedSpace);
2579  }
2580 
2581 protected:
2582  // Note: Instruction needs to be a friend here to call cloneImpl.
2583  friend class Instruction;
2584 
2585  PHINode *cloneImpl() const;
2586 
2587  // allocHungoffUses - this is more complicated than the generic
2588  // User::allocHungoffUses, because we have to allocate Uses for the incoming
2589  // values and pointers to the incoming blocks, all in one allocation.
2590  void allocHungoffUses(unsigned N) {
2591  User::allocHungoffUses(N, /* IsPhi */ true);
2592  }
2593 
2594 public:
2595  /// Constructors - NumReservedValues is a hint for the number of incoming
2596  /// edges that this phi node will have (use 0 if you really have no idea).
2597  static PHINode *Create(Type *Ty, unsigned NumReservedValues,
2598  const Twine &NameStr = "",
2599  Instruction *InsertBefore = nullptr) {
2600  return new PHINode(Ty, NumReservedValues, NameStr, InsertBefore);
2601  }
2602 
2603  static PHINode *Create(Type *Ty, unsigned NumReservedValues,
2604  const Twine &NameStr, BasicBlock *InsertAtEnd) {
2605  return new PHINode(Ty, NumReservedValues, NameStr, InsertAtEnd);
2606  }
2607 
2608  /// Provide fast operand accessors
2610 
2611  // Block iterator interface. This provides access to the list of incoming
2612  // basic blocks, which parallels the list of incoming values.
2613 
2616 
2618  Use::UserRef *ref =
2619  reinterpret_cast<Use::UserRef*>(op_begin() + ReservedSpace);
2620  return reinterpret_cast<block_iterator>(ref + 1);
2621  }
2622 
2624  const Use::UserRef *ref =
2625  reinterpret_cast<const Use::UserRef*>(op_begin() + ReservedSpace);
2626  return reinterpret_cast<const_block_iterator>(ref + 1);
2627  }
2628 
2630  return block_begin() + getNumOperands();
2631  }
2632 
2634  return block_begin() + getNumOperands();
2635  }
2636 
2638  return make_range(block_begin(), block_end());
2639  }
2640 
2642  return make_range(block_begin(), block_end());
2643  }
2644 
2646 
2648 
2649  /// Return the number of incoming edges
2650  ///
2651  unsigned getNumIncomingValues() const { return getNumOperands(); }
2652 
2653  /// Return incoming value number x
2654  ///
2655  Value *getIncomingValue(unsigned i) const {
2656  return getOperand(i);
2657  }
2658  void setIncomingValue(unsigned i, Value *V) {
2659  assert(V && "PHI node got a null value!");
2660  assert(getType() == V->getType() &&
2661  "All operands to PHI node must be the same type as the PHI node!");
2662  setOperand(i, V);
2663  }
2664 
2665  static unsigned getOperandNumForIncomingValue(unsigned i) {
2666  return i;
2667  }
2668 
2669  static unsigned getIncomingValueNumForOperand(unsigned i) {
2670  return i;
2671  }
2672 
2673  /// Return incoming basic block number @p i.
2674  ///
2675  BasicBlock *getIncomingBlock(unsigned i) const {
2676  return block_begin()[i];
2677  }
2678 
2679  /// Return incoming basic block corresponding
2680  /// to an operand of the PHI.
2681  ///
2682  BasicBlock *getIncomingBlock(const Use &U) const {
2683  assert(this == U.getUser() && "Iterator doesn't point to PHI's Uses?");
2684  return getIncomingBlock(unsigned(&U - op_begin()));
2685  }
2686 
2687  /// Return incoming basic block corresponding
2688  /// to value use iterator.
2689  ///
2691  return getIncomingBlock(I.getUse());
2692  }
2693 
2694  void setIncomingBlock(unsigned i, BasicBlock *BB) {
2695  assert(BB && "PHI node got a null basic block!");
2696  block_begin()[i] = BB;
2697  }
2698 
2699  /// Add an incoming value to the end of the PHI list
2700  ///
2701  void addIncoming(Value *V, BasicBlock *BB) {
2702  if (getNumOperands() == ReservedSpace)
2703  growOperands(); // Get more space!
2704  // Initialize some new operands.
2706  setIncomingValue(getNumOperands() - 1, V);
2707  setIncomingBlock(getNumOperands() - 1, BB);
2708  }
2709 
2710  /// Remove an incoming value. This is useful if a
2711  /// predecessor basic block is deleted. The value removed is returned.
2712  ///
2713  /// If the last incoming value for a PHI node is removed (and DeletePHIIfEmpty
2714  /// is true), the PHI node is destroyed and any uses of it are replaced with
2715  /// dummy values. The only time there should be zero incoming values to a PHI
2716  /// node is when the block is dead, so this strategy is sound.
2717  ///
2718  Value *removeIncomingValue(unsigned Idx, bool DeletePHIIfEmpty = true);
2719 
2720  Value *removeIncomingValue(const BasicBlock *BB, bool DeletePHIIfEmpty=true) {
2721  int Idx = getBasicBlockIndex(BB);
2722  assert(Idx >= 0 && "Invalid basic block argument to remove!");
2723  return removeIncomingValue(Idx, DeletePHIIfEmpty);
2724  }
2725 
2726  /// Return the first index of the specified basic
2727  /// block in the value list for this PHI. Returns -1 if no instance.
2728  ///
2729  int getBasicBlockIndex(const BasicBlock *BB) const {
2730  for (unsigned i = 0, e = getNumOperands(); i != e; ++i)
2731  if (block_begin()[i] == BB)
2732  return i;
2733  return -1;
2734  }
2735 
2737  int Idx = getBasicBlockIndex(BB);
2738  assert(Idx >= 0 && "Invalid basic block argument!");
2739  return getIncomingValue(Idx);
2740  }
2741 
2742  /// If the specified PHI node always merges together the
2743  /// same value, return the value, otherwise return null.
2744  Value *hasConstantValue() const;
2745 
2746  /// Whether the specified PHI node always merges
2747  /// together the same value, assuming undefs are equal to a unique
2748  /// non-undef value.
2749  bool hasConstantOrUndefValue() const;
2750 
2751  /// Methods for support type inquiry through isa, cast, and dyn_cast:
2752  static bool classof(const Instruction *I) {
2753  return I->getOpcode() == Instruction::PHI;
2754  }
2755  static bool classof(const Value *V) {
2756  return isa<Instruction>(V) && classof(cast<Instruction>(V));
2757  }
2758 
2759 private:
2760  void growOperands();
2761 };
2762 
2763 template <>
2765 };
2766 
2768 
2769 //===----------------------------------------------------------------------===//
2770 // LandingPadInst Class
2771 //===----------------------------------------------------------------------===//
2772 
2773 //===---------------------------------------------------------------------------
2774 /// The landingpad instruction holds all of the information
2775 /// necessary to generate correct exception handling. The landingpad instruction
2776 /// cannot be moved from the top of a landing pad block, which itself is
2777 /// accessible only from the 'unwind' edge of an invoke. This uses the
2778 /// SubclassData field in Value to store whether or not the landingpad is a
2779 /// cleanup.
2780 ///
2781 class LandingPadInst : public Instruction {
2782  /// The number of operands actually allocated. NumOperands is
2783  /// the number actually in use.
2784  unsigned ReservedSpace;
2785 
2786  LandingPadInst(const LandingPadInst &LP);
2787 
2788 public:
2790 
2791 private:
2792  explicit LandingPadInst(Type *RetTy, unsigned NumReservedValues,
2793  const Twine &NameStr, Instruction *InsertBefore);
2794  explicit LandingPadInst(Type *RetTy, unsigned NumReservedValues,
2795  const Twine &NameStr, BasicBlock *InsertAtEnd);
2796 
2797  // Allocate space for exactly zero operands.
2798  void *operator new(size_t s) {
2799  return User::operator new(s);
2800  }
2801 
2802  void growOperands(unsigned Size);
2803  void init(unsigned NumReservedValues, const Twine &NameStr);
2804 
2805 protected:
2806  // Note: Instruction needs to be a friend here to call cloneImpl.
2807  friend class Instruction;
2808 
2809  LandingPadInst *cloneImpl() const;
2810 
2811 public:
2812  /// Constructors - NumReservedClauses is a hint for the number of incoming
2813  /// clauses that this landingpad will have (use 0 if you really have no idea).
2814  static LandingPadInst *Create(Type *RetTy, unsigned NumReservedClauses,
2815  const Twine &NameStr = "",
2816  Instruction *InsertBefore = nullptr);
2817  static LandingPadInst *Create(Type *RetTy, unsigned NumReservedClauses,
2818  const Twine &NameStr, BasicBlock *InsertAtEnd);
2819 
2820  /// Provide fast operand accessors
2822 
2823  /// Return 'true' if this landingpad instruction is a
2824  /// cleanup. I.e., it should be run when unwinding even if its landing pad
2825  /// doesn't catch the exception.
2826  bool isCleanup() const { return getSubclassDataFromInstruction() & 1; }
2827 
2828  /// Indicate that this landingpad instruction is a cleanup.
2829  void setCleanup(bool V) {
2830  setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) |
2831  (V ? 1 : 0));
2832  }
2833 
2834  /// Add a catch or filter clause to the landing pad.
2835  void addClause(Constant *ClauseVal);
2836 
2837  /// Get the value of the clause at index Idx. Use isCatch/isFilter to
2838  /// determine what type of clause this is.
2839  Constant *getClause(unsigned Idx) const {
2840  return cast<Constant>(getOperandList()[Idx]);
2841  }
2842 
2843  /// Return 'true' if the clause and index Idx is a catch clause.
2844  bool isCatch(unsigned Idx) const {
2845  return !isa<ArrayType>(getOperandList()[Idx]->getType());
2846  }
2847 
2848  /// Return 'true' if the clause and index Idx is a filter clause.
2849  bool isFilter(unsigned Idx) const {
2850  return isa<ArrayType>(getOperandList()[Idx]->getType());
2851  }
2852 
2853  /// Get the number of clauses for this landing pad.
2854  unsigned getNumClauses() const { return getNumOperands(); }
2855 
2856  /// Grow the size of the operand list to accommodate the new
2857  /// number of clauses.
2858  void reserveClauses(unsigned Size) { growOperands(Size); }
2859 
2860  // Methods for support type inquiry through isa, cast, and dyn_cast:
2861  static bool classof(const Instruction *I) {
2862  return I->getOpcode() == Instruction::LandingPad;
2863  }
2864  static bool classof(const Value *V) {
2865  return isa<Instruction>(V) && classof(cast<Instruction>(V));
2866  }
2867 };
2868 
2869 template <>
2871 };
2872 
2874 
2875 //===----------------------------------------------------------------------===//
2876 // ReturnInst Class
2877 //===----------------------------------------------------------------------===//
2878 
2879 //===---------------------------------------------------------------------------
2880 /// Return a value (possibly void), from a function. Execution
2881 /// does not continue in this function any longer.
2882 ///
2883 class ReturnInst : public Instruction {
2884  ReturnInst(const ReturnInst &RI);
2885 
2886 private:
2887  // ReturnInst constructors:
2888  // ReturnInst() - 'ret void' instruction
2889  // ReturnInst( null) - 'ret void' instruction
2890  // ReturnInst(Value* X) - 'ret X' instruction
2891  // ReturnInst( null, Inst *I) - 'ret void' instruction, insert before I
2892  // ReturnInst(Value* X, Inst *I) - 'ret X' instruction, insert before I
2893  // ReturnInst( null, BB *B) - 'ret void' instruction, insert @ end of B
2894  // ReturnInst(Value* X, BB *B) - 'ret X' instruction, insert @ end of B
2895  //
2896  // NOTE: If the Value* passed is of type void then the constructor behaves as
2897  // if it was passed NULL.
2898  explicit ReturnInst(LLVMContext &C, Value *retVal = nullptr,
2899  Instruction *InsertBefore = nullptr);
2900  ReturnInst(LLVMContext &C, Value *retVal, BasicBlock *InsertAtEnd);
2901  explicit ReturnInst(LLVMContext &C, BasicBlock *InsertAtEnd);
2902 
2903 protected:
2904  // Note: Instruction needs to be a friend here to call cloneImpl.
2905  friend class Instruction;
2906 
2907  ReturnInst *cloneImpl() const;
2908 
2909 public:
2910  static ReturnInst* Create(LLVMContext &C, Value *retVal = nullptr,
2911  Instruction *InsertBefore = nullptr) {
2912  return new(!!retVal) ReturnInst(C, retVal, InsertBefore);
2913  }
2914 
2915  static ReturnInst* Create(LLVMContext &C, Value *retVal,
2916  BasicBlock *InsertAtEnd) {
2917  return new(!!retVal) ReturnInst(C, retVal, InsertAtEnd);
2918  }
2919 
2920  static ReturnInst* Create(LLVMContext &C, BasicBlock *InsertAtEnd) {
2921  return new(0) ReturnInst(C, InsertAtEnd);
2922  }
2923 
2924  /// Provide fast operand accessors
2926 
2927  /// Convenience accessor. Returns null if there is no return value.
2929  return getNumOperands() != 0 ? getOperand(0) : nullptr;
2930  }
2931 
2932  unsigned getNumSuccessors() const { return 0; }
2933 
2934  // Methods for support type inquiry through isa, cast, and dyn_cast:
2935  static bool classof(const Instruction *I) {
2936  return (I->getOpcode() == Instruction::Ret);
2937  }
2938  static bool classof(const Value *V) {
2939  return isa<Instruction>(V) && classof(cast<Instruction>(V));
2940  }
2941 
2942 private:
2943  BasicBlock *getSuccessor(unsigned idx) const {
2944  llvm_unreachable("ReturnInst has no successors!");
2945  }
2946 
2947  void setSuccessor(unsigned idx, BasicBlock *B) {
2948  llvm_unreachable("ReturnInst has no successors!");
2949  }
2950 };
2951 
2952 template <>
2953 struct OperandTraits<ReturnInst> : public VariadicOperandTraits<ReturnInst> {
2954 };
2955 
2957 
2958 //===----------------------------------------------------------------------===//
2959 // BranchInst Class
2960 //===----------------------------------------------------------------------===//
2961 
2962 //===---------------------------------------------------------------------------
2963 /// Conditional or Unconditional Branch instruction.
2964 ///
2965 class BranchInst : public Instruction {
2966  /// Ops list - Branches are strange. The operands are ordered:
2967  /// [Cond, FalseDest,] TrueDest. This makes some accessors faster because
2968  /// they don't have to check for cond/uncond branchness. These are mostly
2969  /// accessed relative from op_end().
2970  BranchInst(const BranchInst &BI);
2971  // BranchInst constructors (where {B, T, F} are blocks, and C is a condition):
2972  // BranchInst(BB *B) - 'br B'
2973  // BranchInst(BB* T, BB *F, Value *C) - 'br C, T, F'
2974  // BranchInst(BB* B, Inst *I) - 'br B' insert before I
2975  // BranchInst(BB* T, BB *F, Value *C, Inst *I) - 'br C, T, F', insert before I
2976  // BranchInst(BB* B, BB *I) - 'br B' insert at end
2977  // BranchInst(BB* T, BB *F, Value *C, BB *I) - 'br C, T, F', insert at end
2978  explicit BranchInst(BasicBlock *IfTrue, Instruction *InsertBefore = nullptr);
2979  BranchInst(BasicBlock *IfTrue, BasicBlock *IfFalse, Value *Cond,
2980  Instruction *InsertBefore = nullptr);
2981  BranchInst(BasicBlock *IfTrue, BasicBlock *InsertAtEnd);
2982  BranchInst(BasicBlock *IfTrue, BasicBlock *IfFalse, Value *Cond,
2983  BasicBlock *InsertAtEnd);
2984 
2985  void AssertOK();
2986 
2987 protected:
2988  // Note: Instruction needs to be a friend here to call cloneImpl.
2989  friend class Instruction;
2990 
2991  BranchInst *cloneImpl() const;
2992 
2993 public:
2994  /// Iterator type that casts an operand to a basic block.
2995  ///
2996  /// This only makes sense because the successors are stored as adjacent
2997  /// operands for branch instructions.
2999  : iterator_adaptor_base<succ_op_iterator, value_op_iterator,
3000  std::random_access_iterator_tag, BasicBlock *,
3001  ptrdiff_t, BasicBlock *, BasicBlock *> {
3002  explicit succ_op_iterator(value_op_iterator I) : iterator_adaptor_base(I) {}
3003 
3004  BasicBlock *operator*() const { return cast<BasicBlock>(*I); }
3005  BasicBlock *operator->() const { return operator*(); }
3006  };
3007 
3008  /// The const version of `succ_op_iterator`.
3010  : iterator_adaptor_base<const_succ_op_iterator, const_value_op_iterator,
3011  std::random_access_iterator_tag,
3012  const BasicBlock *, ptrdiff_t, const BasicBlock *,
3013  const BasicBlock *> {
3015  : iterator_adaptor_base(I) {}
3016 
3017  const BasicBlock *operator*() const { return cast<BasicBlock>(*I); }
3018  const BasicBlock *operator->() const { return operator*(); }
3019  };
3020 
3021  static BranchInst *Create(BasicBlock *IfTrue,
3022  Instruction *InsertBefore = nullptr) {
3023  return new(1) BranchInst(IfTrue, InsertBefore);
3024  }
3025 
3026  static BranchInst *Create(BasicBlock *IfTrue, BasicBlock *IfFalse,
3027  Value *Cond, Instruction *InsertBefore = nullptr) {
3028  return new(3) BranchInst(IfTrue, IfFalse, Cond, InsertBefore);
3029  }
3030 
3031  static BranchInst *Create(BasicBlock *IfTrue, BasicBlock *InsertAtEnd) {
3032  return new(1) BranchInst(IfTrue, InsertAtEnd);
3033  }
3034 
3035  static BranchInst *Create(BasicBlock *IfTrue, BasicBlock *IfFalse,
3036  Value *Cond, BasicBlock *InsertAtEnd) {
3037  return new(3) BranchInst(IfTrue, IfFalse, Cond, InsertAtEnd);
3038  }
3039 
3040  /// Transparently provide more efficient getOperand methods.
3042 
3043  bool isUnconditional() const { return getNumOperands() == 1; }
3044  bool isConditional() const { return getNumOperands() == 3; }
3045 
3046  Value *getCondition() const {
3047  assert(isConditional() && "Cannot get condition of an uncond branch!");
3048  return Op<-3>();
3049  }
3050 
3051  void setCondition(Value *V) {
3052  assert(isConditional() && "Cannot set condition of unconditional branch!");
3053  Op<-3>() = V;
3054  }
3055 
3056  unsigned getNumSuccessors() const { return 1+isConditional(); }
3057 
3058  BasicBlock *getSuccessor(unsigned i) const {
3059  assert(i < getNumSuccessors() && "Successor # out of range for Branch!");
3060  return cast_or_null<BasicBlock>((&Op<-1>() - i)->get());
3061  }
3062 
3063  void setSuccessor(unsigned idx, BasicBlock *NewSucc) {
3064  assert(idx < getNumSuccessors() && "Successor # out of range for Branch!");
3065  *(&Op<-1>() - idx) = NewSucc;
3066  }
3067 
3068  /// Swap the successors of this branch instruction.
3069  ///
3070  /// Swaps the successors of the branch instruction. This also swaps any
3071  /// branch weight metadata associated with the instruction so that it
3072  /// continues to map correctly to each operand.
3073  void swapSuccessors();
3074 
3076  return make_range(
3077  succ_op_iterator(std::next(value_op_begin(), isConditional() ? 1 : 0)),
3079  }
3080 
3083  std::next(value_op_begin(), isConditional() ? 1 : 0)),
3085  }
3086 
3087  // Methods for support type inquiry through isa, cast, and dyn_cast:
3088  static bool classof(const Instruction *I) {
3089  return (I->getOpcode() == Instruction::Br);
3090  }
3091  static bool classof(const Value *V) {
3092  return isa<Instruction>(V) && classof(cast<Instruction>(V));
3093  }
3094 };
3095 
3096 template <>
3097 struct OperandTraits<BranchInst> : public VariadicOperandTraits<BranchInst, 1> {
3098 };
3099 
3101 
3102 //===----------------------------------------------------------------------===//
3103 // SwitchInst Class
3104 //===----------------------------------------------------------------------===//
3105 
3106 //===---------------------------------------------------------------------------
3107 /// Multiway switch
3108 ///
3109 class SwitchInst : public Instruction {
3110  unsigned ReservedSpace;
3111 
3112  // Operand[0] = Value to switch on
3113  // Operand[1] = Default basic block destination
3114  // Operand[2n ] = Value to match
3115  // Operand[2n+1] = BasicBlock to go to on match
3116  SwitchInst(const SwitchInst &SI);
3117 
3118  /// Create a new switch instruction, specifying a value to switch on and a
3119  /// default destination. The number of additional cases can be specified here
3120  /// to make memory allocation more efficient. This constructor can also
3121  /// auto-insert before another instruction.
3122  SwitchInst(Value *Value, BasicBlock *Default, unsigned NumCases,
3123  Instruction *InsertBefore);
3124 
3125  /// Create a new switch instruction, specifying a value to switch on and a
3126  /// default destination. The number of additional cases can be specified here
3127  /// to make memory allocation more efficient. This constructor also
3128  /// auto-inserts at the end of the specified BasicBlock.
3129  SwitchInst(Value *Value, BasicBlock *Default, unsigned NumCases,
3130  BasicBlock *InsertAtEnd);
3131 
3132  // allocate space for exactly zero operands
3133  void *operator new(size_t s) {
3134  return User::operator new(s);
3135  }
3136 
3137  void init(Value *Value, BasicBlock *Default, unsigned NumReserved);
3138  void growOperands();
3139 
3140 protected:
3141  // Note: Instruction needs to be a friend here to call cloneImpl.
3142  friend class Instruction;
3143 
3144  SwitchInst *cloneImpl() const;
3145 
3146 public:
3147  // -2
3148  static const unsigned DefaultPseudoIndex = static_cast<unsigned>(~0L-1);
3149 
3150  template <typename CaseHandleT> class CaseIteratorImpl;
3151 
3152  /// A handle to a particular switch case. It exposes a convenient interface
3153  /// to both the case value and the successor block.
3154  ///
3155  /// We define this as a template and instantiate it to form both a const and
3156  /// non-const handle.
3157  template <typename SwitchInstT, typename ConstantIntT, typename BasicBlockT>
3159  // Directly befriend both const and non-const iterators.
3160  friend class SwitchInst::CaseIteratorImpl<
3161  CaseHandleImpl<SwitchInstT, ConstantIntT, BasicBlockT>>;
3162 
3163  protected:
3164  // Expose the switch type we're parameterized with to the iterator.
3165  using SwitchInstType = SwitchInstT;
3166 
3167  SwitchInstT *SI;
3169 
3170  CaseHandleImpl() = default;
3171  CaseHandleImpl(SwitchInstT *SI, ptrdiff_t Index) : SI(SI), Index(Index) {}
3172 
3173  public:
3174  /// Resolves case value for current case.
3175  ConstantIntT *getCaseValue() const {
3176  assert((unsigned)Index < SI->getNumCases() &&
3177  "Index out the number of cases.");
3178  return reinterpret_cast<ConstantIntT *>(SI->getOperand(2 + Index * 2));
3179  }
3180 
3181  /// Resolves successor for current case.
3182  BasicBlockT *getCaseSuccessor() const {
3183  assert(((unsigned)Index < SI->getNumCases() ||
3184  (unsigned)Index == DefaultPseudoIndex) &&
3185  "Index out the number of cases.");
3186  return SI->getSuccessor(getSuccessorIndex());
3187  }
3188 
3189  /// Returns number of current case.
3190  unsigned getCaseIndex() const { return Index; }
3191 
3192  /// Returns successor index for current case successor.
3193  unsigned getSuccessorIndex() const {
3194  assert(((unsigned)Index == DefaultPseudoIndex ||
3195  (unsigned)Index < SI->getNumCases()) &&
3196  "Index out the number of cases.");
3197  return (unsigned)Index != DefaultPseudoIndex ? Index + 1 : 0;
3198  }
3199 
3200  bool operator==(const CaseHandleImpl &RHS) const {
3201  assert(SI == RHS.SI && "Incompatible operators.");
3202  return Index == RHS.Index;
3203  }
3204  };
3205 
3206  using ConstCaseHandle =
3208 
3210  : public CaseHandleImpl<SwitchInst, ConstantInt, BasicBlock> {
3212 
3213  public:
3215 
3216  /// Sets the new value for current case.
3218  assert((unsigned)Index < SI->getNumCases() &&
3219  "Index out the number of cases.");
3220  SI->setOperand(2 + Index*2, reinterpret_cast<Value*>(V));
3221  }
3222 
3223  /// Sets the new successor for current case.
3225  SI->setSuccessor(getSuccessorIndex(), S);
3226  }
3227  };
3228 
3229  template <typename CaseHandleT>
3230  class CaseIteratorImpl
3231  : public iterator_facade_base<CaseIteratorImpl<CaseHandleT>,
3232  std::random_access_iterator_tag,
3233  CaseHandleT> {
3234  using SwitchInstT = typename CaseHandleT::SwitchInstType;
3235 
3236  CaseHandleT Case;
3237 
3238  public:
3239  /// Default constructed iterator is in an invalid state until assigned to
3240  /// a case for a particular switch.
3241  CaseIteratorImpl() = default;
3242 
3243  /// Initializes case iterator for given SwitchInst and for given
3244  /// case number.
3245  CaseIteratorImpl(SwitchInstT *SI, unsigned CaseNum) : Case(SI, CaseNum) {}
3246 
3247  /// Initializes case iterator for given SwitchInst and for given
3248  /// successor index.
3249  static CaseIteratorImpl fromSuccessorIndex(SwitchInstT *SI,
3250  unsigned SuccessorIndex) {
3251  assert(SuccessorIndex < SI->getNumSuccessors() &&
3252  "Successor index # out of range!");
3253  return SuccessorIndex != 0 ? CaseIteratorImpl(SI, SuccessorIndex - 1)
3254  : CaseIteratorImpl(SI, DefaultPseudoIndex);
3255  }
3256 
3257  /// Support converting to the const variant. This will be a no-op for const
3258  /// variant.
3260  return CaseIteratorImpl<ConstCaseHandle>(Case.SI, Case.Index);
3261  }
3262 
3264  // Check index correctness after addition.
3265  // Note: Index == getNumCases() means end().
3266  assert(Case.Index + N >= 0 &&
3267  (unsigned)(Case.Index + N) <= Case.SI->getNumCases() &&
3268  "Case.Index out the number of cases.");
3269  Case.Index += N;
3270  return *this;
3271  }
3273  // Check index correctness after subtraction.
3274  // Note: Case.Index == getNumCases() means end().
3275  assert(Case.Index - N >= 0 &&
3276  (unsigned)(Case.Index - N) <= Case.SI->getNumCases() &&
3277  "Case.Index out the number of cases.");
3278  Case.Index -= N;
3279  return *this;
3280  }
3282  assert(Case.SI == RHS.Case.SI && "Incompatible operators.");
3283  return Case.Index - RHS.Case.Index;
3284  }
3285  bool operator==(const CaseIteratorImpl &RHS) const {
3286  return Case == RHS.Case;
3287  }
3288  bool operator<(const CaseIteratorImpl &RHS) const {
3289  assert(Case.SI == RHS.Case.SI && "Incompatible operators.");
3290  return Case.Index < RHS.Case.Index;
3291  }
3292  CaseHandleT &operator*() { return Case; }
3293  const CaseHandleT &operator*() const { return Case; }
3294  };
3295 
3298 
3299  static SwitchInst *Create(Value *Value, BasicBlock *Default,
3300  unsigned NumCases,
3301  Instruction *InsertBefore = nullptr) {
3302  return new SwitchInst(Value, Default, NumCases, InsertBefore);
3303  }
3304 
3305  static SwitchInst *Create(Value *Value, BasicBlock *Default,
3306  unsigned NumCases, BasicBlock *InsertAtEnd) {
3307  return new SwitchInst(Value, Default, NumCases, InsertAtEnd);
3308  }
3309 
3310  /// Provide fast operand accessors
3312 
3313  // Accessor Methods for Switch stmt
3314  Value *getCondition() const { return getOperand(0); }
3315  void setCondition(Value *V) { setOperand(0, V); }
3316 
3318  return cast<BasicBlock>(getOperand(1));
3319  }
3320 
3321  void setDefaultDest(BasicBlock *DefaultCase) {
3322  setOperand(1, reinterpret_cast<Value*>(DefaultCase));
3323  }
3324 
3325  /// Return the number of 'cases' in this switch instruction, excluding the
3326  /// default case.
3327  unsigned getNumCases() const {
3328  return getNumOperands()/2 - 1;
3329  }
3330 
3331  /// Returns a read/write iterator that points to the first case in the
3332  /// SwitchInst.
3334  return CaseIt(this, 0);
3335  }
3336 
3337  /// Returns a read-only iterator that points to the first case in the
3338  /// SwitchInst.
3340  return ConstCaseIt(this, 0);
3341  }
3342 
3343  /// Returns a read/write iterator that points one past the last in the
3344  /// SwitchInst.
3346  return CaseIt(this, getNumCases());
3347  }
3348 
3349  /// Returns a read-only iterator that points one past the last in the
3350  /// SwitchInst.
3352  return ConstCaseIt(this, getNumCases());
3353  }
3354 
3355  /// Iteration adapter for range-for loops.
3357  return make_range(case_begin(), case_end());
3358  }
3359 
3360  /// Constant iteration adapter for range-for loops.
3362  return make_range(case_begin(), case_end());
3363  }
3364 
3365  /// Returns an iterator that points to the default case.
3366  /// Note: this iterator allows to resolve successor only. Attempt
3367  /// to resolve case value causes an assertion.
3368  /// Also note, that increment and decrement also causes an assertion and
3369  /// makes iterator invalid.
3371  return CaseIt(this, DefaultPseudoIndex);
3372  }
3374  return ConstCaseIt(this, DefaultPseudoIndex);
3375  }
3376 
3377  /// Search all of the case values for the specified constant. If it is
3378  /// explicitly handled, return the case iterator of it, otherwise return
3379  /// default case iterator to indicate that it is handled by the default
3380  /// handler.
3383  cases(), [C](CaseHandle &Case) { return Case.getCaseValue() == C; });
3384  if (I != case_end())
3385  return I;
3386 
3387  return case_default();
3388  }
3390  ConstCaseIt I = llvm::find_if(cases(), [C](ConstCaseHandle &Case) {
3391  return Case.getCaseValue() == C;
3392  });
3393  if (I != case_end())
3394  return I;
3395 
3396  return case_default();
3397  }
3398 
3399  /// Finds the unique case value for a given successor. Returns null if the
3400  /// successor is not found, not unique, or is the default case.
3402  if (BB == getDefaultDest())
3403  return nullptr;
3404 
3405  ConstantInt *CI = nullptr;
3406  for (auto Case : cases()) {
3407  if (Case.getCaseSuccessor() != BB)
3408  continue;
3409 
3410  if (CI)
3411  return nullptr; // Multiple cases lead to BB.
3412 
3413  CI = Case.getCaseValue();
3414  }
3415 
3416  return CI;
3417  }
3418 
3419  /// Add an entry to the switch instruction.
3420  /// Note:
3421  /// This action invalidates case_end(). Old case_end() iterator will
3422  /// point to the added case.
3423  void addCase(ConstantInt *OnVal, BasicBlock *Dest);
3424 
3425  /// This method removes the specified case and its successor from the switch
3426  /// instruction. Note that this operation may reorder the remaining cases at
3427  /// index idx and above.
3428  /// Note:
3429  /// This action invalidates iterators for all cases following the one removed,
3430  /// including the case_end() iterator. It returns an iterator for the next
3431  /// case.
3432  CaseIt removeCase(CaseIt I);
3433 
3434  unsigned getNumSuccessors() const { return getNumOperands()/2; }
3435  BasicBlock *getSuccessor(unsigned idx) const {
3436  assert(idx < getNumSuccessors() &&"Successor idx out of range for switch!");
3437  return cast<BasicBlock>(getOperand(idx*2+1));
3438  }
3439  void setSuccessor(unsigned idx, BasicBlock *NewSucc) {
3440  assert(idx < getNumSuccessors() && "Successor # out of range for switch!");
3441  setOperand(idx * 2 + 1, NewSucc);
3442  }
3443 
3444  // Methods for support type inquiry through isa, cast, and dyn_cast:
3445  static bool classof(const Instruction *I) {
3446  return I->getOpcode() == Instruction::Switch;
3447  }
3448  static bool classof(const Value *V) {
3449  return isa<Instruction>(V) && classof(cast<Instruction>(V));
3450  }
3451 };
3452 
3453 template <>
3455 };
3456 
3457 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(SwitchInst, Value)
3458 
3459 //===----------------------------------------------------------------------===//
3460 // IndirectBrInst Class
3461 //===----------------------------------------------------------------------===//
3462 
3463 //===---------------------------------------------------------------------------
3464 /// Indirect Branch Instruction.
3465 ///
3466 class IndirectBrInst : public Instruction {
3467  unsigned ReservedSpace;
3468 
3469  // Operand[0] = Address to jump to
3470  // Operand[n+1] = n-th destination
3471  IndirectBrInst(const IndirectBrInst &IBI);
3472 
3473  /// Create a new indirectbr instruction, specifying an
3474  /// Address to jump to. The number of expected destinations can be specified
3475  /// here to make memory allocation more efficient. This constructor can also
3476  /// autoinsert before another instruction.
3477  IndirectBrInst(Value *Address, unsigned NumDests, Instruction *InsertBefore);
3478 
3479  /// Create a new indirectbr instruction, specifying an
3480  /// Address to jump to. The number of expected destinations can be specified
3481  /// here to make memory allocation more efficient. This constructor also
3482  /// autoinserts at the end of the specified BasicBlock.
3483  IndirectBrInst(Value *Address, unsigned NumDests, BasicBlock *InsertAtEnd);
3484 
3485  // allocate space for exactly zero operands
3486  void *operator new(size_t s) {
3487  return User::operator new(s);
3488  }
3489 
3490  void init(Value *Address, unsigned NumDests);
3491  void growOperands();
3492 
3493 protected:
3494  // Note: Instruction needs to be a friend here to call cloneImpl.
3495  friend class Instruction;
3496 
3497  IndirectBrInst *cloneImpl() const;
3498 
3499 public:
3500  /// Iterator type that casts an operand to a basic block.
3501  ///
3502  /// This only makes sense because the successors are stored as adjacent
3503  /// operands for indirectbr instructions.
3505  : iterator_adaptor_base<succ_op_iterator, value_op_iterator,
3506  std::random_access_iterator_tag, BasicBlock *,
3507  ptrdiff_t, BasicBlock *, BasicBlock *> {
3509 
3510  BasicBlock *operator*() const { return cast<BasicBlock>(*I); }
3511  BasicBlock *operator->() const { return operator*(); }
3512  };
3513 
3514  /// The const version of `succ_op_iterator`.
3516  : iterator_adaptor_base<const_succ_op_iterator, const_value_op_iterator,
3517  std::random_access_iterator_tag,
3518  const BasicBlock *, ptrdiff_t, const BasicBlock *,
3519  const BasicBlock *> {
3521  : iterator_adaptor_base(I) {}
3522 
3523  const BasicBlock *operator*() const { return cast<BasicBlock>(*I); }
3524  const BasicBlock *operator->() const { return operator*(); }
3525  };
3526 
3527  static IndirectBrInst *Create(Value *Address, unsigned NumDests,
3528  Instruction *InsertBefore = nullptr) {
3529  return new IndirectBrInst(Address, NumDests, InsertBefore);
3530  }
3531 
3532  static IndirectBrInst *Create(Value *Address, unsigned NumDests,
3533  BasicBlock *InsertAtEnd) {
3534  return new IndirectBrInst(Address, NumDests, InsertAtEnd);
3535  }
3536 
3537  /// Provide fast operand accessors.
3539 
3540  // Accessor Methods for IndirectBrInst instruction.
3541  Value *getAddress() { return getOperand(0); }
3542  const Value *getAddress() const { return getOperand(0); }
3543  void setAddress(Value *V) { setOperand(0, V); }
3544 
3545  /// return the number of possible destinations in this
3546  /// indirectbr instruction.
3547  unsigned getNumDestinations() const { return getNumOperands()-1; }
3548 
3549  /// Return the specified destination.
3550  BasicBlock *getDestination(unsigned i) { return getSuccessor(i); }
3551  const BasicBlock *getDestination(unsigned i) const { return getSuccessor(i); }
3552 
3553  /// Add a destination.
3554  ///
3555  void addDestination(BasicBlock *Dest);
3556 
3557  /// This method removes the specified successor from the
3558  /// indirectbr instruction.
3559  void removeDestination(unsigned i);
3560 
3561  unsigned getNumSuccessors() const { return getNumOperands()-1; }
3562  BasicBlock *getSuccessor(unsigned i) const {
3563  return cast<BasicBlock>(getOperand(i+1));
3564  }
3565  void setSuccessor(unsigned i, BasicBlock *NewSucc) {
3566  setOperand(i + 1, NewSucc);
3567  }
3568 
3570  return make_range(succ_op_iterator(std::next(value_op_begin())),
3572  }
3573 
3575  return make_range(const_succ_op_iterator(std::next(value_op_begin())),
3577  }
3578 
3579  // Methods for support type inquiry through isa, cast, and dyn_cast:
3580  static bool classof(const Instruction *I) {
3581  return I->getOpcode() == Instruction::IndirectBr;
3582  }
3583  static bool classof(const Value *V) {
3584  return isa<Instruction>(V) && classof(cast<Instruction>(V));
3585  }
3586 };
3587 
3588 template <>
3590 };
3591 
3592 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(IndirectBrInst, Value)
3593 
3594 //===----------------------------------------------------------------------===//
3595 // InvokeInst Class
3596 //===----------------------------------------------------------------------===//
3597 
3598 /// Invoke instruction. The SubclassData field is used to hold the
3599 /// calling convention of the call.
3600 ///
3601 class InvokeInst : public CallBase {
3602  /// The number of operands for this call beyond the called function,
3603  /// arguments, and operand bundles.
3604  static constexpr int NumExtraOperands = 2;
3605 
3606  /// The index from the end of the operand array to the normal destination.
3607  static constexpr int NormalDestOpEndIdx = -3;
3608 
3609  /// The index from the end of the operand array to the unwind destination.
3610  static constexpr int UnwindDestOpEndIdx = -2;
3611 
3612  InvokeInst(const InvokeInst &BI);
3613 
3614  /// Construct an InvokeInst given a range of arguments.
3615  ///
3616  /// Construct an InvokeInst from a range of arguments
3617  inline InvokeInst(FunctionType *Ty, Value *Func, BasicBlock *IfNormal,
3618  BasicBlock *IfException, ArrayRef<Value *> Args,
3619  ArrayRef<OperandBundleDef> Bundles, int NumOperands,
3620  const Twine &NameStr, Instruction *InsertBefore);
3621 
3622  inline InvokeInst(FunctionType *Ty, Value *Func, BasicBlock *IfNormal,
3623  BasicBlock *IfException, ArrayRef<Value *> Args,
3624  ArrayRef<OperandBundleDef> Bundles, int NumOperands,
3625  const Twine &NameStr, BasicBlock *InsertAtEnd);
3626 
3627  void init(FunctionType *Ty, Value *Func, BasicBlock *IfNormal,
3628  BasicBlock *IfException, ArrayRef<Value *> Args,
3629  ArrayRef<OperandBundleDef> Bundles, const Twine &NameStr);
3630 
3631  /// Compute the number of operands to allocate.
3632  static int ComputeNumOperands(int NumArgs, int NumBundleInputs = 0) {
3633  // We need one operand for the called function, plus our extra operands and
3634  // the input operand counts provided.
3635  return 1 + NumExtraOperands + NumArgs + NumBundleInputs;
3636  }
3637 
3638 protected:
3639  // Note: Instruction needs to be a friend here to call cloneImpl.
3640  friend class Instruction;
3641 
3642  InvokeInst *cloneImpl() const;
3643 
3644 public:
3645  static InvokeInst *Create(FunctionType *Ty, Value *Func, BasicBlock *IfNormal,
3646  BasicBlock *IfException, ArrayRef<Value *> Args,
3647  const Twine &NameStr,
3648  Instruction *InsertBefore = nullptr) {
3649  int NumOperands = ComputeNumOperands(Args.size());
3650  return new (NumOperands)
3651  InvokeInst(Ty, Func, IfNormal, IfException, Args, None, NumOperands,
3652  NameStr, InsertBefore);
3653  }
3654 
3655  static InvokeInst *Create(FunctionType *Ty, Value *Func, BasicBlock *IfNormal,
3656  BasicBlock *IfException, ArrayRef<Value *> Args,
3657  ArrayRef<OperandBundleDef> Bundles = None,
3658  const Twine &NameStr = "",
3659  Instruction *InsertBefore = nullptr) {
3660  int NumOperands =
3661  ComputeNumOperands(Args.size(), CountBundleInputs(Bundles));
3662  unsigned DescriptorBytes = Bundles.size() * sizeof(BundleOpInfo);
3663 
3664  return new (NumOperands, DescriptorBytes)
3665  InvokeInst(Ty, Func, IfNormal, IfException, Args, Bundles, NumOperands,
3666  NameStr, InsertBefore);
3667  }
3668 
3669  static InvokeInst *Create(FunctionType *Ty, Value *Func, BasicBlock *IfNormal,
3670  BasicBlock *IfException, ArrayRef<Value *> Args,
3671  const Twine &NameStr, BasicBlock *InsertAtEnd) {
3672  int NumOperands = ComputeNumOperands(Args.size());
3673  return new (NumOperands)
3674  InvokeInst(Ty, Func, IfNormal, IfException, Args, None, NumOperands,
3675  NameStr, InsertAtEnd);
3676  }
3677 
3678  static InvokeInst *Create(FunctionType *Ty, Value *Func, BasicBlock *IfNormal,
3679  BasicBlock *IfException, ArrayRef<Value *> Args,
3681  const Twine &NameStr, BasicBlock *InsertAtEnd) {
3682  int NumOperands =
3683  ComputeNumOperands(Args.size(), CountBundleInputs(Bundles));
3684  unsigned DescriptorBytes = Bundles.size() * sizeof(BundleOpInfo);
3685 
3686  return new (NumOperands, DescriptorBytes)
3687  InvokeInst(Ty, Func, IfNormal, IfException, Args, Bundles, NumOperands,
3688  NameStr, InsertAtEnd);
3689  }
3690 
3691  static InvokeInst *Create(Function *Func, BasicBlock *IfNormal,
3692  BasicBlock *IfException, ArrayRef<Value *> Args,
3693  const Twine &NameStr,
3694  Instruction *InsertBefore = nullptr) {
3695  return Create(Func->getFunctionType(), Func, IfNormal, IfException, Args,
3696  None, NameStr, InsertBefore);
3697  }
3698 
3699  static InvokeInst *Create(Function *Func, BasicBlock *IfNormal,
3700  BasicBlock *IfException, ArrayRef<Value *> Args,
3701  ArrayRef<OperandBundleDef> Bundles = None,
3702  const Twine &NameStr = "",
3703  Instruction *InsertBefore = nullptr) {
3704  return Create(Func->getFunctionType(), Func, IfNormal, IfException, Args,
3705  Bundles, NameStr, InsertBefore);
3706  }
3707 
3708  static InvokeInst *Create(Function *Func, BasicBlock *IfNormal,
3709  BasicBlock *IfException, ArrayRef<Value *> Args,
3710  const Twine &NameStr, BasicBlock *InsertAtEnd) {
3711  return Create(Func->getFunctionType(), Func, IfNormal, IfException, Args,
3712  NameStr, InsertAtEnd);
3713  }
3714 
3715  static InvokeInst *Create(Function *Func, BasicBlock *IfNormal,
3716  BasicBlock *IfException, ArrayRef<Value *> Args,
3718  const Twine &NameStr, BasicBlock *InsertAtEnd) {
3719  return Create(Func->getFunctionType(), Func, IfNormal, IfException, Args,
3720  Bundles, NameStr, InsertAtEnd);
3721  }
3722 
3723  // Deprecated [opaque pointer types]
3724  static InvokeInst *Create(Value *Func, BasicBlock *IfNormal,
3725  BasicBlock *IfException, ArrayRef<Value *> Args,
3726  const Twine &NameStr,
3727  Instruction *InsertBefore = nullptr) {
3728  return Create(cast<FunctionType>(
3729  cast<PointerType>(Func->getType())->getElementType()),
3730  Func, IfNormal, IfException, Args, None, NameStr,
3731  InsertBefore);
3732  }
3733 
3734  // Deprecated [opaque pointer types]
3735  static InvokeInst *Create(Value *Func, BasicBlock *IfNormal,
3736  BasicBlock *IfException, ArrayRef<Value *> Args,
3737  ArrayRef<OperandBundleDef> Bundles = None,
3738  const Twine &NameStr = "",
3739  Instruction *InsertBefore = nullptr) {
3740  return Create(cast<FunctionType>(
3741  cast<PointerType>(Func->getType())->getElementType()),
3742  Func, IfNormal, IfException, Args, Bundles, NameStr,
3743  InsertBefore);
3744  }
3745 
3746  // Deprecated [opaque pointer types]
3747  static InvokeInst *Create(Value *Func, BasicBlock *IfNormal,
3748  BasicBlock *IfException, ArrayRef<Value *> Args,
3749  const Twine &NameStr, BasicBlock *InsertAtEnd) {
3750  return Create(cast<FunctionType>(
3751  cast<PointerType>(Func->getType())->getElementType()),
3752  Func, IfNormal, IfException, Args, NameStr, InsertAtEnd);
3753  }
3754 
3755  // Deprecated [opaque pointer types]
3756  static InvokeInst *Create(Value *Func, BasicBlock *IfNormal,
3757  BasicBlock *IfException, ArrayRef<Value *> Args,
3759  const Twine &NameStr, BasicBlock *InsertAtEnd) {
3760  return Create(cast<FunctionType>(
3761  cast<PointerType>(Func->getType())->getElementType()),
3762  Func, IfNormal, IfException, Args, Bundles, NameStr,
3763  InsertAtEnd);
3764  }
3765 
3766  /// Create a clone of \p II with a different set of operand bundles and
3767  /// insert it before \p InsertPt.
3768  ///
3769  /// The returned invoke instruction is identical to \p II in every way except
3770  /// that the operand bundles for the new instruction are set to the operand
3771  /// bundles in \p Bundles.
3772  static InvokeInst *Create(InvokeInst *II, ArrayRef<OperandBundleDef> Bundles,
3773  Instruction *InsertPt = nullptr);
3774 
3775  /// Determine if the call should not perform indirect branch tracking.
3776  bool doesNoCfCheck() const { return hasFnAttr(Attribute::NoCfCheck); }
3777 
3778  /// Determine if the call cannot unwind.
3779  bool doesNotThrow() const { return hasFnAttr(Attribute::NoUnwind); }
3782  }
3783 
3784  // get*Dest - Return the destination basic blocks...
3786  return cast<BasicBlock>(Op<NormalDestOpEndIdx>());
3787  }
3789  return cast<BasicBlock>(Op<UnwindDestOpEndIdx>());
3790  }
3792  Op<NormalDestOpEndIdx>() = reinterpret_cast<Value *>(B);
3793  }
3795  Op<UnwindDestOpEndIdx>() = reinterpret_cast<Value *>(B);
3796  }
3797 
3798  /// Get the landingpad instruction from the landing pad
3799  /// block (the unwind destination).
3800  LandingPadInst *getLandingPadInst() const;
3801 
3802  BasicBlock *getSuccessor(unsigned i) const {
3803  assert(i < 2 && "Successor # out of range for invoke!");
3804  return i == 0 ? getNormalDest() : getUnwindDest();
3805  }
3806 
3807  void setSuccessor(unsigned i, BasicBlock *NewSucc) {
3808  assert(i < 2 && "Successor # out of range for invoke!");
3809  if (i == 0)
3810  setNormalDest(NewSucc);
3811  else
3812  setUnwindDest(NewSucc);
3813  }
3814 
3815  unsigned getNumSuccessors() const { return 2; }
3816 
3817  // Methods for support type inquiry through isa, cast, and dyn_cast:
3818  static bool classof(const Instruction *I) {
3819  return (I->getOpcode() == Instruction::Invoke);
3820  }
3821  static bool classof(const Value *V) {
3822  return isa<Instruction>(V) && classof(cast<Instruction>(V));
3823  }
3824 
3825 private:
3826 
3827  // Shadow Instruction::setInstructionSubclassData with a private forwarding
3828  // method so that subclasses cannot accidentally use it.
3829  void setInstructionSubclassData(unsigned short D) {
3831  }
3832 };
3833 
3834 InvokeInst::InvokeInst(FunctionType *Ty, Value *Func, BasicBlock *IfNormal,
3835  BasicBlock *IfException, ArrayRef<Value *> Args,
3836  ArrayRef<OperandBundleDef> Bundles, int NumOperands,
3837  const Twine &NameStr, Instruction *InsertBefore)
3838  : CallBase(Ty->getReturnType(), Instruction::Invoke,
3839  OperandTraits<CallBase>::op_end(this) - NumOperands, NumOperands,
3840  InsertBefore) {
3841  init(Ty, Func, IfNormal, IfException, Args, Bundles, NameStr);
3842 }
3843 
3844 InvokeInst::InvokeInst(FunctionType *Ty, Value *Func, BasicBlock *IfNormal,
3845  BasicBlock *IfException, ArrayRef<Value *> Args,
3846  ArrayRef<OperandBundleDef> Bundles, int NumOperands,
3847  const Twine &NameStr, BasicBlock *InsertAtEnd)
3848  : CallBase(Ty->getReturnType(), Instruction::Invoke,
3849  OperandTraits<CallBase>::op_end(this) - NumOperands, NumOperands,
3850  InsertAtEnd) {
3851  init(Ty, Func, IfNormal, IfException, Args, Bundles, NameStr);
3852 }
3853 
3854 //===----------------------------------------------------------------------===//
3855 // ResumeInst Class
3856 //===----------------------------------------------------------------------===//
3857 
3858 //===---------------------------------------------------------------------------
3859 /// Resume the propagation of an exception.
3860 ///
3861 class ResumeInst : public Instruction {
3862  ResumeInst(const ResumeInst &RI);
3863 
3864  explicit ResumeInst(Value *Exn, Instruction *InsertBefore=nullptr);
3865  ResumeInst(Value *Exn, BasicBlock *InsertAtEnd);
3866 
3867 protected:
3868  // Note: Instruction needs to be a friend here to call cloneImpl.
3869  friend class Instruction;
3870 
3871  ResumeInst *cloneImpl() const;
3872 
3873 public:
3874  static ResumeInst *Create(Value *Exn, Instruction *InsertBefore = nullptr) {
3875  return new(1) ResumeInst(Exn, InsertBefore);
3876  }
3877 
3878  static ResumeInst *Create(Value *Exn, BasicBlock *InsertAtEnd) {
3879  return new(1) ResumeInst(Exn, InsertAtEnd);
3880  }
3881 
3882  /// Provide fast operand accessors
3884 
3885  /// Convenience accessor.
3886  Value *getValue() const { return Op<0>(); }
3887 
3888  unsigned getNumSuccessors() const { return 0; }
3889 
3890  // Methods for support type inquiry through isa, cast, and dyn_cast:
3891  static bool classof(const Instruction *I) {
3892  return I->getOpcode() == Instruction::Resume;
3893  }
3894  static bool classof(const Value *V) {
3895  return isa<Instruction>(V) && classof(cast<Instruction>(V));
3896  }
3897 
3898 private:
3899  BasicBlock *getSuccessor(unsigned idx) const {
3900  llvm_unreachable("ResumeInst has no successors!");
3901  }
3902 
3903  void setSuccessor(unsigned idx, BasicBlock *NewSucc) {
3904  llvm_unreachable("ResumeInst has no successors!");
3905  }
3906 };
3907 
3908 template <>
3910  public FixedNumOperandTraits<ResumeInst, 1> {
3911 };
3912 
3913 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(ResumeInst, Value)
3914 
3915 //===----------------------------------------------------------------------===//
3916 // CatchSwitchInst Class
3917 //===----------------------------------------------------------------------===//
3919  /// The number of operands actually allocated. NumOperands is
3920  /// the number actually in use.
3921  unsigned ReservedSpace;
3922 
3923  // Operand[0] = Outer scope
3924  // Operand[1] = Unwind block destination
3925  // Operand[n] = BasicBlock to go to on match
3926  CatchSwitchInst(const CatchSwitchInst &CSI);
3927 
3928  /// Create a new switch instruction, specifying a
3929  /// default destination. The number of additional handlers can be specified
3930  /// here to make memory allocation more efficient.
3931  /// This constructor can also autoinsert before another instruction.
3932  CatchSwitchInst(Value *ParentPad, BasicBlock *UnwindDest,
3933  unsigned NumHandlers, const Twine &NameStr,
3934  Instruction *InsertBefore);
3935 
3936  /// Create a new switch instruction, specifying a
3937  /// default destination. The number of additional handlers can be specified
3938  /// here to make memory allocation more efficient.
3939  /// This constructor also autoinserts at the end of the specified BasicBlock.
3940  CatchSwitchInst(Value *ParentPad, BasicBlock *UnwindDest,
3941  unsigned NumHandlers, const Twine &NameStr,
3942  BasicBlock *InsertAtEnd);
3943 
3944  // allocate space for exactly zero operands
3945  void *operator new(size_t s) { return User::operator new(s); }
3946 
3947  void init(Value *ParentPad, BasicBlock *UnwindDest, unsigned NumReserved);
3948  void growOperands(unsigned Size);
3949 
3950 protected:
3951  // Note: Instruction needs to be a friend here to call cloneImpl.
3952  friend class Instruction;
3953 
3954  CatchSwitchInst *cloneImpl() const;
3955 
3956 public:
3957  static CatchSwitchInst *Create(Value *ParentPad, BasicBlock *UnwindDest,
3958  unsigned NumHandlers,
3959  const Twine &NameStr = "",
3960  Instruction *InsertBefore = nullptr) {
3961  return new CatchSwitchInst(ParentPad, UnwindDest, NumHandlers, NameStr,
3962  InsertBefore);
3963  }
3964 
3965  static CatchSwitchInst *Create(Value *ParentPad, BasicBlock *UnwindDest,
3966  unsigned NumHandlers, const Twine &NameStr,
3967  BasicBlock *InsertAtEnd) {
3968  return new CatchSwitchInst(ParentPad, UnwindDest, NumHandlers, NameStr,
3969  InsertAtEnd);
3970  }
3971 
3972  /// Provide fast operand accessors
3974 
3975  // Accessor Methods for CatchSwitch stmt
3976  Value *getParentPad() const { return getOperand(0); }
3977  void setParentPad(Value *ParentPad) { setOperand(0, ParentPad); }
3978 
3979  // Accessor Methods for CatchSwitch stmt
3980  bool hasUnwindDest() const { return getSubclassDataFromInstruction() & 1; }
3981  bool unwindsToCaller() const { return !hasUnwindDest(); }
3983  if (hasUnwindDest())
3984  return cast<BasicBlock>(getOperand(1));
3985  return nullptr;
3986  }
3987  void setUnwindDest(BasicBlock *UnwindDest) {
3988  assert(UnwindDest);
3989  assert(hasUnwindDest());
3990  setOperand(1, UnwindDest);
3991  }
3992 
3993  /// return the number of 'handlers' in this catchswitch
3994  /// instruction, except the default handler
3995  unsigned getNumHandlers() const {
3996  if (hasUnwindDest())
3997  return getNumOperands() - 2;
3998  return getNumOperands() - 1;
3999  }
4000 
4001 private:
4002  static BasicBlock *handler_helper(Value *V) { return cast<BasicBlock>(V); }
4003  static const BasicBlock *handler_helper(const Value *V) {
4004  return cast<BasicBlock>(V);
4005  }
4006 
4007 public:
4008  using DerefFnTy = BasicBlock *(*)(Value *);
4011  using ConstDerefFnTy = const BasicBlock *(*)(const Value *);
4012  using const_handler_iterator =
4015 
4016  /// Returns an iterator that points to the first handler in CatchSwitchInst.
4018  op_iterator It = op_begin() + 1;
4019  if (hasUnwindDest())
4020  ++It;
4021  return handler_iterator(It, DerefFnTy(handler_helper));
4022  }
4023 
4024  /// Returns an iterator that points to the first handler in the
4025  /// CatchSwitchInst.
4026  const_handler_iterator handler_begin() const {
4027  const_op_iterator It = op_begin() + 1;
4028  if (hasUnwindDest())
4029  ++It;
4030  return const_handler_iterator(It, ConstDerefFnTy(handler_helper));
4031  }
4032 
4033  /// Returns a read-only iterator that points one past the last
4034  /// handler in the CatchSwitchInst.
4036  return handler_iterator(op_end(), DerefFnTy(handler_helper));
4037  }
4038 
4039  /// Returns an iterator that points one past the last handler in the
4040  /// CatchSwitchInst.
4041  const_handler_iterator handler_end() const {
4042  return const_handler_iterator(op_end(), ConstDerefFnTy(handler_helper));
4043  }
4044 
4045  /// iteration adapter for range-for loops.
4047  return make_range(handler_begin(), handler_end());
4048  }
4049 
4050  /// iteration adapter for range-for loops.
4052  return make_range(handler_begin(), handler_end());
4053  }
4054 
4055  /// Add an entry to the switch instruction...
4056  /// Note:
4057  /// This action invalidates handler_end(). Old handler_end() iterator will
4058  /// point to the added handler.
4059  void addHandler(BasicBlock *Dest);
4060 
4061  void removeHandler(handler_iterator HI);
4062 
4063  unsigned getNumSuccessors() const { return getNumOperands() - 1; }
4064  BasicBlock *getSuccessor(unsigned Idx) const {
4065  assert(Idx < getNumSuccessors() &&
4066  "Successor # out of range for catchswitch!");
4067  return cast<BasicBlock>(getOperand(Idx + 1));
4068  }
4069  void setSuccessor(unsigned Idx, BasicBlock *NewSucc) {
4070  assert(Idx < getNumSuccessors() &&
4071  "Successor # out of range for catchswitch!");
4072  setOperand(Idx + 1, NewSucc);
4073  }
4074 
4075  // Methods for support type inquiry through isa, cast, and dyn_cast:
4076  static bool classof(const Instruction *I) {
4077  return I->getOpcode() == Instruction::CatchSwitch;
4078  }
4079  static bool classof(const Value *V) {
4080  return isa<Instruction>(V) && classof(cast<Instruction>(V));
4081  }
4082 };
4083 
4084 template <>
4086 
4087 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(CatchSwitchInst, Value)
4088 
4089 //===----------------------------------------------------------------------===//
4090 // CleanupPadInst Class
4091 //===----------------------------------------------------------------------===//
4093 private:
4094  explicit CleanupPadInst(Value *ParentPad, ArrayRef<Value *> Args,
4095  unsigned Values, const Twine &NameStr,
4096  Instruction *InsertBefore)
4097  : FuncletPadInst(Instruction::CleanupPad, ParentPad, Args, Values,
4098  NameStr, InsertBefore) {}
4099  explicit CleanupPadInst(Value *ParentPad, ArrayRef<Value *> Args,
4100  unsigned Values, const Twine &NameStr,
4101  BasicBlock *InsertAtEnd)
4102  : FuncletPadInst(Instruction::CleanupPad, ParentPad, Args, Values,
4103  NameStr, InsertAtEnd) {}
4104 
4105 public:
4106  static CleanupPadInst *Create(Value *ParentPad, ArrayRef<Value *> Args = None,
4107  const Twine &NameStr = "",
4108  Instruction *InsertBefore = nullptr) {
4109  unsigned Values = 1 + Args.size();
4110  return new (Values)
4111  CleanupPadInst(ParentPad, Args, Values, NameStr, InsertBefore);
4112  }
4113 
4114  static CleanupPadInst *Create(Value *ParentPad, ArrayRef<Value *> Args,
4115  const Twine &NameStr, BasicBlock *InsertAtEnd) {
4116  unsigned Values = 1 + Args.size();
4117  return new (Values)
4118  CleanupPadInst(ParentPad, Args, Values, NameStr, InsertAtEnd);
4119  }
4120 
4121  /// Methods for support type inquiry through isa, cast, and dyn_cast:
4122  static bool classof(const Instruction *I) {
4123  return I->getOpcode() == Instruction::CleanupPad;
4124  }
4125  static bool classof(const Value *V) {
4126  return isa<Instruction>(V) && classof(cast<Instruction>(V));
4127  }
4128 };
4129 
4130 //===----------------------------------------------------------------------===//
4131 // CatchPadInst Class
4132 //===----------------------------------------------------------------------===//
4134 private:
4135  explicit CatchPadInst(Value *CatchSwitch, ArrayRef<Value *> Args,
4136  unsigned Values, const Twine &NameStr,
4137  Instruction *InsertBefore)
4138  : FuncletPadInst(Instruction::CatchPad, CatchSwitch, Args, Values,
4139  NameStr, InsertBefore) {}
4140  explicit CatchPadInst(Value *CatchSwitch, ArrayRef<Value *> Args,
4141  unsigned Values, const Twine &NameStr,
4142  BasicBlock *InsertAtEnd)
4143  : FuncletPadInst(Instruction::CatchPad, CatchSwitch, Args, Values,
4144  NameStr, InsertAtEnd) {}
4145 
4146 public:
4147  static CatchPadInst *Create(Value *CatchSwitch, ArrayRef<Value *> Args,
4148  const Twine &NameStr = "",
4149  Instruction *InsertBefore = nullptr) {
4150  unsigned Values = 1 + Args.size();
4151  return new (Values)
4152  CatchPadInst(CatchSwitch, Args, Values, NameStr, InsertBefore);
4153  }
4154 
4155  static CatchPadInst *Create(Value *CatchSwitch, ArrayRef<Value *> Args,
4156  const Twine &NameStr, BasicBlock *InsertAtEnd) {
4157  unsigned Values = 1 + Args.size();
4158  return new (Values)
4159  CatchPadInst(CatchSwitch, Args, Values, NameStr, InsertAtEnd);
4160  }
4161 
4162  /// Convenience accessors
4163  CatchSwitchInst *getCatchSwitch() const {
4164  return cast<CatchSwitchInst>(Op<-1>());
4165  }
4166  void setCatchSwitch(Value *CatchSwitch) {
4167  assert(CatchSwitch);
4168  Op<-1>() = CatchSwitch;
4169  }
4170 
4171  /// Methods for support type inquiry through isa, cast, and dyn_cast:
4172  static bool classof(const Instruction *I) {
4173  return I->getOpcode() == Instruction::CatchPad;
4174  }
4175  static bool classof(const Value *V) {
4176  return isa<Instruction>(V) && classof(cast<Instruction>(V));
4177  }
4178 };
4179 
4180 //===----------------------------------------------------------------------===//
4181 // CatchReturnInst Class
4182 //===----------------------------------------------------------------------===//
4183 
4185  CatchReturnInst(const CatchReturnInst &RI);
4186  CatchReturnInst(Value *CatchPad, BasicBlock *BB, Instruction *InsertBefore);
4187  CatchReturnInst(Value *CatchPad, BasicBlock *BB, BasicBlock *InsertAtEnd);
4188 
4189  void init(Value *CatchPad, BasicBlock *BB);
4190 
4191 protected:
4192  // Note: Instruction needs to be a friend here to call cloneImpl.
4193  friend class Instruction;
4194 
4195  CatchReturnInst *cloneImpl() const;
4196 
4197 public:
4198  static CatchReturnInst *Create(Value *CatchPad, BasicBlock *BB,
4199  Instruction *InsertBefore = nullptr) {
4200  assert(CatchPad);
4201  assert(BB);
4202  return new (2) CatchReturnInst(CatchPad, BB, InsertBefore);
4203  }
4204 
4205  static CatchReturnInst *Create(Value *CatchPad, BasicBlock *BB,
4206  BasicBlock *InsertAtEnd) {
4207  assert(CatchPad);
4208  assert(BB);
4209  return new (2) CatchReturnInst(CatchPad, BB, InsertAtEnd);
4210  }
4211 
4212  /// Provide fast operand accessors
4214 
4215  /// Convenience accessors.
4216  CatchPadInst *getCatchPad() const { return cast<CatchPadInst>(Op<0>()); }
4217  void setCatchPad(CatchPadInst *CatchPad) {
4218  assert(CatchPad);
4219  Op<0>() = CatchPad;
4220  }
4221 
4222  BasicBlock *getSuccessor() const { return cast<BasicBlock>(Op<1>()); }
4223  void setSuccessor(BasicBlock *NewSucc) {
4224  assert(NewSucc);
4225  Op<1>() = NewSucc;
4226  }
4227  unsigned getNumSuccessors() const { return 1; }
4228 
4229  /// Get the parentPad of this catchret's catchpad's catchswitch.
4230  /// The successor block is implicitly a member of this funclet.
4231  Value *getCatchSwitchParentPad() const {
4232  return getCatchPad()->getCatchSwitch()->getParentPad();
4233  }
4234 
4235  // Methods for support type inquiry through isa, cast, and dyn_cast:
4236  static bool classof(const Instruction *I) {
4237  return (I->getOpcode() == Instruction::CatchRet);
4238  }
4239  static bool classof(const Value *V) {
4240  return isa<Instruction>(V) && classof(cast<Instruction>(V));
4241  }
4242 
4243 private:
4244  BasicBlock *getSuccessor(unsigned Idx) const {
4245  assert(Idx < getNumSuccessors() && "Successor # out of range for catchret!");
4246  return getSuccessor();
4247  }
4248 
4249  void setSuccessor(unsigned Idx, BasicBlock *B) {
4250  assert(Idx < getNumSuccessors() && "Successor # out of range for catchret!");
4251  setSuccessor(B);
4252  }
4253 };
4254 
4255 template <>
4257  : public FixedNumOperandTraits<CatchReturnInst, 2> {};
4258 
4259 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(CatchReturnInst, Value)
4260 
4261 //===----------------------------------------------------------------------===//
4262 // CleanupReturnInst Class
4263 //===----------------------------------------------------------------------===//
4264 
4266 private:
4268  CleanupReturnInst(Value *CleanupPad, BasicBlock *UnwindBB, unsigned Values,
4269  Instruction *InsertBefore = nullptr);
4270  CleanupReturnInst(Value *CleanupPad, BasicBlock *UnwindBB, unsigned Values,
4271  BasicBlock *InsertAtEnd);
4272 
4273  void init(Value *CleanupPad, BasicBlock *UnwindBB);
4274 
4275 protected:
4276  // Note: Instruction needs to be a friend here to call cloneImpl.
4277  friend class Instruction;
4278 
4279  CleanupReturnInst *cloneImpl() const;
4280 
4281 public:
4282  static CleanupReturnInst *Create(Value *CleanupPad,
4283  BasicBlock *UnwindBB = nullptr,
4284  Instruction *InsertBefore = nullptr) {
4285  assert(CleanupPad);
4286  unsigned Values = 1;
4287  if (UnwindBB)
4288  ++Values;
4289  return new (Values)
4290  CleanupReturnInst(CleanupPad, UnwindBB, Values, InsertBefore);
4291  }
4292 
4293  static CleanupReturnInst *Create(Value *CleanupPad, BasicBlock *UnwindBB,
4294  BasicBlock *InsertAtEnd) {
4295  assert(CleanupPad);
4296  unsigned Values = 1;
4297  if (UnwindBB)
4298  ++Values;
4299  return new (Values)
4300  CleanupReturnInst(CleanupPad, UnwindBB, Values, InsertAtEnd);
4301  }
4302 
4303  /// Provide fast operand accessors
4305 
4306  bool hasUnwindDest() const { return getSubclassDataFromInstruction() & 1; }
4307  bool unwindsToCaller() const { return !hasUnwindDest(); }
4308 
4309  /// Convenience accessor.
4311  return cast<CleanupPadInst>(Op<0>());
4312  }
4313  void setCleanupPad(CleanupPadInst *CleanupPad) {
4314  assert(CleanupPad);
4315  Op<0>() = CleanupPad;
4316  }
4317 
4318  unsigned getNumSuccessors() const { return hasUnwindDest() ? 1 : 0; }
4319 
4321  return hasUnwindDest() ? cast<BasicBlock>(Op<1>()) : nullptr;
4322  }
4323  void setUnwindDest(BasicBlock *NewDest) {
4324  assert(NewDest);
4325  assert(hasUnwindDest());
4326  Op<1>() = NewDest;
4327  }
4328 
4329  // Methods for support type inquiry through isa, cast, and dyn_cast:
4330  static bool classof(const Instruction *I) {
4331  return (I->getOpcode() == Instruction::CleanupRet);
4332  }
4333  static bool classof(const Value *V) {
4334  return isa<Instruction>(V) && classof(cast<Instruction>(V));
4335  }
4336 
4337 private:
4338  BasicBlock *getSuccessor(unsigned Idx) const {
4339  assert(Idx == 0);
4340  return getUnwindDest();
4341  }
4342 
4343  void setSuccessor(unsigned Idx, BasicBlock *B) {
4344  assert(Idx == 0);
4345  setUnwindDest(B);
4346  }
4347 
4348  // Shadow Instruction::setInstructionSubclassData with a private forwarding
4349  // method so that subclasses cannot accidentally use it.
4350  void setInstructionSubclassData(unsigned short D) {
4352  }
4353 };
4354 
4355 template <>
4357  : public VariadicOperandTraits<CleanupReturnInst, /*MINARITY=*/1> {};
4358 
4359 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(CleanupReturnInst, Value)
4360 
4361 //===----------------------------------------------------------------------===//
4362 // UnreachableInst Class
4363 //===----------------------------------------------------------------------===//
4364 
4365 //===---------------------------------------------------------------------------
4366 /// This function has undefined behavior. In particular, the
4367 /// presence of this instruction indicates some higher level knowledge that the
4368 /// end of the block cannot be reached.
4369 ///
4371 protected:
4372  // Note: Instruction needs to be a friend here to call cloneImpl.
4373  friend class Instruction;
4374 
4375  UnreachableInst *cloneImpl() const;
4376 
4377 public:
4378  explicit UnreachableInst(LLVMContext &C, Instruction *InsertBefore = nullptr);
4379  explicit UnreachableInst(LLVMContext &C, BasicBlock *InsertAtEnd);
4380 
4381  // allocate space for exactly zero operands
4382  void *operator new(size_t s) {
4383  return User::operator new(s, 0);
4384  }
4385 
4386  unsigned getNumSuccessors() const { return 0; }
4387 
4388  // Methods for support type inquiry through isa, cast, and dyn_cast:
4389  static bool classof(const Instruction *I) {
4390  return I->getOpcode() == Instruction::Unreachable;
4391  }
4392  static bool classof(const Value *V) {
4393  return isa<Instruction>(V) && classof(cast<Instruction>(V));
4394  }
4395 
4396 private:
4397  BasicBlock *getSuccessor(unsigned idx) const {
4398  llvm_unreachable("UnreachableInst has no successors!");
4399  }
4400 
4401  void setSuccessor(unsigned idx, BasicBlock *B) {
4402  llvm_unreachable("UnreachableInst has no successors!");
4403  }
4404 };
4405 
4406 //===----------------------------------------------------------------------===//
4407 // TruncInst Class
4408 //===----------------------------------------------------------------------===//
4409 
4410 /// This class represents a truncation of integer types.
4411 class TruncInst : public CastInst {
4412 protected:
4413  // Note: Instruction needs to be a friend here to call cloneImpl.
4414  friend class Instruction;
4415 
4416  /// Clone an identical TruncInst
4417  TruncInst *cloneImpl() const;
4418 
4419 public:
4420  /// Constructor with insert-before-instruction semantics
4421  TruncInst(
4422  Value *S, ///< The value to be truncated
4423  Type *Ty, ///< The (smaller) type to truncate to
4424  const Twine &NameStr = "", ///< A name for the new instruction
4425  Instruction *InsertBefore = nullptr ///< Where to insert the new instruction
4426  );
4427 
4428  /// Constructor with insert-at-end-of-block semantics
4429  TruncInst(
4430  Value *S, ///< The value to be truncated
4431  Type *Ty, ///< The (smaller) type to truncate to
4432  const Twine &NameStr, ///< A name for the new instruction
4433  BasicBlock *InsertAtEnd ///< The block to insert the instruction into
4434  );
4435 
4436  /// Methods for support type inquiry through isa, cast, and dyn_cast:
4437  static bool classof(const Instruction *I) {
4438  return I->getOpcode() == Trunc;
4439  }
4440  static bool classof(const Value *V) {
4441  return isa<Instruction>(V) && classof(cast<Instruction>(V));
4442  }
4443 };
4444 
4445 //===----------------------------------------------------------------------===//
4446 // ZExtInst Class
4447 //===----------------------------------------------------------------------===//
4448 
4449 /// This class represents zero extension of integer types.
4450 class ZExtInst : public CastInst {
4451 protected:
4452  // Note: Instruction needs to be a friend here to call cloneImpl.
4453  friend class Instruction;
4454 
4455  /// Clone an identical ZExtInst
4456  ZExtInst *cloneImpl() const;
4457 
4458 public:
4459  /// Constructor with insert-before-instruction semantics
4460  ZExtInst(
4461  Value *S, ///< The value to be zero extended
4462  Type *Ty, ///< The type to zero extend to
4463  const Twine &NameStr = "", ///< A name for the new instruction
4464  Instruction *InsertBefore = nullptr ///< Where to insert the new instruction
4465  );
4466 
4467  /// Constructor with insert-at-end semantics.
4468  ZExtInst(
4469  Value *S, ///< The value to be zero extended
4470  Type *Ty, ///< The type to zero extend to
4471  const Twine &NameStr, ///< A name for the new instruction
4472  BasicBlock *InsertAtEnd ///< The block to insert the instruction into
4473  );
4474 
4475  /// Methods for support type inquiry through isa, cast, and dyn_cast:
4476  static bool classof(const Instruction *I) {
4477  return I->getOpcode() == ZExt;
4478  }
4479  static bool classof(const Value *V) {
4480  return isa<Instruction>(V) && classof(cast<Instruction>(V));
4481  }
4482 };
4483 
4484 //===----------------------------------------------------------------------===//
4485 // SExtInst Class
4486 //===----------------------------------------------------------------------===//
4487 
4488 /// This class represents a sign extension of integer types.
4489 class SExtInst : public CastInst {
4490 protected:
4491  // Note: Instruction needs to be a friend here to call cloneImpl.
4492  friend class Instruction;
4493 
4494  /// Clone an identical SExtInst
4495  SExtInst *cloneImpl() const;
4496 
4497 public:
4498  /// Constructor with insert-before-instruction semantics
4499  SExtInst(
4500  Value *S, ///< The value to be sign extended
4501  Type *Ty, ///< The type to sign extend to
4502  const Twine &NameStr = "", ///< A name for the new instruction
4503  Instruction *InsertBefore = nullptr ///< Where to insert the new instruction
4504  );
4505 
4506  /// Constructor with insert-at-end-of-block semantics
4507  SExtInst(
4508  Value *S, ///< The value to be sign extended
4509  Type *Ty, ///< The type to sign extend to
4510  const Twine &NameStr, ///< A name for the new instruction
4511  BasicBlock *InsertAtEnd ///< The block to insert the instruction into
4512  );
4513 
4514  /// Methods for support type inquiry through isa, cast, and dyn_cast:
4515  static bool classof(const Instruction *I) {
4516  return I->getOpcode() == SExt;
4517  }
4518  static bool classof(const Value *V) {
4519  return isa<Instruction>(V) && classof(cast<Instruction>(V));
4520  }
4521 };
4522 
4523 //===----------------------------------------------------------------------===//
4524 // FPTruncInst Class
4525 //===----------------------------------------------------------------------===//
4526 
4527 /// This class represents a truncation of floating point types.
4528 class FPTruncInst : public CastInst {
4529 protected:
4530  // Note: Instruction needs to be a friend here to call cloneImpl.
4531  friend class Instruction;
4532 
4533  /// Clone an identical FPTruncInst
4534  FPTruncInst *cloneImpl() const;
4535 
4536 public:
4537  /// Constructor with insert-before-instruction semantics
4538  FPTruncInst(
4539  Value *S, ///< The value to be truncated
4540  Type *Ty, ///< The type to truncate to
4541  const Twine &NameStr = "", ///< A name for the new instruction
4542  Instruction *InsertBefore = nullptr ///< Where to insert the new instruction
4543  );
4544 
4545  /// Constructor with insert-before-instruction semantics
4546  FPTruncInst(
4547  Value *S, ///< The value to be truncated
4548  Type *Ty, ///< The type to truncate to
4549  const Twine &NameStr, ///< A name for the new instruction
4550  BasicBlock *InsertAtEnd ///< The block to insert the instruction into
4551  );
4552 
4553  /// Methods for support type inquiry through isa, cast, and dyn_cast:
4554  static bool classof(const Instruction *I) {
4555  return I->getOpcode() == FPTrunc;
4556  }
4557  static bool classof(const Value *V) {
4558  return isa<Instruction>(V) && classof(cast<Instruction>(V));
4559  }
4560 };
4561 
4562 //===----------------------------------------------------------------------===//
4563 // FPExtInst Class
4564 //===----------------------------------------------------------------------===//
4565 
4566 /// This class represents an extension of floating point types.
4567 class FPExtInst : public CastInst {
4568 protected:
4569  // Note: Instruction needs to be a friend here to call cloneImpl.
4570  friend class Instruction;
4571 
4572  /// Clone an identical FPExtInst
4573  FPExtInst *cloneImpl() const;
4574 
4575 public:
4576  /// Constructor with insert-before-instruction semantics
4577  FPExtInst(
4578  Value *S, ///< The value to be extended
4579  Type *Ty, ///< The type to extend to
4580  const Twine &NameStr = "", ///< A name for the new instruction
4581  Instruction *InsertBefore = nullptr ///< Where to insert the new instruction
4582  );
4583 
4584  /// Constructor with insert-at-end-of-block semantics
4585  FPExtInst(
4586  Value *S, ///< The value to be extended
4587  Type *Ty, ///< The type to extend to
4588  const Twine &NameStr, ///< A name for the new instruction
4589  BasicBlock *InsertAtEnd ///< The block to insert the instruction into
4590  );
4591 
4592  /// Methods for support type inquiry through isa, cast, and dyn_cast:
4593  static bool classof(const Instruction *I) {
4594  return I->getOpcode() == FPExt;
4595  }
4596  static bool classof(const Value *V) {
4597  return isa<Instruction>(V) && classof(cast<Instruction>(V));
4598  }
4599 };
4600 
4601 //===----------------------------------------------------------------------===//
4602 // UIToFPInst Class
4603 //===----------------------------------------------------------------------===//
4604 
4605 /// This class represents a cast unsigned integer to floating point.
4606 class UIToFPInst : public CastInst {
4607 protected:
4608  // Note: Instruction needs to be a friend here to call cloneImpl.
4609  friend class Instruction;
4610 
4611  /// Clone an identical UIToFPInst
4612  UIToFPInst *cloneImpl() const;
4613 
4614 public:
4615  /// Constructor with insert-before-instruction semantics
4616  UIToFPInst(
4617  Value *S, ///< The value to be converted
4618  Type *Ty, ///< The type to convert to
4619  const Twine &NameStr = "", ///< A name for the new instruction
4620  Instruction *InsertBefore = nullptr ///< Where to insert the new instruction
4621  );
4622 
4623  /// Constructor with insert-at-end-of-block semantics
4624  UIToFPInst(
4625  Value *S, ///< The value to be converted
4626  Type *Ty, ///< The type to convert to
4627  const Twine &NameStr, ///< A name for the new instruction
4628  BasicBlock *InsertAtEnd ///< The block to insert the instruction into
4629  );
4630 
4631  /// Methods for support type inquiry through isa, cast, and dyn_cast:
4632  static bool classof(const Instruction *I) {
4633  return I->getOpcode() == UIToFP;
4634  }
4635  static bool classof(const Value *V) {
4636  return isa<Instruction>(V) && classof(cast<Instruction>(V));
4637  }
4638 };
4639 
4640 //===----------------------------------------------------------------------===//
4641 // SIToFPInst Class
4642 //===----------------------------------------------------------------------===//
4643 
4644 /// This class represents a cast from signed integer to floating point.
4645 class SIToFPInst : public CastInst {
4646 protected:
4647  // Note: Instruction needs to be a friend here to call cloneImpl.
4648  friend class Instruction;
4649 
4650  /// Clone an identical SIToFPInst
4651  SIToFPInst *cloneImpl() const;
4652 
4653 public:
4654  /// Constructor with insert-before-instruction semantics
4655  SIToFPInst(
4656  Value *S, ///< The value to be converted
4657  Type *Ty, ///< The type to convert to
4658  const Twine &NameStr = "", ///< A name for the new instruction
4659  Instruction *InsertBefore = nullptr ///< Where to insert the new instruction
4660  );
4661 
4662  /// Constructor with insert-at-end-of-block semantics
4663  SIToFPInst(
4664  Value *S, ///< The value to be converted
4665  Type *Ty, ///< The type to convert to
4666  const Twine &NameStr, ///< A name for the new instruction
4667  BasicBlock *InsertAtEnd ///< The block to insert the instruction into
4668  );
4669 
4670  /// Methods for support type inquiry through isa, cast, and dyn_cast:
4671  static bool classof(const Instruction *I) {
4672  return I->getOpcode() == SIToFP;
4673  }
4674  static bool classof(const Value *V) {
4675  return isa<Instruction>(V) && classof(cast<Instruction>(V));
4676  }
4677 };
4678 
4679 //===----------------------------------------------------------------------===//
4680 // FPToUIInst Class
4681 //===----------------------------------------------------------------------===//
4682 
4683 /// This class represents a cast from floating point to unsigned integer
4684 class FPToUIInst : public CastInst {
4685 protected:
4686  // Note: Instruction needs to be a friend here to call cloneImpl.
4687  friend class Instruction;
4688 
4689  /// Clone an identical FPToUIInst
4690  FPToUIInst *cloneImpl() const;
4691 
4692 public:
4693  /// Constructor with insert-before-instruction semantics
4694  FPToUIInst(
4695  Value *S, ///< The value to be converted
4696  Type *Ty, ///< The type to convert to
4697  const Twine &NameStr = "", ///< A name for the new instruction
4698  Instruction *InsertBefore = nullptr ///< Where to insert the new instruction
4699  );
4700 
4701  /// Constructor with insert-at-end-of-block semantics
4702  FPToUIInst(
4703  Value *S, ///< The value to be converted
4704  Type *Ty, ///< The type to convert to
4705  const Twine &NameStr, ///< A name for the new instruction
4706  BasicBlock *InsertAtEnd ///< Where to insert the new instruction
4707  );
4708 
4709  /// Methods for support type inquiry through isa, cast, and dyn_cast:
4710  static bool classof(const Instruction *I) {
4711  return I->getOpcode() == FPToUI;
4712  }
4713  static bool classof(const Value *V) {
4714  return isa<Instruction>(V) && classof(cast<Instruction>(V));
4715  }
4716 };
4717 
4718 //===----------------------------------------------------------------------===//
4719 // FPToSIInst Class
4720 //===----------------------------------------------------------------------===//
4721 
4722 /// This class represents a cast from floating point to signed integer.
4723 class FPToSIInst : public CastInst {
4724 protected:
4725  // Note: Instruction needs to be a friend here to call cloneImpl.
4726  friend class Instruction;
4727 
4728  /// Clone an identical FPToSIInst
4729  FPToSIInst *cloneImpl() const;
4730 
4731 public:
4732  /// Constructor with insert-before-instruction semantics
4733  FPToSIInst(
4734  Value *S, ///< The value to be converted
4735  Type *Ty, ///< The type to convert to
4736  const Twine &NameStr = "", ///< A name for the new instruction
4737  Instruction *InsertBefore = nullptr ///< Where to insert the new instruction
4738  );
4739 
4740  /// Constructor with insert-at-end-of-block semantics
4741  FPToSIInst(
4742  Value *S, ///< The value to be converted
4743  Type *Ty, ///< The type to convert to
4744  const Twine &NameStr, ///< A name for the new instruction
4745  BasicBlock *InsertAtEnd ///< The block to insert the instruction into
4746  );
4747 
4748  /// Methods for support type inquiry through isa, cast, and dyn_cast:
4749  static bool classof(const Instruction *I) {
4750  return I->getOpcode() == FPToSI;
4751  }
4752  static bool classof(const Value *V) {
4753  return isa<Instruction>(V) && classof(cast<Instruction>(V));
4754  }
4755 };
4756 
4757 //===----------------------------------------------------------------------===//
4758 // IntToPtrInst Class
4759 //===----------------------------------------------------------------------===//
4760 
4761 /// This class represents a cast from an integer to a pointer.
4762 class IntToPtrInst : public CastInst {
4763 public:
4764  // Note: Instruction needs to be a friend here to call cloneImpl.
4765  friend class Instruction;
4766 
4767  /// Constructor with insert-before-instruction semantics
4768  IntToPtrInst(
4769  Value *S, ///< The value to be converted
4770  Type *Ty, ///< The type to convert to
4771  const Twine &NameStr = "", ///< A name for the new instruction
4772  Instruction *InsertBefore = nullptr ///< Where to insert the new instruction
4773  );
4774 
4775  /// Constructor with insert-at-end-of-block semantics
4776  IntToPtrInst(
4777  Value *S, ///< The value to be converted
4778  Type *Ty, ///< The type to convert to
4779  const Twine &NameStr, ///< A name for the new instruction
4780  BasicBlock *InsertAtEnd ///< The block to insert the instruction into
4781  );
4782 
4783  /// Clone an identical IntToPtrInst.
4784  IntToPtrInst *cloneImpl() const;
4785 
4786  /// Returns the address space of this instruction's pointer type.
4787  unsigned getAddressSpace() const {
4788  return getType()->getPointerAddressSpace();
4789  }
4790 
4791  // Methods for support type inquiry through isa, cast, and dyn_cast:
4792  static bool classof(const Instruction *I) {
4793  return I->getOpcode() == IntToPtr;
4794  }
4795  static bool classof(const Value *V) {
4796  return isa<Instruction>(V) && classof(cast<Instruction>(V));
4797  }
4798 };
4799 
4800 //===----------------------------------------------------------------------===//
4801 // PtrToIntInst Class
4802 //===----------------------------------------------------------------------===//
4803 
4804 /// This class represents a cast from a pointer to an integer.
4805 class PtrToIntInst : public CastInst {
4806 protected:
4807  // Note: Instruction needs to be a friend here to call cloneImpl.
4808  friend class Instruction;
4809 
4810  /// Clone an identical PtrToIntInst.
4811  PtrToIntInst *cloneImpl() const;
4812 
4813 public:
4814  /// Constructor with insert-before-instruction semantics
4815  PtrToIntInst(
4816  Value *S, ///< The value to be converted
4817  Type *Ty, ///< The type to convert to
4818  const Twine &NameStr = "", ///< A name for the new instruction
4819  Instruction *InsertBefore = nullptr ///< Where to insert the new instruction
4820  );
4821 
4822  /// Constructor with insert-at-end-of-block semantics
4823  PtrToIntInst(
4824  Value *S, ///< The value to be converted
4825  Type *Ty, ///< The type to convert to
4826  const Twine &NameStr, ///< A name for the new instruction
4827  BasicBlock *InsertAtEnd ///< The block to insert the instruction into
4828  );
4829 
4830  /// Gets the pointer operand.
4831  Value *getPointerOperand() { return getOperand(0); }
4832  /// Gets the pointer operand.
4833  const Value *getPointerOperand() const { return getOperand(0); }
4834  /// Gets the operand index of the pointer operand.
4835  static unsigned getPointerOperandIndex() { return 0U; }
4836 
4837  /// Returns the address space of the pointer operand.
4838  unsigned getPointerAddressSpace() const {
4840  }
4841 
4842  // Methods for support type inquiry through isa, cast, and dyn_cast:
4843  static bool classof(const Instruction *I) {
4844  return I->getOpcode() == PtrToInt;
4845  }
4846  static bool classof(const Value *V) {
4847  return isa<Instruction>(V) && classof(cast<Instruction>(V));
4848  }
4849 };
4850 
4851 //===----------------------------------------------------------------------===//
4852 // BitCastInst Class
4853 //===----------------------------------------------------------------------===//
4854 
4855 /// This class represents a no-op cast from one type to another.
4856 class BitCastInst : public CastInst {
4857 protected:
4858  // Note: Instruction needs to be a friend here to call cloneImpl.
4859  friend class Instruction;
4860 
4861  /// Clone an identical BitCastInst.
4862  BitCastInst *cloneImpl() const;
4863 
4864 public:
4865  /// Constructor with insert-before-instruction semantics
4866  BitCastInst(
4867  Value *S, ///< The value to be casted
4868  Type *Ty, ///< The type to casted to
4869  const Twine &NameStr = "", ///< A name for the new instruction
4870  Instruction *InsertBefore = nullptr ///< Where to insert the new instruction
4871  );
4872 
4873  /// Constructor with insert-at-end-of-block semantics
4874  BitCastInst(
4875  Value *S, ///< The value to be casted
4876  Type *Ty, ///< The type to casted to
4877  const Twine &NameStr, ///< A name for the new instruction
4878  BasicBlock *InsertAtEnd ///< The block to insert the instruction into
4879  );
4880 
4881  // Methods for support type inquiry through isa, cast, and dyn_cast:
4882  static bool classof(const Instruction *I) {
4883  return I->getOpcode() == BitCast;
4884  }
4885  static bool classof(const Value *V) {
4886  return isa<Instruction>(V) && classof(cast<Instruction>(V));
4887  }
4888 };
4889 
4890 //===----------------------------------------------------------------------===//
4891 // AddrSpaceCastInst Class
4892 //===----------------------------------------------------------------------===//
4893 
4894 /// This class represents a conversion between pointers from one address space
4895 /// to another.
4896 class AddrSpaceCastInst : public CastInst {
4897 protected:
4898  // Note: Instruction needs to be a friend here to call cloneImpl.
4899  friend class Instruction;
4900 
4901  /// Clone an identical AddrSpaceCastInst.
4902  AddrSpaceCastInst *cloneImpl() const;
4903 
4904 public:
4905  /// Constructor with insert-before-instruction semantics
4907  Value *S, ///< The value to be casted
4908  Type *Ty, ///< The type to casted to
4909  const Twine &NameStr = "", ///< A name for the new instruction
4910  Instruction *InsertBefore = nullptr ///< Where to insert the new instruction
4911  );
4912 
4913  /// Constructor with insert-at-end-of-block semantics
4915  Value *S, ///< The value to be casted
4916  Type *Ty, ///< The type to casted to
4917  const Twine &NameStr, ///< A name for the new instruction
4918  BasicBlock *InsertAtEnd ///< The block to insert the instruction into
4919  );
4920 
4921  // Methods for support type inquiry through isa, cast, and dyn_cast:
4922  static bool classof(const Instruction *I) {
4923  return I->getOpcode() == AddrSpaceCast;
4924  }
4925  static bool classof(const Value *V) {
4926  return isa<Instruction>(V) && classof(cast<Instruction>(V));
4927  }
4928 
4929  /// Gets the pointer operand.
4931  return getOperand(0);
4932  }
4933 
4934  /// Gets the pointer operand.
4935  const Value *getPointerOperand() const {
4936  return getOperand(0);
4937  }
4938 
4939  /// Gets the operand index of the pointer operand.
4940  static unsigned getPointerOperandIndex() {
4941  return 0U;
4942  }
4943 
4944  /// Returns the address space of the pointer operand.
4945  unsigned getSrcAddressSpace() const {
4947  }
4948 
4949  /// Returns the address space of the result.
4950  unsigned getDestAddressSpace() const {
4951  return getType()->getPointerAddressSpace();
4952  }
4953 };
4954 
4955 /// A helper function that returns the pointer operand of a load or store
4956 /// instruction. Returns nullptr if not load or store.
4957 inline Value *getLoadStorePointerOperand(Value *V) {
4958  if (auto *Load = dyn_cast<LoadInst>(V))
4959  return Load->getPointerOperand();
4960  if (auto *Store = dyn_cast<StoreInst>(V))
4961  return Store->getPointerOperand();
4962  return nullptr;
4963 }
4964 
4965 /// A helper function that returns the pointer operand of a load, store
4966 /// or GEP instruction. Returns nullptr if not load, store, or GEP.
4967 inline Value *getPointerOperand(Value *V) {
4968  if (auto *Ptr = getLoadStorePointerOperand(V))
4969  return Ptr;
4970  if (auto *Gep = dyn_cast<GetElementPtrInst>(V))
4971  return Gep->getPointerOperand();
4972  return nullptr;
4973 }
4974 
4975 /// A helper function that returns the alignment of load or store instruction.
4976 inline unsigned getLoadStoreAlignment(Value *I) {
4977  assert((isa<LoadInst>(I) || isa<StoreInst>(I)) &&
4978  "Expected Load or Store instruction");
4979  if (auto *LI = dyn_cast<LoadInst>(I))
4980  return LI->getAlignment();
4981  return cast<StoreInst>(I)->getAlignment();
4982 }
4983 
4984 /// A helper function that returns the address space of the pointer operand of
4985 /// load or store instruction.
4986 inline unsigned getLoadStoreAddressSpace(Value *I) {
4987  assert((isa<LoadInst>(I) || isa<StoreInst>(I)) &&
4988  "Expected Load or Store instruction");
4989  if (auto *LI = dyn_cast<LoadInst>(I))
4990  return LI->getPointerAddressSpace();
4991  return cast<StoreInst>(I)->getPointerAddressSpace();
4992 }
4993 
4994 } // end namespace llvm
4995 
4996 #endif // LLVM_IR_INSTRUCTIONS_H
static unsigned getInsertedValueOperandIndex()
static GetElementPtrInst * Create(Type *PointeeType, Value *Ptr, ArrayRef< Value *> IdxList, const Twine &NameStr, BasicBlock *InsertAtEnd)
Definition: Instructions.h:896
uint64_t CallInst * C
Return a value (possibly void), from a function.
Value * getValueOperand()
Definition: Instructions.h:410
unsigned getNumCases() const
Return the number of &#39;cases&#39; in this switch instruction, excluding the default case.
Value * getArraySize()
Definition: Instructions.h:94
static bool isEquality(Predicate Pred)
A parsed version of the target data layout string in and methods for querying it. ...
Definition: DataLayout.h:111
constexpr char Align[]
Key for Kernel::Arg::Metadata::mAlign.
static bool classof(const Instruction *I)
CaseIt case_end()
Returns a read/write iterator that points one past the last in the SwitchInst.
This class is the base class for the comparison instructions.
Definition: InstrTypes.h:636
unsigned getSrcAddressSpace() const
Returns the address space of the pointer operand.
static bool classof(const Instruction *I)
Methods for support type inquiry through isa, cast, and dyn_cast:
bool isSimple() const
Definition: Instructions.h:277
bool isEquality() const
idx_iterator idx_end() const
static CallInst * Create(FunctionType *Ty, Value *Func, ArrayRef< Value *> Args, ArrayRef< OperandBundleDef > Bundles=None, const Twine &NameStr="", Instruction *InsertBefore=nullptr)
void setUnwindDest(BasicBlock *UnwindDest)
CleanupPadInst * getCleanupPad() const
Convenience accessor.
void addIncoming(Value *V, BasicBlock *BB)
Add an incoming value to the end of the PHI list.
This instruction extracts a struct member or array element value from an aggregate value...
Value * getPointerOperand(Value *V)
A helper function that returns the pointer operand of a load, store or GEP instruction.
*p = old <signed v ? old : v
Definition: Instructions.h:722
iterator_range< CaseIt > cases()
Iteration adapter for range-for loops.
const_block_iterator block_begin() const
ConstCaseIt case_begin() const
Returns a read-only iterator that points to the first case in the SwitchInst.
static bool classof(const Value *V)
Value * getAggregateOperand()
static bool classof(const Instruction *I)
static bool classof(const Instruction *I)
Definition: Instructions.h:424
static bool classof(const Instruction *I)
Atomic ordering constants.
iterator_range< const_succ_op_iterator > successors() const
const CaseHandleT & operator*() const
static bool classof(const Value *V)
This class represents lattice values for constants.
Definition: AllocatorList.h:24
unsigned getSubclassDataFromInstruction() const
Definition: Instruction.h:745
bool isAtomic() const
Return true if this instruction has an AtomicOrdering of unordered or higher.
void allocHungoffUses(unsigned N)
static PHINode * Create(Type *Ty, unsigned NumReservedValues, const Twine &NameStr, BasicBlock *InsertAtEnd)
unsigned getNumIndices() const
static ResumeInst * Create(Value *Exn, Instruction *InsertBefore=nullptr)
void setOrdering(AtomicOrdering Ordering)
Sets the ordering constraint of this rmw instruction.
Definition: Instructions.h:779
static bool classof(const Instruction *I)
BasicBlock * getSuccessor(unsigned Idx) const
Return the specified successor. This instruction must be a terminator.
void setAlignment(unsigned Align)
An instruction for ordering other memory operations.
Definition: Instructions.h:455
an instruction that atomically checks whether a specified value is in a memory location, and, if it is, stores a new value there.
Definition: Instructions.h:529
static CallInst * Create(FunctionType *Ty, Value *F, const Twine &NameStr="", Instruction *InsertBefore=nullptr)
BasicBlock *const * const_block_iterator
static CallInst * Create(FunctionType *Ty, Value *Func, ArrayRef< Value *> Args, const Twine &NameStr, Instruction *InsertBefore=nullptr)
bool isUnordered() const
Definition: Instructions.h:404
This class represents zero extension of integer types.
This provides a very simple, boring adaptor for a begin and end iterator into a range type...
AllocaInst(Type *Ty, unsigned AddrSpace, Value *ArraySize=nullptr, const Twine &Name="", Instruction *InsertBefore=nullptr)
value_op_iterator value_op_begin()
Definition: User.h:256
static GetElementPtrInst * Create(Type *PointeeType, Value *Ptr, ArrayRef< Value *> IdxList, const Twine &NameStr="", Instruction *InsertBefore=nullptr)
Definition: Instructions.h:880
static CallInst * Create(Value *Func, ArrayRef< Value *> Args, const Twine &NameStr, Instruction *InsertBefore=nullptr)
Value * getPointerOperand()
Gets the pointer operand.
const_handler_range handlers() const
iteration adapter for range-for loops.
This class represents a function call, abstracting a target machine&#39;s calling convention.
CaseHandleImpl(SwitchInstT *SI, ptrdiff_t Index)
static bool classof(const Value *V)
const_handler_iterator handler_begin() const
Returns an iterator that points to the first handler in the CatchSwitchInst.
void setOrdering(AtomicOrdering Ordering)
Sets the ordering constraint of this load instruction.
Definition: Instructions.h:254
static unsigned getPointerOperandIndex()
Gets the operand index of the pointer operand.
Value * getCondition() const
static bool classof(const Value *V)
static PointerType * get(Type *ElementType, unsigned AddressSpace)
This constructs a pointer to an object of the specified type in a numbered address space...
Definition: Type.cpp:630
SyncScope::ID getSyncScopeID() const
Returns the synchronization scope ID of this store instruction.
Definition: Instructions.h:385
const Value * getTrueValue() const
CaseIt case_begin()
Returns a read/write iterator that points to the first case in the SwitchInst.
*p = old <unsigned v ? old : v
Definition: Instructions.h:726
bool isReverse() const
Return true if this shuffle swaps the order of elements from exactly one source vector.
void setAllocatedType(Type *Ty)
for use only in special circumstances that need to generically transform a whole instruction (eg: IR ...
Definition: Instructions.h:109
void setVolatile(bool V)
Specify whether this is a volatile cmpxchg.
Definition: Instructions.h:564
bool isSwiftError() const
Return true if this alloca is used as a swifterror argument to a call.
Definition: Instructions.h:136
AtomicOrdering getOrdering() const
Returns the ordering constraint of this load instruction.
Definition: Instructions.h:248
ConstantIntT * getCaseValue() const
Resolves case value for current case.
*p = old >unsigned v ? old : v
Definition: Instructions.h:724
This instruction constructs a fixed permutation of two input vectors.
static SelectInst * Create(Value *C, Value *S1, Value *S2, const Twine &NameStr="", Instruction *InsertBefore=nullptr, Instruction *MDFrom=nullptr)
static bool classof(const Value *V)
static bool classof(const Value *V)
iterator_range< const_block_iterator > blocks() const
Type * getPointerOperandType() const
Definition: Instructions.h:416
value_op_iterator value_op_end()
Definition: User.h:259
BasicBlock * getSuccessor(unsigned i) const
static bool classof(const Instruction *I)
static bool isEquality(Predicate P)
Return true if this predicate is either EQ or NE.
void setSuccessor(unsigned i, BasicBlock *NewSucc)
void setSuccessor(BasicBlock *NewSucc)
Base class for all callable instructions (InvokeInst and CallInst) Holds everything related to callin...
Definition: InstrTypes.h:1014
F(f)
static CallInst * Create(Value *Func, ArrayRef< Value *> Args, ArrayRef< OperandBundleDef > Bundles=None, const Twine &NameStr="", Instruction *InsertBefore=nullptr)
This class represents a sign extension of integer types.
unsigned getPointerAddressSpace() const
Get the address space of this pointer or pointer vector type.
Definition: DerivedTypes.h:503
An instruction for reading from memory.
Definition: Instructions.h:168
static bool classof(const Value *V)
static bool classof(const Value *V)
static bool classof(const Instruction *I)
Methods for support type inquiry through isa, cast, and dyn_cast:
static bool classof(const Instruction *I)
Methods for support type inquiry through isa, cast, and dyn_cast:
friend class Instruction
Definition: Instructions.h:65
an instruction that atomically reads a memory location, combines it with another value, and then stores the result back.
Definition: Instructions.h:692
void setAddress(Value *V)
Hexagon Common GEP
Value * getCondition() const
BasicBlock * getUnwindDest() const
static CleanupReturnInst * Create(Value *CleanupPad, BasicBlock *UnwindBB, BasicBlock *InsertAtEnd)
void setSuccessor(unsigned Idx, BasicBlock *BB)
Update the specified successor to point at the provided block.
bool isVectorTy() const
True if this is an instance of VectorType.
Definition: Type.h:230
static bool classof(const Value *V)
Constant * getClause(unsigned Idx) const
Get the value of the clause at index Idx.
BasicBlock * getSuccessor() const
This defines the Use class.
handler_iterator handler_begin()
Returns an iterator that points to the first handler in CatchSwitchInst.
static bool classof(const Instruction *I)
bool isMustTailCall() const
static CallInst * Create(Function *Func, const Twine &NameStr, BasicBlock *InsertAtEnd)
idx_iterator idx_end() const
static ExtractElementInst * Create(Value *Vec, Value *Idx, const Twine &NameStr, BasicBlock *InsertAtEnd)
static bool isSelectMask(const Constant *Mask)
void setAtomic(AtomicOrdering Ordering, SyncScope::ID SSID=SyncScope::System)
Sets the ordering constraint and the synchronization scope ID of this store instruction.
Definition: Instructions.h:396
static bool classof(const Instruction *I)
void setSyncScopeID(SyncScope::ID SSID)
Sets the synchronization scope ID of this rmw instruction.
Definition: Instructions.h:792
*p = old >signed v ? old : v
Definition: Instructions.h:720
ConstCaseIt findCaseValue(const ConstantInt *C) const
UnaryInstruction(Type *Ty, unsigned iType, Value *V, Instruction *IB=nullptr)
Definition: InstrTypes.h:59
static InvokeInst * Create(Value *Func, BasicBlock *IfNormal, BasicBlock *IfException, ArrayRef< Value *> Args, const Twine &NameStr, BasicBlock *InsertAtEnd)
unsigned getPointerAddressSpace() const
Returns the address space of the pointer operand.
Definition: Instructions.h:804
static bool classof(const Instruction *I)
static bool isExtractSubvectorMask(const Constant *Mask, int NumSrcElts, int &Index)
op_iterator op_begin()
Definition: User.h:230
BasicBlock * getIncomingBlock(const Use &U) const
Return incoming basic block corresponding to an operand of the PHI.
Value * removeIncomingValue(const BasicBlock *BB, bool DeletePHIIfEmpty=true)
ConstantInt * findCaseDest(BasicBlock *BB)
Finds the unique case value for a given successor.
bool isSingleSource() const
Return true if this shuffle chooses elements from exactly one source vector without changing the leng...
static SwitchInst * Create(Value *Value, BasicBlock *Default, unsigned NumCases, BasicBlock *InsertAtEnd)
unsigned getNumDestinations() const
return the number of possible destinations in this indirectbr instruction.
BasicBlock * getSuccessor(unsigned i) const
void setCanReturnTwice()
CaseIteratorImpl(SwitchInstT *SI, unsigned CaseNum)
Initializes case iterator for given SwitchInst and for given case number.
static BranchInst * Create(BasicBlock *IfTrue, BasicBlock *IfFalse, Value *Cond, BasicBlock *InsertAtEnd)
void setVolatile(bool V)
Specify whether this is a volatile RMW or not.
Definition: Instructions.h:765
block_iterator block_end()
AtomicOrdering getFailureOrdering() const
Returns the failure ordering constraint of this cmpxchg instruction.
Definition: Instructions.h:596
static bool classof(const Instruction *I)
iterator_range< succ_op_iterator > successors()
bool doesNoCfCheck() const
Determine if the call should not perform indirect branch tracking.
static ReturnInst * Create(LLVMContext &C, Value *retVal=nullptr, Instruction *InsertBefore=nullptr)
static InsertValueInst * Create(Value *Agg, Value *Val, ArrayRef< unsigned > Idxs, const Twine &NameStr, BasicBlock *InsertAtEnd)
AllocaInst * cloneImpl() const
static bool classof(const Instruction *I)
void setAtomic(AtomicOrdering Ordering, SyncScope::ID SSID=SyncScope::System)
Sets the ordering constraint and the synchronization scope ID of this load instruction.
Definition: Instructions.h:271
bool hasUnwindDest() const
iterator_range< idx_iterator > indices() const
static unsigned getOperandNumForIncomingValue(unsigned i)
static bool isRelational(Predicate P)
Return true if the predicate is relational (not EQ or NE).
static InvokeInst * Create(Function *Func, BasicBlock *IfNormal, BasicBlock *IfException, ArrayRef< Value *> Args, const Twine &NameStr, Instruction *InsertBefore=nullptr)
Constant * getMask() const
ArrayRef< unsigned > getIndices() const
static InsertElementInst * Create(Value *Vec, Value *NewElt, Value *Idx, const Twine &NameStr="", Instruction *InsertBefore=nullptr)
iterator_range< const_op_iterator > indices() const
Definition: Instructions.h:988
bool isVolatile() const
Return true if this is a load from a volatile memory location.
Definition: Instructions.h:232
This class represents a conversion between pointers from one address space to another.
amdgpu Simplify well known AMD library false Value Value const Twine & Name
BasicBlock *(*)(Value *) DerefFnTy
BasicBlock * getSuccessor(unsigned Idx) const
bool isRelational() const
Used to keep track of an operand bundle.
Definition: InstrTypes.h:1819
This class represents the LLVM &#39;select&#39; instruction.
static bool classof(const Value *V)
int getBasicBlockIndex(const BasicBlock *BB) const
Return the first index of the specified basic block in the value list for this PHI.
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
Definition: Twine.h:81
unsigned getAlignment() const
Return the alignment of the memory that is being allocated by the instruction.
Definition: Instructions.h:113
OtherOps getOpcode() const
void setCleanupPad(CleanupPadInst *CleanupPad)
This is the base class for all instructions that perform data casts.
Definition: InstrTypes.h:353
PointerType * getType() const
Overload to return most specific pointer type.
Definition: Instructions.h:97
unsigned getNumSuccessors() const
static bool classof(const Instruction *I)
TailCallKind getTailCallKind() const
static bool classof(const Value *V)
unsigned getNumSuccessors() const
A Use represents the edge between a Value definition and its users.
Definition: Use.h:56
static bool classof(const Value *V)
const Value * getPointerOperand() const
Definition: Instructions.h:414
void setOrdering(AtomicOrdering Ordering)
Sets the ordering constraint of this fence instruction.
Definition: Instructions.h:485
BinOp getOperation() const
Definition: Instructions.h:745
const Value * getValueOperand() const
Definition: Instructions.h:411
void setIsInBounds(bool b=true)
Set or clear the inbounds flag on this GEP instruction.
bool isWeak() const
Return true if this cmpxchg may spuriously fail.
Definition: Instructions.h:570
const Value * getNewValOperand() const
Definition: Instructions.h:626
unsigned getNumSuccessors() const
This file contains the simple types necessary to represent the attributes associated with functions a...
unsigned getNumSuccessors() const
unsigned getNumHandlers() const
return the number of &#39;handlers&#39; in this catchswitch instruction, except the default handler ...
iterator_range< ConstCaseIt > cases() const
Constant iteration adapter for range-for loops.
FCmpInst(Predicate Pred, Value *LHS, Value *RHS, const Twine &NameStr="", Instruction *FlagsSource=nullptr)
Constructor with no-insertion semantics.
static bool classof(const Value *V)
unsigned getPointerAddressSpace() const
Returns the address space of the pointer operand.
Definition: Instructions.h:629
static bool classof(const Instruction *I)
Methods for support type inquiry through isa, cast, and dyn_cast:
void setName(const Twine &Name)
Change the name of the value.
Definition: Value.cpp:285
BasicBlock * getIncomingBlock(Value::const_user_iterator I) const
Return incoming basic block corresponding to value use iterator.
bool isVolatile() const
Return true if this is a cmpxchg from a volatile memory location.
Definition: Instructions.h:558
Value * getTrueValue()
Value * getPointerOperand()
static bool isZeroEltSplatMask(const Constant *Mask)
Type * getSourceElementType() const
Definition: Instructions.h:951
block_iterator block_begin()
Value * getFalseValue()
unsigned getNumClauses() const
Get the number of clauses for this landing pad.
BasicBlock * getDestination(unsigned i)
Return the specified destination.
APInt operator*(APInt a, uint64_t RHS)
Definition: APInt.h:2091
static bool classof(const Instruction *I)
bool operator==(const CaseHandleImpl &RHS) const
This class represents a cast from a pointer to an integer.
unsigned getPointerAddressSpace() const
Returns the address space of the pointer operand.
AtomicOrdering
Atomic ordering for LLVM&#39;s memory model.
bool isCommutative() const
static CaseIteratorImpl fromSuccessorIndex(SwitchInstT *SI, unsigned SuccessorIndex)
Initializes case iterator for given SwitchInst and for given successor index.
bool doesNotThrow() const
Determine if the call cannot unwind.
const Value * getAggregateOperand() const
unsigned getNumIndices() const
void setUnwindDest(BasicBlock *B)
void getShuffleMask(SmallVectorImpl< int > &Result) const
Return the mask for this instruction as a vector of integers.
const_succ_op_iterator(const_value_op_iterator I)
unsigned getPointerAddressSpace() const
Returns the address space of the pointer operand.
Definition: Instructions.h:419
#define DEFINE_TRANSPARENT_OPERAND_ACCESSORS(CLASS, VALUECLASS)
Macro for generating out-of-class operand accessor definitions.
User * getUser() const LLVM_READONLY
Returns the User that contains this Use.
Definition: Use.cpp:41
Class to represent function types.
Definition: DerivedTypes.h:103
iterator_range< succ_op_iterator > successors()
static CatchSwitchInst * Create(Value *ParentPad, BasicBlock *UnwindDest, unsigned NumHandlers, const Twine &NameStr, BasicBlock *InsertAtEnd)
void setCleanup(bool V)
Indicate that this landingpad instruction is a cleanup.
Type * getType() const
All values are typed, get the type of this value.
Definition: Value.h:245
static bool classof(const Instruction *I)
static bool classof(const Value *V)
Iterator type that casts an operand to a basic block.
static bool classof(const Instruction *I)
Definition: Instructions.h:296
ptrdiff_t operator-(const CaseIteratorImpl &RHS) const
BinOp
This enumeration lists the possible modifications atomicrmw can make.
Definition: Instructions.h:704
unsigned getCaseIndex() const
Returns number of current case.
void setNormalDest(BasicBlock *B)
AtomicOrdering getSuccessOrdering() const
Returns the success ordering constraint of this cmpxchg instruction.
Definition: Instructions.h:583
LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile, unsigned Align, AtomicOrdering Order, SyncScope::ID SSID, BasicBlock *InsertAtEnd)
Definition: Instructions.h:226
unsigned getNumSuccessors() const
const BasicBlock * operator*() const
static BranchInst * Create(BasicBlock *IfTrue, BasicBlock *IfFalse, Value *Cond, Instruction *InsertBefore=nullptr)
bool isUsedWithInAlloca() const
Return true if this alloca is used as an inalloca argument to a call.
Definition: Instructions.h:125
const_op_iterator idx_begin() const
Definition: Instructions.h:980
static bool classof(const Value *V)
This instruction compares its operands according to the predicate given to the constructor.
bool operator==(const CaseIteratorImpl &RHS) const
static bool classof(const Value *V)
static bool classof(const Value *V)
This class represents a no-op cast from one type to another.
op_iterator idx_begin()
Definition: Instructions.h:979
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory)...
Definition: APInt.h:33
Value * getInsertedValueOperand()
unsigned getOpcode() const
Returns a member of one of the enums like Instruction::Add.
Definition: Instruction.h:126
static bool isReverseMask(const Constant *Mask)
static bool classof(const Value *V)
Value * getLoadStorePointerOperand(Value *V)
A helper function that returns the pointer operand of a load or store instruction.
void setInstructionSubclassData(unsigned short D)
Definition: Instruction.h:740
An instruction for storing to memory.
Definition: Instructions.h:321
unsigned getLoadStoreAddressSpace(Value *I)
A helper function that returns the address space of the pointer operand of load or store instruction...
This class represents a cast from floating point to signed integer.
BasicBlock * getSuccessor(unsigned idx) const
bool isSelect() const
Return true if this shuffle chooses elements from its source vectors without lane crossings and all o...
const_op_range incoming_values() const
Value * getParentPad() const
static CallInst * Create(FunctionType *Ty, Value *Func, ArrayRef< Value *> Args, const Twine &NameStr, BasicBlock *InsertAtEnd)
static bool classof(const Value *V)
Definition: Instructions.h:150
bool operator<(const CaseIteratorImpl &RHS) const
handler_range handlers()
iteration adapter for range-for loops.
CRTP base class which implements the entire standard iterator facade in terms of a minimal subset of ...
Definition: iterator.h:68
ICmpInst(BasicBlock &InsertAtEnd, Predicate pred, Value *LHS, Value *RHS, const Twine &NameStr="")
Constructor with insert-at-end semantics.
static bool classof(const Value *V)
VectorType * getType() const
Overload to return most specific vector type.
This class represents a truncation of integer types.
static unsigned getPointerOperandIndex()
Gets the operand index of the pointer operand.
unsigned getNumSuccessors() const
Return the number of successors that this instruction has.
Value * getOperand(unsigned i) const
Definition: User.h:170
Class to represent pointers.
Definition: DerivedTypes.h:467
unsigned getNumSuccessors() const
bool isRelational() const
Return true if the predicate is relational (not EQ or NE).
unsigned getAddressSpace() const
Returns the address space of this instruction&#39;s pointer type.
Definition: Instructions.h:963
Type * getScalarType() const
If this is a vector type, return the element type, otherwise return &#39;this&#39;.
Definition: Type.h:304
void setUnwindDest(BasicBlock *NewDest)
CaseHandle(SwitchInst *SI, ptrdiff_t Index)
an instruction for type-safe pointer arithmetic to access elements of arrays and structs ...
Definition: Instructions.h:854
unsigned getNumSuccessors() const
LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile, Instruction *InsertBefore=nullptr)
Definition: Instructions.h:205
static InvokeInst * Create(Value *Func, BasicBlock *IfNormal, BasicBlock *IfException, ArrayRef< Value *> Args, ArrayRef< OperandBundleDef > Bundles, const Twine &NameStr, BasicBlock *InsertAtEnd)
static bool classof(const Instruction *I)
static bool classof(const Value *V)
static unsigned getPointerOperandIndex()
Definition: Instructions.h:620
#define P(N)
initializer< Ty > init(const Ty &Val)
Definition: CommandLine.h:423
This instruction inserts a single (scalar) element into a VectorType value.
void setParentPad(Value *ParentPad)
const Use * getOperandList() const
Definition: User.h:163
The landingpad instruction holds all of the information necessary to generate correct exception handl...
The const version of succ_op_iterator.
VAArgInst(Value *List, Type *Ty, const Twine &NameStr, BasicBlock *InsertAtEnd)
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
SyncScope::ID getSyncScopeID() const
Returns the synchronization scope ID of this rmw instruction.
Definition: Instructions.h:787
bool hasIndices() const
MutableArrayRef - Represent a mutable reference to an array (0 or more elements consecutively in memo...
Definition: ArrayRef.h:291
static unsigned getAggregateOperandIndex()
LLVM Basic Block Representation.
Definition: BasicBlock.h:58
PointerIntPair - This class implements a pair of a pointer and small integer.
The instances of the Type class are immutable: once they are created, they are never changed...
Definition: Type.h:46
static unsigned getPointerOperandIndex()
Definition: Instructions.h:415
This is an important class for using LLVM in a threaded context.
Definition: LLVMContext.h:69
Conditional or Unconditional Branch instruction.
PowerPC Reduce CR logical Operation
static ExtractValueInst * Create(Value *Agg, ArrayRef< unsigned > Idxs, const Twine &NameStr="", Instruction *InsertBefore=nullptr)
void setSyncScopeID(SyncScope::ID SSID)
Sets the synchronization scope ID of this store instruction.
Definition: Instructions.h:390
CRTP base class for adapting an iterator to a different type.
Definition: iterator.h:206
iterator_range< const_succ_op_iterator > successors() const
static InvokeInst * Create(FunctionType *Ty, Value *Func, BasicBlock *IfNormal, BasicBlock *IfException, ArrayRef< Value *> Args, const Twine &NameStr, BasicBlock *InsertAtEnd)
size_t size() const
size - Get the array size.
Definition: ArrayRef.h:149
This function has undefined behavior.
This is an important base class in LLVM.
Definition: Constant.h:42
bool isExtractSubvectorMask(int &Index) const
Return true if this shuffle mask is an extract subvector mask.
a unary instruction
Resume the propagation of an exception.
LLVM_ATTRIBUTE_ALWAYS_INLINE iterator begin()
Definition: SmallVector.h:129
void setFailureOrdering(AtomicOrdering Ordering)
Sets the failure ordering constraint of this cmpxchg instruction.
Definition: Instructions.h:601
Value * getIncomingValueForBlock(const BasicBlock *BB) const
bool isIdentity() const
Return true if this shuffle chooses elements from exactly one source vector without lane crossings an...
void setUsedWithInAlloca(bool V)
Specify whether this alloca is used to represent the arguments to a call.
Definition: Instructions.h:130
static BranchInst * Create(BasicBlock *IfTrue, BasicBlock *InsertAtEnd)
Indirect Branch Instruction.
amdgpu inline
static InvokeInst * Create(Function *Func, BasicBlock *IfNormal, BasicBlock *IfException, ArrayRef< Value *> Args, const Twine &NameStr, BasicBlock *InsertAtEnd)
static bool isReverseMask(ArrayRef< int > M, EVT VT)
unsigned getPointerAddressSpace() const
Returns the address space of the pointer operand.
unsigned getNumIndices() const
BasicBlock * getDefaultDest() const
const Value * getCompareOperand() const
Definition: Instructions.h:623
static bool classof(const Value *V)
bool isUnordered() const
Definition: Instructions.h:279
const Value * getPointerOperand() const
Definition: Instructions.h:995
const_op_iterator idx_end() const
Definition: Instructions.h:982
static SelectInst * Create(Value *C, Value *S1, Value *S2, const Twine &NameStr, BasicBlock *InsertAtEnd)
op_iterator op_end()
Definition: User.h:232
static CallInst * Create(Value *Func, const Twine &NameStr="", Instruction *InsertBefore=nullptr)
static unsigned getPointerOperandIndex()
static bool classof(const Value *V)
This instruction compares its operands according to the predicate given to the constructor.
static InvokeInst * Create(FunctionType *Ty, Value *Func, BasicBlock *IfNormal, BasicBlock *IfException, ArrayRef< Value *> Args, ArrayRef< OperandBundleDef > Bundles, const Twine &NameStr, BasicBlock *InsertAtEnd)
static GetElementPtrInst * CreateInBounds(Type *PointeeType, Value *Ptr, ArrayRef< Value *> IdxList, const Twine &NameStr, BasicBlock *InsertAtEnd)
Definition: Instructions.h:938
op_range operands()
Definition: User.h:238
Value * getPointerOperand()
Definition: Instructions.h:285
static bool classof(const Value *V)
CaseIteratorImpl & operator+=(ptrdiff_t N)
const Value * getInsertedValueOperand() const
iterator_range< block_iterator > blocks()
unsigned getAddressSpace() const
Returns the address space of this instruction&#39;s pointer type.
LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile, BasicBlock *InsertAtEnd)
Definition: Instructions.h:209
static bool classof(const Value *V)
const Value * getPointerOperand() const
Gets the pointer operand.
auto find_if(R &&Range, UnaryPredicate P) -> decltype(adl_begin(Range))
Provide wrappers to std::find_if which take ranges instead of having to pass begin/end explicitly...
Definition: STLExtras.h:1214
VectorType * getVectorOperandType() const
void setTailCallKind(TailCallKind TCK)
void setSourceElementType(Type *Ty)
Definition: Instructions.h:953
static CallInst * Create(Value *Func, const Twine &NameStr, BasicBlock *InsertAtEnd)
This class represents a cast from an integer to a pointer.
const Value * getCondition() const
Value * getCondition()
Type * getPointerOperandType() const
Method to return the pointer operand as a PointerType.
LoadInst(Value *Ptr, const Twine &NameStr, BasicBlock *InsertAtEnd)
Definition: Instructions.h:202
static bool classof(const Value *V)
Definition: Instructions.h:427
void setTailCall(bool isTC=true)
This class represents the va_arg llvm instruction, which returns an argument of the specified type gi...
SyncScope::ID getSyncScopeID() const
Returns the synchronization scope ID of this cmpxchg instruction.
Definition: Instructions.h:609
BasicBlock * getSuccessor(unsigned i) const
static bool classof(const Instruction *I)
void swapOperands()
Exchange the two operands to this instruction in such a way that it does not modify the semantics of ...
const Value * getArraySize() const
Get the number of elements allocated.
Definition: Instructions.h:93
static CatchReturnInst * Create(Value *CatchPad, BasicBlock *BB, BasicBlock *InsertAtEnd)
static unsigned getIncomingValueNumForOperand(unsigned i)
size_t size() const
Definition: SmallVector.h:53
Value * getIncomingValue(unsigned i) const
Return incoming value number x.
const Value * getPointerOperand() const
const Value * getPointerOperand() const
Gets the pointer operand.
void setSuccessor(unsigned Idx, BasicBlock *NewSucc)
AtomicOrdering getOrdering() const
Returns the ordering constraint of this rmw instruction.
Definition: Instructions.h:774
int getMaskValue(unsigned Elt) const
Return the shuffle mask value of this instruction for the given element index.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
const Value * getAggregateOperand() const
const Value * getIndexOperand() const
static IndirectBrInst * Create(Value *Address, unsigned NumDests, Instruction *InsertBefore=nullptr)
static InvokeInst * Create(Value *Func, BasicBlock *IfNormal, BasicBlock *IfException, ArrayRef< Value *> Args, const Twine &NameStr, Instruction *InsertBefore=nullptr)
CaseIteratorImpl & operator-=(ptrdiff_t N)
Type * getAllocatedType() const
Return the type that is being allocated by the instruction.
Definition: Instructions.h:106
bool isFilter(unsigned Idx) const
Return &#39;true&#39; if the clause and index Idx is a filter clause.
DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value)
Transparently provide more efficient getOperand methods.
void setSyncScopeID(SyncScope::ID SSID)
Sets the synchronization scope ID of this load instruction.
Definition: Instructions.h:265
static bool classof(const Instruction *I)
Definition: Instructions.h:657
void setSuccessor(unsigned idx, BasicBlock *NewSucc)
Optional< uint64_t > getAllocationSizeInBits(const DataLayout &DL) const
Get allocation size in bits.
static bool classof(const Value *V)
Definition: Instructions.h:504
idx_iterator idx_begin() const
hexagon gen pred
static AtomicOrdering getStrongestFailureOrdering(AtomicOrdering SuccessOrdering)
Returns the strongest permitted ordering on failure, given the desired ordering on success...
Definition: Instructions.h:641
static InsertElementInst * Create(Value *Vec, Value *NewElt, Value *Idx, const Twine &NameStr, BasicBlock *InsertAtEnd)
Iterator for directly iterating over the operand Values.
Definition: User.h:246
iterator_range< T > make_range(T x, T y)
Convenience function for iterating over sub-ranges.
BasicBlock * getNormalDest() const
bool unwindsToCaller() const
static bool classof(const Instruction *I)
Methods for support type inquiry through isa, cast, and dyn_cast:
static bool classof(const Value *V)
unsigned getDestAddressSpace() const
Returns the address space of the result.
const Value * getPointerOperand() const
Definition: Instructions.h:286
Value * getValOperand()
Definition: Instructions.h:800
static bool classof(const Instruction *I)
Predicate getPredicate(unsigned Condition, unsigned Hint)
Return predicate consisting of specified condition and hint bits.
Definition: PPCPredicates.h:88
const_succ_op_iterator(const_value_op_iterator I)
static bool classof(const Value *V)
unsigned getNumOperands() const
Definition: User.h:192
This is the shared class of boolean and integer constants.
Definition: Constants.h:84
static bool classof(const Instruction *I)
void setIncomingBlock(unsigned i, BasicBlock *BB)
static CleanupPadInst * Create(Value *ParentPad, ArrayRef< Value *> Args=None, const Twine &NameStr="", Instruction *InsertBefore=nullptr)
static CatchSwitchInst * Create(Value *ParentPad, BasicBlock *UnwindDest, unsigned NumHandlers, const Twine &NameStr="", Instruction *InsertBefore=nullptr)
static bool classof(const Instruction *I)
static bool isSingleSourceMask(const Constant *Mask)
static bool classof(const Instruction *I)
Definition: Instructions.h:809
bool hasUnwindDest() const
static SwitchInst * Create(Value *Value, BasicBlock *Default, unsigned NumCases, Instruction *InsertBefore=nullptr)
static InvokeInst * Create(Value *Func, BasicBlock *IfNormal, BasicBlock *IfException, ArrayRef< Value *> Args, ArrayRef< OperandBundleDef > Bundles=None, const Twine &NameStr="", Instruction *InsertBefore=nullptr)
Type * checkGEPType(Type *Ty)
Definition: Instructions.h:846
static bool classof(const Instruction *I)
This is a &#39;vector&#39; (really, a variable-sized array), optimized for the case when the array is small...
Definition: SmallVector.h:847
static bool classof(const Instruction *I)
Methods for support type inquiry through isa, cast, and dyn_cast:
BasicBlock * getUnwindDest() const
Type * getReturnType() const
Definition: DerivedTypes.h:124
This class represents a cast from floating point to unsigned integer.
static bool classof(const Instruction *I)
Methods for support type inquiry through isa, cast, and dyn_cast:
const Value * getPointerOperand() const
Definition: Instructions.h:619
static GCRegistry::Add< StatepointGC > D("statepoint-example", "an example strategy for statepoint")
static BranchInst * Create(BasicBlock *IfTrue, Instruction *InsertBefore=nullptr)
static bool classof(const Instruction *I)
Methods for support type inquiry through isa, cast, and dyn_cast:
bool isConditional() const
Predicate getSignedPredicate() const
For example, EQ->EQ, SLE->SLE, UGT->SGT, etc.
static bool classof(const Instruction *I)
iterator_range< idx_iterator > indices() const
bool changesLength() const
Return true if this shuffle returns a vector with a different number of elements than its source vect...
static PHINode * Create(Type *Ty, unsigned NumReservedValues, const Twine &NameStr="", Instruction *InsertBefore=nullptr)
Constructors - NumReservedValues is a hint for the number of incoming edges that this phi node will h...
static CallInst * Create(Value *Func, ArrayRef< Value *> Args, const Twine &NameStr, BasicBlock *InsertAtEnd)
unsigned getNumIncomingValues() const
Return the number of incoming edges.
CaseIt findCaseValue(const ConstantInt *C)
Search all of the case values for the specified constant.
void setSuccessor(unsigned idx, BasicBlock *NewSucc)
static bool classof(const Instruction *I)
static CallInst * Create(Function *Func, ArrayRef< Value *> Args, const Twine &NameStr, BasicBlock *InsertAtEnd)
FCmpInst(BasicBlock &InsertAtEnd, Predicate pred, Value *LHS, Value *RHS, const Twine &NameStr="")
Constructor with insert-at-end semantics.
void setOperand(unsigned i, Value *Val)
Definition: User.h:175
void swap(llvm::BitVector &LHS, llvm::BitVector &RHS)
Implement std::swap in terms of BitVector swap.
Definition: BitVector.h:941
unsigned getVectorNumElements() const
Definition: DerivedTypes.h:462
FunctionType * getFunctionType() const
Returns the FunctionType for me.
Definition: Function.h:164
A range adaptor for a pair of iterators.
bool isZeroEltSplat() const
Return true if all elements of this shuffle are the same value as the first element of exactly one so...
Class to represent vector types.
Definition: DerivedTypes.h:393
void setVolatile(bool V)
Specify whether this is a volatile store or not.
Definition: Instructions.h:357
unsigned getNumSuccessors() const
Class for arbitrary precision integers.
Definition: APInt.h:70
static bool classof(const Instruction *I)
static bool classof(const Value *V)
static bool classof(const Value *V)
static CleanupPadInst * Create(Value *ParentPad, ArrayRef< Value *> Args, const Twine &NameStr, BasicBlock *InsertAtEnd)
VAArgInst(Value *List, Type *Ty, const Twine &NameStr="", Instruction *InsertBefore=nullptr)
bool isCleanup() const
Return &#39;true&#39; if this landingpad instruction is a cleanup.
void setWeak(bool IsWeak)
Definition: Instructions.h:574
void setResultElementType(Type *Ty)
Definition: Instructions.h:954
unsigned getSuccessorIndex() const
Returns successor index for current case successor.
static bool classof(const Value *V)
static ReturnInst * Create(LLVMContext &C, BasicBlock *InsertAtEnd)
bool isTailCall() const
FCmpInst(Instruction *InsertBefore, Predicate pred, Value *LHS, Value *RHS, const Twine &NameStr="")
Constructor with insert-before-instruction semantics.
static ResumeInst * Create(Value *Exn, BasicBlock *InsertAtEnd)
const Value * getFalseValue() const
void setCondition(Value *V)
static InvokeInst * Create(Function *Func, BasicBlock *IfNormal, BasicBlock *IfException, ArrayRef< Value *> Args, ArrayRef< OperandBundleDef > Bundles=None, const Twine &NameStr="", Instruction *InsertBefore=nullptr)
static CatchPadInst * Create(Value *CatchSwitch, ArrayRef< Value *> Args, const Twine &NameStr="", Instruction *InsertBefore=nullptr)
void setSwiftError(bool V)
Specify whether this alloca is used to represent a swifterror.
Definition: Instructions.h:141
user_iterator_impl< const User > const_user_iterator
Definition: Value.h:370
static CallInst * Create(Function *Func, const Twine &NameStr="", Instruction *InsertBefore=nullptr)
static bool classof(const Value *V)
Definition: Instructions.h:299
static ExtractValueInst * Create(Value *Agg, ArrayRef< unsigned > Idxs, const Twine &NameStr, BasicBlock *InsertAtEnd)
iterator_range< op_iterator > indices()
Definition: Instructions.h:984
bool isTranspose() const
Return true if this shuffle transposes the elements of its inputs without changing the length of the ...
void setOrdering(AtomicOrdering Ordering)
Sets the ordering constraint of this store instruction.
Definition: Instructions.h:379
ConstCaseIt case_default() const
LLVM_ATTRIBUTE_ALWAYS_INLINE iterator end()
Definition: SmallVector.h:133
SyncScope::ID getSyncScopeID() const
Returns the synchronization scope ID of this fence instruction.
Definition: Instructions.h:491
bool isVolatile() const
Return true if this is a store to a volatile memory location.
Definition: Instructions.h:354
Value * getPointerOperand()
Gets the pointer operand.
bool isInlineAsm() const
Check if this call is an inline asm statement.
void setTrueValue(Value *V)
static CallInst * Create(Value *Func, ArrayRef< Value *> Args, ArrayRef< OperandBundleDef > Bundles, const Twine &NameStr, BasicBlock *InsertAtEnd)
bool unwindsToCaller() const
Type * getPointerOperandType() const
Definition: Instructions.h:288
unsigned getAlignment() const
Return the alignment of the access that is being performed.
Definition: Instructions.h:241
static bool classof(const Instruction *I)
Methods for support type inquiry through isa, cast, and dyn_cast:
void setCondition(Value *V)
UnaryOps getOpcode() const
AtomicOrdering getOrdering() const
Returns the ordering constraint of this store instruction.
Definition: Instructions.h:373
const BasicBlock * getDestination(unsigned i) const
static InvokeInst * Create(FunctionType *Ty, Value *Func, BasicBlock *IfNormal, BasicBlock *IfException, ArrayRef< Value *> Args, const Twine &NameStr, Instruction *InsertBefore=nullptr)
const Value * getVectorOperand() const
void setOperation(BinOp Operation)
Definition: Instructions.h:751
Value * getPointerOperand()
Definition: Instructions.h:796
void setSyncScopeID(SyncScope::ID SSID)
Sets the synchronization scope ID of this fence instruction.
Definition: Instructions.h:496
static bool classof(const Instruction *I)
Methods for support type inquiry through isa, cast, and dyn_cast:
static InsertValueInst * Create(Value *Agg, Value *Val, ArrayRef< unsigned > Idxs, const Twine &NameStr="", Instruction *InsertBefore=nullptr)
BasicBlock * getIncomingBlock(unsigned i) const
Return incoming basic block number i.
static bool classof(const Instruction *I)
Methods for support type inquiry through isa, cast, and dyn_cast:
static bool classof(const Value *V)
void setValue(ConstantInt *V)
Sets the new value for current case.
SyncScope::ID getSyncScopeID() const
Returns the synchronization scope ID of this load instruction.
Definition: Instructions.h:260
const NodeList & List
Definition: RDFGraph.cpp:210
bool isEquality() const
Return true if this predicate is either EQ or NE.
static ReturnInst * Create(LLVMContext &C, Value *retVal, BasicBlock *InsertAtEnd)
#define I(x, y, z)
Definition: MD5.cpp:58
Value * getValue() const
Convenience accessor.
#define N
LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile, unsigned Align, BasicBlock *InsertAtEnd)
Definition: Instructions.h:217
const Value * getAddress() const
bool isCatch(unsigned Idx) const
Return &#39;true&#39; if the clause and index Idx is a catch clause.
static bool classof(const Value *V)
This class represents a cast unsigned integer to floating point.
static bool classof(const Value *V)
Definition: Instructions.h:812
Type * getResultElementType() const
Definition: Instructions.h:956
static bool classof(const Value *V)
BasicBlockT * getCaseSuccessor() const
Resolves successor for current case.
static CallInst * Create(Function *Func, ArrayRef< Value *> Args, const Twine &NameStr="", Instruction *InsertBefore=nullptr)
succ_op_iterator(value_op_iterator I)
Compile-time customization of User operands.
Definition: User.h:43
static bool classof(const Instruction *I)
Methods for support type inquiry through isa, cast, and dyn_cast:
void setSyncScopeID(SyncScope::ID SSID)
Sets the synchronization scope ID of this cmpxchg instruction.
Definition: Instructions.h:614
idx_iterator idx_begin() const
This instruction extracts a single (scalar) element from a VectorType value.
The const version of succ_op_iterator.
static bool classof(const Value *V)
void setFalseValue(Value *V)
uint32_t Size
Definition: Profile.cpp:47
Value * getCatchSwitchParentPad() const
Get the parentPad of this catchret&#39;s catchpad&#39;s catchswitch.
static bool classof(const Instruction *I)
static bool isTransposeMask(const Constant *Mask)
static unsigned getPointerOperandIndex()
Definition: Instructions.h:798
const BasicBlock *(*)(const Value *) ConstDerefFnTy
Value * getReturnValue() const
Convenience accessor. Returns null if there is no return value.
CaseIt case_default()
Returns an iterator that points to the default case.
const Value * getPointerOperand() const
Definition: Instructions.h:797
bool isUnconditional() const
ICmpInst(Predicate pred, Value *LHS, Value *RHS, const Twine &NameStr="")
Constructor with no-insertion semantics.
unsigned getAlignment() const
Return the alignment of the access that is being performed.
Definition: Instructions.h:366
static bool classof(const Instruction *I)
Methods for support type inquiry through isa, cast, and dyn_cast:
void setCatchSwitch(Value *CatchSwitch)
CatchPadInst * getCatchPad() const
Convenience accessors.
ConstCaseIt case_end() const
Returns a read-only iterator that points one past the last in the SwitchInst.
void reserveClauses(unsigned Size)
Grow the size of the operand list to accommodate the new number of clauses.
static bool classof(const Value *V)
static bool classof(const Value *V)
Definition: Instructions.h:660
void setCondition(Value *V)
unsigned getLoadStoreAlignment(Value *I)
A helper function that returns the alignment of load or store instruction.
unsigned getPointerAddressSpace() const
Returns the address space of the pointer operand.
Definition: Instructions.h:291
const unsigned Kind
LoadInst(Value *Ptr, const Twine &NameStr="", Instruction *InsertBefore=nullptr)
Definition: Instructions.h:198
Multiway switch.
const BasicBlock * operator->() const
static unsigned getPointerOperandIndex()
Definition: Instructions.h:287
This class represents a cast from signed integer to floating point.
static GetElementPtrInst * CreateInBounds(Value *Ptr, ArrayRef< Value *> IdxList, const Twine &NameStr="", Instruction *InsertBefore=nullptr)
Create an "inbounds" getelementptr.
Definition: Instructions.h:914
void swapOperands()
Exchange the two operands to this instruction in such a way that it does not modify the semantics of ...
static Type * getGEPReturnType(Value *Ptr, ArrayRef< Value *> IdxList)
Returns the pointer type returned by the GEP instruction, which may be a vector of pointers...
bool isArrayAllocation() const
Return true if there is an allocation size parameter to the allocation instruction that is not 1...
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
handler_iterator handler_end()
Returns a read-only iterator that points one past the last handler in the CatchSwitchInst.
SmallVector< int, 16 > getShuffleMask() const
unsigned getNumSuccessors() const
const_block_iterator block_end() const
This class represents a truncation of floating point types.
BasicBlock * getUnwindDest() const
static CatchReturnInst * Create(Value *CatchPad, BasicBlock *BB, Instruction *InsertBefore=nullptr)
void setSuccessOrdering(AtomicOrdering Ordering)
Sets the success ordering constraint of this cmpxchg instruction.
Definition: Instructions.h:588
ArrayRef< unsigned > getIndices() const
LLVM Value Representation.
Definition: Value.h:73
static GetElementPtrInst * CreateInBounds(Value *Ptr, ArrayRef< Value *> IdxList, const Twine &NameStr, BasicBlock *InsertAtEnd)
Definition: Instructions.h:931
static unsigned getAggregateOperandIndex()
bool canReturnTwice() const
Return true if the call can return twice.
void setDefaultDest(BasicBlock *DefaultCase)
unsigned getNumSuccessors() const
HungoffOperandTraits - determine the allocation regime of the Use array when it is not a prefix to th...
Definition: OperandTraits.h:96
void copyMetadata(const Instruction &SrcInst, ArrayRef< unsigned > WL=ArrayRef< unsigned >())
Copy metadata from SrcInst to this instruction.
static VectorType * get(Type *ElementType, unsigned NumElements)
This static method is the primary way to construct an VectorType.
Definition: Type.cpp:606
void allocHungoffUses(unsigned N, bool IsPhi=false)
Allocate the array of Uses, followed by a pointer (with bottom bit set) to the User.
Definition: User.cpp:40
Synchronized with respect to all concurrently executing threads.
Definition: LLVMContext.h:59
static CleanupReturnInst * Create(Value *CleanupPad, BasicBlock *UnwindBB=nullptr, Instruction *InsertBefore=nullptr)
std::underlying_type< E >::type Mask()
Get a bitmask with 1s in all places up to the high-order bit of E&#39;s largest value.
Definition: BitmaskEnum.h:81
static InvokeInst * Create(Function *Func, BasicBlock *IfNormal, BasicBlock *IfException, ArrayRef< Value *> Args, ArrayRef< OperandBundleDef > Bundles, const Twine &NameStr, BasicBlock *InsertAtEnd)
Invoke instruction.
static CatchPadInst * Create(Value *CatchSwitch, ArrayRef< Value *> Args, const Twine &NameStr, BasicBlock *InsertAtEnd)
static bool classof(const Instruction *I)
Definition: Instructions.h:501
void setSuccessor(BasicBlock *S)
Sets the new successor for current case.
A handle to a particular switch case.
bool isNoTailCall() const
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:49
FixedNumOperandTraits - determine the allocation regime of the Use array when it is a prefix to the U...
Definition: OperandTraits.h:31
ICmpInst(Instruction *InsertBefore, Predicate pred, Value *LHS, Value *RHS, const Twine &NameStr="")
Constructor with insert-before-instruction semantics.
Use & Op()
Definition: User.h:134
AtomicOrdering getOrdering() const
Returns the ordering constraint of this fence instruction.
Definition: Instructions.h:479
static bool classof(const Value *V)
static bool isVolatile(Instruction *Inst)
bool isStaticAlloca() const
Return true if this alloca is in the entry block of the function and is a constant size...
VariadicOperandTraits - determine the allocation regime of the Use array when it is a prefix to the U...
Definition: OperandTraits.h:69
bool isSimple() const
Definition: Instructions.h:402
void setNumHungOffUseOperands(unsigned NumOps)
Subclasses with hung off uses need to manage the operand count themselves.
Definition: User.h:216
bool increasesLength() const
Return true if this shuffle returns a vector with a greater number of elements than its source vector...
Iterator type that casts an operand to a basic block.
void setIncomingValue(unsigned i, Value *V)
static GetElementPtrInst * CreateInBounds(Type *PointeeType, Value *Ptr, ArrayRef< Value *> IdxList, const Twine &NameStr="", Instruction *InsertBefore=nullptr)
Definition: Instructions.h:922
static ExtractElementInst * Create(Value *Vec, Value *Idx, const Twine &NameStr="", Instruction *InsertBefore=nullptr)
static bool classof(const Value *V)
static bool isIdentityMask(const Constant *Mask)
op_range incoming_values()
This class represents an extension of floating point types.
LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile, unsigned Align, AtomicOrdering Order, SyncScope::ID SSID=SyncScope::System, Instruction *InsertBefore=nullptr)
Definition: Instructions.h:221
void setVolatile(bool V)
Specify whether this is a volatile load or not.
Definition: Instructions.h:235
Predicate getUnsignedPredicate() const
For example, EQ->EQ, SLE->ULE, UGT->UGT, etc.
const Value * getValOperand() const
Definition: Instructions.h:801
VectorType * getType() const
Overload to return most specific vector type.
Value * getPointerOperand()
Definition: Instructions.h:413
static Type * getGEPReturnType(Type *ElTy, Value *Ptr, ArrayRef< Value *> IdxList)
static bool classof(const Value *V)
static CallInst * Create(FunctionType *Ty, Value *F, const Twine &NameStr, BasicBlock *InsertAtEnd)
static bool classof(const Instruction *I)
constexpr char Args[]
Key for Kernel::Metadata::mArgs.
static unsigned getPointerOperandIndex()
Definition: Instructions.h:998
void setSuccessor(unsigned i, BasicBlock *NewSucc)
static InvokeInst * Create(FunctionType *Ty, Value *Func, BasicBlock *IfNormal, BasicBlock *IfException, ArrayRef< Value *> Args, ArrayRef< OperandBundleDef > Bundles=None, const Twine &NameStr="", Instruction *InsertBefore=nullptr)
static void commuteShuffleMask(MutableArrayRef< int > Mask, unsigned InVecNumElts)
Change values in a shuffle permute mask assuming the two vector operands of length InVecNumElts have ...
bool isVolatile() const
Return true if this is a RMW on a volatile memory location.
Definition: Instructions.h:759
static bool classof(const Value *V)
static IndirectBrInst * Create(Value *Address, unsigned NumDests, BasicBlock *InsertAtEnd)
an instruction to allocate memory on the stack
Definition: Instructions.h:60
static bool classof(const Instruction *I)
This instruction inserts a struct field of array element value into an aggregate value.
void setCatchPad(CatchPadInst *CatchPad)
bool isCommutative() const
static CallInst * Create(FunctionType *Ty, Value *Func, ArrayRef< Value *> Args, ArrayRef< OperandBundleDef > Bundles, const Twine &NameStr, BasicBlock *InsertAtEnd)
static bool classof(const Instruction *I)
Definition: Instructions.h:147
CatchSwitchInst * getCatchSwitch() const
Convenience accessors.
const_handler_iterator handler_end() const
Returns an iterator that points one past the last handler in the CatchSwitchInst. ...
LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile, unsigned Align, Instruction *InsertBefore=nullptr)
Definition: Instructions.h:213
Predicate getSwappedPredicate(Predicate Opcode)
Assume the condition register is set by MI(a,b), return the predicate if we modify the instructions s...