xref: /netbsd-src/external/apache2/llvm/dist/llvm/include/llvm/IR/InstrTypes.h (revision 82d56013d7b633d116a93943de88e08335357a7c)
1 //===- llvm/InstrTypes.h - Important Instruction subclasses -----*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file defines various meta classes of instructions that exist in the VM
10 // representation.  Specific concrete subclasses of these may be found in the
11 // i*.h files...
12 //
13 //===----------------------------------------------------------------------===//
14 
15 #ifndef LLVM_IR_INSTRTYPES_H
16 #define LLVM_IR_INSTRTYPES_H
17 
18 #include "llvm/ADT/ArrayRef.h"
19 #include "llvm/ADT/None.h"
20 #include "llvm/ADT/Optional.h"
21 #include "llvm/ADT/STLExtras.h"
22 #include "llvm/ADT/StringMap.h"
23 #include "llvm/ADT/StringRef.h"
24 #include "llvm/ADT/Twine.h"
25 #include "llvm/ADT/iterator_range.h"
26 #include "llvm/IR/Attributes.h"
27 #include "llvm/IR/CallingConv.h"
28 #include "llvm/IR/Constants.h"
29 #include "llvm/IR/DerivedTypes.h"
30 #include "llvm/IR/Function.h"
31 #include "llvm/IR/Instruction.h"
32 #include "llvm/IR/LLVMContext.h"
33 #include "llvm/IR/OperandTraits.h"
34 #include "llvm/IR/Type.h"
35 #include "llvm/IR/User.h"
36 #include "llvm/IR/Value.h"
37 #include "llvm/Support/Casting.h"
38 #include "llvm/Support/ErrorHandling.h"
39 #include <algorithm>
40 #include <cassert>
41 #include <cstddef>
42 #include <cstdint>
43 #include <iterator>
44 #include <string>
45 #include <vector>
46 
47 namespace llvm {
48 
49 namespace Intrinsic {
50 typedef unsigned ID;
51 }
52 
53 //===----------------------------------------------------------------------===//
54 //                          UnaryInstruction Class
55 //===----------------------------------------------------------------------===//
56 
57 class UnaryInstruction : public Instruction {
58 protected:
59   UnaryInstruction(Type *Ty, unsigned iType, Value *V,
60                    Instruction *IB = nullptr)
61     : Instruction(Ty, iType, &Op<0>(), 1, IB) {
62     Op<0>() = V;
63   }
UnaryInstruction(Type * Ty,unsigned iType,Value * V,BasicBlock * IAE)64   UnaryInstruction(Type *Ty, unsigned iType, Value *V, BasicBlock *IAE)
65     : Instruction(Ty, iType, &Op<0>(), 1, IAE) {
66     Op<0>() = V;
67   }
68 
69 public:
70   // allocate space for exactly one operand
new(size_t s)71   void *operator new(size_t s) {
72     return User::operator new(s, 1);
73   }
74 
75   /// Transparently provide more efficient getOperand methods.
76   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
77 
78   // Methods for support type inquiry through isa, cast, and dyn_cast:
classof(const Instruction * I)79   static bool classof(const Instruction *I) {
80     return I->isUnaryOp() ||
81            I->getOpcode() == Instruction::Alloca ||
82            I->getOpcode() == Instruction::Load ||
83            I->getOpcode() == Instruction::VAArg ||
84            I->getOpcode() == Instruction::ExtractValue ||
85            (I->getOpcode() >= CastOpsBegin && I->getOpcode() < CastOpsEnd);
86   }
classof(const Value * V)87   static bool classof(const Value *V) {
88     return isa<Instruction>(V) && classof(cast<Instruction>(V));
89   }
90 };
91 
92 template <>
93 struct OperandTraits<UnaryInstruction> :
94   public FixedNumOperandTraits<UnaryInstruction, 1> {
95 };
96 
97 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(UnaryInstruction, Value)
98 
99 //===----------------------------------------------------------------------===//
100 //                                UnaryOperator Class
101 //===----------------------------------------------------------------------===//
102 
103 class UnaryOperator : public UnaryInstruction {
104   void AssertOK();
105 
106 protected:
107   UnaryOperator(UnaryOps iType, Value *S, Type *Ty,
108                 const Twine &Name, Instruction *InsertBefore);
109   UnaryOperator(UnaryOps iType, Value *S, Type *Ty,
110                 const Twine &Name, BasicBlock *InsertAtEnd);
111 
112   // Note: Instruction needs to be a friend here to call cloneImpl.
113   friend class Instruction;
114 
115   UnaryOperator *cloneImpl() const;
116 
117 public:
118 
119   /// Construct a unary instruction, given the opcode and an operand.
120   /// Optionally (if InstBefore is specified) insert the instruction
121   /// into a BasicBlock right before the specified instruction.  The specified
122   /// Instruction is allowed to be a dereferenced end iterator.
123   ///
124   static UnaryOperator *Create(UnaryOps Op, Value *S,
125                                const Twine &Name = Twine(),
126                                Instruction *InsertBefore = nullptr);
127 
128   /// Construct a unary instruction, given the opcode and an operand.
129   /// Also automatically insert this instruction to the end of the
130   /// BasicBlock specified.
131   ///
132   static UnaryOperator *Create(UnaryOps Op, Value *S,
133                                const Twine &Name,
134                                BasicBlock *InsertAtEnd);
135 
136   /// These methods just forward to Create, and are useful when you
137   /// statically know what type of instruction you're going to create.  These
138   /// helpers just save some typing.
139 #define HANDLE_UNARY_INST(N, OPC, CLASS) \
140   static UnaryOperator *Create##OPC(Value *V, const Twine &Name = "") {\
141     return Create(Instruction::OPC, V, Name);\
142   }
143 #include "llvm/IR/Instruction.def"
144 #define HANDLE_UNARY_INST(N, OPC, CLASS) \
145   static UnaryOperator *Create##OPC(Value *V, const Twine &Name, \
146                                     BasicBlock *BB) {\
147     return Create(Instruction::OPC, V, Name, BB);\
148   }
149 #include "llvm/IR/Instruction.def"
150 #define HANDLE_UNARY_INST(N, OPC, CLASS) \
151   static UnaryOperator *Create##OPC(Value *V, const Twine &Name, \
152                                     Instruction *I) {\
153     return Create(Instruction::OPC, V, Name, I);\
154   }
155 #include "llvm/IR/Instruction.def"
156 
157   static UnaryOperator *
158   CreateWithCopiedFlags(UnaryOps Opc, Value *V, Instruction *CopyO,
159                         const Twine &Name = "",
160                         Instruction *InsertBefore = nullptr) {
161     UnaryOperator *UO = Create(Opc, V, Name, InsertBefore);
162     UO->copyIRFlags(CopyO);
163     return UO;
164   }
165 
166   static UnaryOperator *CreateFNegFMF(Value *Op, Instruction *FMFSource,
167                                       const Twine &Name = "",
168                                       Instruction *InsertBefore = nullptr) {
169     return CreateWithCopiedFlags(Instruction::FNeg, Op, FMFSource, Name,
170                                  InsertBefore);
171   }
172 
173   UnaryOps getOpcode() const {
174     return static_cast<UnaryOps>(Instruction::getOpcode());
175   }
176 
177   // Methods for support type inquiry through isa, cast, and dyn_cast:
178   static bool classof(const Instruction *I) {
179     return I->isUnaryOp();
180   }
181   static bool classof(const Value *V) {
182     return isa<Instruction>(V) && classof(cast<Instruction>(V));
183   }
184 };
185 
186 //===----------------------------------------------------------------------===//
187 //                           BinaryOperator Class
188 //===----------------------------------------------------------------------===//
189 
190 class BinaryOperator : public Instruction {
191   void AssertOK();
192 
193 protected:
194   BinaryOperator(BinaryOps iType, Value *S1, Value *S2, Type *Ty,
195                  const Twine &Name, Instruction *InsertBefore);
196   BinaryOperator(BinaryOps iType, Value *S1, Value *S2, Type *Ty,
197                  const Twine &Name, BasicBlock *InsertAtEnd);
198 
199   // Note: Instruction needs to be a friend here to call cloneImpl.
200   friend class Instruction;
201 
202   BinaryOperator *cloneImpl() const;
203 
204 public:
205   // allocate space for exactly two operands
206   void *operator new(size_t s) {
207     return User::operator new(s, 2);
208   }
209 
210   /// Transparently provide more efficient getOperand methods.
211   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
212 
213   /// Construct a binary instruction, given the opcode and the two
214   /// operands.  Optionally (if InstBefore is specified) insert the instruction
215   /// into a BasicBlock right before the specified instruction.  The specified
216   /// Instruction is allowed to be a dereferenced end iterator.
217   ///
218   static BinaryOperator *Create(BinaryOps Op, Value *S1, Value *S2,
219                                 const Twine &Name = Twine(),
220                                 Instruction *InsertBefore = nullptr);
221 
222   /// Construct a binary instruction, given the opcode and the two
223   /// operands.  Also automatically insert this instruction to the end of the
224   /// BasicBlock specified.
225   ///
226   static BinaryOperator *Create(BinaryOps Op, Value *S1, Value *S2,
227                                 const Twine &Name, BasicBlock *InsertAtEnd);
228 
229   /// These methods just forward to Create, and are useful when you
230   /// statically know what type of instruction you're going to create.  These
231   /// helpers just save some typing.
232 #define HANDLE_BINARY_INST(N, OPC, CLASS) \
233   static BinaryOperator *Create##OPC(Value *V1, Value *V2, \
234                                      const Twine &Name = "") {\
235     return Create(Instruction::OPC, V1, V2, Name);\
236   }
237 #include "llvm/IR/Instruction.def"
238 #define HANDLE_BINARY_INST(N, OPC, CLASS) \
239   static BinaryOperator *Create##OPC(Value *V1, Value *V2, \
240                                      const Twine &Name, BasicBlock *BB) {\
241     return Create(Instruction::OPC, V1, V2, Name, BB);\
242   }
243 #include "llvm/IR/Instruction.def"
244 #define HANDLE_BINARY_INST(N, OPC, CLASS) \
245   static BinaryOperator *Create##OPC(Value *V1, Value *V2, \
246                                      const Twine &Name, Instruction *I) {\
247     return Create(Instruction::OPC, V1, V2, Name, I);\
248   }
249 #include "llvm/IR/Instruction.def"
250 
251   static BinaryOperator *CreateWithCopiedFlags(BinaryOps Opc,
252                                                Value *V1, Value *V2,
253                                                Instruction *CopyO,
254                                                const Twine &Name = "") {
255     BinaryOperator *BO = Create(Opc, V1, V2, Name);
256     BO->copyIRFlags(CopyO);
257     return BO;
258   }
259 
260   static BinaryOperator *CreateFAddFMF(Value *V1, Value *V2,
261                                        Instruction *FMFSource,
262                                        const Twine &Name = "") {
263     return CreateWithCopiedFlags(Instruction::FAdd, V1, V2, FMFSource, Name);
264   }
265   static BinaryOperator *CreateFSubFMF(Value *V1, Value *V2,
266                                        Instruction *FMFSource,
267                                        const Twine &Name = "") {
268     return CreateWithCopiedFlags(Instruction::FSub, V1, V2, FMFSource, Name);
269   }
270   static BinaryOperator *CreateFMulFMF(Value *V1, Value *V2,
271                                        Instruction *FMFSource,
272                                        const Twine &Name = "") {
273     return CreateWithCopiedFlags(Instruction::FMul, V1, V2, FMFSource, Name);
274   }
275   static BinaryOperator *CreateFDivFMF(Value *V1, Value *V2,
276                                        Instruction *FMFSource,
277                                        const Twine &Name = "") {
278     return CreateWithCopiedFlags(Instruction::FDiv, V1, V2, FMFSource, Name);
279   }
280   static BinaryOperator *CreateFRemFMF(Value *V1, Value *V2,
281                                        Instruction *FMFSource,
282                                        const Twine &Name = "") {
283     return CreateWithCopiedFlags(Instruction::FRem, V1, V2, FMFSource, Name);
284   }
285 
286   static BinaryOperator *CreateNSW(BinaryOps Opc, Value *V1, Value *V2,
287                                    const Twine &Name = "") {
288     BinaryOperator *BO = Create(Opc, V1, V2, Name);
289     BO->setHasNoSignedWrap(true);
290     return BO;
291   }
292   static BinaryOperator *CreateNSW(BinaryOps Opc, Value *V1, Value *V2,
293                                    const Twine &Name, BasicBlock *BB) {
294     BinaryOperator *BO = Create(Opc, V1, V2, Name, BB);
295     BO->setHasNoSignedWrap(true);
296     return BO;
297   }
298   static BinaryOperator *CreateNSW(BinaryOps Opc, Value *V1, Value *V2,
299                                    const Twine &Name, Instruction *I) {
300     BinaryOperator *BO = Create(Opc, V1, V2, Name, I);
301     BO->setHasNoSignedWrap(true);
302     return BO;
303   }
304 
305   static BinaryOperator *CreateNUW(BinaryOps Opc, Value *V1, Value *V2,
306                                    const Twine &Name = "") {
307     BinaryOperator *BO = Create(Opc, V1, V2, Name);
308     BO->setHasNoUnsignedWrap(true);
309     return BO;
310   }
311   static BinaryOperator *CreateNUW(BinaryOps Opc, Value *V1, Value *V2,
312                                    const Twine &Name, BasicBlock *BB) {
313     BinaryOperator *BO = Create(Opc, V1, V2, Name, BB);
314     BO->setHasNoUnsignedWrap(true);
315     return BO;
316   }
317   static BinaryOperator *CreateNUW(BinaryOps Opc, Value *V1, Value *V2,
318                                    const Twine &Name, Instruction *I) {
319     BinaryOperator *BO = Create(Opc, V1, V2, Name, I);
320     BO->setHasNoUnsignedWrap(true);
321     return BO;
322   }
323 
324   static BinaryOperator *CreateExact(BinaryOps Opc, Value *V1, Value *V2,
325                                      const Twine &Name = "") {
326     BinaryOperator *BO = Create(Opc, V1, V2, Name);
327     BO->setIsExact(true);
328     return BO;
329   }
330   static BinaryOperator *CreateExact(BinaryOps Opc, Value *V1, Value *V2,
331                                      const Twine &Name, BasicBlock *BB) {
332     BinaryOperator *BO = Create(Opc, V1, V2, Name, BB);
333     BO->setIsExact(true);
334     return BO;
335   }
336   static BinaryOperator *CreateExact(BinaryOps Opc, Value *V1, Value *V2,
337                                      const Twine &Name, Instruction *I) {
338     BinaryOperator *BO = Create(Opc, V1, V2, Name, I);
339     BO->setIsExact(true);
340     return BO;
341   }
342 
343 #define DEFINE_HELPERS(OPC, NUWNSWEXACT)                                       \
344   static BinaryOperator *Create##NUWNSWEXACT##OPC(Value *V1, Value *V2,        \
345                                                   const Twine &Name = "") {    \
346     return Create##NUWNSWEXACT(Instruction::OPC, V1, V2, Name);                \
347   }                                                                            \
348   static BinaryOperator *Create##NUWNSWEXACT##OPC(                             \
349       Value *V1, Value *V2, const Twine &Name, BasicBlock *BB) {               \
350     return Create##NUWNSWEXACT(Instruction::OPC, V1, V2, Name, BB);            \
351   }                                                                            \
352   static BinaryOperator *Create##NUWNSWEXACT##OPC(                             \
353       Value *V1, Value *V2, const Twine &Name, Instruction *I) {               \
354     return Create##NUWNSWEXACT(Instruction::OPC, V1, V2, Name, I);             \
355   }
356 
357   DEFINE_HELPERS(Add, NSW) // CreateNSWAdd
358   DEFINE_HELPERS(Add, NUW) // CreateNUWAdd
359   DEFINE_HELPERS(Sub, NSW) // CreateNSWSub
360   DEFINE_HELPERS(Sub, NUW) // CreateNUWSub
361   DEFINE_HELPERS(Mul, NSW) // CreateNSWMul
362   DEFINE_HELPERS(Mul, NUW) // CreateNUWMul
363   DEFINE_HELPERS(Shl, NSW) // CreateNSWShl
364   DEFINE_HELPERS(Shl, NUW) // CreateNUWShl
365 
366   DEFINE_HELPERS(SDiv, Exact)  // CreateExactSDiv
367   DEFINE_HELPERS(UDiv, Exact)  // CreateExactUDiv
368   DEFINE_HELPERS(AShr, Exact)  // CreateExactAShr
369   DEFINE_HELPERS(LShr, Exact)  // CreateExactLShr
370 
371 #undef DEFINE_HELPERS
372 
373   /// Helper functions to construct and inspect unary operations (NEG and NOT)
374   /// via binary operators SUB and XOR:
375   ///
376   /// Create the NEG and NOT instructions out of SUB and XOR instructions.
377   ///
378   static BinaryOperator *CreateNeg(Value *Op, const Twine &Name = "",
379                                    Instruction *InsertBefore = nullptr);
380   static BinaryOperator *CreateNeg(Value *Op, const Twine &Name,
381                                    BasicBlock *InsertAtEnd);
382   static BinaryOperator *CreateNSWNeg(Value *Op, const Twine &Name = "",
383                                       Instruction *InsertBefore = nullptr);
384   static BinaryOperator *CreateNSWNeg(Value *Op, const Twine &Name,
385                                       BasicBlock *InsertAtEnd);
386   static BinaryOperator *CreateNUWNeg(Value *Op, const Twine &Name = "",
387                                       Instruction *InsertBefore = nullptr);
388   static BinaryOperator *CreateNUWNeg(Value *Op, const Twine &Name,
389                                       BasicBlock *InsertAtEnd);
390   static BinaryOperator *CreateNot(Value *Op, const Twine &Name = "",
391                                    Instruction *InsertBefore = nullptr);
392   static BinaryOperator *CreateNot(Value *Op, const Twine &Name,
393                                    BasicBlock *InsertAtEnd);
394 
395   BinaryOps getOpcode() const {
396     return static_cast<BinaryOps>(Instruction::getOpcode());
397   }
398 
399   /// Exchange the two operands to this instruction.
400   /// This instruction is safe to use on any binary instruction and
401   /// does not modify the semantics of the instruction.  If the instruction
402   /// cannot be reversed (ie, it's a Div), then return true.
403   ///
404   bool swapOperands();
405 
406   // Methods for support type inquiry through isa, cast, and dyn_cast:
407   static bool classof(const Instruction *I) {
408     return I->isBinaryOp();
409   }
410   static bool classof(const Value *V) {
411     return isa<Instruction>(V) && classof(cast<Instruction>(V));
412   }
413 };
414 
415 template <>
416 struct OperandTraits<BinaryOperator> :
417   public FixedNumOperandTraits<BinaryOperator, 2> {
418 };
419 
420 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(BinaryOperator, Value)
421 
422 //===----------------------------------------------------------------------===//
423 //                               CastInst Class
424 //===----------------------------------------------------------------------===//
425 
426 /// This is the base class for all instructions that perform data
427 /// casts. It is simply provided so that instruction category testing
428 /// can be performed with code like:
429 ///
430 /// if (isa<CastInst>(Instr)) { ... }
431 /// Base class of casting instructions.
432 class CastInst : public UnaryInstruction {
433 protected:
434   /// Constructor with insert-before-instruction semantics for subclasses
435   CastInst(Type *Ty, unsigned iType, Value *S,
436            const Twine &NameStr = "", Instruction *InsertBefore = nullptr)
437     : UnaryInstruction(Ty, iType, S, InsertBefore) {
438     setName(NameStr);
439   }
440   /// Constructor with insert-at-end-of-block semantics for subclasses
441   CastInst(Type *Ty, unsigned iType, Value *S,
442            const Twine &NameStr, BasicBlock *InsertAtEnd)
443     : UnaryInstruction(Ty, iType, S, InsertAtEnd) {
444     setName(NameStr);
445   }
446 
447 public:
448   /// Provides a way to construct any of the CastInst subclasses using an
449   /// opcode instead of the subclass's constructor. The opcode must be in the
450   /// CastOps category (Instruction::isCast(opcode) returns true). This
451   /// constructor has insert-before-instruction semantics to automatically
452   /// insert the new CastInst before InsertBefore (if it is non-null).
453   /// Construct any of the CastInst subclasses
454   static CastInst *Create(
455     Instruction::CastOps,    ///< The opcode of the cast instruction
456     Value *S,                ///< The value to be casted (operand 0)
457     Type *Ty,          ///< The type to which cast should be made
458     const Twine &Name = "", ///< Name for the instruction
459     Instruction *InsertBefore = nullptr ///< Place to insert the instruction
460   );
461   /// Provides a way to construct any of the CastInst subclasses using an
462   /// opcode instead of the subclass's constructor. The opcode must be in the
463   /// CastOps category. This constructor has insert-at-end-of-block semantics
464   /// to automatically insert the new CastInst at the end of InsertAtEnd (if
465   /// its non-null).
466   /// Construct any of the CastInst subclasses
467   static CastInst *Create(
468     Instruction::CastOps,    ///< The opcode for the cast instruction
469     Value *S,                ///< The value to be casted (operand 0)
470     Type *Ty,          ///< The type to which operand is casted
471     const Twine &Name, ///< The name for the instruction
472     BasicBlock *InsertAtEnd  ///< The block to insert the instruction into
473   );
474 
475   /// Create a ZExt or BitCast cast instruction
476   static CastInst *CreateZExtOrBitCast(
477     Value *S,                ///< The value to be casted (operand 0)
478     Type *Ty,          ///< The type to which cast should be made
479     const Twine &Name = "", ///< Name for the instruction
480     Instruction *InsertBefore = nullptr ///< Place to insert the instruction
481   );
482 
483   /// Create a ZExt or BitCast cast instruction
484   static CastInst *CreateZExtOrBitCast(
485     Value *S,                ///< The value to be casted (operand 0)
486     Type *Ty,          ///< The type to which operand is casted
487     const Twine &Name, ///< The name for the instruction
488     BasicBlock *InsertAtEnd  ///< The block to insert the instruction into
489   );
490 
491   /// Create a SExt or BitCast cast instruction
492   static CastInst *CreateSExtOrBitCast(
493     Value *S,                ///< The value to be casted (operand 0)
494     Type *Ty,          ///< The type to which cast should be made
495     const Twine &Name = "", ///< Name for the instruction
496     Instruction *InsertBefore = nullptr ///< Place to insert the instruction
497   );
498 
499   /// Create a SExt or BitCast cast instruction
500   static CastInst *CreateSExtOrBitCast(
501     Value *S,                ///< The value to be casted (operand 0)
502     Type *Ty,          ///< The type to which operand is casted
503     const Twine &Name, ///< The name for the instruction
504     BasicBlock *InsertAtEnd  ///< The block to insert the instruction into
505   );
506 
507   /// Create a BitCast AddrSpaceCast, or a PtrToInt cast instruction.
508   static CastInst *CreatePointerCast(
509     Value *S,                ///< The pointer value to be casted (operand 0)
510     Type *Ty,          ///< The type to which operand is casted
511     const Twine &Name, ///< The name for the instruction
512     BasicBlock *InsertAtEnd  ///< The block to insert the instruction into
513   );
514 
515   /// Create a BitCast, AddrSpaceCast or a PtrToInt cast instruction.
516   static CastInst *CreatePointerCast(
517     Value *S,                ///< The pointer value to be casted (operand 0)
518     Type *Ty,          ///< The type to which cast should be made
519     const Twine &Name = "", ///< Name for the instruction
520     Instruction *InsertBefore = nullptr ///< Place to insert the instruction
521   );
522 
523   /// Create a BitCast or an AddrSpaceCast cast instruction.
524   static CastInst *CreatePointerBitCastOrAddrSpaceCast(
525     Value *S,                ///< The pointer value to be casted (operand 0)
526     Type *Ty,          ///< The type to which operand is casted
527     const Twine &Name, ///< The name for the instruction
528     BasicBlock *InsertAtEnd  ///< The block to insert the instruction into
529   );
530 
531   /// Create a BitCast or an AddrSpaceCast cast instruction.
532   static CastInst *CreatePointerBitCastOrAddrSpaceCast(
533     Value *S,                ///< The pointer value to be casted (operand 0)
534     Type *Ty,          ///< The type to which cast should be made
535     const Twine &Name = "", ///< Name for the instruction
536     Instruction *InsertBefore = nullptr ///< Place to insert the instruction
537   );
538 
539   /// Create a BitCast, a PtrToInt, or an IntToPTr cast instruction.
540   ///
541   /// If the value is a pointer type and the destination an integer type,
542   /// creates a PtrToInt cast. If the value is an integer type and the
543   /// destination a pointer type, creates an IntToPtr cast. Otherwise, creates
544   /// a bitcast.
545   static CastInst *CreateBitOrPointerCast(
546     Value *S,                ///< The pointer value to be casted (operand 0)
547     Type *Ty,          ///< The type to which cast should be made
548     const Twine &Name = "", ///< Name for the instruction
549     Instruction *InsertBefore = nullptr ///< Place to insert the instruction
550   );
551 
552   /// Create a ZExt, BitCast, or Trunc for int -> int casts.
553   static CastInst *CreateIntegerCast(
554     Value *S,                ///< The pointer value to be casted (operand 0)
555     Type *Ty,          ///< The type to which cast should be made
556     bool isSigned,           ///< Whether to regard S as signed or not
557     const Twine &Name = "", ///< Name for the instruction
558     Instruction *InsertBefore = nullptr ///< Place to insert the instruction
559   );
560 
561   /// Create a ZExt, BitCast, or Trunc for int -> int casts.
562   static CastInst *CreateIntegerCast(
563     Value *S,                ///< The integer value to be casted (operand 0)
564     Type *Ty,          ///< The integer type to which operand is casted
565     bool isSigned,           ///< Whether to regard S as signed or not
566     const Twine &Name, ///< The name for the instruction
567     BasicBlock *InsertAtEnd  ///< The block to insert the instruction into
568   );
569 
570   /// Create an FPExt, BitCast, or FPTrunc for fp -> fp casts
571   static CastInst *CreateFPCast(
572     Value *S,                ///< The floating point value to be casted
573     Type *Ty,          ///< The floating point type to cast to
574     const Twine &Name = "", ///< Name for the instruction
575     Instruction *InsertBefore = nullptr ///< Place to insert the instruction
576   );
577 
578   /// Create an FPExt, BitCast, or FPTrunc for fp -> fp casts
579   static CastInst *CreateFPCast(
580     Value *S,                ///< The floating point value to be casted
581     Type *Ty,          ///< The floating point type to cast to
582     const Twine &Name, ///< The name for the instruction
583     BasicBlock *InsertAtEnd  ///< The block to insert the instruction into
584   );
585 
586   /// Create a Trunc or BitCast cast instruction
587   static CastInst *CreateTruncOrBitCast(
588     Value *S,                ///< The value to be casted (operand 0)
589     Type *Ty,          ///< The type to which cast should be made
590     const Twine &Name = "", ///< Name for the instruction
591     Instruction *InsertBefore = nullptr ///< Place to insert the instruction
592   );
593 
594   /// Create a Trunc or BitCast cast instruction
595   static CastInst *CreateTruncOrBitCast(
596     Value *S,                ///< The value to be casted (operand 0)
597     Type *Ty,          ///< The type to which operand is casted
598     const Twine &Name, ///< The name for the instruction
599     BasicBlock *InsertAtEnd  ///< The block to insert the instruction into
600   );
601 
602   /// Check whether a bitcast between these types is valid
603   static bool isBitCastable(
604     Type *SrcTy, ///< The Type from which the value should be cast.
605     Type *DestTy ///< The Type to which the value should be cast.
606   );
607 
608   /// Check whether a bitcast, inttoptr, or ptrtoint cast between these
609   /// types is valid and a no-op.
610   ///
611   /// This ensures that any pointer<->integer cast has enough bits in the
612   /// integer and any other cast is a bitcast.
613   static bool isBitOrNoopPointerCastable(
614       Type *SrcTy,  ///< The Type from which the value should be cast.
615       Type *DestTy, ///< The Type to which the value should be cast.
616       const DataLayout &DL);
617 
618   /// Returns the opcode necessary to cast Val into Ty using usual casting
619   /// rules.
620   /// Infer the opcode for cast operand and type
621   static Instruction::CastOps getCastOpcode(
622     const Value *Val, ///< The value to cast
623     bool SrcIsSigned, ///< Whether to treat the source as signed
624     Type *Ty,   ///< The Type to which the value should be casted
625     bool DstIsSigned  ///< Whether to treate the dest. as signed
626   );
627 
628   /// There are several places where we need to know if a cast instruction
629   /// only deals with integer source and destination types. To simplify that
630   /// logic, this method is provided.
631   /// @returns true iff the cast has only integral typed operand and dest type.
632   /// Determine if this is an integer-only cast.
633   bool isIntegerCast() const;
634 
635   /// A lossless cast is one that does not alter the basic value. It implies
636   /// a no-op cast but is more stringent, preventing things like int->float,
637   /// long->double, or int->ptr.
638   /// @returns true iff the cast is lossless.
639   /// Determine if this is a lossless cast.
640   bool isLosslessCast() const;
641 
642   /// A no-op cast is one that can be effected without changing any bits.
643   /// It implies that the source and destination types are the same size. The
644   /// DataLayout argument is to determine the pointer size when examining casts
645   /// involving Integer and Pointer types. They are no-op casts if the integer
646   /// is the same size as the pointer. However, pointer size varies with
647   /// platform.  Note that a precondition of this method is that the cast is
648   /// legal - i.e. the instruction formed with these operands would verify.
649   static bool isNoopCast(
650     Instruction::CastOps Opcode, ///< Opcode of cast
651     Type *SrcTy,         ///< SrcTy of cast
652     Type *DstTy,         ///< DstTy of cast
653     const DataLayout &DL ///< DataLayout to get the Int Ptr type from.
654   );
655 
656   /// Determine if this cast is a no-op cast.
657   ///
658   /// \param DL is the DataLayout to determine pointer size.
659   bool isNoopCast(const DataLayout &DL) const;
660 
661   /// Determine how a pair of casts can be eliminated, if they can be at all.
662   /// This is a helper function for both CastInst and ConstantExpr.
663   /// @returns 0 if the CastInst pair can't be eliminated, otherwise
664   /// returns Instruction::CastOps value for a cast that can replace
665   /// the pair, casting SrcTy to DstTy.
666   /// Determine if a cast pair is eliminable
667   static unsigned isEliminableCastPair(
668     Instruction::CastOps firstOpcode,  ///< Opcode of first cast
669     Instruction::CastOps secondOpcode, ///< Opcode of second cast
670     Type *SrcTy, ///< SrcTy of 1st cast
671     Type *MidTy, ///< DstTy of 1st cast & SrcTy of 2nd cast
672     Type *DstTy, ///< DstTy of 2nd cast
673     Type *SrcIntPtrTy, ///< Integer type corresponding to Ptr SrcTy, or null
674     Type *MidIntPtrTy, ///< Integer type corresponding to Ptr MidTy, or null
675     Type *DstIntPtrTy  ///< Integer type corresponding to Ptr DstTy, or null
676   );
677 
678   /// Return the opcode of this CastInst
679   Instruction::CastOps getOpcode() const {
680     return Instruction::CastOps(Instruction::getOpcode());
681   }
682 
683   /// Return the source type, as a convenience
684   Type* getSrcTy() const { return getOperand(0)->getType(); }
685   /// Return the destination type, as a convenience
686   Type* getDestTy() const { return getType(); }
687 
688   /// This method can be used to determine if a cast from SrcTy to DstTy using
689   /// Opcode op is valid or not.
690   /// @returns true iff the proposed cast is valid.
691   /// Determine if a cast is valid without creating one.
692   static bool castIsValid(Instruction::CastOps op, Type *SrcTy, Type *DstTy);
693   static bool castIsValid(Instruction::CastOps op, Value *S, Type *DstTy) {
694     return castIsValid(op, S->getType(), DstTy);
695   }
696 
697   /// Methods for support type inquiry through isa, cast, and dyn_cast:
698   static bool classof(const Instruction *I) {
699     return I->isCast();
700   }
701   static bool classof(const Value *V) {
702     return isa<Instruction>(V) && classof(cast<Instruction>(V));
703   }
704 };
705 
706 //===----------------------------------------------------------------------===//
707 //                               CmpInst Class
708 //===----------------------------------------------------------------------===//
709 
710 /// This class is the base class for the comparison instructions.
711 /// Abstract base class of comparison instructions.
712 class CmpInst : public Instruction {
713 public:
714   /// This enumeration lists the possible predicates for CmpInst subclasses.
715   /// Values in the range 0-31 are reserved for FCmpInst, while values in the
716   /// range 32-64 are reserved for ICmpInst. This is necessary to ensure the
717   /// predicate values are not overlapping between the classes.
718   ///
719   /// Some passes (e.g. InstCombine) depend on the bit-wise characteristics of
720   /// FCMP_* values. Changing the bit patterns requires a potential change to
721   /// those passes.
722   enum Predicate : unsigned {
723     // Opcode            U L G E    Intuitive operation
724     FCMP_FALSE = 0, ///< 0 0 0 0    Always false (always folded)
725     FCMP_OEQ = 1,   ///< 0 0 0 1    True if ordered and equal
726     FCMP_OGT = 2,   ///< 0 0 1 0    True if ordered and greater than
727     FCMP_OGE = 3,   ///< 0 0 1 1    True if ordered and greater than or equal
728     FCMP_OLT = 4,   ///< 0 1 0 0    True if ordered and less than
729     FCMP_OLE = 5,   ///< 0 1 0 1    True if ordered and less than or equal
730     FCMP_ONE = 6,   ///< 0 1 1 0    True if ordered and operands are unequal
731     FCMP_ORD = 7,   ///< 0 1 1 1    True if ordered (no nans)
732     FCMP_UNO = 8,   ///< 1 0 0 0    True if unordered: isnan(X) | isnan(Y)
733     FCMP_UEQ = 9,   ///< 1 0 0 1    True if unordered or equal
734     FCMP_UGT = 10,  ///< 1 0 1 0    True if unordered or greater than
735     FCMP_UGE = 11,  ///< 1 0 1 1    True if unordered, greater than, or equal
736     FCMP_ULT = 12,  ///< 1 1 0 0    True if unordered or less than
737     FCMP_ULE = 13,  ///< 1 1 0 1    True if unordered, less than, or equal
738     FCMP_UNE = 14,  ///< 1 1 1 0    True if unordered or not equal
739     FCMP_TRUE = 15, ///< 1 1 1 1    Always true (always folded)
740     FIRST_FCMP_PREDICATE = FCMP_FALSE,
741     LAST_FCMP_PREDICATE = FCMP_TRUE,
742     BAD_FCMP_PREDICATE = FCMP_TRUE + 1,
743     ICMP_EQ = 32,  ///< equal
744     ICMP_NE = 33,  ///< not equal
745     ICMP_UGT = 34, ///< unsigned greater than
746     ICMP_UGE = 35, ///< unsigned greater or equal
747     ICMP_ULT = 36, ///< unsigned less than
748     ICMP_ULE = 37, ///< unsigned less or equal
749     ICMP_SGT = 38, ///< signed greater than
750     ICMP_SGE = 39, ///< signed greater or equal
751     ICMP_SLT = 40, ///< signed less than
752     ICMP_SLE = 41, ///< signed less or equal
753     FIRST_ICMP_PREDICATE = ICMP_EQ,
754     LAST_ICMP_PREDICATE = ICMP_SLE,
755     BAD_ICMP_PREDICATE = ICMP_SLE + 1
756   };
757   using PredicateField =
758       Bitfield::Element<Predicate, 0, 6, LAST_ICMP_PREDICATE>;
759 
760 protected:
761   CmpInst(Type *ty, Instruction::OtherOps op, Predicate pred,
762           Value *LHS, Value *RHS, const Twine &Name = "",
763           Instruction *InsertBefore = nullptr,
764           Instruction *FlagsSource = nullptr);
765 
766   CmpInst(Type *ty, Instruction::OtherOps op, Predicate pred,
767           Value *LHS, Value *RHS, const Twine &Name,
768           BasicBlock *InsertAtEnd);
769 
770 public:
771   // allocate space for exactly two operands
772   void *operator new(size_t s) {
773     return User::operator new(s, 2);
774   }
775 
776   /// Construct a compare instruction, given the opcode, the predicate and
777   /// the two operands.  Optionally (if InstBefore is specified) insert the
778   /// instruction into a BasicBlock right before the specified instruction.
779   /// The specified Instruction is allowed to be a dereferenced end iterator.
780   /// Create a CmpInst
781   static CmpInst *Create(OtherOps Op,
782                          Predicate predicate, Value *S1,
783                          Value *S2, const Twine &Name = "",
784                          Instruction *InsertBefore = nullptr);
785 
786   /// Construct a compare instruction, given the opcode, the predicate and the
787   /// two operands.  Also automatically insert this instruction to the end of
788   /// the BasicBlock specified.
789   /// Create a CmpInst
790   static CmpInst *Create(OtherOps Op, Predicate predicate, Value *S1,
791                          Value *S2, const Twine &Name, BasicBlock *InsertAtEnd);
792 
793   /// Get the opcode casted to the right type
794   OtherOps getOpcode() const {
795     return static_cast<OtherOps>(Instruction::getOpcode());
796   }
797 
798   /// Return the predicate for this instruction.
799   Predicate getPredicate() const { return getSubclassData<PredicateField>(); }
800 
801   /// Set the predicate for this instruction to the specified value.
802   void setPredicate(Predicate P) { setSubclassData<PredicateField>(P); }
803 
804   static bool isFPPredicate(Predicate P) {
805     static_assert(FIRST_FCMP_PREDICATE == 0,
806                   "FIRST_FCMP_PREDICATE is required to be 0");
807     return P <= LAST_FCMP_PREDICATE;
808   }
809 
810   static bool isIntPredicate(Predicate P) {
811     return P >= FIRST_ICMP_PREDICATE && P <= LAST_ICMP_PREDICATE;
812   }
813 
814   static StringRef getPredicateName(Predicate P);
815 
816   bool isFPPredicate() const { return isFPPredicate(getPredicate()); }
817   bool isIntPredicate() const { return isIntPredicate(getPredicate()); }
818 
819   /// For example, EQ -> NE, UGT -> ULE, SLT -> SGE,
820   ///              OEQ -> UNE, UGT -> OLE, OLT -> UGE, etc.
821   /// @returns the inverse predicate for the instruction's current predicate.
822   /// Return the inverse of the instruction's predicate.
823   Predicate getInversePredicate() const {
824     return getInversePredicate(getPredicate());
825   }
826 
827   /// For example, EQ -> NE, UGT -> ULE, SLT -> SGE,
828   ///              OEQ -> UNE, UGT -> OLE, OLT -> UGE, etc.
829   /// @returns the inverse predicate for predicate provided in \p pred.
830   /// Return the inverse of a given predicate
831   static Predicate getInversePredicate(Predicate pred);
832 
833   /// For example, EQ->EQ, SLE->SGE, ULT->UGT,
834   ///              OEQ->OEQ, ULE->UGE, OLT->OGT, etc.
835   /// @returns the predicate that would be the result of exchanging the two
836   /// operands of the CmpInst instruction without changing the result
837   /// produced.
838   /// Return the predicate as if the operands were swapped
839   Predicate getSwappedPredicate() const {
840     return getSwappedPredicate(getPredicate());
841   }
842 
843   /// This is a static version that you can use without an instruction
844   /// available.
845   /// Return the predicate as if the operands were swapped.
846   static Predicate getSwappedPredicate(Predicate pred);
847 
848   /// This is a static version that you can use without an instruction
849   /// available.
850   /// @returns true if the comparison predicate is strict, false otherwise.
851   static bool isStrictPredicate(Predicate predicate);
852 
853   /// @returns true if the comparison predicate is strict, false otherwise.
854   /// Determine if this instruction is using an strict comparison predicate.
855   bool isStrictPredicate() const { return isStrictPredicate(getPredicate()); }
856 
857   /// This is a static version that you can use without an instruction
858   /// available.
859   /// @returns true if the comparison predicate is non-strict, false otherwise.
860   static bool isNonStrictPredicate(Predicate predicate);
861 
862   /// @returns true if the comparison predicate is non-strict, false otherwise.
863   /// Determine if this instruction is using an non-strict comparison predicate.
864   bool isNonStrictPredicate() const {
865     return isNonStrictPredicate(getPredicate());
866   }
867 
868   /// For example, SGE -> SGT, SLE -> SLT, ULE -> ULT, UGE -> UGT.
869   /// Returns the strict version of non-strict comparisons.
870   Predicate getStrictPredicate() const {
871     return getStrictPredicate(getPredicate());
872   }
873 
874   /// This is a static version that you can use without an instruction
875   /// available.
876   /// @returns the strict version of comparison provided in \p pred.
877   /// If \p pred is not a strict comparison predicate, returns \p pred.
878   /// Returns the strict version of non-strict comparisons.
879   static Predicate getStrictPredicate(Predicate pred);
880 
881   /// For example, SGT -> SGE, SLT -> SLE, ULT -> ULE, UGT -> UGE.
882   /// Returns the non-strict version of strict comparisons.
883   Predicate getNonStrictPredicate() const {
884     return getNonStrictPredicate(getPredicate());
885   }
886 
887   /// This is a static version that you can use without an instruction
888   /// available.
889   /// @returns the non-strict version of comparison provided in \p pred.
890   /// If \p pred is not a strict comparison predicate, returns \p pred.
891   /// Returns the non-strict version of strict comparisons.
892   static Predicate getNonStrictPredicate(Predicate pred);
893 
894   /// This is a static version that you can use without an instruction
895   /// available.
896   /// Return the flipped strictness of predicate
897   static Predicate getFlippedStrictnessPredicate(Predicate pred);
898 
899   /// For predicate of kind "is X or equal to 0" returns the predicate "is X".
900   /// For predicate of kind "is X" returns the predicate "is X or equal to 0".
901   /// does not support other kind of predicates.
902   /// @returns the predicate that does not contains is equal to zero if
903   /// it had and vice versa.
904   /// Return the flipped strictness of predicate
905   Predicate getFlippedStrictnessPredicate() const {
906     return getFlippedStrictnessPredicate(getPredicate());
907   }
908 
909   /// Provide more efficient getOperand methods.
910   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
911 
912   /// This is just a convenience that dispatches to the subclasses.
913   /// Swap the operands and adjust predicate accordingly to retain
914   /// the same comparison.
915   void swapOperands();
916 
917   /// This is just a convenience that dispatches to the subclasses.
918   /// Determine if this CmpInst is commutative.
919   bool isCommutative() const;
920 
921   /// Determine if this is an equals/not equals predicate.
922   /// This is a static version that you can use without an instruction
923   /// available.
924   static bool isEquality(Predicate pred);
925 
926   /// Determine if this is an equals/not equals predicate.
927   bool isEquality() const { return isEquality(getPredicate()); }
928 
929   /// Return true if the predicate is relational (not EQ or NE).
930   static bool isRelational(Predicate P) { return !isEquality(P); }
931 
932   /// Return true if the predicate is relational (not EQ or NE).
933   bool isRelational() const { return !isEquality(); }
934 
935   /// @returns true if the comparison is signed, false otherwise.
936   /// Determine if this instruction is using a signed comparison.
937   bool isSigned() const {
938     return isSigned(getPredicate());
939   }
940 
941   /// @returns true if the comparison is unsigned, false otherwise.
942   /// Determine if this instruction is using an unsigned comparison.
943   bool isUnsigned() const {
944     return isUnsigned(getPredicate());
945   }
946 
947   /// For example, ULT->SLT, ULE->SLE, UGT->SGT, UGE->SGE, SLT->Failed assert
948   /// @returns the signed version of the unsigned predicate pred.
949   /// return the signed version of a predicate
950   static Predicate getSignedPredicate(Predicate pred);
951 
952   /// For example, ULT->SLT, ULE->SLE, UGT->SGT, UGE->SGE, SLT->Failed assert
953   /// @returns the signed version of the predicate for this instruction (which
954   /// has to be an unsigned predicate).
955   /// return the signed version of a predicate
956   Predicate getSignedPredicate() {
957     return getSignedPredicate(getPredicate());
958   }
959 
960   /// For example, SLT->ULT, SLE->ULE, SGT->UGT, SGE->UGE, ULT->Failed assert
961   /// @returns the unsigned version of the signed predicate pred.
962   static Predicate getUnsignedPredicate(Predicate pred);
963 
964   /// For example, SLT->ULT, SLE->ULE, SGT->UGT, SGE->UGE, ULT->Failed assert
965   /// @returns the unsigned version of the predicate for this instruction (which
966   /// has to be an signed predicate).
967   /// return the unsigned version of a predicate
968   Predicate getUnsignedPredicate() {
969     return getUnsignedPredicate(getPredicate());
970   }
971 
972   /// For example, SLT->ULT, ULT->SLT, SLE->ULE, ULE->SLE, EQ->Failed assert
973   /// @returns the unsigned version of the signed predicate pred or
974   ///          the signed version of the signed predicate pred.
975   static Predicate getFlippedSignednessPredicate(Predicate pred);
976 
977   /// For example, SLT->ULT, ULT->SLT, SLE->ULE, ULE->SLE, EQ->Failed assert
978   /// @returns the unsigned version of the signed predicate pred or
979   ///          the signed version of the signed predicate pred.
980   Predicate getFlippedSignednessPredicate() {
981     return getFlippedSignednessPredicate(getPredicate());
982   }
983 
984   /// This is just a convenience.
985   /// Determine if this is true when both operands are the same.
986   bool isTrueWhenEqual() const {
987     return isTrueWhenEqual(getPredicate());
988   }
989 
990   /// This is just a convenience.
991   /// Determine if this is false when both operands are the same.
992   bool isFalseWhenEqual() const {
993     return isFalseWhenEqual(getPredicate());
994   }
995 
996   /// @returns true if the predicate is unsigned, false otherwise.
997   /// Determine if the predicate is an unsigned operation.
998   static bool isUnsigned(Predicate predicate);
999 
1000   /// @returns true if the predicate is signed, false otherwise.
1001   /// Determine if the predicate is an signed operation.
1002   static bool isSigned(Predicate predicate);
1003 
1004   /// Determine if the predicate is an ordered operation.
1005   static bool isOrdered(Predicate predicate);
1006 
1007   /// Determine if the predicate is an unordered operation.
1008   static bool isUnordered(Predicate predicate);
1009 
1010   /// Determine if the predicate is true when comparing a value with itself.
1011   static bool isTrueWhenEqual(Predicate predicate);
1012 
1013   /// Determine if the predicate is false when comparing a value with itself.
1014   static bool isFalseWhenEqual(Predicate predicate);
1015 
1016   /// Determine if Pred1 implies Pred2 is true when two compares have matching
1017   /// operands.
1018   static bool isImpliedTrueByMatchingCmp(Predicate Pred1, Predicate Pred2);
1019 
1020   /// Determine if Pred1 implies Pred2 is false when two compares have matching
1021   /// operands.
1022   static bool isImpliedFalseByMatchingCmp(Predicate Pred1, Predicate Pred2);
1023 
1024   /// Methods for support type inquiry through isa, cast, and dyn_cast:
1025   static bool classof(const Instruction *I) {
1026     return I->getOpcode() == Instruction::ICmp ||
1027            I->getOpcode() == Instruction::FCmp;
1028   }
1029   static bool classof(const Value *V) {
1030     return isa<Instruction>(V) && classof(cast<Instruction>(V));
1031   }
1032 
1033   /// Create a result type for fcmp/icmp
1034   static Type* makeCmpResultType(Type* opnd_type) {
1035     if (VectorType* vt = dyn_cast<VectorType>(opnd_type)) {
1036       return VectorType::get(Type::getInt1Ty(opnd_type->getContext()),
1037                              vt->getElementCount());
1038     }
1039     return Type::getInt1Ty(opnd_type->getContext());
1040   }
1041 
1042 private:
1043   // Shadow Value::setValueSubclassData with a private forwarding method so that
1044   // subclasses cannot accidentally use it.
1045   void setValueSubclassData(unsigned short D) {
1046     Value::setValueSubclassData(D);
1047   }
1048 };
1049 
1050 // FIXME: these are redundant if CmpInst < BinaryOperator
1051 template <>
1052 struct OperandTraits<CmpInst> : public FixedNumOperandTraits<CmpInst, 2> {
1053 };
1054 
1055 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(CmpInst, Value)
1056 
1057 /// A lightweight accessor for an operand bundle meant to be passed
1058 /// around by value.
1059 struct OperandBundleUse {
1060   ArrayRef<Use> Inputs;
1061 
1062   OperandBundleUse() = default;
1063   explicit OperandBundleUse(StringMapEntry<uint32_t> *Tag, ArrayRef<Use> Inputs)
1064       : Inputs(Inputs), Tag(Tag) {}
1065 
1066   /// Return true if the operand at index \p Idx in this operand bundle
1067   /// has the attribute A.
1068   bool operandHasAttr(unsigned Idx, Attribute::AttrKind A) const {
1069     if (isDeoptOperandBundle())
1070       if (A == Attribute::ReadOnly || A == Attribute::NoCapture)
1071         return Inputs[Idx]->getType()->isPointerTy();
1072 
1073     // Conservative answer:  no operands have any attributes.
1074     return false;
1075   }
1076 
1077   /// Return the tag of this operand bundle as a string.
1078   StringRef getTagName() const {
1079     return Tag->getKey();
1080   }
1081 
1082   /// Return the tag of this operand bundle as an integer.
1083   ///
1084   /// Operand bundle tags are interned by LLVMContextImpl::getOrInsertBundleTag,
1085   /// and this function returns the unique integer getOrInsertBundleTag
1086   /// associated the tag of this operand bundle to.
1087   uint32_t getTagID() const {
1088     return Tag->getValue();
1089   }
1090 
1091   /// Return true if this is a "deopt" operand bundle.
1092   bool isDeoptOperandBundle() const {
1093     return getTagID() == LLVMContext::OB_deopt;
1094   }
1095 
1096   /// Return true if this is a "funclet" operand bundle.
1097   bool isFuncletOperandBundle() const {
1098     return getTagID() == LLVMContext::OB_funclet;
1099   }
1100 
1101   /// Return true if this is a "cfguardtarget" operand bundle.
1102   bool isCFGuardTargetOperandBundle() const {
1103     return getTagID() == LLVMContext::OB_cfguardtarget;
1104   }
1105 
1106 private:
1107   /// Pointer to an entry in LLVMContextImpl::getOrInsertBundleTag.
1108   StringMapEntry<uint32_t> *Tag;
1109 };
1110 
1111 /// A container for an operand bundle being viewed as a set of values
1112 /// rather than a set of uses.
1113 ///
1114 /// Unlike OperandBundleUse, OperandBundleDefT owns the memory it carries, and
1115 /// so it is possible to create and pass around "self-contained" instances of
1116 /// OperandBundleDef and ConstOperandBundleDef.
1117 template <typename InputTy> class OperandBundleDefT {
1118   std::string Tag;
1119   std::vector<InputTy> Inputs;
1120 
1121 public:
1122   explicit OperandBundleDefT(std::string Tag, std::vector<InputTy> Inputs)
1123       : Tag(std::move(Tag)), Inputs(std::move(Inputs)) {}
1124   explicit OperandBundleDefT(std::string Tag, ArrayRef<InputTy> Inputs)
1125       : Tag(std::move(Tag)), Inputs(Inputs) {}
1126 
1127   explicit OperandBundleDefT(const OperandBundleUse &OBU) {
1128     Tag = std::string(OBU.getTagName());
1129     llvm::append_range(Inputs, OBU.Inputs);
1130   }
1131 
1132   ArrayRef<InputTy> inputs() const { return Inputs; }
1133 
1134   using input_iterator = typename std::vector<InputTy>::const_iterator;
1135 
1136   size_t input_size() const { return Inputs.size(); }
1137   input_iterator input_begin() const { return Inputs.begin(); }
1138   input_iterator input_end() const { return Inputs.end(); }
1139 
1140   StringRef getTag() const { return Tag; }
1141 };
1142 
1143 using OperandBundleDef = OperandBundleDefT<Value *>;
1144 using ConstOperandBundleDef = OperandBundleDefT<const Value *>;
1145 
1146 //===----------------------------------------------------------------------===//
1147 //                               CallBase Class
1148 //===----------------------------------------------------------------------===//
1149 
1150 /// Base class for all callable instructions (InvokeInst and CallInst)
1151 /// Holds everything related to calling a function.
1152 ///
1153 /// All call-like instructions are required to use a common operand layout:
1154 /// - Zero or more arguments to the call,
1155 /// - Zero or more operand bundles with zero or more operand inputs each
1156 ///   bundle,
1157 /// - Zero or more subclass controlled operands
1158 /// - The called function.
1159 ///
1160 /// This allows this base class to easily access the called function and the
1161 /// start of the arguments without knowing how many other operands a particular
1162 /// subclass requires. Note that accessing the end of the argument list isn't
1163 /// as cheap as most other operations on the base class.
1164 class CallBase : public Instruction {
1165 protected:
1166   // The first two bits are reserved by CallInst for fast retrieval,
1167   using CallInstReservedField = Bitfield::Element<unsigned, 0, 2>;
1168   using CallingConvField =
1169       Bitfield::Element<CallingConv::ID, CallInstReservedField::NextBit, 10,
1170                         CallingConv::MaxID>;
1171   static_assert(
1172       Bitfield::areContiguous<CallInstReservedField, CallingConvField>(),
1173       "Bitfields must be contiguous");
1174 
1175   /// The last operand is the called operand.
1176   static constexpr int CalledOperandOpEndIdx = -1;
1177 
1178   AttributeList Attrs; ///< parameter attributes for callable
1179   FunctionType *FTy;
1180 
1181   template <class... ArgsTy>
1182   CallBase(AttributeList const &A, FunctionType *FT, ArgsTy &&... Args)
1183       : Instruction(std::forward<ArgsTy>(Args)...), Attrs(A), FTy(FT) {}
1184 
1185   using Instruction::Instruction;
1186 
1187   bool hasDescriptor() const { return Value::HasDescriptor; }
1188 
1189   unsigned getNumSubclassExtraOperands() const {
1190     switch (getOpcode()) {
1191     case Instruction::Call:
1192       return 0;
1193     case Instruction::Invoke:
1194       return 2;
1195     case Instruction::CallBr:
1196       return getNumSubclassExtraOperandsDynamic();
1197     }
1198     llvm_unreachable("Invalid opcode!");
1199   }
1200 
1201   /// Get the number of extra operands for instructions that don't have a fixed
1202   /// number of extra operands.
1203   unsigned getNumSubclassExtraOperandsDynamic() const;
1204 
1205 public:
1206   using Instruction::getContext;
1207 
1208   /// Create a clone of \p CB with a different set of operand bundles and
1209   /// insert it before \p InsertPt.
1210   ///
1211   /// The returned call instruction is identical \p CB in every way except that
1212   /// the operand bundles for the new instruction are set to the operand bundles
1213   /// in \p Bundles.
1214   static CallBase *Create(CallBase *CB, ArrayRef<OperandBundleDef> Bundles,
1215                           Instruction *InsertPt = nullptr);
1216 
1217   /// Create a clone of \p CB with the operand bundle with the tag matching
1218   /// \p Bundle's tag replaced with Bundle, and insert it before \p InsertPt.
1219   ///
1220   /// The returned call instruction is identical \p CI in every way except that
1221   /// the specified operand bundle has been replaced.
1222   static CallBase *Create(CallBase *CB,
1223                           OperandBundleDef Bundle,
1224                           Instruction *InsertPt = nullptr);
1225 
1226   /// Create a clone of \p CB with operand bundle \p OB added.
1227   static CallBase *addOperandBundle(CallBase *CB, uint32_t ID,
1228                                     OperandBundleDef OB,
1229                                     Instruction *InsertPt = nullptr);
1230 
1231   /// Create a clone of \p CB with operand bundle \p ID removed.
1232   static CallBase *removeOperandBundle(CallBase *CB, uint32_t ID,
1233                                        Instruction *InsertPt = nullptr);
1234 
1235   static bool classof(const Instruction *I) {
1236     return I->getOpcode() == Instruction::Call ||
1237            I->getOpcode() == Instruction::Invoke ||
1238            I->getOpcode() == Instruction::CallBr;
1239   }
1240   static bool classof(const Value *V) {
1241     return isa<Instruction>(V) && classof(cast<Instruction>(V));
1242   }
1243 
1244   FunctionType *getFunctionType() const { return FTy; }
1245 
1246   void mutateFunctionType(FunctionType *FTy) {
1247     Value::mutateType(FTy->getReturnType());
1248     this->FTy = FTy;
1249   }
1250 
1251   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
1252 
1253   /// data_operands_begin/data_operands_end - Return iterators iterating over
1254   /// the call / invoke argument list and bundle operands.  For invokes, this is
1255   /// the set of instruction operands except the invoke target and the two
1256   /// successor blocks; and for calls this is the set of instruction operands
1257   /// except the call target.
1258   User::op_iterator data_operands_begin() { return op_begin(); }
1259   User::const_op_iterator data_operands_begin() const {
1260     return const_cast<CallBase *>(this)->data_operands_begin();
1261   }
1262   User::op_iterator data_operands_end() {
1263     // Walk from the end of the operands over the called operand and any
1264     // subclass operands.
1265     return op_end() - getNumSubclassExtraOperands() - 1;
1266   }
1267   User::const_op_iterator data_operands_end() const {
1268     return const_cast<CallBase *>(this)->data_operands_end();
1269   }
1270   iterator_range<User::op_iterator> data_ops() {
1271     return make_range(data_operands_begin(), data_operands_end());
1272   }
1273   iterator_range<User::const_op_iterator> data_ops() const {
1274     return make_range(data_operands_begin(), data_operands_end());
1275   }
1276   bool data_operands_empty() const {
1277     return data_operands_end() == data_operands_begin();
1278   }
1279   unsigned data_operands_size() const {
1280     return std::distance(data_operands_begin(), data_operands_end());
1281   }
1282 
1283   bool isDataOperand(const Use *U) const {
1284     assert(this == U->getUser() &&
1285            "Only valid to query with a use of this instruction!");
1286     return data_operands_begin() <= U && U < data_operands_end();
1287   }
1288   bool isDataOperand(Value::const_user_iterator UI) const {
1289     return isDataOperand(&UI.getUse());
1290   }
1291 
1292   /// Given a value use iterator, return the data operand corresponding to it.
1293   /// Iterator must actually correspond to a data operand.
1294   unsigned getDataOperandNo(Value::const_user_iterator UI) const {
1295     return getDataOperandNo(&UI.getUse());
1296   }
1297 
1298   /// Given a use for a data operand, get the data operand number that
1299   /// corresponds to it.
1300   unsigned getDataOperandNo(const Use *U) const {
1301     assert(isDataOperand(U) && "Data operand # out of range!");
1302     return U - data_operands_begin();
1303   }
1304 
1305   /// Return the iterator pointing to the beginning of the argument list.
1306   User::op_iterator arg_begin() { return op_begin(); }
1307   User::const_op_iterator arg_begin() const {
1308     return const_cast<CallBase *>(this)->arg_begin();
1309   }
1310 
1311   /// Return the iterator pointing to the end of the argument list.
1312   User::op_iterator arg_end() {
1313     // From the end of the data operands, walk backwards past the bundle
1314     // operands.
1315     return data_operands_end() - getNumTotalBundleOperands();
1316   }
1317   User::const_op_iterator arg_end() const {
1318     return const_cast<CallBase *>(this)->arg_end();
1319   }
1320 
1321   /// Iteration adapter for range-for loops.
1322   iterator_range<User::op_iterator> args() {
1323     return make_range(arg_begin(), arg_end());
1324   }
1325   iterator_range<User::const_op_iterator> args() const {
1326     return make_range(arg_begin(), arg_end());
1327   }
1328   bool arg_empty() const { return arg_end() == arg_begin(); }
1329   unsigned arg_size() const { return arg_end() - arg_begin(); }
1330 
1331   // Legacy API names that duplicate the above and will be removed once users
1332   // are migrated.
1333   iterator_range<User::op_iterator> arg_operands() {
1334     return make_range(arg_begin(), arg_end());
1335   }
1336   iterator_range<User::const_op_iterator> arg_operands() const {
1337     return make_range(arg_begin(), arg_end());
1338   }
1339   unsigned getNumArgOperands() const { return arg_size(); }
1340 
1341   Value *getArgOperand(unsigned i) const {
1342     assert(i < getNumArgOperands() && "Out of bounds!");
1343     return getOperand(i);
1344   }
1345 
1346   void setArgOperand(unsigned i, Value *v) {
1347     assert(i < getNumArgOperands() && "Out of bounds!");
1348     setOperand(i, v);
1349   }
1350 
1351   /// Wrappers for getting the \c Use of a call argument.
1352   const Use &getArgOperandUse(unsigned i) const {
1353     assert(i < getNumArgOperands() && "Out of bounds!");
1354     return User::getOperandUse(i);
1355   }
1356   Use &getArgOperandUse(unsigned i) {
1357     assert(i < getNumArgOperands() && "Out of bounds!");
1358     return User::getOperandUse(i);
1359   }
1360 
1361   bool isArgOperand(const Use *U) const {
1362     assert(this == U->getUser() &&
1363            "Only valid to query with a use of this instruction!");
1364     return arg_begin() <= U && U < arg_end();
1365   }
1366   bool isArgOperand(Value::const_user_iterator UI) const {
1367     return isArgOperand(&UI.getUse());
1368   }
1369 
1370   /// Given a use for a arg operand, get the arg operand number that
1371   /// corresponds to it.
1372   unsigned getArgOperandNo(const Use *U) const {
1373     assert(isArgOperand(U) && "Arg operand # out of range!");
1374     return U - arg_begin();
1375   }
1376 
1377   /// Given a value use iterator, return the arg operand number corresponding to
1378   /// it. Iterator must actually correspond to a data operand.
1379   unsigned getArgOperandNo(Value::const_user_iterator UI) const {
1380     return getArgOperandNo(&UI.getUse());
1381   }
1382 
1383   /// Returns true if this CallSite passes the given Value* as an argument to
1384   /// the called function.
1385   bool hasArgument(const Value *V) const {
1386     return llvm::is_contained(args(), V);
1387   }
1388 
1389   Value *getCalledOperand() const { return Op<CalledOperandOpEndIdx>(); }
1390 
1391   const Use &getCalledOperandUse() const { return Op<CalledOperandOpEndIdx>(); }
1392   Use &getCalledOperandUse() { return Op<CalledOperandOpEndIdx>(); }
1393 
1394   /// Returns the function called, or null if this is an
1395   /// indirect function invocation.
1396   Function *getCalledFunction() const {
1397     return dyn_cast_or_null<Function>(getCalledOperand());
1398   }
1399 
1400   /// Return true if the callsite is an indirect call.
1401   bool isIndirectCall() const;
1402 
1403   /// Determine whether the passed iterator points to the callee operand's Use.
1404   bool isCallee(Value::const_user_iterator UI) const {
1405     return isCallee(&UI.getUse());
1406   }
1407 
1408   /// Determine whether this Use is the callee operand's Use.
1409   bool isCallee(const Use *U) const { return &getCalledOperandUse() == U; }
1410 
1411   /// Helper to get the caller (the parent function).
1412   Function *getCaller();
1413   const Function *getCaller() const {
1414     return const_cast<CallBase *>(this)->getCaller();
1415   }
1416 
1417   /// Tests if this call site must be tail call optimized. Only a CallInst can
1418   /// be tail call optimized.
1419   bool isMustTailCall() const;
1420 
1421   /// Tests if this call site is marked as a tail call.
1422   bool isTailCall() const;
1423 
1424   /// Returns the intrinsic ID of the intrinsic called or
1425   /// Intrinsic::not_intrinsic if the called function is not an intrinsic, or if
1426   /// this is an indirect call.
1427   Intrinsic::ID getIntrinsicID() const;
1428 
1429   void setCalledOperand(Value *V) { Op<CalledOperandOpEndIdx>() = V; }
1430 
1431   /// Sets the function called, including updating the function type.
1432   void setCalledFunction(Function *Fn) {
1433     setCalledFunction(Fn->getFunctionType(), Fn);
1434   }
1435 
1436   /// Sets the function called, including updating the function type.
1437   void setCalledFunction(FunctionCallee Fn) {
1438     setCalledFunction(Fn.getFunctionType(), Fn.getCallee());
1439   }
1440 
1441   /// Sets the function called, including updating to the specified function
1442   /// type.
1443   void setCalledFunction(FunctionType *FTy, Value *Fn) {
1444     this->FTy = FTy;
1445     assert(FTy == cast<FunctionType>(
1446                       cast<PointerType>(Fn->getType())->getElementType()));
1447     // This function doesn't mutate the return type, only the function
1448     // type. Seems broken, but I'm just gonna stick an assert in for now.
1449     assert(getType() == FTy->getReturnType());
1450     setCalledOperand(Fn);
1451   }
1452 
1453   CallingConv::ID getCallingConv() const {
1454     return getSubclassData<CallingConvField>();
1455   }
1456 
1457   void setCallingConv(CallingConv::ID CC) {
1458     setSubclassData<CallingConvField>(CC);
1459   }
1460 
1461   /// Check if this call is an inline asm statement.
1462   bool isInlineAsm() const { return isa<InlineAsm>(getCalledOperand()); }
1463 
1464   /// \name Attribute API
1465   ///
1466   /// These methods access and modify attributes on this call (including
1467   /// looking through to the attributes on the called function when necessary).
1468   ///@{
1469 
1470   /// Return the parameter attributes for this call.
1471   ///
1472   AttributeList getAttributes() const { return Attrs; }
1473 
1474   /// Set the parameter attributes for this call.
1475   ///
1476   void setAttributes(AttributeList A) { Attrs = A; }
1477 
1478   /// Determine whether this call has the given attribute. If it does not
1479   /// then determine if the called function has the attribute, but only if
1480   /// the attribute is allowed for the call.
1481   bool hasFnAttr(Attribute::AttrKind Kind) const {
1482     assert(Kind != Attribute::NoBuiltin &&
1483            "Use CallBase::isNoBuiltin() to check for Attribute::NoBuiltin");
1484     return hasFnAttrImpl(Kind);
1485   }
1486 
1487   /// Determine whether this call has the given attribute. If it does not
1488   /// then determine if the called function has the attribute, but only if
1489   /// the attribute is allowed for the call.
1490   bool hasFnAttr(StringRef Kind) const { return hasFnAttrImpl(Kind); }
1491 
1492   /// adds the attribute to the list of attributes.
1493   void addAttribute(unsigned i, Attribute::AttrKind Kind) {
1494     AttributeList PAL = getAttributes();
1495     PAL = PAL.addAttribute(getContext(), i, Kind);
1496     setAttributes(PAL);
1497   }
1498 
1499   /// adds the attribute to the list of attributes.
1500   void addAttribute(unsigned i, Attribute Attr) {
1501     AttributeList PAL = getAttributes();
1502     PAL = PAL.addAttribute(getContext(), i, Attr);
1503     setAttributes(PAL);
1504   }
1505 
1506   /// Adds the attribute to the indicated argument
1507   void addParamAttr(unsigned ArgNo, Attribute::AttrKind Kind) {
1508     assert(ArgNo < getNumArgOperands() && "Out of bounds");
1509     AttributeList PAL = getAttributes();
1510     PAL = PAL.addParamAttribute(getContext(), ArgNo, Kind);
1511     setAttributes(PAL);
1512   }
1513 
1514   /// Adds the attribute to the indicated argument
1515   void addParamAttr(unsigned ArgNo, Attribute Attr) {
1516     assert(ArgNo < getNumArgOperands() && "Out of bounds");
1517     AttributeList PAL = getAttributes();
1518     PAL = PAL.addParamAttribute(getContext(), ArgNo, Attr);
1519     setAttributes(PAL);
1520   }
1521 
1522   /// removes the attribute from the list of attributes.
1523   void removeAttribute(unsigned i, Attribute::AttrKind Kind) {
1524     AttributeList PAL = getAttributes();
1525     PAL = PAL.removeAttribute(getContext(), i, Kind);
1526     setAttributes(PAL);
1527   }
1528 
1529   /// removes the attribute from the list of attributes.
1530   void removeAttribute(unsigned i, StringRef Kind) {
1531     AttributeList PAL = getAttributes();
1532     PAL = PAL.removeAttribute(getContext(), i, Kind);
1533     setAttributes(PAL);
1534   }
1535 
1536   void removeAttributes(unsigned i, const AttrBuilder &Attrs) {
1537     AttributeList PAL = getAttributes();
1538     PAL = PAL.removeAttributes(getContext(), i, Attrs);
1539     setAttributes(PAL);
1540   }
1541 
1542   /// Removes the attribute from the given argument
1543   void removeParamAttr(unsigned ArgNo, Attribute::AttrKind Kind) {
1544     assert(ArgNo < getNumArgOperands() && "Out of bounds");
1545     AttributeList PAL = getAttributes();
1546     PAL = PAL.removeParamAttribute(getContext(), ArgNo, Kind);
1547     setAttributes(PAL);
1548   }
1549 
1550   /// Removes the attribute from the given argument
1551   void removeParamAttr(unsigned ArgNo, StringRef Kind) {
1552     assert(ArgNo < getNumArgOperands() && "Out of bounds");
1553     AttributeList PAL = getAttributes();
1554     PAL = PAL.removeParamAttribute(getContext(), ArgNo, Kind);
1555     setAttributes(PAL);
1556   }
1557 
1558   /// Removes the attributes from the given argument
1559   void removeParamAttrs(unsigned ArgNo, const AttrBuilder &Attrs) {
1560     AttributeList PAL = getAttributes();
1561     PAL = PAL.removeParamAttributes(getContext(), ArgNo, Attrs);
1562     setAttributes(PAL);
1563   }
1564 
1565   /// Removes noundef and other attributes that imply undefined behavior if a
1566   /// `undef` or `poison` value is passed from the given argument.
1567   void removeParamUndefImplyingAttrs(unsigned ArgNo) {
1568     assert(ArgNo < getNumArgOperands() && "Out of bounds");
1569     AttributeList PAL = getAttributes();
1570     PAL = PAL.removeParamUndefImplyingAttributes(getContext(), ArgNo);
1571     setAttributes(PAL);
1572   }
1573 
1574   /// adds the dereferenceable attribute to the list of attributes.
1575   void addDereferenceableAttr(unsigned i, uint64_t Bytes) {
1576     AttributeList PAL = getAttributes();
1577     PAL = PAL.addDereferenceableAttr(getContext(), i, Bytes);
1578     setAttributes(PAL);
1579   }
1580 
1581   /// adds the dereferenceable_or_null attribute to the list of
1582   /// attributes.
1583   void addDereferenceableOrNullAttr(unsigned i, uint64_t Bytes) {
1584     AttributeList PAL = getAttributes();
1585     PAL = PAL.addDereferenceableOrNullAttr(getContext(), i, Bytes);
1586     setAttributes(PAL);
1587   }
1588 
1589   /// Determine whether the return value has the given attribute.
1590   bool hasRetAttr(Attribute::AttrKind Kind) const {
1591     return hasRetAttrImpl(Kind);
1592   }
1593   /// Determine whether the return value has the given attribute.
1594   bool hasRetAttr(StringRef Kind) const { return hasRetAttrImpl(Kind); }
1595 
1596   /// Determine whether the argument or parameter has the given attribute.
1597   bool paramHasAttr(unsigned ArgNo, Attribute::AttrKind Kind) const;
1598 
1599   /// Get the attribute of a given kind at a position.
1600   Attribute getAttribute(unsigned i, Attribute::AttrKind Kind) const {
1601     return getAttributes().getAttribute(i, Kind);
1602   }
1603 
1604   /// Get the attribute of a given kind at a position.
1605   Attribute getAttribute(unsigned i, StringRef Kind) const {
1606     return getAttributes().getAttribute(i, Kind);
1607   }
1608 
1609   /// Get the attribute of a given kind from a given arg
1610   Attribute getParamAttr(unsigned ArgNo, Attribute::AttrKind Kind) const {
1611     assert(ArgNo < getNumArgOperands() && "Out of bounds");
1612     return getAttributes().getParamAttr(ArgNo, Kind);
1613   }
1614 
1615   /// Get the attribute of a given kind from a given arg
1616   Attribute getParamAttr(unsigned ArgNo, StringRef Kind) const {
1617     assert(ArgNo < getNumArgOperands() && "Out of bounds");
1618     return getAttributes().getParamAttr(ArgNo, Kind);
1619   }
1620 
1621   /// Return true if the data operand at index \p i has the attribute \p
1622   /// A.
1623   ///
1624   /// Data operands include call arguments and values used in operand bundles,
1625   /// but does not include the callee operand.  This routine dispatches to the
1626   /// underlying AttributeList or the OperandBundleUser as appropriate.
1627   ///
1628   /// The index \p i is interpreted as
1629   ///
1630   ///  \p i == Attribute::ReturnIndex  -> the return value
1631   ///  \p i in [1, arg_size + 1)  -> argument number (\p i - 1)
1632   ///  \p i in [arg_size + 1, data_operand_size + 1) -> bundle operand at index
1633   ///     (\p i - 1) in the operand list.
1634   bool dataOperandHasImpliedAttr(unsigned i, Attribute::AttrKind Kind) const {
1635     // Note that we have to add one because `i` isn't zero-indexed.
1636     assert(i < (getNumArgOperands() + getNumTotalBundleOperands() + 1) &&
1637            "Data operand index out of bounds!");
1638 
1639     // The attribute A can either be directly specified, if the operand in
1640     // question is a call argument; or be indirectly implied by the kind of its
1641     // containing operand bundle, if the operand is a bundle operand.
1642 
1643     if (i == AttributeList::ReturnIndex)
1644       return hasRetAttr(Kind);
1645 
1646     // FIXME: Avoid these i - 1 calculations and update the API to use
1647     // zero-based indices.
1648     if (i < (getNumArgOperands() + 1))
1649       return paramHasAttr(i - 1, Kind);
1650 
1651     assert(hasOperandBundles() && i >= (getBundleOperandsStartIndex() + 1) &&
1652            "Must be either a call argument or an operand bundle!");
1653     return bundleOperandHasAttr(i - 1, Kind);
1654   }
1655 
1656   /// Determine whether this data operand is not captured.
1657   // FIXME: Once this API is no longer duplicated in `CallSite`, rename this to
1658   // better indicate that this may return a conservative answer.
1659   bool doesNotCapture(unsigned OpNo) const {
1660     return dataOperandHasImpliedAttr(OpNo + 1, Attribute::NoCapture);
1661   }
1662 
1663   /// Determine whether this argument is passed by value.
1664   bool isByValArgument(unsigned ArgNo) const {
1665     return paramHasAttr(ArgNo, Attribute::ByVal);
1666   }
1667 
1668   /// Determine whether this argument is passed in an alloca.
1669   bool isInAllocaArgument(unsigned ArgNo) const {
1670     return paramHasAttr(ArgNo, Attribute::InAlloca);
1671   }
1672 
1673   /// Determine whether this argument is passed by value, in an alloca, or is
1674   /// preallocated.
1675   bool isPassPointeeByValueArgument(unsigned ArgNo) const {
1676     return paramHasAttr(ArgNo, Attribute::ByVal) ||
1677            paramHasAttr(ArgNo, Attribute::InAlloca) ||
1678            paramHasAttr(ArgNo, Attribute::Preallocated);
1679   }
1680 
1681   /// Determine whether passing undef to this argument is undefined behavior.
1682   /// If passing undef to this argument is UB, passing poison is UB as well
1683   /// because poison is more undefined than undef.
1684   bool isPassingUndefUB(unsigned ArgNo) const {
1685     return paramHasAttr(ArgNo, Attribute::NoUndef) ||
1686            // dereferenceable implies noundef.
1687            paramHasAttr(ArgNo, Attribute::Dereferenceable) ||
1688            // dereferenceable implies noundef, and null is a well-defined value.
1689            paramHasAttr(ArgNo, Attribute::DereferenceableOrNull);
1690   }
1691 
1692   /// Determine if there are is an inalloca argument. Only the last argument can
1693   /// have the inalloca attribute.
1694   bool hasInAllocaArgument() const {
1695     return !arg_empty() && paramHasAttr(arg_size() - 1, Attribute::InAlloca);
1696   }
1697 
1698   // FIXME: Once this API is no longer duplicated in `CallSite`, rename this to
1699   // better indicate that this may return a conservative answer.
1700   bool doesNotAccessMemory(unsigned OpNo) const {
1701     return dataOperandHasImpliedAttr(OpNo + 1, Attribute::ReadNone);
1702   }
1703 
1704   // FIXME: Once this API is no longer duplicated in `CallSite`, rename this to
1705   // better indicate that this may return a conservative answer.
1706   bool onlyReadsMemory(unsigned OpNo) const {
1707     return dataOperandHasImpliedAttr(OpNo + 1, Attribute::ReadOnly) ||
1708            dataOperandHasImpliedAttr(OpNo + 1, Attribute::ReadNone);
1709   }
1710 
1711   // FIXME: Once this API is no longer duplicated in `CallSite`, rename this to
1712   // better indicate that this may return a conservative answer.
1713   bool doesNotReadMemory(unsigned OpNo) const {
1714     return dataOperandHasImpliedAttr(OpNo + 1, Attribute::WriteOnly) ||
1715            dataOperandHasImpliedAttr(OpNo + 1, Attribute::ReadNone);
1716   }
1717 
1718   /// Extract the alignment of the return value.
1719   MaybeAlign getRetAlign() const { return Attrs.getRetAlignment(); }
1720 
1721   /// Extract the alignment for a call or parameter (0=unknown).
1722   MaybeAlign getParamAlign(unsigned ArgNo) const {
1723     return Attrs.getParamAlignment(ArgNo);
1724   }
1725 
1726   MaybeAlign getParamStackAlign(unsigned ArgNo) const {
1727     return Attrs.getParamStackAlignment(ArgNo);
1728   }
1729 
1730   /// Extract the byval type for a call or parameter.
1731   Type *getParamByValType(unsigned ArgNo) const {
1732     return Attrs.getParamByValType(ArgNo);
1733   }
1734 
1735   /// Extract the inalloca type for a call or parameter.
1736   Type *getParamInAllocaType(unsigned ArgNo) const {
1737     return Attrs.getParamInAllocaType(ArgNo);
1738   }
1739 
1740   /// Extract the preallocated type for a call or parameter.
1741   Type *getParamPreallocatedType(unsigned ArgNo) const {
1742     return Attrs.getParamPreallocatedType(ArgNo);
1743   }
1744 
1745   /// Extract the number of dereferenceable bytes for a call or
1746   /// parameter (0=unknown).
1747   uint64_t getDereferenceableBytes(unsigned i) const {
1748     return Attrs.getDereferenceableBytes(i);
1749   }
1750 
1751   /// Extract the number of dereferenceable_or_null bytes for a call or
1752   /// parameter (0=unknown).
1753   uint64_t getDereferenceableOrNullBytes(unsigned i) const {
1754     return Attrs.getDereferenceableOrNullBytes(i);
1755   }
1756 
1757   /// Return true if the return value is known to be not null.
1758   /// This may be because it has the nonnull attribute, or because at least
1759   /// one byte is dereferenceable and the pointer is in addrspace(0).
1760   bool isReturnNonNull() const;
1761 
1762   /// Determine if the return value is marked with NoAlias attribute.
1763   bool returnDoesNotAlias() const {
1764     return Attrs.hasAttribute(AttributeList::ReturnIndex, Attribute::NoAlias);
1765   }
1766 
1767   /// If one of the arguments has the 'returned' attribute, returns its
1768   /// operand value. Otherwise, return nullptr.
1769   Value *getReturnedArgOperand() const;
1770 
1771   /// Return true if the call should not be treated as a call to a
1772   /// builtin.
1773   bool isNoBuiltin() const {
1774     return hasFnAttrImpl(Attribute::NoBuiltin) &&
1775            !hasFnAttrImpl(Attribute::Builtin);
1776   }
1777 
1778   /// Determine if the call requires strict floating point semantics.
1779   bool isStrictFP() const { return hasFnAttr(Attribute::StrictFP); }
1780 
1781   /// Return true if the call should not be inlined.
1782   bool isNoInline() const { return hasFnAttr(Attribute::NoInline); }
1783   void setIsNoInline() {
1784     addAttribute(AttributeList::FunctionIndex, Attribute::NoInline);
1785   }
1786   /// Determine if the call does not access memory.
1787   bool doesNotAccessMemory() const { return hasFnAttr(Attribute::ReadNone); }
1788   void setDoesNotAccessMemory() {
1789     addAttribute(AttributeList::FunctionIndex, Attribute::ReadNone);
1790   }
1791 
1792   /// Determine if the call does not access or only reads memory.
1793   bool onlyReadsMemory() const {
1794     return doesNotAccessMemory() || hasFnAttr(Attribute::ReadOnly);
1795   }
1796 
1797   void setOnlyReadsMemory() {
1798     addAttribute(AttributeList::FunctionIndex, Attribute::ReadOnly);
1799   }
1800 
1801   /// Determine if the call does not access or only writes memory.
1802   bool doesNotReadMemory() const {
1803     return doesNotAccessMemory() || hasFnAttr(Attribute::WriteOnly);
1804   }
1805   void setDoesNotReadMemory() {
1806     addAttribute(AttributeList::FunctionIndex, Attribute::WriteOnly);
1807   }
1808 
1809   /// Determine if the call can access memmory only using pointers based
1810   /// on its arguments.
1811   bool onlyAccessesArgMemory() const {
1812     return hasFnAttr(Attribute::ArgMemOnly);
1813   }
1814   void setOnlyAccessesArgMemory() {
1815     addAttribute(AttributeList::FunctionIndex, Attribute::ArgMemOnly);
1816   }
1817 
1818   /// Determine if the function may only access memory that is
1819   /// inaccessible from the IR.
1820   bool onlyAccessesInaccessibleMemory() const {
1821     return hasFnAttr(Attribute::InaccessibleMemOnly);
1822   }
1823   void setOnlyAccessesInaccessibleMemory() {
1824     addAttribute(AttributeList::FunctionIndex, Attribute::InaccessibleMemOnly);
1825   }
1826 
1827   /// Determine if the function may only access memory that is
1828   /// either inaccessible from the IR or pointed to by its arguments.
1829   bool onlyAccessesInaccessibleMemOrArgMem() const {
1830     return hasFnAttr(Attribute::InaccessibleMemOrArgMemOnly);
1831   }
1832   void setOnlyAccessesInaccessibleMemOrArgMem() {
1833     addAttribute(AttributeList::FunctionIndex,
1834                  Attribute::InaccessibleMemOrArgMemOnly);
1835   }
1836   /// Determine if the call cannot return.
1837   bool doesNotReturn() const { return hasFnAttr(Attribute::NoReturn); }
1838   void setDoesNotReturn() {
1839     addAttribute(AttributeList::FunctionIndex, Attribute::NoReturn);
1840   }
1841 
1842   /// Determine if the call should not perform indirect branch tracking.
1843   bool doesNoCfCheck() const { return hasFnAttr(Attribute::NoCfCheck); }
1844 
1845   /// Determine if the call cannot unwind.
1846   bool doesNotThrow() const { return hasFnAttr(Attribute::NoUnwind); }
1847   void setDoesNotThrow() {
1848     addAttribute(AttributeList::FunctionIndex, Attribute::NoUnwind);
1849   }
1850 
1851   /// Determine if the invoke cannot be duplicated.
1852   bool cannotDuplicate() const { return hasFnAttr(Attribute::NoDuplicate); }
1853   void setCannotDuplicate() {
1854     addAttribute(AttributeList::FunctionIndex, Attribute::NoDuplicate);
1855   }
1856 
1857   /// Determine if the call cannot be tail merged.
1858   bool cannotMerge() const { return hasFnAttr(Attribute::NoMerge); }
1859   void setCannotMerge() {
1860     addAttribute(AttributeList::FunctionIndex, Attribute::NoMerge);
1861   }
1862 
1863   /// Determine if the invoke is convergent
1864   bool isConvergent() const { return hasFnAttr(Attribute::Convergent); }
1865   void setConvergent() {
1866     addAttribute(AttributeList::FunctionIndex, Attribute::Convergent);
1867   }
1868   void setNotConvergent() {
1869     removeAttribute(AttributeList::FunctionIndex, Attribute::Convergent);
1870   }
1871 
1872   /// Determine if the call returns a structure through first
1873   /// pointer argument.
1874   bool hasStructRetAttr() const {
1875     if (getNumArgOperands() == 0)
1876       return false;
1877 
1878     // Be friendly and also check the callee.
1879     return paramHasAttr(0, Attribute::StructRet);
1880   }
1881 
1882   /// Determine if any call argument is an aggregate passed by value.
1883   bool hasByValArgument() const {
1884     return Attrs.hasAttrSomewhere(Attribute::ByVal);
1885   }
1886 
1887   ///@{
1888   // End of attribute API.
1889 
1890   /// \name Operand Bundle API
1891   ///
1892   /// This group of methods provides the API to access and manipulate operand
1893   /// bundles on this call.
1894   /// @{
1895 
1896   /// Return the number of operand bundles associated with this User.
1897   unsigned getNumOperandBundles() const {
1898     return std::distance(bundle_op_info_begin(), bundle_op_info_end());
1899   }
1900 
1901   /// Return true if this User has any operand bundles.
1902   bool hasOperandBundles() const { return getNumOperandBundles() != 0; }
1903 
1904   /// Return the index of the first bundle operand in the Use array.
1905   unsigned getBundleOperandsStartIndex() const {
1906     assert(hasOperandBundles() && "Don't call otherwise!");
1907     return bundle_op_info_begin()->Begin;
1908   }
1909 
1910   /// Return the index of the last bundle operand in the Use array.
1911   unsigned getBundleOperandsEndIndex() const {
1912     assert(hasOperandBundles() && "Don't call otherwise!");
1913     return bundle_op_info_end()[-1].End;
1914   }
1915 
1916   /// Return true if the operand at index \p Idx is a bundle operand.
1917   bool isBundleOperand(unsigned Idx) const {
1918     return hasOperandBundles() && Idx >= getBundleOperandsStartIndex() &&
1919            Idx < getBundleOperandsEndIndex();
1920   }
1921 
1922   /// Returns true if the use is a bundle operand.
1923   bool isBundleOperand(const Use *U) const {
1924     assert(this == U->getUser() &&
1925            "Only valid to query with a use of this instruction!");
1926     return hasOperandBundles() && isBundleOperand(U - op_begin());
1927   }
1928   bool isBundleOperand(Value::const_user_iterator UI) const {
1929     return isBundleOperand(&UI.getUse());
1930   }
1931 
1932   /// Return the total number operands (not operand bundles) used by
1933   /// every operand bundle in this OperandBundleUser.
1934   unsigned getNumTotalBundleOperands() const {
1935     if (!hasOperandBundles())
1936       return 0;
1937 
1938     unsigned Begin = getBundleOperandsStartIndex();
1939     unsigned End = getBundleOperandsEndIndex();
1940 
1941     assert(Begin <= End && "Should be!");
1942     return End - Begin;
1943   }
1944 
1945   /// Return the operand bundle at a specific index.
1946   OperandBundleUse getOperandBundleAt(unsigned Index) const {
1947     assert(Index < getNumOperandBundles() && "Index out of bounds!");
1948     return operandBundleFromBundleOpInfo(*(bundle_op_info_begin() + Index));
1949   }
1950 
1951   /// Return the number of operand bundles with the tag Name attached to
1952   /// this instruction.
1953   unsigned countOperandBundlesOfType(StringRef Name) const {
1954     unsigned Count = 0;
1955     for (unsigned i = 0, e = getNumOperandBundles(); i != e; ++i)
1956       if (getOperandBundleAt(i).getTagName() == Name)
1957         Count++;
1958 
1959     return Count;
1960   }
1961 
1962   /// Return the number of operand bundles with the tag ID attached to
1963   /// this instruction.
1964   unsigned countOperandBundlesOfType(uint32_t ID) const {
1965     unsigned Count = 0;
1966     for (unsigned i = 0, e = getNumOperandBundles(); i != e; ++i)
1967       if (getOperandBundleAt(i).getTagID() == ID)
1968         Count++;
1969 
1970     return Count;
1971   }
1972 
1973   /// Return an operand bundle by name, if present.
1974   ///
1975   /// It is an error to call this for operand bundle types that may have
1976   /// multiple instances of them on the same instruction.
1977   Optional<OperandBundleUse> getOperandBundle(StringRef Name) const {
1978     assert(countOperandBundlesOfType(Name) < 2 && "Precondition violated!");
1979 
1980     for (unsigned i = 0, e = getNumOperandBundles(); i != e; ++i) {
1981       OperandBundleUse U = getOperandBundleAt(i);
1982       if (U.getTagName() == Name)
1983         return U;
1984     }
1985 
1986     return None;
1987   }
1988 
1989   /// Return an operand bundle by tag ID, if present.
1990   ///
1991   /// It is an error to call this for operand bundle types that may have
1992   /// multiple instances of them on the same instruction.
1993   Optional<OperandBundleUse> getOperandBundle(uint32_t ID) const {
1994     assert(countOperandBundlesOfType(ID) < 2 && "Precondition violated!");
1995 
1996     for (unsigned i = 0, e = getNumOperandBundles(); i != e; ++i) {
1997       OperandBundleUse U = getOperandBundleAt(i);
1998       if (U.getTagID() == ID)
1999         return U;
2000     }
2001 
2002     return None;
2003   }
2004 
2005   /// Return the list of operand bundles attached to this instruction as
2006   /// a vector of OperandBundleDefs.
2007   ///
2008   /// This function copies the OperandBundeUse instances associated with this
2009   /// OperandBundleUser to a vector of OperandBundleDefs.  Note:
2010   /// OperandBundeUses and OperandBundleDefs are non-trivially *different*
2011   /// representations of operand bundles (see documentation above).
2012   void getOperandBundlesAsDefs(SmallVectorImpl<OperandBundleDef> &Defs) const;
2013 
2014   /// Return the operand bundle for the operand at index OpIdx.
2015   ///
2016   /// It is an error to call this with an OpIdx that does not correspond to an
2017   /// bundle operand.
2018   OperandBundleUse getOperandBundleForOperand(unsigned OpIdx) const {
2019     return operandBundleFromBundleOpInfo(getBundleOpInfoForOperand(OpIdx));
2020   }
2021 
2022   /// Return true if this operand bundle user has operand bundles that
2023   /// may read from the heap.
2024   bool hasReadingOperandBundles() const;
2025 
2026   /// Return true if this operand bundle user has operand bundles that
2027   /// may write to the heap.
2028   bool hasClobberingOperandBundles() const {
2029     for (auto &BOI : bundle_op_infos()) {
2030       if (BOI.Tag->second == LLVMContext::OB_deopt ||
2031           BOI.Tag->second == LLVMContext::OB_funclet)
2032         continue;
2033 
2034       // This instruction has an operand bundle that is not known to us.
2035       // Assume the worst.
2036       return true;
2037     }
2038 
2039     return false;
2040   }
2041 
2042   /// Return true if the bundle operand at index \p OpIdx has the
2043   /// attribute \p A.
2044   bool bundleOperandHasAttr(unsigned OpIdx,  Attribute::AttrKind A) const {
2045     auto &BOI = getBundleOpInfoForOperand(OpIdx);
2046     auto OBU = operandBundleFromBundleOpInfo(BOI);
2047     return OBU.operandHasAttr(OpIdx - BOI.Begin, A);
2048   }
2049 
2050   /// Return true if \p Other has the same sequence of operand bundle
2051   /// tags with the same number of operands on each one of them as this
2052   /// OperandBundleUser.
2053   bool hasIdenticalOperandBundleSchema(const CallBase &Other) const {
2054     if (getNumOperandBundles() != Other.getNumOperandBundles())
2055       return false;
2056 
2057     return std::equal(bundle_op_info_begin(), bundle_op_info_end(),
2058                       Other.bundle_op_info_begin());
2059   }
2060 
2061   /// Return true if this operand bundle user contains operand bundles
2062   /// with tags other than those specified in \p IDs.
2063   bool hasOperandBundlesOtherThan(ArrayRef<uint32_t> IDs) const {
2064     for (unsigned i = 0, e = getNumOperandBundles(); i != e; ++i) {
2065       uint32_t ID = getOperandBundleAt(i).getTagID();
2066       if (!is_contained(IDs, ID))
2067         return true;
2068     }
2069     return false;
2070   }
2071 
2072   /// Is the function attribute S disallowed by some operand bundle on
2073   /// this operand bundle user?
2074   bool isFnAttrDisallowedByOpBundle(StringRef S) const {
2075     // Operand bundles only possibly disallow readnone, readonly and argmemonly
2076     // attributes.  All String attributes are fine.
2077     return false;
2078   }
2079 
2080   /// Is the function attribute A disallowed by some operand bundle on
2081   /// this operand bundle user?
2082   bool isFnAttrDisallowedByOpBundle(Attribute::AttrKind A) const {
2083     switch (A) {
2084     default:
2085       return false;
2086 
2087     case Attribute::InaccessibleMemOrArgMemOnly:
2088       return hasReadingOperandBundles();
2089 
2090     case Attribute::InaccessibleMemOnly:
2091       return hasReadingOperandBundles();
2092 
2093     case Attribute::ArgMemOnly:
2094       return hasReadingOperandBundles();
2095 
2096     case Attribute::ReadNone:
2097       return hasReadingOperandBundles();
2098 
2099     case Attribute::ReadOnly:
2100       return hasClobberingOperandBundles();
2101     }
2102 
2103     llvm_unreachable("switch has a default case!");
2104   }
2105 
2106   /// Used to keep track of an operand bundle.  See the main comment on
2107   /// OperandBundleUser above.
2108   struct BundleOpInfo {
2109     /// The operand bundle tag, interned by
2110     /// LLVMContextImpl::getOrInsertBundleTag.
2111     StringMapEntry<uint32_t> *Tag;
2112 
2113     /// The index in the Use& vector where operands for this operand
2114     /// bundle starts.
2115     uint32_t Begin;
2116 
2117     /// The index in the Use& vector where operands for this operand
2118     /// bundle ends.
2119     uint32_t End;
2120 
2121     bool operator==(const BundleOpInfo &Other) const {
2122       return Tag == Other.Tag && Begin == Other.Begin && End == Other.End;
2123     }
2124   };
2125 
2126   /// Simple helper function to map a BundleOpInfo to an
2127   /// OperandBundleUse.
2128   OperandBundleUse
2129   operandBundleFromBundleOpInfo(const BundleOpInfo &BOI) const {
2130     auto begin = op_begin();
2131     ArrayRef<Use> Inputs(begin + BOI.Begin, begin + BOI.End);
2132     return OperandBundleUse(BOI.Tag, Inputs);
2133   }
2134 
2135   using bundle_op_iterator = BundleOpInfo *;
2136   using const_bundle_op_iterator = const BundleOpInfo *;
2137 
2138   /// Return the start of the list of BundleOpInfo instances associated
2139   /// with this OperandBundleUser.
2140   ///
2141   /// OperandBundleUser uses the descriptor area co-allocated with the host User
2142   /// to store some meta information about which operands are "normal" operands,
2143   /// and which ones belong to some operand bundle.
2144   ///
2145   /// The layout of an operand bundle user is
2146   ///
2147   ///          +-----------uint32_t End-------------------------------------+
2148   ///          |                                                            |
2149   ///          |  +--------uint32_t Begin--------------------+              |
2150   ///          |  |                                          |              |
2151   ///          ^  ^                                          v              v
2152   ///  |------|------|----|----|----|----|----|---------|----|---------|----|-----
2153   ///  | BOI0 | BOI1 | .. | DU | U0 | U1 | .. | BOI0_U0 | .. | BOI1_U0 | .. | Un
2154   ///  |------|------|----|----|----|----|----|---------|----|---------|----|-----
2155   ///   v  v                                  ^              ^
2156   ///   |  |                                  |              |
2157   ///   |  +--------uint32_t Begin------------+              |
2158   ///   |                                                    |
2159   ///   +-----------uint32_t End-----------------------------+
2160   ///
2161   ///
2162   /// BOI0, BOI1 ... are descriptions of operand bundles in this User's use
2163   /// list. These descriptions are installed and managed by this class, and
2164   /// they're all instances of OperandBundleUser<T>::BundleOpInfo.
2165   ///
2166   /// DU is an additional descriptor installed by User's 'operator new' to keep
2167   /// track of the 'BOI0 ... BOIN' co-allocation.  OperandBundleUser does not
2168   /// access or modify DU in any way, it's an implementation detail private to
2169   /// User.
2170   ///
2171   /// The regular Use& vector for the User starts at U0.  The operand bundle
2172   /// uses are part of the Use& vector, just like normal uses.  In the diagram
2173   /// above, the operand bundle uses start at BOI0_U0.  Each instance of
2174   /// BundleOpInfo has information about a contiguous set of uses constituting
2175   /// an operand bundle, and the total set of operand bundle uses themselves
2176   /// form a contiguous set of uses (i.e. there are no gaps between uses
2177   /// corresponding to individual operand bundles).
2178   ///
2179   /// This class does not know the location of the set of operand bundle uses
2180   /// within the use list -- that is decided by the User using this class via
2181   /// the BeginIdx argument in populateBundleOperandInfos.
2182   ///
2183   /// Currently operand bundle users with hung-off operands are not supported.
2184   bundle_op_iterator bundle_op_info_begin() {
2185     if (!hasDescriptor())
2186       return nullptr;
2187 
2188     uint8_t *BytesBegin = getDescriptor().begin();
2189     return reinterpret_cast<bundle_op_iterator>(BytesBegin);
2190   }
2191 
2192   /// Return the start of the list of BundleOpInfo instances associated
2193   /// with this OperandBundleUser.
2194   const_bundle_op_iterator bundle_op_info_begin() const {
2195     auto *NonConstThis = const_cast<CallBase *>(this);
2196     return NonConstThis->bundle_op_info_begin();
2197   }
2198 
2199   /// Return the end of the list of BundleOpInfo instances associated
2200   /// with this OperandBundleUser.
2201   bundle_op_iterator bundle_op_info_end() {
2202     if (!hasDescriptor())
2203       return nullptr;
2204 
2205     uint8_t *BytesEnd = getDescriptor().end();
2206     return reinterpret_cast<bundle_op_iterator>(BytesEnd);
2207   }
2208 
2209   /// Return the end of the list of BundleOpInfo instances associated
2210   /// with this OperandBundleUser.
2211   const_bundle_op_iterator bundle_op_info_end() const {
2212     auto *NonConstThis = const_cast<CallBase *>(this);
2213     return NonConstThis->bundle_op_info_end();
2214   }
2215 
2216   /// Return the range [\p bundle_op_info_begin, \p bundle_op_info_end).
2217   iterator_range<bundle_op_iterator> bundle_op_infos() {
2218     return make_range(bundle_op_info_begin(), bundle_op_info_end());
2219   }
2220 
2221   /// Return the range [\p bundle_op_info_begin, \p bundle_op_info_end).
2222   iterator_range<const_bundle_op_iterator> bundle_op_infos() const {
2223     return make_range(bundle_op_info_begin(), bundle_op_info_end());
2224   }
2225 
2226   /// Populate the BundleOpInfo instances and the Use& vector from \p
2227   /// Bundles.  Return the op_iterator pointing to the Use& one past the last
2228   /// last bundle operand use.
2229   ///
2230   /// Each \p OperandBundleDef instance is tracked by a OperandBundleInfo
2231   /// instance allocated in this User's descriptor.
2232   op_iterator populateBundleOperandInfos(ArrayRef<OperandBundleDef> Bundles,
2233                                          const unsigned BeginIndex);
2234 
2235 public:
2236   /// Return the BundleOpInfo for the operand at index OpIdx.
2237   ///
2238   /// It is an error to call this with an OpIdx that does not correspond to an
2239   /// bundle operand.
2240   BundleOpInfo &getBundleOpInfoForOperand(unsigned OpIdx);
2241   const BundleOpInfo &getBundleOpInfoForOperand(unsigned OpIdx) const {
2242     return const_cast<CallBase *>(this)->getBundleOpInfoForOperand(OpIdx);
2243   }
2244 
2245 protected:
2246   /// Return the total number of values used in \p Bundles.
2247   static unsigned CountBundleInputs(ArrayRef<OperandBundleDef> Bundles) {
2248     unsigned Total = 0;
2249     for (auto &B : Bundles)
2250       Total += B.input_size();
2251     return Total;
2252   }
2253 
2254   /// @}
2255   // End of operand bundle API.
2256 
2257 private:
2258   bool hasFnAttrOnCalledFunction(Attribute::AttrKind Kind) const;
2259   bool hasFnAttrOnCalledFunction(StringRef Kind) const;
2260 
2261   template <typename AttrKind> bool hasFnAttrImpl(AttrKind Kind) const {
2262     if (Attrs.hasFnAttribute(Kind))
2263       return true;
2264 
2265     // Operand bundles override attributes on the called function, but don't
2266     // override attributes directly present on the call instruction.
2267     if (isFnAttrDisallowedByOpBundle(Kind))
2268       return false;
2269 
2270     return hasFnAttrOnCalledFunction(Kind);
2271   }
2272 
2273   /// Determine whether the return value has the given attribute. Supports
2274   /// Attribute::AttrKind and StringRef as \p AttrKind types.
2275   template <typename AttrKind> bool hasRetAttrImpl(AttrKind Kind) const {
2276     if (Attrs.hasAttribute(AttributeList::ReturnIndex, Kind))
2277       return true;
2278 
2279     // Look at the callee, if available.
2280     if (const Function *F = getCalledFunction())
2281       return F->getAttributes().hasAttribute(AttributeList::ReturnIndex, Kind);
2282     return false;
2283   }
2284 };
2285 
2286 template <>
2287 struct OperandTraits<CallBase> : public VariadicOperandTraits<CallBase, 1> {};
2288 
2289 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(CallBase, Value)
2290 
2291 //===----------------------------------------------------------------------===//
2292 //                           FuncletPadInst Class
2293 //===----------------------------------------------------------------------===//
2294 class FuncletPadInst : public Instruction {
2295 private:
2296   FuncletPadInst(const FuncletPadInst &CPI);
2297 
2298   explicit FuncletPadInst(Instruction::FuncletPadOps Op, Value *ParentPad,
2299                           ArrayRef<Value *> Args, unsigned Values,
2300                           const Twine &NameStr, Instruction *InsertBefore);
2301   explicit FuncletPadInst(Instruction::FuncletPadOps Op, Value *ParentPad,
2302                           ArrayRef<Value *> Args, unsigned Values,
2303                           const Twine &NameStr, BasicBlock *InsertAtEnd);
2304 
2305   void init(Value *ParentPad, ArrayRef<Value *> Args, const Twine &NameStr);
2306 
2307 protected:
2308   // Note: Instruction needs to be a friend here to call cloneImpl.
2309   friend class Instruction;
2310   friend class CatchPadInst;
2311   friend class CleanupPadInst;
2312 
2313   FuncletPadInst *cloneImpl() const;
2314 
2315 public:
2316   /// Provide fast operand accessors
2317   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
2318 
2319   /// getNumArgOperands - Return the number of funcletpad arguments.
2320   ///
2321   unsigned getNumArgOperands() const { return getNumOperands() - 1; }
2322 
2323   /// Convenience accessors
2324 
2325   /// Return the outer EH-pad this funclet is nested within.
2326   ///
2327   /// Note: This returns the associated CatchSwitchInst if this FuncletPadInst
2328   /// is a CatchPadInst.
2329   Value *getParentPad() const { return Op<-1>(); }
2330   void setParentPad(Value *ParentPad) {
2331     assert(ParentPad);
2332     Op<-1>() = ParentPad;
2333   }
2334 
2335   /// getArgOperand/setArgOperand - Return/set the i-th funcletpad argument.
2336   ///
2337   Value *getArgOperand(unsigned i) const { return getOperand(i); }
2338   void setArgOperand(unsigned i, Value *v) { setOperand(i, v); }
2339 
2340   /// arg_operands - iteration adapter for range-for loops.
2341   op_range arg_operands() { return op_range(op_begin(), op_end() - 1); }
2342 
2343   /// arg_operands - iteration adapter for range-for loops.
2344   const_op_range arg_operands() const {
2345     return const_op_range(op_begin(), op_end() - 1);
2346   }
2347 
2348   // Methods for support type inquiry through isa, cast, and dyn_cast:
2349   static bool classof(const Instruction *I) { return I->isFuncletPad(); }
2350   static bool classof(const Value *V) {
2351     return isa<Instruction>(V) && classof(cast<Instruction>(V));
2352   }
2353 };
2354 
2355 template <>
2356 struct OperandTraits<FuncletPadInst>
2357     : public VariadicOperandTraits<FuncletPadInst, /*MINARITY=*/1> {};
2358 
2359 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(FuncletPadInst, Value)
2360 
2361 } // end namespace llvm
2362 
2363 #endif // LLVM_IR_INSTRTYPES_H
2364