Home | History | Annotate | Line # | Download | only in IR
      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   }
     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
     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:
     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   }
     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