5173658b5218129b680bd18a4b351183965ec043
[oota-llvm.git] / include / llvm / IR / InstrTypes.h
1 //===-- llvm/InstrTypes.h - Important Instruction subclasses ----*- 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 defines various meta classes of instructions that exist in the VM
11 // representation.  Specific concrete subclasses of these may be found in the
12 // i*.h files...
13 //
14 //===----------------------------------------------------------------------===//
15
16 #ifndef LLVM_IR_INSTRTYPES_H
17 #define LLVM_IR_INSTRTYPES_H
18
19 #include "llvm/ADT/Optional.h"
20 #include "llvm/ADT/Twine.h"
21 #include "llvm/IR/Attributes.h"
22 #include "llvm/IR/DerivedTypes.h"
23 #include "llvm/IR/Instruction.h"
24 #include "llvm/IR/LLVMContext.h"
25 #include "llvm/IR/OperandTraits.h"
26
27 namespace llvm {
28
29 class LLVMContext;
30
31 //===----------------------------------------------------------------------===//
32 //                            TerminatorInst Class
33 //===----------------------------------------------------------------------===//
34
35 /// Subclasses of this class are all able to terminate a basic
36 /// block. Thus, these are all the flow control type of operations.
37 ///
38 class TerminatorInst : public Instruction {
39 protected:
40   TerminatorInst(Type *Ty, Instruction::TermOps iType,
41                  Use *Ops, unsigned NumOps,
42                  Instruction *InsertBefore = nullptr)
43     : Instruction(Ty, iType, Ops, NumOps, InsertBefore) {}
44
45   TerminatorInst(Type *Ty, Instruction::TermOps iType,
46                  Use *Ops, unsigned NumOps, BasicBlock *InsertAtEnd)
47     : Instruction(Ty, iType, Ops, NumOps, InsertAtEnd) {}
48
49   // Out of line virtual method, so the vtable, etc has a home.
50   ~TerminatorInst() override;
51
52   /// Virtual methods - Terminators should overload these and provide inline
53   /// overrides of non-V methods.
54   virtual BasicBlock *getSuccessorV(unsigned idx) const = 0;
55   virtual unsigned getNumSuccessorsV() const = 0;
56   virtual void setSuccessorV(unsigned idx, BasicBlock *B) = 0;
57
58 public:
59   /// Return the number of successors that this terminator has.
60   unsigned getNumSuccessors() const {
61     return getNumSuccessorsV();
62   }
63
64   /// Return the specified successor.
65   BasicBlock *getSuccessor(unsigned idx) const {
66     return getSuccessorV(idx);
67   }
68
69   /// Update the specified successor to point at the provided block.
70   void setSuccessor(unsigned idx, BasicBlock *B) {
71     setSuccessorV(idx, B);
72   }
73
74   // Methods for support type inquiry through isa, cast, and dyn_cast:
75   static inline bool classof(const Instruction *I) {
76     return I->isTerminator();
77   }
78   static inline bool classof(const Value *V) {
79     return isa<Instruction>(V) && classof(cast<Instruction>(V));
80   }
81
82   // \brief Returns true if this terminator relates to exception handling.
83   bool isExceptional() const {
84     switch (getOpcode()) {
85     case Instruction::CatchSwitch:
86     case Instruction::CatchRet:
87     case Instruction::CleanupRet:
88     case Instruction::Invoke:
89     case Instruction::Resume:
90       return true;
91     default:
92       return false;
93     }
94   }
95
96   //===--------------------------------------------------------------------===//
97   // succ_iterator definition
98   //===--------------------------------------------------------------------===//
99
100   template <class Term, class BB> // Successor Iterator
101   class SuccIterator : public std::iterator<std::random_access_iterator_tag, BB,
102                                             int, BB *, BB *> {
103     typedef std::iterator<std::random_access_iterator_tag, BB, int, BB *, BB *>
104         super;
105
106   public:
107     typedef typename super::pointer pointer;
108     typedef typename super::reference reference;
109
110   private:
111     Term TermInst;
112     unsigned idx;
113     typedef SuccIterator<Term, BB> Self;
114
115     inline bool index_is_valid(unsigned idx) {
116       return idx < TermInst->getNumSuccessors();
117     }
118
119     /// \brief Proxy object to allow write access in operator[]
120     class SuccessorProxy {
121       Self it;
122
123     public:
124       explicit SuccessorProxy(const Self &it) : it(it) {}
125
126       SuccessorProxy(const SuccessorProxy &) = default;
127
128       SuccessorProxy &operator=(SuccessorProxy r) {
129         *this = reference(r);
130         return *this;
131       }
132
133       SuccessorProxy &operator=(reference r) {
134         it.TermInst->setSuccessor(it.idx, r);
135         return *this;
136       }
137
138       operator reference() const { return *it; }
139     };
140
141   public:
142     // begin iterator
143     explicit inline SuccIterator(Term T) : TermInst(T), idx(0) {}
144     // end iterator
145     inline SuccIterator(Term T, bool) : TermInst(T) {
146       if (TermInst)
147         idx = TermInst->getNumSuccessors();
148       else
149         // Term == NULL happens, if a basic block is not fully constructed and
150         // consequently getTerminator() returns NULL. In this case we construct
151         // a SuccIterator which describes a basic block that has zero
152         // successors.
153         // Defining SuccIterator for incomplete and malformed CFGs is especially
154         // useful for debugging.
155         idx = 0;
156     }
157
158     /// This is used to interface between code that wants to
159     /// operate on terminator instructions directly.
160     unsigned getSuccessorIndex() const { return idx; }
161
162     inline bool operator==(const Self &x) const { return idx == x.idx; }
163     inline bool operator!=(const Self &x) const { return !operator==(x); }
164
165     inline reference operator*() const { return TermInst->getSuccessor(idx); }
166     inline pointer operator->() const { return operator*(); }
167
168     inline Self &operator++() {
169       ++idx;
170       return *this;
171     } // Preincrement
172
173     inline Self operator++(int) { // Postincrement
174       Self tmp = *this;
175       ++*this;
176       return tmp;
177     }
178
179     inline Self &operator--() {
180       --idx;
181       return *this;
182     }                             // Predecrement
183     inline Self operator--(int) { // Postdecrement
184       Self tmp = *this;
185       --*this;
186       return tmp;
187     }
188
189     inline bool operator<(const Self &x) const {
190       assert(TermInst == x.TermInst &&
191              "Cannot compare iterators of different blocks!");
192       return idx < x.idx;
193     }
194
195     inline bool operator<=(const Self &x) const {
196       assert(TermInst == x.TermInst &&
197              "Cannot compare iterators of different blocks!");
198       return idx <= x.idx;
199     }
200     inline bool operator>=(const Self &x) const {
201       assert(TermInst == x.TermInst &&
202              "Cannot compare iterators of different blocks!");
203       return idx >= x.idx;
204     }
205
206     inline bool operator>(const Self &x) const {
207       assert(TermInst == x.TermInst &&
208              "Cannot compare iterators of different blocks!");
209       return idx > x.idx;
210     }
211
212     inline Self &operator+=(int Right) {
213       unsigned new_idx = idx + Right;
214       assert(index_is_valid(new_idx) && "Iterator index out of bound");
215       idx = new_idx;
216       return *this;
217     }
218
219     inline Self operator+(int Right) const {
220       Self tmp = *this;
221       tmp += Right;
222       return tmp;
223     }
224
225     inline Self &operator-=(int Right) { return operator+=(-Right); }
226
227     inline Self operator-(int Right) const { return operator+(-Right); }
228
229     inline int operator-(const Self &x) const {
230       assert(TermInst == x.TermInst &&
231              "Cannot work on iterators of different blocks!");
232       int distance = idx - x.idx;
233       return distance;
234     }
235
236     inline SuccessorProxy operator[](int offset) {
237       Self tmp = *this;
238       tmp += offset;
239       return SuccessorProxy(tmp);
240     }
241
242     /// Get the source BB of this iterator.
243     inline BB *getSource() {
244       assert(TermInst && "Source not available, if basic block was malformed");
245       return TermInst->getParent();
246     }
247   };
248
249   typedef SuccIterator<TerminatorInst *, BasicBlock> succ_iterator;
250   typedef SuccIterator<const TerminatorInst *, const BasicBlock>
251       succ_const_iterator;
252   typedef llvm::iterator_range<succ_iterator> succ_range;
253   typedef llvm::iterator_range<succ_const_iterator> succ_const_range;
254
255 private:
256   inline succ_iterator succ_begin() { return succ_iterator(this); }
257   inline succ_const_iterator succ_begin() const {
258     return succ_const_iterator(this);
259   }
260   inline succ_iterator succ_end() { return succ_iterator(this, true); }
261   inline succ_const_iterator succ_end() const {
262     return succ_const_iterator(this, true);
263   }
264
265 public:
266   inline succ_range successors() {
267     return succ_range(succ_begin(), succ_end());
268   }
269   inline succ_const_range successors() const {
270     return succ_const_range(succ_begin(), succ_end());
271   }
272 };
273
274 //===----------------------------------------------------------------------===//
275 //                          UnaryInstruction Class
276 //===----------------------------------------------------------------------===//
277
278 class UnaryInstruction : public Instruction {
279   void *operator new(size_t, unsigned) = delete;
280
281 protected:
282   UnaryInstruction(Type *Ty, unsigned iType, Value *V,
283                    Instruction *IB = nullptr)
284     : Instruction(Ty, iType, &Op<0>(), 1, IB) {
285     Op<0>() = V;
286   }
287   UnaryInstruction(Type *Ty, unsigned iType, Value *V, BasicBlock *IAE)
288     : Instruction(Ty, iType, &Op<0>(), 1, IAE) {
289     Op<0>() = V;
290   }
291
292 public:
293   // allocate space for exactly one operand
294   void *operator new(size_t s) {
295     return User::operator new(s, 1);
296   }
297
298   // Out of line virtual method, so the vtable, etc has a home.
299   ~UnaryInstruction() override;
300
301   /// Transparently provide more efficient getOperand methods.
302   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
303
304   // Methods for support type inquiry through isa, cast, and dyn_cast:
305   static inline bool classof(const Instruction *I) {
306     return I->getOpcode() == Instruction::Alloca ||
307            I->getOpcode() == Instruction::Load ||
308            I->getOpcode() == Instruction::VAArg ||
309            I->getOpcode() == Instruction::ExtractValue ||
310            (I->getOpcode() >= CastOpsBegin && I->getOpcode() < CastOpsEnd);
311   }
312   static inline bool classof(const Value *V) {
313     return isa<Instruction>(V) && classof(cast<Instruction>(V));
314   }
315 };
316
317 template <>
318 struct OperandTraits<UnaryInstruction> :
319   public FixedNumOperandTraits<UnaryInstruction, 1> {
320 };
321
322 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(UnaryInstruction, Value)
323
324 //===----------------------------------------------------------------------===//
325 //                           BinaryOperator Class
326 //===----------------------------------------------------------------------===//
327
328 class BinaryOperator : public Instruction {
329   void *operator new(size_t, unsigned) = delete;
330
331 protected:
332   void init(BinaryOps iType);
333   BinaryOperator(BinaryOps iType, Value *S1, Value *S2, Type *Ty,
334                  const Twine &Name, Instruction *InsertBefore);
335   BinaryOperator(BinaryOps iType, Value *S1, Value *S2, Type *Ty,
336                  const Twine &Name, BasicBlock *InsertAtEnd);
337
338   // Note: Instruction needs to be a friend here to call cloneImpl.
339   friend class Instruction;
340   BinaryOperator *cloneImpl() const;
341
342 public:
343   // allocate space for exactly two operands
344   void *operator new(size_t s) {
345     return User::operator new(s, 2);
346   }
347
348   /// Transparently provide more efficient getOperand methods.
349   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
350
351   /// Construct a binary instruction, given the opcode and the two
352   /// operands.  Optionally (if InstBefore is specified) insert the instruction
353   /// into a BasicBlock right before the specified instruction.  The specified
354   /// Instruction is allowed to be a dereferenced end iterator.
355   ///
356   static BinaryOperator *Create(BinaryOps Op, Value *S1, Value *S2,
357                                 const Twine &Name = Twine(),
358                                 Instruction *InsertBefore = nullptr);
359
360   /// Construct a binary instruction, given the opcode and the two
361   /// operands.  Also automatically insert this instruction to the end of the
362   /// BasicBlock specified.
363   ///
364   static BinaryOperator *Create(BinaryOps Op, Value *S1, Value *S2,
365                                 const Twine &Name, BasicBlock *InsertAtEnd);
366
367   /// These methods just forward to Create, and are useful when you
368   /// statically know what type of instruction you're going to create.  These
369   /// helpers just save some typing.
370 #define HANDLE_BINARY_INST(N, OPC, CLASS) \
371   static BinaryOperator *Create##OPC(Value *V1, Value *V2, \
372                                      const Twine &Name = "") {\
373     return Create(Instruction::OPC, V1, V2, Name);\
374   }
375 #include "llvm/IR/Instruction.def"
376 #define HANDLE_BINARY_INST(N, OPC, CLASS) \
377   static BinaryOperator *Create##OPC(Value *V1, Value *V2, \
378                                      const Twine &Name, BasicBlock *BB) {\
379     return Create(Instruction::OPC, V1, V2, Name, BB);\
380   }
381 #include "llvm/IR/Instruction.def"
382 #define HANDLE_BINARY_INST(N, OPC, CLASS) \
383   static BinaryOperator *Create##OPC(Value *V1, Value *V2, \
384                                      const Twine &Name, Instruction *I) {\
385     return Create(Instruction::OPC, V1, V2, Name, I);\
386   }
387 #include "llvm/IR/Instruction.def"
388
389   static BinaryOperator *CreateNSW(BinaryOps Opc, Value *V1, Value *V2,
390                                    const Twine &Name = "") {
391     BinaryOperator *BO = Create(Opc, V1, V2, Name);
392     BO->setHasNoSignedWrap(true);
393     return BO;
394   }
395   static BinaryOperator *CreateNSW(BinaryOps Opc, Value *V1, Value *V2,
396                                    const Twine &Name, BasicBlock *BB) {
397     BinaryOperator *BO = Create(Opc, V1, V2, Name, BB);
398     BO->setHasNoSignedWrap(true);
399     return BO;
400   }
401   static BinaryOperator *CreateNSW(BinaryOps Opc, Value *V1, Value *V2,
402                                    const Twine &Name, Instruction *I) {
403     BinaryOperator *BO = Create(Opc, V1, V2, Name, I);
404     BO->setHasNoSignedWrap(true);
405     return BO;
406   }
407
408   static BinaryOperator *CreateNUW(BinaryOps Opc, Value *V1, Value *V2,
409                                    const Twine &Name = "") {
410     BinaryOperator *BO = Create(Opc, V1, V2, Name);
411     BO->setHasNoUnsignedWrap(true);
412     return BO;
413   }
414   static BinaryOperator *CreateNUW(BinaryOps Opc, Value *V1, Value *V2,
415                                    const Twine &Name, BasicBlock *BB) {
416     BinaryOperator *BO = Create(Opc, V1, V2, Name, BB);
417     BO->setHasNoUnsignedWrap(true);
418     return BO;
419   }
420   static BinaryOperator *CreateNUW(BinaryOps Opc, Value *V1, Value *V2,
421                                    const Twine &Name, Instruction *I) {
422     BinaryOperator *BO = Create(Opc, V1, V2, Name, I);
423     BO->setHasNoUnsignedWrap(true);
424     return BO;
425   }
426
427   static BinaryOperator *CreateExact(BinaryOps Opc, Value *V1, Value *V2,
428                                      const Twine &Name = "") {
429     BinaryOperator *BO = Create(Opc, V1, V2, Name);
430     BO->setIsExact(true);
431     return BO;
432   }
433   static BinaryOperator *CreateExact(BinaryOps Opc, Value *V1, Value *V2,
434                                      const Twine &Name, BasicBlock *BB) {
435     BinaryOperator *BO = Create(Opc, V1, V2, Name, BB);
436     BO->setIsExact(true);
437     return BO;
438   }
439   static BinaryOperator *CreateExact(BinaryOps Opc, Value *V1, Value *V2,
440                                      const Twine &Name, Instruction *I) {
441     BinaryOperator *BO = Create(Opc, V1, V2, Name, I);
442     BO->setIsExact(true);
443     return BO;
444   }
445
446 #define DEFINE_HELPERS(OPC, NUWNSWEXACT)                                       \
447   static BinaryOperator *Create##NUWNSWEXACT##OPC(Value *V1, Value *V2,        \
448                                                   const Twine &Name = "") {    \
449     return Create##NUWNSWEXACT(Instruction::OPC, V1, V2, Name);                \
450   }                                                                            \
451   static BinaryOperator *Create##NUWNSWEXACT##OPC(                             \
452       Value *V1, Value *V2, const Twine &Name, BasicBlock *BB) {               \
453     return Create##NUWNSWEXACT(Instruction::OPC, V1, V2, Name, BB);            \
454   }                                                                            \
455   static BinaryOperator *Create##NUWNSWEXACT##OPC(                             \
456       Value *V1, Value *V2, const Twine &Name, Instruction *I) {               \
457     return Create##NUWNSWEXACT(Instruction::OPC, V1, V2, Name, I);             \
458   }
459
460   DEFINE_HELPERS(Add, NSW) // CreateNSWAdd
461   DEFINE_HELPERS(Add, NUW) // CreateNUWAdd
462   DEFINE_HELPERS(Sub, NSW) // CreateNSWSub
463   DEFINE_HELPERS(Sub, NUW) // CreateNUWSub
464   DEFINE_HELPERS(Mul, NSW) // CreateNSWMul
465   DEFINE_HELPERS(Mul, NUW) // CreateNUWMul
466   DEFINE_HELPERS(Shl, NSW) // CreateNSWShl
467   DEFINE_HELPERS(Shl, NUW) // CreateNUWShl
468
469   DEFINE_HELPERS(SDiv, Exact)  // CreateExactSDiv
470   DEFINE_HELPERS(UDiv, Exact)  // CreateExactUDiv
471   DEFINE_HELPERS(AShr, Exact)  // CreateExactAShr
472   DEFINE_HELPERS(LShr, Exact)  // CreateExactLShr
473
474 #undef DEFINE_HELPERS
475
476   /// Helper functions to construct and inspect unary operations (NEG and NOT)
477   /// via binary operators SUB and XOR:
478   ///
479   /// Create the NEG and NOT instructions out of SUB and XOR instructions.
480   ///
481   static BinaryOperator *CreateNeg(Value *Op, const Twine &Name = "",
482                                    Instruction *InsertBefore = nullptr);
483   static BinaryOperator *CreateNeg(Value *Op, const Twine &Name,
484                                    BasicBlock *InsertAtEnd);
485   static BinaryOperator *CreateNSWNeg(Value *Op, const Twine &Name = "",
486                                       Instruction *InsertBefore = nullptr);
487   static BinaryOperator *CreateNSWNeg(Value *Op, const Twine &Name,
488                                       BasicBlock *InsertAtEnd);
489   static BinaryOperator *CreateNUWNeg(Value *Op, const Twine &Name = "",
490                                       Instruction *InsertBefore = nullptr);
491   static BinaryOperator *CreateNUWNeg(Value *Op, const Twine &Name,
492                                       BasicBlock *InsertAtEnd);
493   static BinaryOperator *CreateFNeg(Value *Op, const Twine &Name = "",
494                                     Instruction *InsertBefore = nullptr);
495   static BinaryOperator *CreateFNeg(Value *Op, const Twine &Name,
496                                     BasicBlock *InsertAtEnd);
497   static BinaryOperator *CreateNot(Value *Op, const Twine &Name = "",
498                                    Instruction *InsertBefore = nullptr);
499   static BinaryOperator *CreateNot(Value *Op, const Twine &Name,
500                                    BasicBlock *InsertAtEnd);
501
502   /// Check if the given Value is a NEG, FNeg, or NOT instruction.
503   ///
504   static bool isNeg(const Value *V);
505   static bool isFNeg(const Value *V, bool IgnoreZeroSign=false);
506   static bool isNot(const Value *V);
507
508   /// Helper functions to extract the unary argument of a NEG, FNEG or NOT
509   /// operation implemented via Sub, FSub, or Xor.
510   ///
511   static const Value *getNegArgument(const Value *BinOp);
512   static       Value *getNegArgument(      Value *BinOp);
513   static const Value *getFNegArgument(const Value *BinOp);
514   static       Value *getFNegArgument(      Value *BinOp);
515   static const Value *getNotArgument(const Value *BinOp);
516   static       Value *getNotArgument(      Value *BinOp);
517
518   BinaryOps getOpcode() const {
519     return static_cast<BinaryOps>(Instruction::getOpcode());
520   }
521
522   /// Exchange the two operands to this instruction.
523   /// This instruction is safe to use on any binary instruction and
524   /// does not modify the semantics of the instruction.  If the instruction
525   /// cannot be reversed (ie, it's a Div), then return true.
526   ///
527   bool swapOperands();
528
529   /// Set or clear the nsw flag on this instruction, which must be an operator
530   /// which supports this flag. See LangRef.html for the meaning of this flag.
531   void setHasNoUnsignedWrap(bool b = true);
532
533   /// Set or clear the nsw flag on this instruction, which must be an operator
534   /// which supports this flag. See LangRef.html for the meaning of this flag.
535   void setHasNoSignedWrap(bool b = true);
536
537   /// Set or clear the exact flag on this instruction, which must be an operator
538   /// which supports this flag. See LangRef.html for the meaning of this flag.
539   void setIsExact(bool b = true);
540
541   /// Determine whether the no unsigned wrap flag is set.
542   bool hasNoUnsignedWrap() const;
543
544   /// Determine whether the no signed wrap flag is set.
545   bool hasNoSignedWrap() const;
546
547   /// Determine whether the exact flag is set.
548   bool isExact() const;
549
550   /// Convenience method to copy supported wrapping, exact, and fast-math flags
551   /// from V to this instruction.
552   void copyIRFlags(const Value *V);
553
554   /// Logical 'and' of any supported wrapping, exact, and fast-math flags of
555   /// V and this instruction.
556   void andIRFlags(const Value *V);
557
558   // Methods for support type inquiry through isa, cast, and dyn_cast:
559   static inline bool classof(const Instruction *I) {
560     return I->isBinaryOp();
561   }
562   static inline bool classof(const Value *V) {
563     return isa<Instruction>(V) && classof(cast<Instruction>(V));
564   }
565 };
566
567 template <>
568 struct OperandTraits<BinaryOperator> :
569   public FixedNumOperandTraits<BinaryOperator, 2> {
570 };
571
572 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(BinaryOperator, Value)
573
574 //===----------------------------------------------------------------------===//
575 //                               CastInst Class
576 //===----------------------------------------------------------------------===//
577
578 /// This is the base class for all instructions that perform data
579 /// casts. It is simply provided so that instruction category testing
580 /// can be performed with code like:
581 ///
582 /// if (isa<CastInst>(Instr)) { ... }
583 /// @brief Base class of casting instructions.
584 class CastInst : public UnaryInstruction {
585   void anchor() override;
586
587 protected:
588   /// @brief Constructor with insert-before-instruction semantics for subclasses
589   CastInst(Type *Ty, unsigned iType, Value *S,
590            const Twine &NameStr = "", Instruction *InsertBefore = nullptr)
591     : UnaryInstruction(Ty, iType, S, InsertBefore) {
592     setName(NameStr);
593   }
594   /// @brief Constructor with insert-at-end-of-block semantics for subclasses
595   CastInst(Type *Ty, unsigned iType, Value *S,
596            const Twine &NameStr, BasicBlock *InsertAtEnd)
597     : UnaryInstruction(Ty, iType, S, InsertAtEnd) {
598     setName(NameStr);
599   }
600
601 public:
602   /// Provides a way to construct any of the CastInst subclasses using an
603   /// opcode instead of the subclass's constructor. The opcode must be in the
604   /// CastOps category (Instruction::isCast(opcode) returns true). This
605   /// constructor has insert-before-instruction semantics to automatically
606   /// insert the new CastInst before InsertBefore (if it is non-null).
607   /// @brief Construct any of the CastInst subclasses
608   static CastInst *Create(
609     Instruction::CastOps,    ///< The opcode of the cast instruction
610     Value *S,                ///< The value to be casted (operand 0)
611     Type *Ty,          ///< The type to which cast should be made
612     const Twine &Name = "", ///< Name for the instruction
613     Instruction *InsertBefore = nullptr ///< Place to insert the instruction
614   );
615   /// Provides a way to construct any of the CastInst subclasses using an
616   /// opcode instead of the subclass's constructor. The opcode must be in the
617   /// CastOps category. This constructor has insert-at-end-of-block semantics
618   /// to automatically insert the new CastInst at the end of InsertAtEnd (if
619   /// its non-null).
620   /// @brief Construct any of the CastInst subclasses
621   static CastInst *Create(
622     Instruction::CastOps,    ///< The opcode for the cast instruction
623     Value *S,                ///< The value to be casted (operand 0)
624     Type *Ty,          ///< The type to which operand is casted
625     const Twine &Name, ///< The name for the instruction
626     BasicBlock *InsertAtEnd  ///< The block to insert the instruction into
627   );
628
629   /// @brief Create a ZExt or BitCast cast instruction
630   static CastInst *CreateZExtOrBitCast(
631     Value *S,                ///< The value to be casted (operand 0)
632     Type *Ty,          ///< The type to which cast should be made
633     const Twine &Name = "", ///< Name for the instruction
634     Instruction *InsertBefore = nullptr ///< Place to insert the instruction
635   );
636
637   /// @brief Create a ZExt or BitCast cast instruction
638   static CastInst *CreateZExtOrBitCast(
639     Value *S,                ///< The value to be casted (operand 0)
640     Type *Ty,          ///< The type to which operand is casted
641     const Twine &Name, ///< The name for the instruction
642     BasicBlock *InsertAtEnd  ///< The block to insert the instruction into
643   );
644
645   /// @brief Create a SExt or BitCast cast instruction
646   static CastInst *CreateSExtOrBitCast(
647     Value *S,                ///< The value to be casted (operand 0)
648     Type *Ty,          ///< The type to which cast should be made
649     const Twine &Name = "", ///< Name for the instruction
650     Instruction *InsertBefore = nullptr ///< Place to insert the instruction
651   );
652
653   /// @brief Create a SExt or BitCast cast instruction
654   static CastInst *CreateSExtOrBitCast(
655     Value *S,                ///< The value to be casted (operand 0)
656     Type *Ty,          ///< The type to which operand is casted
657     const Twine &Name, ///< The name for the instruction
658     BasicBlock *InsertAtEnd  ///< The block to insert the instruction into
659   );
660
661   /// @brief Create a BitCast AddrSpaceCast, or a PtrToInt cast instruction.
662   static CastInst *CreatePointerCast(
663     Value *S,                ///< The pointer value to be casted (operand 0)
664     Type *Ty,          ///< The type to which operand is casted
665     const Twine &Name, ///< The name for the instruction
666     BasicBlock *InsertAtEnd  ///< The block to insert the instruction into
667   );
668
669   /// @brief Create a BitCast, AddrSpaceCast or a PtrToInt cast instruction.
670   static CastInst *CreatePointerCast(
671     Value *S,                ///< The pointer value to be casted (operand 0)
672     Type *Ty,          ///< The type to which cast should be made
673     const Twine &Name = "", ///< Name for the instruction
674     Instruction *InsertBefore = nullptr ///< Place to insert the instruction
675   );
676
677   /// @brief Create a BitCast or an AddrSpaceCast cast instruction.
678   static CastInst *CreatePointerBitCastOrAddrSpaceCast(
679     Value *S,                ///< The pointer value to be casted (operand 0)
680     Type *Ty,          ///< The type to which operand is casted
681     const Twine &Name, ///< The name for the instruction
682     BasicBlock *InsertAtEnd  ///< The block to insert the instruction into
683   );
684
685   /// @brief Create a BitCast or an AddrSpaceCast cast instruction.
686   static CastInst *CreatePointerBitCastOrAddrSpaceCast(
687     Value *S,                ///< The pointer value to be casted (operand 0)
688     Type *Ty,          ///< The type to which cast should be made
689     const Twine &Name = "", ///< Name for the instruction
690     Instruction *InsertBefore = nullptr ///< Place to insert the instruction
691   );
692
693   /// @brief Create a BitCast, a PtrToInt, or an IntToPTr cast instruction.
694   ///
695   /// If the value is a pointer type and the destination an integer type,
696   /// creates a PtrToInt cast. If the value is an integer type and the
697   /// destination a pointer type, creates an IntToPtr cast. Otherwise, creates
698   /// a bitcast.
699   static CastInst *CreateBitOrPointerCast(
700     Value *S,                ///< The pointer value to be casted (operand 0)
701     Type *Ty,          ///< The type to which cast should be made
702     const Twine &Name = "", ///< Name for the instruction
703     Instruction *InsertBefore = nullptr ///< Place to insert the instruction
704   );
705
706   /// @brief Create a ZExt, BitCast, or Trunc for int -> int casts.
707   static CastInst *CreateIntegerCast(
708     Value *S,                ///< The pointer value to be casted (operand 0)
709     Type *Ty,          ///< The type to which cast should be made
710     bool isSigned,           ///< Whether to regard S as signed or not
711     const Twine &Name = "", ///< Name for the instruction
712     Instruction *InsertBefore = nullptr ///< Place to insert the instruction
713   );
714
715   /// @brief Create a ZExt, BitCast, or Trunc for int -> int casts.
716   static CastInst *CreateIntegerCast(
717     Value *S,                ///< The integer value to be casted (operand 0)
718     Type *Ty,          ///< The integer type to which operand is casted
719     bool isSigned,           ///< Whether to regard S as signed or not
720     const Twine &Name, ///< The name for the instruction
721     BasicBlock *InsertAtEnd  ///< The block to insert the instruction into
722   );
723
724   /// @brief Create an FPExt, BitCast, or FPTrunc for fp -> fp casts
725   static CastInst *CreateFPCast(
726     Value *S,                ///< The floating point value to be casted
727     Type *Ty,          ///< The floating point type to cast to
728     const Twine &Name = "", ///< Name for the instruction
729     Instruction *InsertBefore = nullptr ///< Place to insert the instruction
730   );
731
732   /// @brief Create an FPExt, BitCast, or FPTrunc for fp -> fp casts
733   static CastInst *CreateFPCast(
734     Value *S,                ///< The floating point value to be casted
735     Type *Ty,          ///< The floating point type to cast to
736     const Twine &Name, ///< The name for the instruction
737     BasicBlock *InsertAtEnd  ///< The block to insert the instruction into
738   );
739
740   /// @brief Create a Trunc or BitCast cast instruction
741   static CastInst *CreateTruncOrBitCast(
742     Value *S,                ///< The value to be casted (operand 0)
743     Type *Ty,          ///< The type to which cast should be made
744     const Twine &Name = "", ///< Name for the instruction
745     Instruction *InsertBefore = nullptr ///< Place to insert the instruction
746   );
747
748   /// @brief Create a Trunc or BitCast cast instruction
749   static CastInst *CreateTruncOrBitCast(
750     Value *S,                ///< The value to be casted (operand 0)
751     Type *Ty,          ///< The type to which operand is casted
752     const Twine &Name, ///< The name for the instruction
753     BasicBlock *InsertAtEnd  ///< The block to insert the instruction into
754   );
755
756   /// @brief Check whether it is valid to call getCastOpcode for these types.
757   static bool isCastable(
758     Type *SrcTy, ///< The Type from which the value should be cast.
759     Type *DestTy ///< The Type to which the value should be cast.
760   );
761
762   /// @brief Check whether a bitcast between these types is valid
763   static bool isBitCastable(
764     Type *SrcTy, ///< The Type from which the value should be cast.
765     Type *DestTy ///< The Type to which the value should be cast.
766   );
767
768   /// @brief Check whether a bitcast, inttoptr, or ptrtoint cast between these
769   /// types is valid and a no-op.
770   ///
771   /// This ensures that any pointer<->integer cast has enough bits in the
772   /// integer and any other cast is a bitcast.
773   static bool isBitOrNoopPointerCastable(
774       Type *SrcTy,  ///< The Type from which the value should be cast.
775       Type *DestTy, ///< The Type to which the value should be cast.
776       const DataLayout &DL);
777
778   /// Returns the opcode necessary to cast Val into Ty using usual casting
779   /// rules.
780   /// @brief Infer the opcode for cast operand and type
781   static Instruction::CastOps getCastOpcode(
782     const Value *Val, ///< The value to cast
783     bool SrcIsSigned, ///< Whether to treat the source as signed
784     Type *Ty,   ///< The Type to which the value should be casted
785     bool DstIsSigned  ///< Whether to treate the dest. as signed
786   );
787
788   /// There are several places where we need to know if a cast instruction
789   /// only deals with integer source and destination types. To simplify that
790   /// logic, this method is provided.
791   /// @returns true iff the cast has only integral typed operand and dest type.
792   /// @brief Determine if this is an integer-only cast.
793   bool isIntegerCast() const;
794
795   /// A lossless cast is one that does not alter the basic value. It implies
796   /// a no-op cast but is more stringent, preventing things like int->float,
797   /// long->double, or int->ptr.
798   /// @returns true iff the cast is lossless.
799   /// @brief Determine if this is a lossless cast.
800   bool isLosslessCast() const;
801
802   /// A no-op cast is one that can be effected without changing any bits.
803   /// It implies that the source and destination types are the same size. The
804   /// IntPtrTy argument is used to make accurate determinations for casts
805   /// involving Integer and Pointer types. They are no-op casts if the integer
806   /// is the same size as the pointer. However, pointer size varies with
807   /// platform. Generally, the result of DataLayout::getIntPtrType() should be
808   /// passed in. If that's not available, use Type::Int64Ty, which will make
809   /// the isNoopCast call conservative.
810   /// @brief Determine if the described cast is a no-op cast.
811   static bool isNoopCast(
812     Instruction::CastOps Opcode,  ///< Opcode of cast
813     Type *SrcTy,   ///< SrcTy of cast
814     Type *DstTy,   ///< DstTy of cast
815     Type *IntPtrTy ///< Integer type corresponding to Ptr types
816   );
817
818   /// @brief Determine if this cast is a no-op cast.
819   bool isNoopCast(
820     Type *IntPtrTy ///< Integer type corresponding to pointer
821   ) const;
822
823   /// @brief Determine if this cast is a no-op cast.
824   ///
825   /// \param DL is the DataLayout to get the Int Ptr type from.
826   bool isNoopCast(const DataLayout &DL) const;
827
828   /// Determine how a pair of casts can be eliminated, if they can be at all.
829   /// This is a helper function for both CastInst and ConstantExpr.
830   /// @returns 0 if the CastInst pair can't be eliminated, otherwise
831   /// returns Instruction::CastOps value for a cast that can replace
832   /// the pair, casting SrcTy to DstTy.
833   /// @brief Determine if a cast pair is eliminable
834   static unsigned isEliminableCastPair(
835     Instruction::CastOps firstOpcode,  ///< Opcode of first cast
836     Instruction::CastOps secondOpcode, ///< Opcode of second cast
837     Type *SrcTy, ///< SrcTy of 1st cast
838     Type *MidTy, ///< DstTy of 1st cast & SrcTy of 2nd cast
839     Type *DstTy, ///< DstTy of 2nd cast
840     Type *SrcIntPtrTy, ///< Integer type corresponding to Ptr SrcTy, or null
841     Type *MidIntPtrTy, ///< Integer type corresponding to Ptr MidTy, or null
842     Type *DstIntPtrTy  ///< Integer type corresponding to Ptr DstTy, or null
843   );
844
845   /// @brief Return the opcode of this CastInst
846   Instruction::CastOps getOpcode() const {
847     return Instruction::CastOps(Instruction::getOpcode());
848   }
849
850   /// @brief Return the source type, as a convenience
851   Type* getSrcTy() const { return getOperand(0)->getType(); }
852   /// @brief Return the destination type, as a convenience
853   Type* getDestTy() const { return getType(); }
854
855   /// This method can be used to determine if a cast from S to DstTy using
856   /// Opcode op is valid or not.
857   /// @returns true iff the proposed cast is valid.
858   /// @brief Determine if a cast is valid without creating one.
859   static bool castIsValid(Instruction::CastOps op, Value *S, Type *DstTy);
860
861   /// @brief Methods for support type inquiry through isa, cast, and dyn_cast:
862   static inline bool classof(const Instruction *I) {
863     return I->isCast();
864   }
865   static inline bool classof(const Value *V) {
866     return isa<Instruction>(V) && classof(cast<Instruction>(V));
867   }
868 };
869
870 //===----------------------------------------------------------------------===//
871 //                               CmpInst Class
872 //===----------------------------------------------------------------------===//
873
874 /// This class is the base class for the comparison instructions.
875 /// @brief Abstract base class of comparison instructions.
876 class CmpInst : public Instruction {
877   void *operator new(size_t, unsigned) = delete;
878   CmpInst() = delete;
879
880 protected:
881   CmpInst(Type *ty, Instruction::OtherOps op, unsigned short pred,
882           Value *LHS, Value *RHS, const Twine &Name = "",
883           Instruction *InsertBefore = nullptr);
884
885   CmpInst(Type *ty, Instruction::OtherOps op, unsigned short pred,
886           Value *LHS, Value *RHS, const Twine &Name,
887           BasicBlock *InsertAtEnd);
888
889   void anchor() override; // Out of line virtual method.
890
891 public:
892   /// This enumeration lists the possible predicates for CmpInst subclasses.
893   /// Values in the range 0-31 are reserved for FCmpInst, while values in the
894   /// range 32-64 are reserved for ICmpInst. This is necessary to ensure the
895   /// predicate values are not overlapping between the classes.
896   enum Predicate {
897     // Opcode              U L G E    Intuitive operation
898     FCMP_FALSE =  0,  ///< 0 0 0 0    Always false (always folded)
899     FCMP_OEQ   =  1,  ///< 0 0 0 1    True if ordered and equal
900     FCMP_OGT   =  2,  ///< 0 0 1 0    True if ordered and greater than
901     FCMP_OGE   =  3,  ///< 0 0 1 1    True if ordered and greater than or equal
902     FCMP_OLT   =  4,  ///< 0 1 0 0    True if ordered and less than
903     FCMP_OLE   =  5,  ///< 0 1 0 1    True if ordered and less than or equal
904     FCMP_ONE   =  6,  ///< 0 1 1 0    True if ordered and operands are unequal
905     FCMP_ORD   =  7,  ///< 0 1 1 1    True if ordered (no nans)
906     FCMP_UNO   =  8,  ///< 1 0 0 0    True if unordered: isnan(X) | isnan(Y)
907     FCMP_UEQ   =  9,  ///< 1 0 0 1    True if unordered or equal
908     FCMP_UGT   = 10,  ///< 1 0 1 0    True if unordered or greater than
909     FCMP_UGE   = 11,  ///< 1 0 1 1    True if unordered, greater than, or equal
910     FCMP_ULT   = 12,  ///< 1 1 0 0    True if unordered or less than
911     FCMP_ULE   = 13,  ///< 1 1 0 1    True if unordered, less than, or equal
912     FCMP_UNE   = 14,  ///< 1 1 1 0    True if unordered or not equal
913     FCMP_TRUE  = 15,  ///< 1 1 1 1    Always true (always folded)
914     FIRST_FCMP_PREDICATE = FCMP_FALSE,
915     LAST_FCMP_PREDICATE = FCMP_TRUE,
916     BAD_FCMP_PREDICATE = FCMP_TRUE + 1,
917     ICMP_EQ    = 32,  ///< equal
918     ICMP_NE    = 33,  ///< not equal
919     ICMP_UGT   = 34,  ///< unsigned greater than
920     ICMP_UGE   = 35,  ///< unsigned greater or equal
921     ICMP_ULT   = 36,  ///< unsigned less than
922     ICMP_ULE   = 37,  ///< unsigned less or equal
923     ICMP_SGT   = 38,  ///< signed greater than
924     ICMP_SGE   = 39,  ///< signed greater or equal
925     ICMP_SLT   = 40,  ///< signed less than
926     ICMP_SLE   = 41,  ///< signed less or equal
927     FIRST_ICMP_PREDICATE = ICMP_EQ,
928     LAST_ICMP_PREDICATE = ICMP_SLE,
929     BAD_ICMP_PREDICATE = ICMP_SLE + 1
930   };
931
932   // allocate space for exactly two operands
933   void *operator new(size_t s) {
934     return User::operator new(s, 2);
935   }
936   /// Construct a compare instruction, given the opcode, the predicate and
937   /// the two operands.  Optionally (if InstBefore is specified) insert the
938   /// instruction into a BasicBlock right before the specified instruction.
939   /// The specified Instruction is allowed to be a dereferenced end iterator.
940   /// @brief Create a CmpInst
941   static CmpInst *Create(OtherOps Op,
942                          unsigned short predicate, Value *S1,
943                          Value *S2, const Twine &Name = "",
944                          Instruction *InsertBefore = nullptr);
945
946   /// Construct a compare instruction, given the opcode, the predicate and the
947   /// two operands.  Also automatically insert this instruction to the end of
948   /// the BasicBlock specified.
949   /// @brief Create a CmpInst
950   static CmpInst *Create(OtherOps Op, unsigned short predicate, Value *S1,
951                          Value *S2, const Twine &Name, BasicBlock *InsertAtEnd);
952
953   /// @brief Get the opcode casted to the right type
954   OtherOps getOpcode() const {
955     return static_cast<OtherOps>(Instruction::getOpcode());
956   }
957
958   /// @brief Return the predicate for this instruction.
959   Predicate getPredicate() const {
960     return Predicate(getSubclassDataFromInstruction());
961   }
962
963   /// @brief Set the predicate for this instruction to the specified value.
964   void setPredicate(Predicate P) { setInstructionSubclassData(P); }
965
966   static bool isFPPredicate(Predicate P) {
967     return P >= FIRST_FCMP_PREDICATE && P <= LAST_FCMP_PREDICATE;
968   }
969
970   static bool isIntPredicate(Predicate P) {
971     return P >= FIRST_ICMP_PREDICATE && P <= LAST_ICMP_PREDICATE;
972   }
973
974   bool isFPPredicate() const { return isFPPredicate(getPredicate()); }
975   bool isIntPredicate() const { return isIntPredicate(getPredicate()); }
976
977   /// For example, EQ -> NE, UGT -> ULE, SLT -> SGE,
978   ///              OEQ -> UNE, UGT -> OLE, OLT -> UGE, etc.
979   /// @returns the inverse predicate for the instruction's current predicate.
980   /// @brief Return the inverse of the instruction's predicate.
981   Predicate getInversePredicate() const {
982     return getInversePredicate(getPredicate());
983   }
984
985   /// For example, EQ -> NE, UGT -> ULE, SLT -> SGE,
986   ///              OEQ -> UNE, UGT -> OLE, OLT -> UGE, etc.
987   /// @returns the inverse predicate for predicate provided in \p pred.
988   /// @brief Return the inverse of a given predicate
989   static Predicate getInversePredicate(Predicate pred);
990
991   /// For example, EQ->EQ, SLE->SGE, ULT->UGT,
992   ///              OEQ->OEQ, ULE->UGE, OLT->OGT, etc.
993   /// @returns the predicate that would be the result of exchanging the two
994   /// operands of the CmpInst instruction without changing the result
995   /// produced.
996   /// @brief Return the predicate as if the operands were swapped
997   Predicate getSwappedPredicate() const {
998     return getSwappedPredicate(getPredicate());
999   }
1000
1001   /// This is a static version that you can use without an instruction
1002   /// available.
1003   /// @brief Return the predicate as if the operands were swapped.
1004   static Predicate getSwappedPredicate(Predicate pred);
1005
1006   /// @brief Provide more efficient getOperand methods.
1007   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
1008
1009   /// This is just a convenience that dispatches to the subclasses.
1010   /// @brief Swap the operands and adjust predicate accordingly to retain
1011   /// the same comparison.
1012   void swapOperands();
1013
1014   /// This is just a convenience that dispatches to the subclasses.
1015   /// @brief Determine if this CmpInst is commutative.
1016   bool isCommutative() const;
1017
1018   /// This is just a convenience that dispatches to the subclasses.
1019   /// @brief Determine if this is an equals/not equals predicate.
1020   bool isEquality() const;
1021
1022   /// @returns true if the comparison is signed, false otherwise.
1023   /// @brief Determine if this instruction is using a signed comparison.
1024   bool isSigned() const {
1025     return isSigned(getPredicate());
1026   }
1027
1028   /// @returns true if the comparison is unsigned, false otherwise.
1029   /// @brief Determine if this instruction is using an unsigned comparison.
1030   bool isUnsigned() const {
1031     return isUnsigned(getPredicate());
1032   }
1033
1034   /// For example, ULT->SLT, ULE->SLE, UGT->SGT, UGE->SGE, SLT->Failed assert
1035   /// @returns the signed version of the unsigned predicate pred.
1036   /// @brief return the signed version of a predicate
1037   static Predicate getSignedPredicate(Predicate pred);
1038
1039   /// For example, ULT->SLT, ULE->SLE, UGT->SGT, UGE->SGE, SLT->Failed assert
1040   /// @returns the signed version of the predicate for this instruction (which
1041   /// has to be an unsigned predicate).
1042   /// @brief return the signed version of a predicate
1043   Predicate getSignedPredicate() {
1044     return getSignedPredicate(getPredicate());
1045   }
1046
1047   /// This is just a convenience.
1048   /// @brief Determine if this is true when both operands are the same.
1049   bool isTrueWhenEqual() const {
1050     return isTrueWhenEqual(getPredicate());
1051   }
1052
1053   /// This is just a convenience.
1054   /// @brief Determine if this is false when both operands are the same.
1055   bool isFalseWhenEqual() const {
1056     return isFalseWhenEqual(getPredicate());
1057   }
1058
1059   /// @returns true if the predicate is unsigned, false otherwise.
1060   /// @brief Determine if the predicate is an unsigned operation.
1061   static bool isUnsigned(unsigned short predicate);
1062
1063   /// @returns true if the predicate is signed, false otherwise.
1064   /// @brief Determine if the predicate is an signed operation.
1065   static bool isSigned(unsigned short predicate);
1066
1067   /// @brief Determine if the predicate is an ordered operation.
1068   static bool isOrdered(unsigned short predicate);
1069
1070   /// @brief Determine if the predicate is an unordered operation.
1071   static bool isUnordered(unsigned short predicate);
1072
1073   /// Determine if the predicate is true when comparing a value with itself.
1074   static bool isTrueWhenEqual(unsigned short predicate);
1075
1076   /// Determine if the predicate is false when comparing a value with itself.
1077   static bool isFalseWhenEqual(unsigned short predicate);
1078
1079   /// @brief Methods for support type inquiry through isa, cast, and dyn_cast:
1080   static inline bool classof(const Instruction *I) {
1081     return I->getOpcode() == Instruction::ICmp ||
1082            I->getOpcode() == Instruction::FCmp;
1083   }
1084   static inline bool classof(const Value *V) {
1085     return isa<Instruction>(V) && classof(cast<Instruction>(V));
1086   }
1087
1088   /// @brief Create a result type for fcmp/icmp
1089   static Type* makeCmpResultType(Type* opnd_type) {
1090     if (VectorType* vt = dyn_cast<VectorType>(opnd_type)) {
1091       return VectorType::get(Type::getInt1Ty(opnd_type->getContext()),
1092                              vt->getNumElements());
1093     }
1094     return Type::getInt1Ty(opnd_type->getContext());
1095   }
1096
1097 private:
1098   // Shadow Value::setValueSubclassData with a private forwarding method so that
1099   // subclasses cannot accidentally use it.
1100   void setValueSubclassData(unsigned short D) {
1101     Value::setValueSubclassData(D);
1102   }
1103 };
1104
1105 // FIXME: these are redundant if CmpInst < BinaryOperator
1106 template <>
1107 struct OperandTraits<CmpInst> : public FixedNumOperandTraits<CmpInst, 2> {
1108 };
1109
1110 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(CmpInst, Value)
1111
1112 //===----------------------------------------------------------------------===//
1113 //                           FuncletPadInst Class
1114 //===----------------------------------------------------------------------===//
1115 class FuncletPadInst : public Instruction {
1116 private:
1117   void init(Value *ParentPad, ArrayRef<Value *> Args, const Twine &NameStr);
1118
1119   FuncletPadInst(const FuncletPadInst &CPI);
1120
1121   explicit FuncletPadInst(Instruction::FuncletPadOps Op, Value *ParentPad,
1122                           ArrayRef<Value *> Args, unsigned Values,
1123                           const Twine &NameStr, Instruction *InsertBefore);
1124   explicit FuncletPadInst(Instruction::FuncletPadOps Op, Value *ParentPad,
1125                           ArrayRef<Value *> Args, unsigned Values,
1126                           const Twine &NameStr, BasicBlock *InsertAtEnd);
1127
1128 protected:
1129   // Note: Instruction needs to be a friend here to call cloneImpl.
1130   friend class Instruction;
1131   friend class CatchPadInst;
1132   friend class CleanupPadInst;
1133   FuncletPadInst *cloneImpl() const;
1134
1135 public:
1136   /// Provide fast operand accessors
1137   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
1138
1139   /// getNumArgOperands - Return the number of funcletpad arguments.
1140   ///
1141   unsigned getNumArgOperands() const { return getNumOperands() - 1; }
1142
1143   /// Convenience accessors
1144
1145   /// \brief Return the outer EH-pad this funclet is nested within.
1146   ///
1147   /// Note: This returns the associated CatchSwitchInst if this FuncletPadInst
1148   /// is a CatchPadInst.
1149   Value *getParentPad() const { return Op<-1>(); }
1150   void setParentPad(Value *ParentPad) {
1151     assert(ParentPad);
1152     Op<-1>() = ParentPad;
1153   }
1154
1155   /// getArgOperand/setArgOperand - Return/set the i-th funcletpad argument.
1156   ///
1157   Value *getArgOperand(unsigned i) const { return getOperand(i); }
1158   void setArgOperand(unsigned i, Value *v) { setOperand(i, v); }
1159
1160   /// arg_operands - iteration adapter for range-for loops.
1161   op_range arg_operands() { return op_range(op_begin(), op_end() - 1); }
1162
1163   /// arg_operands - iteration adapter for range-for loops.
1164   const_op_range arg_operands() const {
1165     return const_op_range(op_begin(), op_end() - 1);
1166   }
1167
1168   // Methods for support type inquiry through isa, cast, and dyn_cast:
1169   static inline bool classof(const Instruction *I) { return I->isFuncletPad(); }
1170   static inline bool classof(const Value *V) {
1171     return isa<Instruction>(V) && classof(cast<Instruction>(V));
1172   }
1173 };
1174
1175 template <>
1176 struct OperandTraits<FuncletPadInst>
1177     : public VariadicOperandTraits<FuncletPadInst, /*MINARITY=*/1> {};
1178
1179 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(FuncletPadInst, Value)
1180
1181 /// \brief A lightweight accessor for an operand bundle meant to be passed
1182 /// around by value.
1183 struct OperandBundleUse {
1184   ArrayRef<Use> Inputs;
1185
1186   OperandBundleUse() {}
1187   explicit OperandBundleUse(StringMapEntry<uint32_t> *Tag, ArrayRef<Use> Inputs)
1188       : Inputs(Inputs), Tag(Tag) {}
1189
1190   /// \brief Return true if the operand at index \p Idx in this operand bundle
1191   /// has the attribute A.
1192   bool operandHasAttr(unsigned Idx, Attribute::AttrKind A) const {
1193     if (isDeoptOperandBundle())
1194       if (A == Attribute::ReadOnly || A == Attribute::NoCapture)
1195         return Inputs[Idx]->getType()->isPointerTy();
1196
1197     // Conservative answer:  no operands have any attributes.
1198     return false;
1199   };
1200
1201   /// \brief Return the tag of this operand bundle as a string.
1202   StringRef getTagName() const {
1203     return Tag->getKey();
1204   }
1205
1206   /// \brief Return the tag of this operand bundle as an integer.
1207   ///
1208   /// Operand bundle tags are interned by LLVMContextImpl::getOrInsertBundleTag,
1209   /// and this function returns the unique integer getOrInsertBundleTag
1210   /// associated the tag of this operand bundle to.
1211   uint32_t getTagID() const {
1212     return Tag->getValue();
1213   }
1214
1215   /// \brief Return true if this is a "deopt" operand bundle.
1216   bool isDeoptOperandBundle() const {
1217     return getTagID() == LLVMContext::OB_deopt;
1218   }
1219
1220 private:
1221   /// \brief Pointer to an entry in LLVMContextImpl::getOrInsertBundleTag.
1222   StringMapEntry<uint32_t> *Tag;
1223 };
1224
1225 /// \brief A container for an operand bundle being viewed as a set of values
1226 /// rather than a set of uses.
1227 ///
1228 /// Unlike OperandBundleUse, OperandBundleDefT owns the memory it carries, and
1229 /// so it is possible to create and pass around "self-contained" instances of
1230 /// OperandBundleDef and ConstOperandBundleDef.
1231 template <typename InputTy> class OperandBundleDefT {
1232   std::string Tag;
1233   std::vector<InputTy> Inputs;
1234
1235 public:
1236   explicit OperandBundleDefT(std::string Tag, std::vector<InputTy> Inputs)
1237       : Tag(std::move(Tag)), Inputs(std::move(Inputs)) {}
1238
1239   explicit OperandBundleDefT(const OperandBundleUse &OBU) {
1240     Tag = OBU.getTagName();
1241     Inputs.insert(Inputs.end(), OBU.Inputs.begin(), OBU.Inputs.end());
1242   }
1243
1244   ArrayRef<InputTy> inputs() const { return Inputs; }
1245
1246   typedef typename std::vector<InputTy>::const_iterator input_iterator;
1247   size_t input_size() const { return Inputs.size(); }
1248   input_iterator input_begin() const { return Inputs.begin(); }
1249   input_iterator input_end() const { return Inputs.end(); }
1250
1251   StringRef getTag() const { return Tag; }
1252 };
1253
1254 typedef OperandBundleDefT<Value *> OperandBundleDef;
1255 typedef OperandBundleDefT<const Value *> ConstOperandBundleDef;
1256
1257 /// \brief A mixin to add operand bundle functionality to llvm instruction
1258 /// classes.
1259 ///
1260 /// OperandBundleUser uses the descriptor area co-allocated with the host User
1261 /// to store some meta information about which operands are "normal" operands,
1262 /// and which ones belong to some operand bundle.
1263 ///
1264 /// The layout of an operand bundle user is
1265 ///
1266 ///          +-----------uint32_t End-------------------------------------+
1267 ///          |                                                            |
1268 ///          |  +--------uint32_t Begin--------------------+              |
1269 ///          |  |                                          |              |
1270 ///          ^  ^                                          v              v
1271 ///  |------|------|----|----|----|----|----|---------|----|---------|----|-----
1272 ///  | BOI0 | BOI1 | .. | DU | U0 | U1 | .. | BOI0_U0 | .. | BOI1_U0 | .. | Un
1273 ///  |------|------|----|----|----|----|----|---------|----|---------|----|-----
1274 ///   v  v                                  ^              ^
1275 ///   |  |                                  |              |
1276 ///   |  +--------uint32_t Begin------------+              |
1277 ///   |                                                    |
1278 ///   +-----------uint32_t End-----------------------------+
1279 ///
1280 ///
1281 /// BOI0, BOI1 ... are descriptions of operand bundles in this User's use list.
1282 /// These descriptions are installed and managed by this class, and they're all
1283 /// instances of OperandBundleUser<T>::BundleOpInfo.
1284 ///
1285 /// DU is an additional descriptor installed by User's 'operator new' to keep
1286 /// track of the 'BOI0 ... BOIN' co-allocation.  OperandBundleUser does not
1287 /// access or modify DU in any way, it's an implementation detail private to
1288 /// User.
1289 ///
1290 /// The regular Use& vector for the User starts at U0.  The operand bundle uses
1291 /// are part of the Use& vector, just like normal uses.  In the diagram above,
1292 /// the operand bundle uses start at BOI0_U0.  Each instance of BundleOpInfo has
1293 /// information about a contiguous set of uses constituting an operand bundle,
1294 /// and the total set of operand bundle uses themselves form a contiguous set of
1295 /// uses (i.e. there are no gaps between uses corresponding to individual
1296 /// operand bundles).
1297 ///
1298 /// This class does not know the location of the set of operand bundle uses
1299 /// within the use list -- that is decided by the User using this class via the
1300 /// BeginIdx argument in populateBundleOperandInfos.
1301 ///
1302 /// Currently operand bundle users with hung-off operands are not supported.
1303 template <typename InstrTy, typename OpIteratorTy> class OperandBundleUser {
1304 public:
1305   /// \brief Return the number of operand bundles associated with this User.
1306   unsigned getNumOperandBundles() const {
1307     return std::distance(bundle_op_info_begin(), bundle_op_info_end());
1308   }
1309
1310   /// \brief Return true if this User has any operand bundles.
1311   bool hasOperandBundles() const { return getNumOperandBundles() != 0; }
1312
1313   /// \brief Return the index of the first bundle operand in the Use array.
1314   unsigned getBundleOperandsStartIndex() const {
1315     assert(hasOperandBundles() && "Don't call otherwise!");
1316     return bundle_op_info_begin()->Begin;
1317   }
1318
1319   /// \brief Return the index of the last bundle operand in the Use array.
1320   unsigned getBundleOperandsEndIndex() const {
1321     assert(hasOperandBundles() && "Don't call otherwise!");
1322     return bundle_op_info_end()[-1].End;
1323   }
1324
1325   /// \brief Return the total number operands (not operand bundles) used by
1326   /// every operand bundle in this OperandBundleUser.
1327   unsigned getNumTotalBundleOperands() const {
1328     if (!hasOperandBundles())
1329       return 0;
1330
1331     unsigned Begin = getBundleOperandsStartIndex();
1332     unsigned End = getBundleOperandsEndIndex();
1333
1334     assert(Begin <= End && "Should be!");
1335     return End - Begin;
1336   }
1337
1338   /// \brief Return the operand bundle at a specific index.
1339   OperandBundleUse getOperandBundleAt(unsigned Index) const {
1340     assert(Index < getNumOperandBundles() && "Index out of bounds!");
1341     return operandBundleFromBundleOpInfo(*(bundle_op_info_begin() + Index));
1342   }
1343
1344   /// \brief Return the number of operand bundles with the tag Name attached to
1345   /// this instruction.
1346   unsigned countOperandBundlesOfType(StringRef Name) const {
1347     unsigned Count = 0;
1348     for (unsigned i = 0, e = getNumOperandBundles(); i != e; ++i)
1349       if (getOperandBundleAt(i).getTagName() == Name)
1350         Count++;
1351
1352     return Count;
1353   }
1354
1355   /// \brief Return the number of operand bundles with the tag ID attached to
1356   /// this instruction.
1357   unsigned countOperandBundlesOfType(uint32_t ID) const {
1358     unsigned Count = 0;
1359     for (unsigned i = 0, e = getNumOperandBundles(); i != e; ++i)
1360       if (getOperandBundleAt(i).getTagID() == ID)
1361         Count++;
1362
1363     return Count;
1364   }
1365
1366   /// \brief Return an operand bundle by name, if present.
1367   ///
1368   /// It is an error to call this for operand bundle types that may have
1369   /// multiple instances of them on the same instruction.
1370   Optional<OperandBundleUse> getOperandBundle(StringRef Name) const {
1371     assert(countOperandBundlesOfType(Name) < 2 && "Precondition violated!");
1372
1373     for (unsigned i = 0, e = getNumOperandBundles(); i != e; ++i) {
1374       OperandBundleUse U = getOperandBundleAt(i);
1375       if (U.getTagName() == Name)
1376         return U;
1377     }
1378
1379     return None;
1380   }
1381
1382   /// \brief Return an operand bundle by tag ID, if present.
1383   ///
1384   /// It is an error to call this for operand bundle types that may have
1385   /// multiple instances of them on the same instruction.
1386   Optional<OperandBundleUse> getOperandBundle(uint32_t ID) const {
1387     assert(countOperandBundlesOfType(ID) < 2 && "Precondition violated!");
1388
1389     for (unsigned i = 0, e = getNumOperandBundles(); i != e; ++i) {
1390       OperandBundleUse U = getOperandBundleAt(i);
1391       if (U.getTagID() == ID)
1392         return U;
1393     }
1394
1395     return None;
1396   }
1397
1398   /// \brief Return the list of operand bundles attached to this instruction as
1399   /// a vector of OperandBundleDefs.
1400   ///
1401   /// This function copies the OperandBundeUse instances associated with this
1402   /// OperandBundleUser to a vector of OperandBundleDefs.  Note:
1403   /// OperandBundeUses and OperandBundleDefs are non-trivially *different*
1404   /// representations of operand bundles (see documentation above).
1405   void getOperandBundlesAsDefs(SmallVectorImpl<OperandBundleDef> &Defs) const {
1406     for (unsigned i = 0, e = getNumOperandBundles(); i != e; ++i)
1407       Defs.emplace_back(getOperandBundleAt(i));
1408   }
1409
1410   /// \brief Return the operand bundle for the operand at index OpIdx.
1411   ///
1412   /// It is an error to call this with an OpIdx that does not correspond to an
1413   /// bundle operand.
1414   OperandBundleUse getOperandBundleForOperand(unsigned OpIdx) const {
1415     return operandBundleFromBundleOpInfo(getBundleOpInfoForOperand(OpIdx));
1416   }
1417
1418   /// \brief Return true if this operand bundle user has operand bundles that
1419   /// may read from the heap.
1420   bool hasReadingOperandBundles() const {
1421     // Implementation note: this is a conservative implementation of operand
1422     // bundle semantics, where *any* operand bundle forces a callsite to be at
1423     // least readonly.
1424     return hasOperandBundles();
1425   }
1426
1427   /// \brief Return true if this operand bundle user has operand bundles that
1428   /// may write to the heap.
1429   bool hasClobberingOperandBundles() const {
1430     for (auto &BOI : bundle_op_infos()) {
1431       if (BOI.Tag->second == LLVMContext::OB_deopt)
1432         continue;
1433
1434       // This instruction has an operand bundle that is not a "deopt" operand
1435       // bundle.  Assume the worst.
1436       return true;
1437     }
1438
1439     return false;
1440   }
1441
1442   /// \brief Return true if the bundle operand at index \p OpIdx has the
1443   /// attribute \p A.
1444   bool bundleOperandHasAttr(unsigned OpIdx,  Attribute::AttrKind A) const {
1445     auto &BOI = getBundleOpInfoForOperand(OpIdx);
1446     auto OBU = operandBundleFromBundleOpInfo(BOI);
1447     return OBU.operandHasAttr(OpIdx - BOI.Begin, A);
1448   }
1449
1450   /// \brief Return true if \p Other has the same sequence of operand bundle
1451   /// tags with the same number of operands on each one of them as this
1452   /// OperandBundleUser.
1453   bool hasIdenticalOperandBundleSchema(
1454       const OperandBundleUser<InstrTy, OpIteratorTy> &Other) const {
1455     if (getNumOperandBundles() != Other.getNumOperandBundles())
1456       return false;
1457
1458     return std::equal(bundle_op_info_begin(), bundle_op_info_end(),
1459                       Other.bundle_op_info_begin());
1460   };
1461
1462 protected:
1463   /// \brief Is the function attribute S disallowed by some operand bundle on
1464   /// this operand bundle user?
1465   bool isFnAttrDisallowedByOpBundle(StringRef S) const {
1466     // Operand bundles only possibly disallow readnone, readonly and argmenonly
1467     // attributes.  All String attributes are fine.
1468     return false;
1469   }
1470
1471   /// \brief Is the function attribute A disallowed by some operand bundle on
1472   /// this operand bundle user?
1473   bool isFnAttrDisallowedByOpBundle(Attribute::AttrKind A) const {
1474     switch (A) {
1475     default:
1476       return false;
1477
1478     case Attribute::ArgMemOnly:
1479       return hasReadingOperandBundles();
1480
1481     case Attribute::ReadNone:
1482       return hasReadingOperandBundles();
1483
1484     case Attribute::ReadOnly:
1485       return hasClobberingOperandBundles();
1486     }
1487
1488     llvm_unreachable("switch has a default case!");
1489   }
1490
1491   /// \brief Used to keep track of an operand bundle.  See the main comment on
1492   /// OperandBundleUser above.
1493   struct BundleOpInfo {
1494     /// \brief The operand bundle tag, interned by
1495     /// LLVMContextImpl::getOrInsertBundleTag.
1496     StringMapEntry<uint32_t> *Tag;
1497
1498     /// \brief The index in the Use& vector where operands for this operand
1499     /// bundle starts.
1500     uint32_t Begin;
1501
1502     /// \brief The index in the Use& vector where operands for this operand
1503     /// bundle ends.
1504     uint32_t End;
1505
1506     bool operator==(const BundleOpInfo &Other) const {
1507       return Tag == Other.Tag && Begin == Other.Begin && End == Other.End;
1508     }
1509   };
1510
1511   /// \brief Simple helper function to map a BundleOpInfo to an
1512   /// OperandBundleUse.
1513   OperandBundleUse
1514   operandBundleFromBundleOpInfo(const BundleOpInfo &BOI) const {
1515     auto op_begin = static_cast<const InstrTy *>(this)->op_begin();
1516     ArrayRef<Use> Inputs(op_begin + BOI.Begin, op_begin + BOI.End);
1517     return OperandBundleUse(BOI.Tag, Inputs);
1518   }
1519
1520   typedef BundleOpInfo *bundle_op_iterator;
1521   typedef const BundleOpInfo *const_bundle_op_iterator;
1522
1523   /// \brief Return the start of the list of BundleOpInfo instances associated
1524   /// with this OperandBundleUser.
1525   bundle_op_iterator bundle_op_info_begin() {
1526     if (!static_cast<InstrTy *>(this)->hasDescriptor())
1527       return nullptr;
1528
1529     uint8_t *BytesBegin = static_cast<InstrTy *>(this)->getDescriptor().begin();
1530     return reinterpret_cast<bundle_op_iterator>(BytesBegin);
1531   }
1532
1533   /// \brief Return the start of the list of BundleOpInfo instances associated
1534   /// with this OperandBundleUser.
1535   const_bundle_op_iterator bundle_op_info_begin() const {
1536     auto *NonConstThis =
1537         const_cast<OperandBundleUser<InstrTy, OpIteratorTy> *>(this);
1538     return NonConstThis->bundle_op_info_begin();
1539   }
1540
1541   /// \brief Return the end of the list of BundleOpInfo instances associated
1542   /// with this OperandBundleUser.
1543   bundle_op_iterator bundle_op_info_end() {
1544     if (!static_cast<InstrTy *>(this)->hasDescriptor())
1545       return nullptr;
1546
1547     uint8_t *BytesEnd = static_cast<InstrTy *>(this)->getDescriptor().end();
1548     return reinterpret_cast<bundle_op_iterator>(BytesEnd);
1549   }
1550
1551   /// \brief Return the end of the list of BundleOpInfo instances associated
1552   /// with this OperandBundleUser.
1553   const_bundle_op_iterator bundle_op_info_end() const {
1554     auto *NonConstThis =
1555         const_cast<OperandBundleUser<InstrTy, OpIteratorTy> *>(this);
1556     return NonConstThis->bundle_op_info_end();
1557   }
1558
1559   /// \brief Return the range [\p bundle_op_info_begin, \p bundle_op_info_end).
1560   iterator_range<bundle_op_iterator> bundle_op_infos() {
1561     return make_range(bundle_op_info_begin(), bundle_op_info_end());
1562   }
1563
1564   /// \brief Return the range [\p bundle_op_info_begin, \p bundle_op_info_end).
1565   iterator_range<const_bundle_op_iterator> bundle_op_infos() const {
1566     return make_range(bundle_op_info_begin(), bundle_op_info_end());
1567   }
1568
1569   /// \brief Populate the BundleOpInfo instances and the Use& vector from \p
1570   /// Bundles.  Return the op_iterator pointing to the Use& one past the last
1571   /// last bundle operand use.
1572   ///
1573   /// Each \p OperandBundleDef instance is tracked by a OperandBundleInfo
1574   /// instance allocated in this User's descriptor.
1575   OpIteratorTy populateBundleOperandInfos(ArrayRef<OperandBundleDef> Bundles,
1576                                           const unsigned BeginIndex) {
1577     auto It = static_cast<InstrTy *>(this)->op_begin() + BeginIndex;
1578     for (auto &B : Bundles)
1579       It = std::copy(B.input_begin(), B.input_end(), It);
1580
1581     auto *ContextImpl = static_cast<InstrTy *>(this)->getContext().pImpl;
1582     auto BI = Bundles.begin();
1583     unsigned CurrentIndex = BeginIndex;
1584
1585     for (auto &BOI : bundle_op_infos()) {
1586       assert(BI != Bundles.end() && "Incorrect allocation?");
1587
1588       BOI.Tag = ContextImpl->getOrInsertBundleTag(BI->getTag());
1589       BOI.Begin = CurrentIndex;
1590       BOI.End = CurrentIndex + BI->input_size();
1591       CurrentIndex = BOI.End;
1592       BI++;
1593     }
1594
1595     assert(BI == Bundles.end() && "Incorrect allocation?");
1596
1597     return It;
1598   }
1599
1600   /// \brief Return the BundleOpInfo for the operand at index OpIdx.
1601   ///
1602   /// It is an error to call this with an OpIdx that does not correspond to an
1603   /// bundle operand.
1604   const BundleOpInfo &getBundleOpInfoForOperand(unsigned OpIdx) const {
1605     for (auto &BOI : bundle_op_infos())
1606       if (BOI.Begin <= OpIdx && OpIdx < BOI.End)
1607         return BOI;
1608
1609     llvm_unreachable("Did not find operand bundle for operand!");
1610   }
1611
1612   /// \brief Return the total number of values used in \p Bundles.
1613   static unsigned CountBundleInputs(ArrayRef<OperandBundleDef> Bundles) {
1614     unsigned Total = 0;
1615     for (auto &B : Bundles)
1616       Total += B.input_size();
1617     return Total;
1618   }
1619 };
1620
1621 } // end llvm namespace
1622
1623 #endif // LLVM_IR_INSTRTYPES_H