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