1 //===-- llvm/Instructions.h - Instruction subclass definitions --*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file exposes the class definitions of all of the subclasses of the 11 // Instruction class. This is meant to be an easy way to get access to all 12 // instruction subclasses. 13 // 14 //===----------------------------------------------------------------------===// 15 16 #ifndef LLVM_IR_INSTRUCTIONS_H 17 #define LLVM_IR_INSTRUCTIONS_H 18 19 #include "llvm/ADT/ArrayRef.h" 20 #include "llvm/ADT/iterator_range.h" 21 #include "llvm/ADT/SmallVector.h" 22 #include "llvm/IR/Attributes.h" 23 #include "llvm/IR/CallingConv.h" 24 #include "llvm/IR/DerivedTypes.h" 25 #include "llvm/IR/InstrTypes.h" 26 #include "llvm/Support/ErrorHandling.h" 27 #include <iterator> 28 29 namespace llvm { 30 31 class APInt; 32 class ConstantInt; 33 class ConstantRange; 34 class DataLayout; 35 class LLVMContext; 36 37 enum AtomicOrdering { 38 NotAtomic = 0, 39 Unordered = 1, 40 Monotonic = 2, 41 // Consume = 3, // Not specified yet. 42 Acquire = 4, 43 Release = 5, 44 AcquireRelease = 6, 45 SequentiallyConsistent = 7 46 }; 47 48 enum SynchronizationScope { 49 SingleThread = 0, 50 CrossThread = 1 51 }; 52 53 //===----------------------------------------------------------------------===// 54 // AllocaInst Class 55 //===----------------------------------------------------------------------===// 56 57 /// AllocaInst - an instruction to allocate memory on the stack 58 /// 59 class AllocaInst : public UnaryInstruction { 60 protected: 61 AllocaInst *clone_impl() const override; 62 public: 63 explicit AllocaInst(Type *Ty, Value *ArraySize = nullptr, 64 const Twine &Name = "", 65 Instruction *InsertBefore = nullptr); 66 AllocaInst(Type *Ty, Value *ArraySize, 67 const Twine &Name, BasicBlock *InsertAtEnd); 68 69 AllocaInst(Type *Ty, const Twine &Name, Instruction *InsertBefore = nullptr); 70 AllocaInst(Type *Ty, const Twine &Name, BasicBlock *InsertAtEnd); 71 72 AllocaInst(Type *Ty, Value *ArraySize, unsigned Align, 73 const Twine &Name = "", Instruction *InsertBefore = nullptr); 74 AllocaInst(Type *Ty, Value *ArraySize, unsigned Align, 75 const Twine &Name, BasicBlock *InsertAtEnd); 76 77 // Out of line virtual method, so the vtable, etc. has a home. 78 virtual ~AllocaInst(); 79 80 /// isArrayAllocation - Return true if there is an allocation size parameter 81 /// to the allocation instruction that is not 1. 82 /// 83 bool isArrayAllocation() const; 84 85 /// getArraySize - Get the number of elements allocated. For a simple 86 /// allocation of a single element, this will return a constant 1 value. 87 /// 88 const Value *getArraySize() const { return getOperand(0); } 89 Value *getArraySize() { return getOperand(0); } 90 91 /// getType - Overload to return most specific pointer type 92 /// 93 PointerType *getType() const { 94 return cast<PointerType>(Instruction::getType()); 95 } 96 97 /// getAllocatedType - Return the type that is being allocated by the 98 /// instruction. 99 /// 100 Type *getAllocatedType() const; 101 102 /// getAlignment - Return the alignment of the memory that is being allocated 103 /// by the instruction. 104 /// 105 unsigned getAlignment() const { 106 return (1u << (getSubclassDataFromInstruction() & 31)) >> 1; 107 } 108 void setAlignment(unsigned Align); 109 110 /// isStaticAlloca - Return true if this alloca is in the entry block of the 111 /// function and is a constant size. If so, the code generator will fold it 112 /// into the prolog/epilog code, so it is basically free. 113 bool isStaticAlloca() const; 114 115 /// \brief Return true if this alloca is used as an inalloca argument to a 116 /// call. Such allocas are never considered static even if they are in the 117 /// entry block. 118 bool isUsedWithInAlloca() const { 119 return getSubclassDataFromInstruction() & 32; 120 } 121 122 /// \brief Specify whether this alloca is used to represent a the arguments to 123 /// a call. 124 void setUsedWithInAlloca(bool V) { 125 setInstructionSubclassData((getSubclassDataFromInstruction() & ~32) | 126 (V ? 32 : 0)); 127 } 128 129 // Methods for support type inquiry through isa, cast, and dyn_cast: 130 static inline bool classof(const Instruction *I) { 131 return (I->getOpcode() == Instruction::Alloca); 132 } 133 static inline bool classof(const Value *V) { 134 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 135 } 136 private: 137 // Shadow Instruction::setInstructionSubclassData with a private forwarding 138 // method so that subclasses cannot accidentally use it. 139 void setInstructionSubclassData(unsigned short D) { 140 Instruction::setInstructionSubclassData(D); 141 } 142 }; 143 144 145 //===----------------------------------------------------------------------===// 146 // LoadInst Class 147 //===----------------------------------------------------------------------===// 148 149 /// LoadInst - an instruction for reading from memory. This uses the 150 /// SubclassData field in Value to store whether or not the load is volatile. 151 /// 152 class LoadInst : public UnaryInstruction { 153 void AssertOK(); 154 protected: 155 LoadInst *clone_impl() const override; 156 public: 157 LoadInst(Value *Ptr, const Twine &NameStr, Instruction *InsertBefore); 158 LoadInst(Value *Ptr, const Twine &NameStr, BasicBlock *InsertAtEnd); 159 LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile = false, 160 Instruction *InsertBefore = nullptr); 161 LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile, 162 BasicBlock *InsertAtEnd); 163 LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile, 164 unsigned Align, Instruction *InsertBefore = nullptr); 165 LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile, 166 unsigned Align, BasicBlock *InsertAtEnd); 167 LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile, 168 unsigned Align, AtomicOrdering Order, 169 SynchronizationScope SynchScope = CrossThread, 170 Instruction *InsertBefore = nullptr); 171 LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile, 172 unsigned Align, AtomicOrdering Order, 173 SynchronizationScope SynchScope, 174 BasicBlock *InsertAtEnd); 175 176 LoadInst(Value *Ptr, const char *NameStr, Instruction *InsertBefore); 177 LoadInst(Value *Ptr, const char *NameStr, BasicBlock *InsertAtEnd); 178 explicit LoadInst(Value *Ptr, const char *NameStr = nullptr, 179 bool isVolatile = false, 180 Instruction *InsertBefore = nullptr); 181 LoadInst(Value *Ptr, const char *NameStr, bool isVolatile, 182 BasicBlock *InsertAtEnd); 183 184 /// isVolatile - Return true if this is a load from a volatile memory 185 /// location. 186 /// 187 bool isVolatile() const { return getSubclassDataFromInstruction() & 1; } 188 189 /// setVolatile - Specify whether this is a volatile load or not. 190 /// 191 void setVolatile(bool V) { 192 setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) | 193 (V ? 1 : 0)); 194 } 195 196 /// getAlignment - Return the alignment of the access that is being performed 197 /// 198 unsigned getAlignment() const { 199 return (1 << ((getSubclassDataFromInstruction() >> 1) & 31)) >> 1; 200 } 201 202 void setAlignment(unsigned Align); 203 204 /// Returns the ordering effect of this fence. 205 AtomicOrdering getOrdering() const { 206 return AtomicOrdering((getSubclassDataFromInstruction() >> 7) & 7); 207 } 208 209 /// Set the ordering constraint on this load. May not be Release or 210 /// AcquireRelease. 211 void setOrdering(AtomicOrdering Ordering) { 212 setInstructionSubclassData((getSubclassDataFromInstruction() & ~(7 << 7)) | 213 (Ordering << 7)); 214 } 215 216 SynchronizationScope getSynchScope() const { 217 return SynchronizationScope((getSubclassDataFromInstruction() >> 6) & 1); 218 } 219 220 /// Specify whether this load is ordered with respect to all 221 /// concurrently executing threads, or only with respect to signal handlers 222 /// executing in the same thread. 223 void setSynchScope(SynchronizationScope xthread) { 224 setInstructionSubclassData((getSubclassDataFromInstruction() & ~(1 << 6)) | 225 (xthread << 6)); 226 } 227 228 bool isAtomic() const { return getOrdering() != NotAtomic; } 229 void setAtomic(AtomicOrdering Ordering, 230 SynchronizationScope SynchScope = CrossThread) { 231 setOrdering(Ordering); 232 setSynchScope(SynchScope); 233 } 234 235 bool isSimple() const { return !isAtomic() && !isVolatile(); } 236 bool isUnordered() const { 237 return getOrdering() <= Unordered && !isVolatile(); 238 } 239 240 Value *getPointerOperand() { return getOperand(0); } 241 const Value *getPointerOperand() const { return getOperand(0); } 242 static unsigned getPointerOperandIndex() { return 0U; } 243 244 /// \brief Returns the address space of the pointer operand. 245 unsigned getPointerAddressSpace() const { 246 return getPointerOperand()->getType()->getPointerAddressSpace(); 247 } 248 249 250 // Methods for support type inquiry through isa, cast, and dyn_cast: 251 static inline bool classof(const Instruction *I) { 252 return I->getOpcode() == Instruction::Load; 253 } 254 static inline bool classof(const Value *V) { 255 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 256 } 257 private: 258 // Shadow Instruction::setInstructionSubclassData with a private forwarding 259 // method so that subclasses cannot accidentally use it. 260 void setInstructionSubclassData(unsigned short D) { 261 Instruction::setInstructionSubclassData(D); 262 } 263 }; 264 265 266 //===----------------------------------------------------------------------===// 267 // StoreInst Class 268 //===----------------------------------------------------------------------===// 269 270 /// StoreInst - an instruction for storing to memory 271 /// 272 class StoreInst : public Instruction { 273 void *operator new(size_t, unsigned) LLVM_DELETED_FUNCTION; 274 void AssertOK(); 275 protected: 276 StoreInst *clone_impl() const override; 277 public: 278 // allocate space for exactly two operands 279 void *operator new(size_t s) { 280 return User::operator new(s, 2); 281 } 282 StoreInst(Value *Val, Value *Ptr, Instruction *InsertBefore); 283 StoreInst(Value *Val, Value *Ptr, BasicBlock *InsertAtEnd); 284 StoreInst(Value *Val, Value *Ptr, bool isVolatile = false, 285 Instruction *InsertBefore = nullptr); 286 StoreInst(Value *Val, Value *Ptr, bool isVolatile, BasicBlock *InsertAtEnd); 287 StoreInst(Value *Val, Value *Ptr, bool isVolatile, 288 unsigned Align, Instruction *InsertBefore = nullptr); 289 StoreInst(Value *Val, Value *Ptr, bool isVolatile, 290 unsigned Align, BasicBlock *InsertAtEnd); 291 StoreInst(Value *Val, Value *Ptr, bool isVolatile, 292 unsigned Align, AtomicOrdering Order, 293 SynchronizationScope SynchScope = CrossThread, 294 Instruction *InsertBefore = nullptr); 295 StoreInst(Value *Val, Value *Ptr, bool isVolatile, 296 unsigned Align, AtomicOrdering Order, 297 SynchronizationScope SynchScope, 298 BasicBlock *InsertAtEnd); 299 300 301 /// isVolatile - Return true if this is a store to a volatile memory 302 /// location. 303 /// 304 bool isVolatile() const { return getSubclassDataFromInstruction() & 1; } 305 306 /// setVolatile - Specify whether this is a volatile store or not. 307 /// 308 void setVolatile(bool V) { 309 setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) | 310 (V ? 1 : 0)); 311 } 312 313 /// Transparently provide more efficient getOperand methods. 314 DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value); 315 316 /// getAlignment - Return the alignment of the access that is being performed 317 /// 318 unsigned getAlignment() const { 319 return (1 << ((getSubclassDataFromInstruction() >> 1) & 31)) >> 1; 320 } 321 322 void setAlignment(unsigned Align); 323 324 /// Returns the ordering effect of this store. 325 AtomicOrdering getOrdering() const { 326 return AtomicOrdering((getSubclassDataFromInstruction() >> 7) & 7); 327 } 328 329 /// Set the ordering constraint on this store. May not be Acquire or 330 /// AcquireRelease. 331 void setOrdering(AtomicOrdering Ordering) { 332 setInstructionSubclassData((getSubclassDataFromInstruction() & ~(7 << 7)) | 333 (Ordering << 7)); 334 } 335 336 SynchronizationScope getSynchScope() const { 337 return SynchronizationScope((getSubclassDataFromInstruction() >> 6) & 1); 338 } 339 340 /// Specify whether this store instruction is ordered with respect to all 341 /// concurrently executing threads, or only with respect to signal handlers 342 /// executing in the same thread. 343 void setSynchScope(SynchronizationScope xthread) { 344 setInstructionSubclassData((getSubclassDataFromInstruction() & ~(1 << 6)) | 345 (xthread << 6)); 346 } 347 348 bool isAtomic() const { return getOrdering() != NotAtomic; } 349 void setAtomic(AtomicOrdering Ordering, 350 SynchronizationScope SynchScope = CrossThread) { 351 setOrdering(Ordering); 352 setSynchScope(SynchScope); 353 } 354 355 bool isSimple() const { return !isAtomic() && !isVolatile(); } 356 bool isUnordered() const { 357 return getOrdering() <= Unordered && !isVolatile(); 358 } 359 360 Value *getValueOperand() { return getOperand(0); } 361 const Value *getValueOperand() const { return getOperand(0); } 362 363 Value *getPointerOperand() { return getOperand(1); } 364 const Value *getPointerOperand() const { return getOperand(1); } 365 static unsigned getPointerOperandIndex() { return 1U; } 366 367 /// \brief Returns the address space of the pointer operand. 368 unsigned getPointerAddressSpace() const { 369 return getPointerOperand()->getType()->getPointerAddressSpace(); 370 } 371 372 // Methods for support type inquiry through isa, cast, and dyn_cast: 373 static inline bool classof(const Instruction *I) { 374 return I->getOpcode() == Instruction::Store; 375 } 376 static inline bool classof(const Value *V) { 377 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 378 } 379 private: 380 // Shadow Instruction::setInstructionSubclassData with a private forwarding 381 // method so that subclasses cannot accidentally use it. 382 void setInstructionSubclassData(unsigned short D) { 383 Instruction::setInstructionSubclassData(D); 384 } 385 }; 386 387 template <> 388 struct OperandTraits<StoreInst> : public FixedNumOperandTraits<StoreInst, 2> { 389 }; 390 391 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(StoreInst, Value) 392 393 //===----------------------------------------------------------------------===// 394 // FenceInst Class 395 //===----------------------------------------------------------------------===// 396 397 /// FenceInst - an instruction for ordering other memory operations 398 /// 399 class FenceInst : public Instruction { 400 void *operator new(size_t, unsigned) LLVM_DELETED_FUNCTION; 401 void Init(AtomicOrdering Ordering, SynchronizationScope SynchScope); 402 protected: 403 FenceInst *clone_impl() const override; 404 public: 405 // allocate space for exactly zero operands 406 void *operator new(size_t s) { 407 return User::operator new(s, 0); 408 } 409 410 // Ordering may only be Acquire, Release, AcquireRelease, or 411 // SequentiallyConsistent. 412 FenceInst(LLVMContext &C, AtomicOrdering Ordering, 413 SynchronizationScope SynchScope = CrossThread, 414 Instruction *InsertBefore = nullptr); 415 FenceInst(LLVMContext &C, AtomicOrdering Ordering, 416 SynchronizationScope SynchScope, 417 BasicBlock *InsertAtEnd); 418 419 /// Returns the ordering effect of this fence. 420 AtomicOrdering getOrdering() const { 421 return AtomicOrdering(getSubclassDataFromInstruction() >> 1); 422 } 423 424 /// Set the ordering constraint on this fence. May only be Acquire, Release, 425 /// AcquireRelease, or SequentiallyConsistent. 426 void setOrdering(AtomicOrdering Ordering) { 427 setInstructionSubclassData((getSubclassDataFromInstruction() & 1) | 428 (Ordering << 1)); 429 } 430 431 SynchronizationScope getSynchScope() const { 432 return SynchronizationScope(getSubclassDataFromInstruction() & 1); 433 } 434 435 /// Specify whether this fence orders other operations with respect to all 436 /// concurrently executing threads, or only with respect to signal handlers 437 /// executing in the same thread. 438 void setSynchScope(SynchronizationScope xthread) { 439 setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) | 440 xthread); 441 } 442 443 // Methods for support type inquiry through isa, cast, and dyn_cast: 444 static inline bool classof(const Instruction *I) { 445 return I->getOpcode() == Instruction::Fence; 446 } 447 static inline bool classof(const Value *V) { 448 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 449 } 450 private: 451 // Shadow Instruction::setInstructionSubclassData with a private forwarding 452 // method so that subclasses cannot accidentally use it. 453 void setInstructionSubclassData(unsigned short D) { 454 Instruction::setInstructionSubclassData(D); 455 } 456 }; 457 458 //===----------------------------------------------------------------------===// 459 // AtomicCmpXchgInst Class 460 //===----------------------------------------------------------------------===// 461 462 /// AtomicCmpXchgInst - an instruction that atomically checks whether a 463 /// specified value is in a memory location, and, if it is, stores a new value 464 /// there. Returns the value that was loaded. 465 /// 466 class AtomicCmpXchgInst : public Instruction { 467 void *operator new(size_t, unsigned) LLVM_DELETED_FUNCTION; 468 void Init(Value *Ptr, Value *Cmp, Value *NewVal, 469 AtomicOrdering SuccessOrdering, AtomicOrdering FailureOrdering, 470 SynchronizationScope SynchScope); 471 protected: 472 AtomicCmpXchgInst *clone_impl() const override; 473 public: 474 // allocate space for exactly three operands 475 void *operator new(size_t s) { 476 return User::operator new(s, 3); 477 } 478 AtomicCmpXchgInst(Value *Ptr, Value *Cmp, Value *NewVal, 479 AtomicOrdering SuccessOrdering, 480 AtomicOrdering FailureOrdering, 481 SynchronizationScope SynchScope, 482 Instruction *InsertBefore = nullptr); 483 AtomicCmpXchgInst(Value *Ptr, Value *Cmp, Value *NewVal, 484 AtomicOrdering SuccessOrdering, 485 AtomicOrdering FailureOrdering, 486 SynchronizationScope SynchScope, 487 BasicBlock *InsertAtEnd); 488 489 /// isVolatile - Return true if this is a cmpxchg from a volatile memory 490 /// location. 491 /// 492 bool isVolatile() const { 493 return getSubclassDataFromInstruction() & 1; 494 } 495 496 /// setVolatile - Specify whether this is a volatile cmpxchg. 497 /// 498 void setVolatile(bool V) { 499 setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) | 500 (unsigned)V); 501 } 502 503 /// Return true if this cmpxchg may spuriously fail. 504 bool isWeak() const { 505 return getSubclassDataFromInstruction() & 0x100; 506 } 507 508 void setWeak(bool IsWeak) { 509 setInstructionSubclassData((getSubclassDataFromInstruction() & ~0x100) | 510 (IsWeak << 8)); 511 } 512 513 /// Transparently provide more efficient getOperand methods. 514 DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value); 515 516 /// Set the ordering constraint on this cmpxchg. 517 void setSuccessOrdering(AtomicOrdering Ordering) { 518 assert(Ordering != NotAtomic && 519 "CmpXchg instructions can only be atomic."); 520 setInstructionSubclassData((getSubclassDataFromInstruction() & ~0x1c) | 521 (Ordering << 2)); 522 } 523 524 void setFailureOrdering(AtomicOrdering Ordering) { 525 assert(Ordering != NotAtomic && 526 "CmpXchg instructions can only be atomic."); 527 setInstructionSubclassData((getSubclassDataFromInstruction() & ~0xe0) | 528 (Ordering << 5)); 529 } 530 531 /// Specify whether this cmpxchg is atomic and orders other operations with 532 /// respect to all concurrently executing threads, or only with respect to 533 /// signal handlers executing in the same thread. 534 void setSynchScope(SynchronizationScope SynchScope) { 535 setInstructionSubclassData((getSubclassDataFromInstruction() & ~2) | 536 (SynchScope << 1)); 537 } 538 539 /// Returns the ordering constraint on this cmpxchg. 540 AtomicOrdering getSuccessOrdering() const { 541 return AtomicOrdering((getSubclassDataFromInstruction() >> 2) & 7); 542 } 543 544 /// Returns the ordering constraint on this cmpxchg. 545 AtomicOrdering getFailureOrdering() const { 546 return AtomicOrdering((getSubclassDataFromInstruction() >> 5) & 7); 547 } 548 549 /// Returns whether this cmpxchg is atomic between threads or only within a 550 /// single thread. 551 SynchronizationScope getSynchScope() const { 552 return SynchronizationScope((getSubclassDataFromInstruction() & 2) >> 1); 553 } 554 555 Value *getPointerOperand() { return getOperand(0); } 556 const Value *getPointerOperand() const { return getOperand(0); } 557 static unsigned getPointerOperandIndex() { return 0U; } 558 559 Value *getCompareOperand() { return getOperand(1); } 560 const Value *getCompareOperand() const { return getOperand(1); } 561 562 Value *getNewValOperand() { return getOperand(2); } 563 const Value *getNewValOperand() const { return getOperand(2); } 564 565 /// \brief Returns the address space of the pointer operand. 566 unsigned getPointerAddressSpace() const { 567 return getPointerOperand()->getType()->getPointerAddressSpace(); 568 } 569 570 /// \brief Returns the strongest permitted ordering on failure, given the 571 /// desired ordering on success. 572 /// 573 /// If the comparison in a cmpxchg operation fails, there is no atomic store 574 /// so release semantics cannot be provided. So this function drops explicit 575 /// Release requests from the AtomicOrdering. A SequentiallyConsistent 576 /// operation would remain SequentiallyConsistent. 577 static AtomicOrdering 578 getStrongestFailureOrdering(AtomicOrdering SuccessOrdering) { 579 switch (SuccessOrdering) { 580 default: llvm_unreachable("invalid cmpxchg success ordering"); 581 case Release: 582 case Monotonic: 583 return Monotonic; 584 case AcquireRelease: 585 case Acquire: 586 return Acquire; 587 case SequentiallyConsistent: 588 return SequentiallyConsistent; 589 } 590 } 591 592 // Methods for support type inquiry through isa, cast, and dyn_cast: 593 static inline bool classof(const Instruction *I) { 594 return I->getOpcode() == Instruction::AtomicCmpXchg; 595 } 596 static inline bool classof(const Value *V) { 597 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 598 } 599 private: 600 // Shadow Instruction::setInstructionSubclassData with a private forwarding 601 // method so that subclasses cannot accidentally use it. 602 void setInstructionSubclassData(unsigned short D) { 603 Instruction::setInstructionSubclassData(D); 604 } 605 }; 606 607 template <> 608 struct OperandTraits<AtomicCmpXchgInst> : 609 public FixedNumOperandTraits<AtomicCmpXchgInst, 3> { 610 }; 611 612 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(AtomicCmpXchgInst, Value) 613 614 //===----------------------------------------------------------------------===// 615 // AtomicRMWInst Class 616 //===----------------------------------------------------------------------===// 617 618 /// AtomicRMWInst - an instruction that atomically reads a memory location, 619 /// combines it with another value, and then stores the result back. Returns 620 /// the old value. 621 /// 622 class AtomicRMWInst : public Instruction { 623 void *operator new(size_t, unsigned) LLVM_DELETED_FUNCTION; 624 protected: 625 AtomicRMWInst *clone_impl() const override; 626 public: 627 /// This enumeration lists the possible modifications atomicrmw can make. In 628 /// the descriptions, 'p' is the pointer to the instruction's memory location, 629 /// 'old' is the initial value of *p, and 'v' is the other value passed to the 630 /// instruction. These instructions always return 'old'. 631 enum BinOp { 632 /// *p = v 633 Xchg, 634 /// *p = old + v 635 Add, 636 /// *p = old - v 637 Sub, 638 /// *p = old & v 639 And, 640 /// *p = ~old & v 641 Nand, 642 /// *p = old | v 643 Or, 644 /// *p = old ^ v 645 Xor, 646 /// *p = old >signed v ? old : v 647 Max, 648 /// *p = old <signed v ? old : v 649 Min, 650 /// *p = old >unsigned v ? old : v 651 UMax, 652 /// *p = old <unsigned v ? old : v 653 UMin, 654 655 FIRST_BINOP = Xchg, 656 LAST_BINOP = UMin, 657 BAD_BINOP 658 }; 659 660 // allocate space for exactly two operands 661 void *operator new(size_t s) { 662 return User::operator new(s, 2); 663 } 664 AtomicRMWInst(BinOp Operation, Value *Ptr, Value *Val, 665 AtomicOrdering Ordering, SynchronizationScope SynchScope, 666 Instruction *InsertBefore = nullptr); 667 AtomicRMWInst(BinOp Operation, Value *Ptr, Value *Val, 668 AtomicOrdering Ordering, SynchronizationScope SynchScope, 669 BasicBlock *InsertAtEnd); 670 671 BinOp getOperation() const { 672 return static_cast<BinOp>(getSubclassDataFromInstruction() >> 5); 673 } 674 675 void setOperation(BinOp Operation) { 676 unsigned short SubclassData = getSubclassDataFromInstruction(); 677 setInstructionSubclassData((SubclassData & 31) | 678 (Operation << 5)); 679 } 680 681 /// isVolatile - Return true if this is a RMW on a volatile memory location. 682 /// 683 bool isVolatile() const { 684 return getSubclassDataFromInstruction() & 1; 685 } 686 687 /// setVolatile - Specify whether this is a volatile RMW or not. 688 /// 689 void setVolatile(bool V) { 690 setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) | 691 (unsigned)V); 692 } 693 694 /// Transparently provide more efficient getOperand methods. 695 DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value); 696 697 /// Set the ordering constraint on this RMW. 698 void setOrdering(AtomicOrdering Ordering) { 699 assert(Ordering != NotAtomic && 700 "atomicrmw instructions can only be atomic."); 701 setInstructionSubclassData((getSubclassDataFromInstruction() & ~(7 << 2)) | 702 (Ordering << 2)); 703 } 704 705 /// Specify whether this RMW orders other operations with respect to all 706 /// concurrently executing threads, or only with respect to signal handlers 707 /// executing in the same thread. 708 void setSynchScope(SynchronizationScope SynchScope) { 709 setInstructionSubclassData((getSubclassDataFromInstruction() & ~2) | 710 (SynchScope << 1)); 711 } 712 713 /// Returns the ordering constraint on this RMW. 714 AtomicOrdering getOrdering() const { 715 return AtomicOrdering((getSubclassDataFromInstruction() >> 2) & 7); 716 } 717 718 /// Returns whether this RMW is atomic between threads or only within a 719 /// single thread. 720 SynchronizationScope getSynchScope() const { 721 return SynchronizationScope((getSubclassDataFromInstruction() & 2) >> 1); 722 } 723 724 Value *getPointerOperand() { return getOperand(0); } 725 const Value *getPointerOperand() const { return getOperand(0); } 726 static unsigned getPointerOperandIndex() { return 0U; } 727 728 Value *getValOperand() { return getOperand(1); } 729 const Value *getValOperand() const { return getOperand(1); } 730 731 /// \brief Returns the address space of the pointer operand. 732 unsigned getPointerAddressSpace() const { 733 return getPointerOperand()->getType()->getPointerAddressSpace(); 734 } 735 736 // Methods for support type inquiry through isa, cast, and dyn_cast: 737 static inline bool classof(const Instruction *I) { 738 return I->getOpcode() == Instruction::AtomicRMW; 739 } 740 static inline bool classof(const Value *V) { 741 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 742 } 743 private: 744 void Init(BinOp Operation, Value *Ptr, Value *Val, 745 AtomicOrdering Ordering, SynchronizationScope SynchScope); 746 // Shadow Instruction::setInstructionSubclassData with a private forwarding 747 // method so that subclasses cannot accidentally use it. 748 void setInstructionSubclassData(unsigned short D) { 749 Instruction::setInstructionSubclassData(D); 750 } 751 }; 752 753 template <> 754 struct OperandTraits<AtomicRMWInst> 755 : public FixedNumOperandTraits<AtomicRMWInst,2> { 756 }; 757 758 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(AtomicRMWInst, Value) 759 760 //===----------------------------------------------------------------------===// 761 // GetElementPtrInst Class 762 //===----------------------------------------------------------------------===// 763 764 // checkGEPType - Simple wrapper function to give a better assertion failure 765 // message on bad indexes for a gep instruction. 766 // 767 inline Type *checkGEPType(Type *Ty) { 768 assert(Ty && "Invalid GetElementPtrInst indices for type!"); 769 return Ty; 770 } 771 772 /// GetElementPtrInst - an instruction for type-safe pointer arithmetic to 773 /// access elements of arrays and structs 774 /// 775 class GetElementPtrInst : public Instruction { 776 GetElementPtrInst(const GetElementPtrInst &GEPI); 777 void init(Value *Ptr, ArrayRef<Value *> IdxList, const Twine &NameStr); 778 779 /// Constructors - Create a getelementptr instruction with a base pointer an 780 /// list of indices. The first ctor can optionally insert before an existing 781 /// instruction, the second appends the new instruction to the specified 782 /// BasicBlock. 783 inline GetElementPtrInst(Value *Ptr, ArrayRef<Value *> IdxList, 784 unsigned Values, const Twine &NameStr, 785 Instruction *InsertBefore); 786 inline GetElementPtrInst(Value *Ptr, ArrayRef<Value *> IdxList, 787 unsigned Values, const Twine &NameStr, 788 BasicBlock *InsertAtEnd); 789 protected: 790 GetElementPtrInst *clone_impl() const override; 791 public: 792 static GetElementPtrInst *Create(Value *Ptr, ArrayRef<Value *> IdxList, 793 const Twine &NameStr = "", 794 Instruction *InsertBefore = nullptr) { 795 unsigned Values = 1 + unsigned(IdxList.size()); 796 return new(Values) 797 GetElementPtrInst(Ptr, IdxList, Values, NameStr, InsertBefore); 798 } 799 static GetElementPtrInst *Create(Value *Ptr, ArrayRef<Value *> IdxList, 800 const Twine &NameStr, 801 BasicBlock *InsertAtEnd) { 802 unsigned Values = 1 + unsigned(IdxList.size()); 803 return new(Values) 804 GetElementPtrInst(Ptr, IdxList, Values, NameStr, InsertAtEnd); 805 } 806 807 /// Create an "inbounds" getelementptr. See the documentation for the 808 /// "inbounds" flag in LangRef.html for details. 809 static GetElementPtrInst *CreateInBounds(Value *Ptr, 810 ArrayRef<Value *> IdxList, 811 const Twine &NameStr = "", 812 Instruction *InsertBefore = nullptr){ 813 GetElementPtrInst *GEP = Create(Ptr, IdxList, NameStr, InsertBefore); 814 GEP->setIsInBounds(true); 815 return GEP; 816 } 817 static GetElementPtrInst *CreateInBounds(Value *Ptr, 818 ArrayRef<Value *> IdxList, 819 const Twine &NameStr, 820 BasicBlock *InsertAtEnd) { 821 GetElementPtrInst *GEP = Create(Ptr, IdxList, NameStr, InsertAtEnd); 822 GEP->setIsInBounds(true); 823 return GEP; 824 } 825 826 /// Transparently provide more efficient getOperand methods. 827 DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value); 828 829 // getType - Overload to return most specific sequential type. 830 SequentialType *getType() const { 831 return cast<SequentialType>(Instruction::getType()); 832 } 833 834 /// \brief Returns the address space of this instruction's pointer type. 835 unsigned getAddressSpace() const { 836 // Note that this is always the same as the pointer operand's address space 837 // and that is cheaper to compute, so cheat here. 838 return getPointerAddressSpace(); 839 } 840 841 /// getIndexedType - Returns the type of the element that would be loaded with 842 /// a load instruction with the specified parameters. 843 /// 844 /// Null is returned if the indices are invalid for the specified 845 /// pointer type. 846 /// 847 static Type *getIndexedType(Type *Ptr, ArrayRef<Value *> IdxList); 848 static Type *getIndexedType(Type *Ptr, ArrayRef<Constant *> IdxList); 849 static Type *getIndexedType(Type *Ptr, ArrayRef<uint64_t> IdxList); 850 851 inline op_iterator idx_begin() { return op_begin()+1; } 852 inline const_op_iterator idx_begin() const { return op_begin()+1; } 853 inline op_iterator idx_end() { return op_end(); } 854 inline const_op_iterator idx_end() const { return op_end(); } 855 856 Value *getPointerOperand() { 857 return getOperand(0); 858 } 859 const Value *getPointerOperand() const { 860 return getOperand(0); 861 } 862 static unsigned getPointerOperandIndex() { 863 return 0U; // get index for modifying correct operand. 864 } 865 866 /// getPointerOperandType - Method to return the pointer operand as a 867 /// PointerType. 868 Type *getPointerOperandType() const { 869 return getPointerOperand()->getType(); 870 } 871 872 /// \brief Returns the address space of the pointer operand. 873 unsigned getPointerAddressSpace() const { 874 return getPointerOperandType()->getPointerAddressSpace(); 875 } 876 877 /// GetGEPReturnType - Returns the pointer type returned by the GEP 878 /// instruction, which may be a vector of pointers. 879 static Type *getGEPReturnType(Value *Ptr, ArrayRef<Value *> IdxList) { 880 Type *PtrTy = PointerType::get(checkGEPType( 881 getIndexedType(Ptr->getType(), IdxList)), 882 Ptr->getType()->getPointerAddressSpace()); 883 // Vector GEP 884 if (Ptr->getType()->isVectorTy()) { 885 unsigned NumElem = cast<VectorType>(Ptr->getType())->getNumElements(); 886 return VectorType::get(PtrTy, NumElem); 887 } 888 889 // Scalar GEP 890 return PtrTy; 891 } 892 893 unsigned getNumIndices() const { // Note: always non-negative 894 return getNumOperands() - 1; 895 } 896 897 bool hasIndices() const { 898 return getNumOperands() > 1; 899 } 900 901 /// hasAllZeroIndices - Return true if all of the indices of this GEP are 902 /// zeros. If so, the result pointer and the first operand have the same 903 /// value, just potentially different types. 904 bool hasAllZeroIndices() const; 905 906 /// hasAllConstantIndices - Return true if all of the indices of this GEP are 907 /// constant integers. If so, the result pointer and the first operand have 908 /// a constant offset between them. 909 bool hasAllConstantIndices() const; 910 911 /// setIsInBounds - Set or clear the inbounds flag on this GEP instruction. 912 /// See LangRef.html for the meaning of inbounds on a getelementptr. 913 void setIsInBounds(bool b = true); 914 915 /// isInBounds - Determine whether the GEP has the inbounds flag. 916 bool isInBounds() const; 917 918 /// \brief Accumulate the constant address offset of this GEP if possible. 919 /// 920 /// This routine accepts an APInt into which it will accumulate the constant 921 /// offset of this GEP if the GEP is in fact constant. If the GEP is not 922 /// all-constant, it returns false and the value of the offset APInt is 923 /// undefined (it is *not* preserved!). The APInt passed into this routine 924 /// must be at least as wide as the IntPtr type for the address space of 925 /// the base GEP pointer. 926 bool accumulateConstantOffset(const DataLayout &DL, APInt &Offset) const; 927 928 // Methods for support type inquiry through isa, cast, and dyn_cast: 929 static inline bool classof(const Instruction *I) { 930 return (I->getOpcode() == Instruction::GetElementPtr); 931 } 932 static inline bool classof(const Value *V) { 933 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 934 } 935 }; 936 937 template <> 938 struct OperandTraits<GetElementPtrInst> : 939 public VariadicOperandTraits<GetElementPtrInst, 1> { 940 }; 941 942 GetElementPtrInst::GetElementPtrInst(Value *Ptr, 943 ArrayRef<Value *> IdxList, 944 unsigned Values, 945 const Twine &NameStr, 946 Instruction *InsertBefore) 947 : Instruction(getGEPReturnType(Ptr, IdxList), 948 GetElementPtr, 949 OperandTraits<GetElementPtrInst>::op_end(this) - Values, 950 Values, InsertBefore) { 951 init(Ptr, IdxList, NameStr); 952 } 953 GetElementPtrInst::GetElementPtrInst(Value *Ptr, 954 ArrayRef<Value *> IdxList, 955 unsigned Values, 956 const Twine &NameStr, 957 BasicBlock *InsertAtEnd) 958 : Instruction(getGEPReturnType(Ptr, IdxList), 959 GetElementPtr, 960 OperandTraits<GetElementPtrInst>::op_end(this) - Values, 961 Values, InsertAtEnd) { 962 init(Ptr, IdxList, NameStr); 963 } 964 965 966 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(GetElementPtrInst, Value) 967 968 969 //===----------------------------------------------------------------------===// 970 // ICmpInst Class 971 //===----------------------------------------------------------------------===// 972 973 /// This instruction compares its operands according to the predicate given 974 /// to the constructor. It only operates on integers or pointers. The operands 975 /// must be identical types. 976 /// \brief Represent an integer comparison operator. 977 class ICmpInst: public CmpInst { 978 void AssertOK() { 979 assert(getPredicate() >= CmpInst::FIRST_ICMP_PREDICATE && 980 getPredicate() <= CmpInst::LAST_ICMP_PREDICATE && 981 "Invalid ICmp predicate value"); 982 assert(getOperand(0)->getType() == getOperand(1)->getType() && 983 "Both operands to ICmp instruction are not of the same type!"); 984 // Check that the operands are the right type 985 assert((getOperand(0)->getType()->isIntOrIntVectorTy() || 986 getOperand(0)->getType()->isPtrOrPtrVectorTy()) && 987 "Invalid operand types for ICmp instruction"); 988 } 989 990 protected: 991 /// \brief Clone an identical ICmpInst 992 ICmpInst *clone_impl() const override; 993 public: 994 /// \brief Constructor with insert-before-instruction semantics. 995 ICmpInst( 996 Instruction *InsertBefore, ///< Where to insert 997 Predicate pred, ///< The predicate to use for the comparison 998 Value *LHS, ///< The left-hand-side of the expression 999 Value *RHS, ///< The right-hand-side of the expression 1000 const Twine &NameStr = "" ///< Name of the instruction 1001 ) : CmpInst(makeCmpResultType(LHS->getType()), 1002 Instruction::ICmp, pred, LHS, RHS, NameStr, 1003 InsertBefore) { 1004 #ifndef NDEBUG 1005 AssertOK(); 1006 #endif 1007 } 1008 1009 /// \brief Constructor with insert-at-end semantics. 1010 ICmpInst( 1011 BasicBlock &InsertAtEnd, ///< Block to insert into. 1012 Predicate pred, ///< The predicate to use for the comparison 1013 Value *LHS, ///< The left-hand-side of the expression 1014 Value *RHS, ///< The right-hand-side of the expression 1015 const Twine &NameStr = "" ///< Name of the instruction 1016 ) : CmpInst(makeCmpResultType(LHS->getType()), 1017 Instruction::ICmp, pred, LHS, RHS, NameStr, 1018 &InsertAtEnd) { 1019 #ifndef NDEBUG 1020 AssertOK(); 1021 #endif 1022 } 1023 1024 /// \brief Constructor with no-insertion semantics 1025 ICmpInst( 1026 Predicate pred, ///< The predicate to use for the comparison 1027 Value *LHS, ///< The left-hand-side of the expression 1028 Value *RHS, ///< The right-hand-side of the expression 1029 const Twine &NameStr = "" ///< Name of the instruction 1030 ) : CmpInst(makeCmpResultType(LHS->getType()), 1031 Instruction::ICmp, pred, LHS, RHS, NameStr) { 1032 #ifndef NDEBUG 1033 AssertOK(); 1034 #endif 1035 } 1036 1037 /// For example, EQ->EQ, SLE->SLE, UGT->SGT, etc. 1038 /// @returns the predicate that would be the result if the operand were 1039 /// regarded as signed. 1040 /// \brief Return the signed version of the predicate 1041 Predicate getSignedPredicate() const { 1042 return getSignedPredicate(getPredicate()); 1043 } 1044 1045 /// This is a static version that you can use without an instruction. 1046 /// \brief Return the signed version of the predicate. 1047 static Predicate getSignedPredicate(Predicate pred); 1048 1049 /// For example, EQ->EQ, SLE->ULE, UGT->UGT, etc. 1050 /// @returns the predicate that would be the result if the operand were 1051 /// regarded as unsigned. 1052 /// \brief Return the unsigned version of the predicate 1053 Predicate getUnsignedPredicate() const { 1054 return getUnsignedPredicate(getPredicate()); 1055 } 1056 1057 /// This is a static version that you can use without an instruction. 1058 /// \brief Return the unsigned version of the predicate. 1059 static Predicate getUnsignedPredicate(Predicate pred); 1060 1061 /// isEquality - Return true if this predicate is either EQ or NE. This also 1062 /// tests for commutativity. 1063 static bool isEquality(Predicate P) { 1064 return P == ICMP_EQ || P == ICMP_NE; 1065 } 1066 1067 /// isEquality - Return true if this predicate is either EQ or NE. This also 1068 /// tests for commutativity. 1069 bool isEquality() const { 1070 return isEquality(getPredicate()); 1071 } 1072 1073 /// @returns true if the predicate of this ICmpInst is commutative 1074 /// \brief Determine if this relation is commutative. 1075 bool isCommutative() const { return isEquality(); } 1076 1077 /// isRelational - Return true if the predicate is relational (not EQ or NE). 1078 /// 1079 bool isRelational() const { 1080 return !isEquality(); 1081 } 1082 1083 /// isRelational - Return true if the predicate is relational (not EQ or NE). 1084 /// 1085 static bool isRelational(Predicate P) { 1086 return !isEquality(P); 1087 } 1088 1089 /// Initialize a set of values that all satisfy the predicate with C. 1090 /// \brief Make a ConstantRange for a relation with a constant value. 1091 static ConstantRange makeConstantRange(Predicate pred, const APInt &C); 1092 1093 /// Exchange the two operands to this instruction in such a way that it does 1094 /// not modify the semantics of the instruction. The predicate value may be 1095 /// changed to retain the same result if the predicate is order dependent 1096 /// (e.g. ult). 1097 /// \brief Swap operands and adjust predicate. 1098 void swapOperands() { 1099 setPredicate(getSwappedPredicate()); 1100 Op<0>().swap(Op<1>()); 1101 } 1102 1103 // Methods for support type inquiry through isa, cast, and dyn_cast: 1104 static inline bool classof(const Instruction *I) { 1105 return I->getOpcode() == Instruction::ICmp; 1106 } 1107 static inline bool classof(const Value *V) { 1108 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 1109 } 1110 1111 }; 1112 1113 //===----------------------------------------------------------------------===// 1114 // FCmpInst Class 1115 //===----------------------------------------------------------------------===// 1116 1117 /// This instruction compares its operands according to the predicate given 1118 /// to the constructor. It only operates on floating point values or packed 1119 /// vectors of floating point values. The operands must be identical types. 1120 /// \brief Represents a floating point comparison operator. 1121 class FCmpInst: public CmpInst { 1122 protected: 1123 /// \brief Clone an identical FCmpInst 1124 FCmpInst *clone_impl() const override; 1125 public: 1126 /// \brief Constructor with insert-before-instruction semantics. 1127 FCmpInst( 1128 Instruction *InsertBefore, ///< Where to insert 1129 Predicate pred, ///< The predicate to use for the comparison 1130 Value *LHS, ///< The left-hand-side of the expression 1131 Value *RHS, ///< The right-hand-side of the expression 1132 const Twine &NameStr = "" ///< Name of the instruction 1133 ) : CmpInst(makeCmpResultType(LHS->getType()), 1134 Instruction::FCmp, pred, LHS, RHS, NameStr, 1135 InsertBefore) { 1136 assert(pred <= FCmpInst::LAST_FCMP_PREDICATE && 1137 "Invalid FCmp predicate value"); 1138 assert(getOperand(0)->getType() == getOperand(1)->getType() && 1139 "Both operands to FCmp instruction are not of the same type!"); 1140 // Check that the operands are the right type 1141 assert(getOperand(0)->getType()->isFPOrFPVectorTy() && 1142 "Invalid operand types for FCmp instruction"); 1143 } 1144 1145 /// \brief Constructor with insert-at-end semantics. 1146 FCmpInst( 1147 BasicBlock &InsertAtEnd, ///< Block to insert into. 1148 Predicate pred, ///< The predicate to use for the comparison 1149 Value *LHS, ///< The left-hand-side of the expression 1150 Value *RHS, ///< The right-hand-side of the expression 1151 const Twine &NameStr = "" ///< Name of the instruction 1152 ) : CmpInst(makeCmpResultType(LHS->getType()), 1153 Instruction::FCmp, pred, LHS, RHS, NameStr, 1154 &InsertAtEnd) { 1155 assert(pred <= FCmpInst::LAST_FCMP_PREDICATE && 1156 "Invalid FCmp predicate value"); 1157 assert(getOperand(0)->getType() == getOperand(1)->getType() && 1158 "Both operands to FCmp instruction are not of the same type!"); 1159 // Check that the operands are the right type 1160 assert(getOperand(0)->getType()->isFPOrFPVectorTy() && 1161 "Invalid operand types for FCmp instruction"); 1162 } 1163 1164 /// \brief Constructor with no-insertion semantics 1165 FCmpInst( 1166 Predicate pred, ///< The predicate to use for the comparison 1167 Value *LHS, ///< The left-hand-side of the expression 1168 Value *RHS, ///< The right-hand-side of the expression 1169 const Twine &NameStr = "" ///< Name of the instruction 1170 ) : CmpInst(makeCmpResultType(LHS->getType()), 1171 Instruction::FCmp, pred, LHS, RHS, NameStr) { 1172 assert(pred <= FCmpInst::LAST_FCMP_PREDICATE && 1173 "Invalid FCmp predicate value"); 1174 assert(getOperand(0)->getType() == getOperand(1)->getType() && 1175 "Both operands to FCmp instruction are not of the same type!"); 1176 // Check that the operands are the right type 1177 assert(getOperand(0)->getType()->isFPOrFPVectorTy() && 1178 "Invalid operand types for FCmp instruction"); 1179 } 1180 1181 /// @returns true if the predicate of this instruction is EQ or NE. 1182 /// \brief Determine if this is an equality predicate. 1183 bool isEquality() const { 1184 return getPredicate() == FCMP_OEQ || getPredicate() == FCMP_ONE || 1185 getPredicate() == FCMP_UEQ || getPredicate() == FCMP_UNE; 1186 } 1187 1188 /// @returns true if the predicate of this instruction is commutative. 1189 /// \brief Determine if this is a commutative predicate. 1190 bool isCommutative() const { 1191 return isEquality() || 1192 getPredicate() == FCMP_FALSE || 1193 getPredicate() == FCMP_TRUE || 1194 getPredicate() == FCMP_ORD || 1195 getPredicate() == FCMP_UNO; 1196 } 1197 1198 /// @returns true if the predicate is relational (not EQ or NE). 1199 /// \brief Determine if this a relational predicate. 1200 bool isRelational() const { return !isEquality(); } 1201 1202 /// Exchange the two operands to this instruction in such a way that it does 1203 /// not modify the semantics of the instruction. The predicate value may be 1204 /// changed to retain the same result if the predicate is order dependent 1205 /// (e.g. ult). 1206 /// \brief Swap operands and adjust predicate. 1207 void swapOperands() { 1208 setPredicate(getSwappedPredicate()); 1209 Op<0>().swap(Op<1>()); 1210 } 1211 1212 /// \brief Methods for support type inquiry through isa, cast, and dyn_cast: 1213 static inline bool classof(const Instruction *I) { 1214 return I->getOpcode() == Instruction::FCmp; 1215 } 1216 static inline bool classof(const Value *V) { 1217 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 1218 } 1219 }; 1220 1221 //===----------------------------------------------------------------------===// 1222 /// CallInst - This class represents a function call, abstracting a target 1223 /// machine's calling convention. This class uses low bit of the SubClassData 1224 /// field to indicate whether or not this is a tail call. The rest of the bits 1225 /// hold the calling convention of the call. 1226 /// 1227 class CallInst : public Instruction { 1228 AttributeSet AttributeList; ///< parameter attributes for call 1229 CallInst(const CallInst &CI); 1230 void init(Value *Func, ArrayRef<Value *> Args, const Twine &NameStr); 1231 void init(Value *Func, const Twine &NameStr); 1232 1233 /// Construct a CallInst given a range of arguments. 1234 /// \brief Construct a CallInst from a range of arguments 1235 inline CallInst(Value *Func, ArrayRef<Value *> Args, 1236 const Twine &NameStr, Instruction *InsertBefore); 1237 1238 /// Construct a CallInst given a range of arguments. 1239 /// \brief Construct a CallInst from a range of arguments 1240 inline CallInst(Value *Func, ArrayRef<Value *> Args, 1241 const Twine &NameStr, BasicBlock *InsertAtEnd); 1242 1243 explicit CallInst(Value *F, const Twine &NameStr, 1244 Instruction *InsertBefore); 1245 CallInst(Value *F, const Twine &NameStr, BasicBlock *InsertAtEnd); 1246 protected: 1247 CallInst *clone_impl() const override; 1248 public: 1249 static CallInst *Create(Value *Func, 1250 ArrayRef<Value *> Args, 1251 const Twine &NameStr = "", 1252 Instruction *InsertBefore = nullptr) { 1253 return new(unsigned(Args.size() + 1)) 1254 CallInst(Func, Args, NameStr, InsertBefore); 1255 } 1256 static CallInst *Create(Value *Func, 1257 ArrayRef<Value *> Args, 1258 const Twine &NameStr, BasicBlock *InsertAtEnd) { 1259 return new(unsigned(Args.size() + 1)) 1260 CallInst(Func, Args, NameStr, InsertAtEnd); 1261 } 1262 static CallInst *Create(Value *F, const Twine &NameStr = "", 1263 Instruction *InsertBefore = nullptr) { 1264 return new(1) CallInst(F, NameStr, InsertBefore); 1265 } 1266 static CallInst *Create(Value *F, const Twine &NameStr, 1267 BasicBlock *InsertAtEnd) { 1268 return new(1) CallInst(F, NameStr, InsertAtEnd); 1269 } 1270 /// CreateMalloc - Generate the IR for a call to malloc: 1271 /// 1. Compute the malloc call's argument as the specified type's size, 1272 /// possibly multiplied by the array size if the array size is not 1273 /// constant 1. 1274 /// 2. Call malloc with that argument. 1275 /// 3. Bitcast the result of the malloc call to the specified type. 1276 static Instruction *CreateMalloc(Instruction *InsertBefore, 1277 Type *IntPtrTy, Type *AllocTy, 1278 Value *AllocSize, Value *ArraySize = nullptr, 1279 Function* MallocF = nullptr, 1280 const Twine &Name = ""); 1281 static Instruction *CreateMalloc(BasicBlock *InsertAtEnd, 1282 Type *IntPtrTy, Type *AllocTy, 1283 Value *AllocSize, Value *ArraySize = nullptr, 1284 Function* MallocF = nullptr, 1285 const Twine &Name = ""); 1286 /// CreateFree - Generate the IR for a call to the builtin free function. 1287 static Instruction* CreateFree(Value* Source, Instruction *InsertBefore); 1288 static Instruction* CreateFree(Value* Source, BasicBlock *InsertAtEnd); 1289 1290 ~CallInst(); 1291 1292 // Note that 'musttail' implies 'tail'. 1293 enum TailCallKind { TCK_None = 0, TCK_Tail = 1, TCK_MustTail = 2 }; 1294 TailCallKind getTailCallKind() const { 1295 return TailCallKind(getSubclassDataFromInstruction() & 3); 1296 } 1297 bool isTailCall() const { 1298 return (getSubclassDataFromInstruction() & 3) != TCK_None; 1299 } 1300 bool isMustTailCall() const { 1301 return (getSubclassDataFromInstruction() & 3) == TCK_MustTail; 1302 } 1303 void setTailCall(bool isTC = true) { 1304 setInstructionSubclassData((getSubclassDataFromInstruction() & ~3) | 1305 unsigned(isTC ? TCK_Tail : TCK_None)); 1306 } 1307 void setTailCallKind(TailCallKind TCK) { 1308 setInstructionSubclassData((getSubclassDataFromInstruction() & ~3) | 1309 unsigned(TCK)); 1310 } 1311 1312 /// Provide fast operand accessors 1313 DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value); 1314 1315 /// getNumArgOperands - Return the number of call arguments. 1316 /// 1317 unsigned getNumArgOperands() const { return getNumOperands() - 1; } 1318 1319 /// getArgOperand/setArgOperand - Return/set the i-th call argument. 1320 /// 1321 Value *getArgOperand(unsigned i) const { return getOperand(i); } 1322 void setArgOperand(unsigned i, Value *v) { setOperand(i, v); } 1323 1324 /// arg_operands - iteration adapter for range-for loops. 1325 iterator_range<op_iterator> arg_operands() { 1326 // The last operand in the op list is the callee - it's not one of the args 1327 // so we don't want to iterate over it. 1328 return iterator_range<op_iterator>(op_begin(), op_end() - 1); 1329 } 1330 1331 /// arg_operands - iteration adapter for range-for loops. 1332 iterator_range<const_op_iterator> arg_operands() const { 1333 return iterator_range<const_op_iterator>(op_begin(), op_end() - 1); 1334 } 1335 1336 /// \brief Wrappers for getting the \c Use of a call argument. 1337 const Use &getArgOperandUse(unsigned i) const { return getOperandUse(i); } 1338 Use &getArgOperandUse(unsigned i) { return getOperandUse(i); } 1339 1340 /// getCallingConv/setCallingConv - Get or set the calling convention of this 1341 /// function call. 1342 CallingConv::ID getCallingConv() const { 1343 return static_cast<CallingConv::ID>(getSubclassDataFromInstruction() >> 2); 1344 } 1345 void setCallingConv(CallingConv::ID CC) { 1346 setInstructionSubclassData((getSubclassDataFromInstruction() & 3) | 1347 (static_cast<unsigned>(CC) << 2)); 1348 } 1349 1350 /// getAttributes - Return the parameter attributes for this call. 1351 /// 1352 const AttributeSet &getAttributes() const { return AttributeList; } 1353 1354 /// setAttributes - Set the parameter attributes for this call. 1355 /// 1356 void setAttributes(const AttributeSet &Attrs) { AttributeList = Attrs; } 1357 1358 /// addAttribute - adds the attribute to the list of attributes. 1359 void addAttribute(unsigned i, Attribute::AttrKind attr); 1360 1361 /// removeAttribute - removes the attribute from the list of attributes. 1362 void removeAttribute(unsigned i, Attribute attr); 1363 1364 /// \brief Determine whether this call has the given attribute. 1365 bool hasFnAttr(Attribute::AttrKind A) const { 1366 assert(A != Attribute::NoBuiltin && 1367 "Use CallInst::isNoBuiltin() to check for Attribute::NoBuiltin"); 1368 return hasFnAttrImpl(A); 1369 } 1370 1371 /// \brief Determine whether the call or the callee has the given attributes. 1372 bool paramHasAttr(unsigned i, Attribute::AttrKind A) const; 1373 1374 /// \brief Extract the alignment for a call or parameter (0=unknown). 1375 unsigned getParamAlignment(unsigned i) const { 1376 return AttributeList.getParamAlignment(i); 1377 } 1378 1379 /// \brief Return true if the call should not be treated as a call to a 1380 /// builtin. 1381 bool isNoBuiltin() const { 1382 return hasFnAttrImpl(Attribute::NoBuiltin) && 1383 !hasFnAttrImpl(Attribute::Builtin); 1384 } 1385 1386 /// \brief Return true if the call should not be inlined. 1387 bool isNoInline() const { return hasFnAttr(Attribute::NoInline); } 1388 void setIsNoInline() { 1389 addAttribute(AttributeSet::FunctionIndex, Attribute::NoInline); 1390 } 1391 1392 /// \brief Return true if the call can return twice 1393 bool canReturnTwice() const { 1394 return hasFnAttr(Attribute::ReturnsTwice); 1395 } 1396 void setCanReturnTwice() { 1397 addAttribute(AttributeSet::FunctionIndex, Attribute::ReturnsTwice); 1398 } 1399 1400 /// \brief Determine if the call does not access memory. 1401 bool doesNotAccessMemory() const { 1402 return hasFnAttr(Attribute::ReadNone); 1403 } 1404 void setDoesNotAccessMemory() { 1405 addAttribute(AttributeSet::FunctionIndex, Attribute::ReadNone); 1406 } 1407 1408 /// \brief Determine if the call does not access or only reads memory. 1409 bool onlyReadsMemory() const { 1410 return doesNotAccessMemory() || hasFnAttr(Attribute::ReadOnly); 1411 } 1412 void setOnlyReadsMemory() { 1413 addAttribute(AttributeSet::FunctionIndex, Attribute::ReadOnly); 1414 } 1415 1416 /// \brief Determine if the call cannot return. 1417 bool doesNotReturn() const { return hasFnAttr(Attribute::NoReturn); } 1418 void setDoesNotReturn() { 1419 addAttribute(AttributeSet::FunctionIndex, Attribute::NoReturn); 1420 } 1421 1422 /// \brief Determine if the call cannot unwind. 1423 bool doesNotThrow() const { return hasFnAttr(Attribute::NoUnwind); } 1424 void setDoesNotThrow() { 1425 addAttribute(AttributeSet::FunctionIndex, Attribute::NoUnwind); 1426 } 1427 1428 /// \brief Determine if the call cannot be duplicated. 1429 bool cannotDuplicate() const {return hasFnAttr(Attribute::NoDuplicate); } 1430 void setCannotDuplicate() { 1431 addAttribute(AttributeSet::FunctionIndex, Attribute::NoDuplicate); 1432 } 1433 1434 /// \brief Determine if the call returns a structure through first 1435 /// pointer argument. 1436 bool hasStructRetAttr() const { 1437 // Be friendly and also check the callee. 1438 return paramHasAttr(1, Attribute::StructRet); 1439 } 1440 1441 /// \brief Determine if any call argument is an aggregate passed by value. 1442 bool hasByValArgument() const { 1443 return AttributeList.hasAttrSomewhere(Attribute::ByVal); 1444 } 1445 1446 /// getCalledFunction - Return the function called, or null if this is an 1447 /// indirect function invocation. 1448 /// 1449 Function *getCalledFunction() const { 1450 return dyn_cast<Function>(Op<-1>()); 1451 } 1452 1453 /// getCalledValue - Get a pointer to the function that is invoked by this 1454 /// instruction. 1455 const Value *getCalledValue() const { return Op<-1>(); } 1456 Value *getCalledValue() { return Op<-1>(); } 1457 1458 /// setCalledFunction - Set the function called. 1459 void setCalledFunction(Value* Fn) { 1460 Op<-1>() = Fn; 1461 } 1462 1463 /// isInlineAsm - Check if this call is an inline asm statement. 1464 bool isInlineAsm() const { 1465 return isa<InlineAsm>(Op<-1>()); 1466 } 1467 1468 // Methods for support type inquiry through isa, cast, and dyn_cast: 1469 static inline bool classof(const Instruction *I) { 1470 return I->getOpcode() == Instruction::Call; 1471 } 1472 static inline bool classof(const Value *V) { 1473 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 1474 } 1475 private: 1476 1477 bool hasFnAttrImpl(Attribute::AttrKind A) const; 1478 1479 // Shadow Instruction::setInstructionSubclassData with a private forwarding 1480 // method so that subclasses cannot accidentally use it. 1481 void setInstructionSubclassData(unsigned short D) { 1482 Instruction::setInstructionSubclassData(D); 1483 } 1484 }; 1485 1486 template <> 1487 struct OperandTraits<CallInst> : public VariadicOperandTraits<CallInst, 1> { 1488 }; 1489 1490 CallInst::CallInst(Value *Func, ArrayRef<Value *> Args, 1491 const Twine &NameStr, BasicBlock *InsertAtEnd) 1492 : Instruction(cast<FunctionType>(cast<PointerType>(Func->getType()) 1493 ->getElementType())->getReturnType(), 1494 Instruction::Call, 1495 OperandTraits<CallInst>::op_end(this) - (Args.size() + 1), 1496 unsigned(Args.size() + 1), InsertAtEnd) { 1497 init(Func, Args, NameStr); 1498 } 1499 1500 CallInst::CallInst(Value *Func, ArrayRef<Value *> Args, 1501 const Twine &NameStr, Instruction *InsertBefore) 1502 : Instruction(cast<FunctionType>(cast<PointerType>(Func->getType()) 1503 ->getElementType())->getReturnType(), 1504 Instruction::Call, 1505 OperandTraits<CallInst>::op_end(this) - (Args.size() + 1), 1506 unsigned(Args.size() + 1), InsertBefore) { 1507 init(Func, Args, NameStr); 1508 } 1509 1510 1511 // Note: if you get compile errors about private methods then 1512 // please update your code to use the high-level operand 1513 // interfaces. See line 943 above. 1514 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(CallInst, Value) 1515 1516 //===----------------------------------------------------------------------===// 1517 // SelectInst Class 1518 //===----------------------------------------------------------------------===// 1519 1520 /// SelectInst - This class represents the LLVM 'select' instruction. 1521 /// 1522 class SelectInst : public Instruction { 1523 void init(Value *C, Value *S1, Value *S2) { 1524 assert(!areInvalidOperands(C, S1, S2) && "Invalid operands for select"); 1525 Op<0>() = C; 1526 Op<1>() = S1; 1527 Op<2>() = S2; 1528 } 1529 1530 SelectInst(Value *C, Value *S1, Value *S2, const Twine &NameStr, 1531 Instruction *InsertBefore) 1532 : Instruction(S1->getType(), Instruction::Select, 1533 &Op<0>(), 3, InsertBefore) { 1534 init(C, S1, S2); 1535 setName(NameStr); 1536 } 1537 SelectInst(Value *C, Value *S1, Value *S2, const Twine &NameStr, 1538 BasicBlock *InsertAtEnd) 1539 : Instruction(S1->getType(), Instruction::Select, 1540 &Op<0>(), 3, InsertAtEnd) { 1541 init(C, S1, S2); 1542 setName(NameStr); 1543 } 1544 protected: 1545 SelectInst *clone_impl() const override; 1546 public: 1547 static SelectInst *Create(Value *C, Value *S1, Value *S2, 1548 const Twine &NameStr = "", 1549 Instruction *InsertBefore = nullptr) { 1550 return new(3) SelectInst(C, S1, S2, NameStr, InsertBefore); 1551 } 1552 static SelectInst *Create(Value *C, Value *S1, Value *S2, 1553 const Twine &NameStr, 1554 BasicBlock *InsertAtEnd) { 1555 return new(3) SelectInst(C, S1, S2, NameStr, InsertAtEnd); 1556 } 1557 1558 const Value *getCondition() const { return Op<0>(); } 1559 const Value *getTrueValue() const { return Op<1>(); } 1560 const Value *getFalseValue() const { return Op<2>(); } 1561 Value *getCondition() { return Op<0>(); } 1562 Value *getTrueValue() { return Op<1>(); } 1563 Value *getFalseValue() { return Op<2>(); } 1564 1565 /// areInvalidOperands - Return a string if the specified operands are invalid 1566 /// for a select operation, otherwise return null. 1567 static const char *areInvalidOperands(Value *Cond, Value *True, Value *False); 1568 1569 /// Transparently provide more efficient getOperand methods. 1570 DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value); 1571 1572 OtherOps getOpcode() const { 1573 return static_cast<OtherOps>(Instruction::getOpcode()); 1574 } 1575 1576 // Methods for support type inquiry through isa, cast, and dyn_cast: 1577 static inline bool classof(const Instruction *I) { 1578 return I->getOpcode() == Instruction::Select; 1579 } 1580 static inline bool classof(const Value *V) { 1581 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 1582 } 1583 }; 1584 1585 template <> 1586 struct OperandTraits<SelectInst> : public FixedNumOperandTraits<SelectInst, 3> { 1587 }; 1588 1589 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(SelectInst, Value) 1590 1591 //===----------------------------------------------------------------------===// 1592 // VAArgInst Class 1593 //===----------------------------------------------------------------------===// 1594 1595 /// VAArgInst - This class represents the va_arg llvm instruction, which returns 1596 /// an argument of the specified type given a va_list and increments that list 1597 /// 1598 class VAArgInst : public UnaryInstruction { 1599 protected: 1600 VAArgInst *clone_impl() const override; 1601 1602 public: 1603 VAArgInst(Value *List, Type *Ty, const Twine &NameStr = "", 1604 Instruction *InsertBefore = nullptr) 1605 : UnaryInstruction(Ty, VAArg, List, InsertBefore) { 1606 setName(NameStr); 1607 } 1608 VAArgInst(Value *List, Type *Ty, const Twine &NameStr, 1609 BasicBlock *InsertAtEnd) 1610 : UnaryInstruction(Ty, VAArg, List, InsertAtEnd) { 1611 setName(NameStr); 1612 } 1613 1614 Value *getPointerOperand() { return getOperand(0); } 1615 const Value *getPointerOperand() const { return getOperand(0); } 1616 static unsigned getPointerOperandIndex() { return 0U; } 1617 1618 // Methods for support type inquiry through isa, cast, and dyn_cast: 1619 static inline bool classof(const Instruction *I) { 1620 return I->getOpcode() == VAArg; 1621 } 1622 static inline bool classof(const Value *V) { 1623 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 1624 } 1625 }; 1626 1627 //===----------------------------------------------------------------------===// 1628 // ExtractElementInst Class 1629 //===----------------------------------------------------------------------===// 1630 1631 /// ExtractElementInst - This instruction extracts a single (scalar) 1632 /// element from a VectorType value 1633 /// 1634 class ExtractElementInst : public Instruction { 1635 ExtractElementInst(Value *Vec, Value *Idx, const Twine &NameStr = "", 1636 Instruction *InsertBefore = nullptr); 1637 ExtractElementInst(Value *Vec, Value *Idx, const Twine &NameStr, 1638 BasicBlock *InsertAtEnd); 1639 protected: 1640 ExtractElementInst *clone_impl() const override; 1641 1642 public: 1643 static ExtractElementInst *Create(Value *Vec, Value *Idx, 1644 const Twine &NameStr = "", 1645 Instruction *InsertBefore = nullptr) { 1646 return new(2) ExtractElementInst(Vec, Idx, NameStr, InsertBefore); 1647 } 1648 static ExtractElementInst *Create(Value *Vec, Value *Idx, 1649 const Twine &NameStr, 1650 BasicBlock *InsertAtEnd) { 1651 return new(2) ExtractElementInst(Vec, Idx, NameStr, InsertAtEnd); 1652 } 1653 1654 /// isValidOperands - Return true if an extractelement instruction can be 1655 /// formed with the specified operands. 1656 static bool isValidOperands(const Value *Vec, const Value *Idx); 1657 1658 Value *getVectorOperand() { return Op<0>(); } 1659 Value *getIndexOperand() { return Op<1>(); } 1660 const Value *getVectorOperand() const { return Op<0>(); } 1661 const Value *getIndexOperand() const { return Op<1>(); } 1662 1663 VectorType *getVectorOperandType() const { 1664 return cast<VectorType>(getVectorOperand()->getType()); 1665 } 1666 1667 1668 /// Transparently provide more efficient getOperand methods. 1669 DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value); 1670 1671 // Methods for support type inquiry through isa, cast, and dyn_cast: 1672 static inline bool classof(const Instruction *I) { 1673 return I->getOpcode() == Instruction::ExtractElement; 1674 } 1675 static inline bool classof(const Value *V) { 1676 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 1677 } 1678 }; 1679 1680 template <> 1681 struct OperandTraits<ExtractElementInst> : 1682 public FixedNumOperandTraits<ExtractElementInst, 2> { 1683 }; 1684 1685 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(ExtractElementInst, Value) 1686 1687 //===----------------------------------------------------------------------===// 1688 // InsertElementInst Class 1689 //===----------------------------------------------------------------------===// 1690 1691 /// InsertElementInst - This instruction inserts a single (scalar) 1692 /// element into a VectorType value 1693 /// 1694 class InsertElementInst : public Instruction { 1695 InsertElementInst(Value *Vec, Value *NewElt, Value *Idx, 1696 const Twine &NameStr = "", 1697 Instruction *InsertBefore = nullptr); 1698 InsertElementInst(Value *Vec, Value *NewElt, Value *Idx, 1699 const Twine &NameStr, BasicBlock *InsertAtEnd); 1700 protected: 1701 InsertElementInst *clone_impl() const override; 1702 1703 public: 1704 static InsertElementInst *Create(Value *Vec, Value *NewElt, Value *Idx, 1705 const Twine &NameStr = "", 1706 Instruction *InsertBefore = nullptr) { 1707 return new(3) InsertElementInst(Vec, NewElt, Idx, NameStr, InsertBefore); 1708 } 1709 static InsertElementInst *Create(Value *Vec, Value *NewElt, Value *Idx, 1710 const Twine &NameStr, 1711 BasicBlock *InsertAtEnd) { 1712 return new(3) InsertElementInst(Vec, NewElt, Idx, NameStr, InsertAtEnd); 1713 } 1714 1715 /// isValidOperands - Return true if an insertelement instruction can be 1716 /// formed with the specified operands. 1717 static bool isValidOperands(const Value *Vec, const Value *NewElt, 1718 const Value *Idx); 1719 1720 /// getType - Overload to return most specific vector type. 1721 /// 1722 VectorType *getType() const { 1723 return cast<VectorType>(Instruction::getType()); 1724 } 1725 1726 /// Transparently provide more efficient getOperand methods. 1727 DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value); 1728 1729 // Methods for support type inquiry through isa, cast, and dyn_cast: 1730 static inline bool classof(const Instruction *I) { 1731 return I->getOpcode() == Instruction::InsertElement; 1732 } 1733 static inline bool classof(const Value *V) { 1734 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 1735 } 1736 }; 1737 1738 template <> 1739 struct OperandTraits<InsertElementInst> : 1740 public FixedNumOperandTraits<InsertElementInst, 3> { 1741 }; 1742 1743 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(InsertElementInst, Value) 1744 1745 //===----------------------------------------------------------------------===// 1746 // ShuffleVectorInst Class 1747 //===----------------------------------------------------------------------===// 1748 1749 /// ShuffleVectorInst - This instruction constructs a fixed permutation of two 1750 /// input vectors. 1751 /// 1752 class ShuffleVectorInst : public Instruction { 1753 protected: 1754 ShuffleVectorInst *clone_impl() const override; 1755 1756 public: 1757 // allocate space for exactly three operands 1758 void *operator new(size_t s) { 1759 return User::operator new(s, 3); 1760 } 1761 ShuffleVectorInst(Value *V1, Value *V2, Value *Mask, 1762 const Twine &NameStr = "", 1763 Instruction *InsertBefor = nullptr); 1764 ShuffleVectorInst(Value *V1, Value *V2, Value *Mask, 1765 const Twine &NameStr, BasicBlock *InsertAtEnd); 1766 1767 /// isValidOperands - Return true if a shufflevector instruction can be 1768 /// formed with the specified operands. 1769 static bool isValidOperands(const Value *V1, const Value *V2, 1770 const Value *Mask); 1771 1772 /// getType - Overload to return most specific vector type. 1773 /// 1774 VectorType *getType() const { 1775 return cast<VectorType>(Instruction::getType()); 1776 } 1777 1778 /// Transparently provide more efficient getOperand methods. 1779 DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value); 1780 1781 Constant *getMask() const { 1782 return cast<Constant>(getOperand(2)); 1783 } 1784 1785 /// getMaskValue - Return the index from the shuffle mask for the specified 1786 /// output result. This is either -1 if the element is undef or a number less 1787 /// than 2*numelements. 1788 static int getMaskValue(Constant *Mask, unsigned i); 1789 1790 int getMaskValue(unsigned i) const { 1791 return getMaskValue(getMask(), i); 1792 } 1793 1794 /// getShuffleMask - Return the full mask for this instruction, where each 1795 /// element is the element number and undef's are returned as -1. 1796 static void getShuffleMask(Constant *Mask, SmallVectorImpl<int> &Result); 1797 1798 void getShuffleMask(SmallVectorImpl<int> &Result) const { 1799 return getShuffleMask(getMask(), Result); 1800 } 1801 1802 SmallVector<int, 16> getShuffleMask() const { 1803 SmallVector<int, 16> Mask; 1804 getShuffleMask(Mask); 1805 return Mask; 1806 } 1807 1808 1809 // Methods for support type inquiry through isa, cast, and dyn_cast: 1810 static inline bool classof(const Instruction *I) { 1811 return I->getOpcode() == Instruction::ShuffleVector; 1812 } 1813 static inline bool classof(const Value *V) { 1814 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 1815 } 1816 }; 1817 1818 template <> 1819 struct OperandTraits<ShuffleVectorInst> : 1820 public FixedNumOperandTraits<ShuffleVectorInst, 3> { 1821 }; 1822 1823 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(ShuffleVectorInst, Value) 1824 1825 //===----------------------------------------------------------------------===// 1826 // ExtractValueInst Class 1827 //===----------------------------------------------------------------------===// 1828 1829 /// ExtractValueInst - This instruction extracts a struct member or array 1830 /// element value from an aggregate value. 1831 /// 1832 class ExtractValueInst : public UnaryInstruction { 1833 SmallVector<unsigned, 4> Indices; 1834 1835 ExtractValueInst(const ExtractValueInst &EVI); 1836 void init(ArrayRef<unsigned> Idxs, const Twine &NameStr); 1837 1838 /// Constructors - Create a extractvalue instruction with a base aggregate 1839 /// value and a list of indices. The first ctor can optionally insert before 1840 /// an existing instruction, the second appends the new instruction to the 1841 /// specified BasicBlock. 1842 inline ExtractValueInst(Value *Agg, 1843 ArrayRef<unsigned> Idxs, 1844 const Twine &NameStr, 1845 Instruction *InsertBefore); 1846 inline ExtractValueInst(Value *Agg, 1847 ArrayRef<unsigned> Idxs, 1848 const Twine &NameStr, BasicBlock *InsertAtEnd); 1849 1850 // allocate space for exactly one operand 1851 void *operator new(size_t s) { 1852 return User::operator new(s, 1); 1853 } 1854 protected: 1855 ExtractValueInst *clone_impl() const override; 1856 1857 public: 1858 static ExtractValueInst *Create(Value *Agg, 1859 ArrayRef<unsigned> Idxs, 1860 const Twine &NameStr = "", 1861 Instruction *InsertBefore = nullptr) { 1862 return new 1863 ExtractValueInst(Agg, Idxs, NameStr, InsertBefore); 1864 } 1865 static ExtractValueInst *Create(Value *Agg, 1866 ArrayRef<unsigned> Idxs, 1867 const Twine &NameStr, 1868 BasicBlock *InsertAtEnd) { 1869 return new ExtractValueInst(Agg, Idxs, NameStr, InsertAtEnd); 1870 } 1871 1872 /// getIndexedType - Returns the type of the element that would be extracted 1873 /// with an extractvalue instruction with the specified parameters. 1874 /// 1875 /// Null is returned if the indices are invalid for the specified type. 1876 static Type *getIndexedType(Type *Agg, ArrayRef<unsigned> Idxs); 1877 1878 typedef const unsigned* idx_iterator; 1879 inline idx_iterator idx_begin() const { return Indices.begin(); } 1880 inline idx_iterator idx_end() const { return Indices.end(); } 1881 1882 Value *getAggregateOperand() { 1883 return getOperand(0); 1884 } 1885 const Value *getAggregateOperand() const { 1886 return getOperand(0); 1887 } 1888 static unsigned getAggregateOperandIndex() { 1889 return 0U; // get index for modifying correct operand 1890 } 1891 1892 ArrayRef<unsigned> getIndices() const { 1893 return Indices; 1894 } 1895 1896 unsigned getNumIndices() const { 1897 return (unsigned)Indices.size(); 1898 } 1899 1900 bool hasIndices() const { 1901 return true; 1902 } 1903 1904 // Methods for support type inquiry through isa, cast, and dyn_cast: 1905 static inline bool classof(const Instruction *I) { 1906 return I->getOpcode() == Instruction::ExtractValue; 1907 } 1908 static inline bool classof(const Value *V) { 1909 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 1910 } 1911 }; 1912 1913 ExtractValueInst::ExtractValueInst(Value *Agg, 1914 ArrayRef<unsigned> Idxs, 1915 const Twine &NameStr, 1916 Instruction *InsertBefore) 1917 : UnaryInstruction(checkGEPType(getIndexedType(Agg->getType(), Idxs)), 1918 ExtractValue, Agg, InsertBefore) { 1919 init(Idxs, NameStr); 1920 } 1921 ExtractValueInst::ExtractValueInst(Value *Agg, 1922 ArrayRef<unsigned> Idxs, 1923 const Twine &NameStr, 1924 BasicBlock *InsertAtEnd) 1925 : UnaryInstruction(checkGEPType(getIndexedType(Agg->getType(), Idxs)), 1926 ExtractValue, Agg, InsertAtEnd) { 1927 init(Idxs, NameStr); 1928 } 1929 1930 1931 //===----------------------------------------------------------------------===// 1932 // InsertValueInst Class 1933 //===----------------------------------------------------------------------===// 1934 1935 /// InsertValueInst - This instruction inserts a struct field of array element 1936 /// value into an aggregate value. 1937 /// 1938 class InsertValueInst : public Instruction { 1939 SmallVector<unsigned, 4> Indices; 1940 1941 void *operator new(size_t, unsigned) LLVM_DELETED_FUNCTION; 1942 InsertValueInst(const InsertValueInst &IVI); 1943 void init(Value *Agg, Value *Val, ArrayRef<unsigned> Idxs, 1944 const Twine &NameStr); 1945 1946 /// Constructors - Create a insertvalue instruction with a base aggregate 1947 /// value, a value to insert, and a list of indices. The first ctor can 1948 /// optionally insert before an existing instruction, the second appends 1949 /// the new instruction to the specified BasicBlock. 1950 inline InsertValueInst(Value *Agg, Value *Val, 1951 ArrayRef<unsigned> Idxs, 1952 const Twine &NameStr, 1953 Instruction *InsertBefore); 1954 inline InsertValueInst(Value *Agg, Value *Val, 1955 ArrayRef<unsigned> Idxs, 1956 const Twine &NameStr, BasicBlock *InsertAtEnd); 1957 1958 /// Constructors - These two constructors are convenience methods because one 1959 /// and two index insertvalue instructions are so common. 1960 InsertValueInst(Value *Agg, Value *Val, 1961 unsigned Idx, const Twine &NameStr = "", 1962 Instruction *InsertBefore = nullptr); 1963 InsertValueInst(Value *Agg, Value *Val, unsigned Idx, 1964 const Twine &NameStr, BasicBlock *InsertAtEnd); 1965 protected: 1966 InsertValueInst *clone_impl() const override; 1967 public: 1968 // allocate space for exactly two operands 1969 void *operator new(size_t s) { 1970 return User::operator new(s, 2); 1971 } 1972 1973 static InsertValueInst *Create(Value *Agg, Value *Val, 1974 ArrayRef<unsigned> Idxs, 1975 const Twine &NameStr = "", 1976 Instruction *InsertBefore = nullptr) { 1977 return new InsertValueInst(Agg, Val, Idxs, NameStr, InsertBefore); 1978 } 1979 static InsertValueInst *Create(Value *Agg, Value *Val, 1980 ArrayRef<unsigned> Idxs, 1981 const Twine &NameStr, 1982 BasicBlock *InsertAtEnd) { 1983 return new InsertValueInst(Agg, Val, Idxs, NameStr, InsertAtEnd); 1984 } 1985 1986 /// Transparently provide more efficient getOperand methods. 1987 DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value); 1988 1989 typedef const unsigned* idx_iterator; 1990 inline idx_iterator idx_begin() const { return Indices.begin(); } 1991 inline idx_iterator idx_end() const { return Indices.end(); } 1992 1993 Value *getAggregateOperand() { 1994 return getOperand(0); 1995 } 1996 const Value *getAggregateOperand() const { 1997 return getOperand(0); 1998 } 1999 static unsigned getAggregateOperandIndex() { 2000 return 0U; // get index for modifying correct operand 2001 } 2002 2003 Value *getInsertedValueOperand() { 2004 return getOperand(1); 2005 } 2006 const Value *getInsertedValueOperand() const { 2007 return getOperand(1); 2008 } 2009 static unsigned getInsertedValueOperandIndex() { 2010 return 1U; // get index for modifying correct operand 2011 } 2012 2013 ArrayRef<unsigned> getIndices() const { 2014 return Indices; 2015 } 2016 2017 unsigned getNumIndices() const { 2018 return (unsigned)Indices.size(); 2019 } 2020 2021 bool hasIndices() const { 2022 return true; 2023 } 2024 2025 // Methods for support type inquiry through isa, cast, and dyn_cast: 2026 static inline bool classof(const Instruction *I) { 2027 return I->getOpcode() == Instruction::InsertValue; 2028 } 2029 static inline bool classof(const Value *V) { 2030 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 2031 } 2032 }; 2033 2034 template <> 2035 struct OperandTraits<InsertValueInst> : 2036 public FixedNumOperandTraits<InsertValueInst, 2> { 2037 }; 2038 2039 InsertValueInst::InsertValueInst(Value *Agg, 2040 Value *Val, 2041 ArrayRef<unsigned> Idxs, 2042 const Twine &NameStr, 2043 Instruction *InsertBefore) 2044 : Instruction(Agg->getType(), InsertValue, 2045 OperandTraits<InsertValueInst>::op_begin(this), 2046 2, InsertBefore) { 2047 init(Agg, Val, Idxs, NameStr); 2048 } 2049 InsertValueInst::InsertValueInst(Value *Agg, 2050 Value *Val, 2051 ArrayRef<unsigned> Idxs, 2052 const Twine &NameStr, 2053 BasicBlock *InsertAtEnd) 2054 : Instruction(Agg->getType(), InsertValue, 2055 OperandTraits<InsertValueInst>::op_begin(this), 2056 2, InsertAtEnd) { 2057 init(Agg, Val, Idxs, NameStr); 2058 } 2059 2060 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(InsertValueInst, Value) 2061 2062 //===----------------------------------------------------------------------===// 2063 // PHINode Class 2064 //===----------------------------------------------------------------------===// 2065 2066 // PHINode - The PHINode class is used to represent the magical mystical PHI 2067 // node, that can not exist in nature, but can be synthesized in a computer 2068 // scientist's overactive imagination. 2069 // 2070 class PHINode : public Instruction { 2071 void *operator new(size_t, unsigned) LLVM_DELETED_FUNCTION; 2072 /// ReservedSpace - The number of operands actually allocated. NumOperands is 2073 /// the number actually in use. 2074 unsigned ReservedSpace; 2075 PHINode(const PHINode &PN); 2076 // allocate space for exactly zero operands 2077 void *operator new(size_t s) { 2078 return User::operator new(s, 0); 2079 } 2080 explicit PHINode(Type *Ty, unsigned NumReservedValues, 2081 const Twine &NameStr = "", 2082 Instruction *InsertBefore = nullptr) 2083 : Instruction(Ty, Instruction::PHI, nullptr, 0, InsertBefore), 2084 ReservedSpace(NumReservedValues) { 2085 setName(NameStr); 2086 OperandList = allocHungoffUses(ReservedSpace); 2087 } 2088 2089 PHINode(Type *Ty, unsigned NumReservedValues, const Twine &NameStr, 2090 BasicBlock *InsertAtEnd) 2091 : Instruction(Ty, Instruction::PHI, nullptr, 0, InsertAtEnd), 2092 ReservedSpace(NumReservedValues) { 2093 setName(NameStr); 2094 OperandList = allocHungoffUses(ReservedSpace); 2095 } 2096 protected: 2097 // allocHungoffUses - this is more complicated than the generic 2098 // User::allocHungoffUses, because we have to allocate Uses for the incoming 2099 // values and pointers to the incoming blocks, all in one allocation. 2100 Use *allocHungoffUses(unsigned) const; 2101 2102 PHINode *clone_impl() const override; 2103 public: 2104 /// Constructors - NumReservedValues is a hint for the number of incoming 2105 /// edges that this phi node will have (use 0 if you really have no idea). 2106 static PHINode *Create(Type *Ty, unsigned NumReservedValues, 2107 const Twine &NameStr = "", 2108 Instruction *InsertBefore = nullptr) { 2109 return new PHINode(Ty, NumReservedValues, NameStr, InsertBefore); 2110 } 2111 static PHINode *Create(Type *Ty, unsigned NumReservedValues, 2112 const Twine &NameStr, BasicBlock *InsertAtEnd) { 2113 return new PHINode(Ty, NumReservedValues, NameStr, InsertAtEnd); 2114 } 2115 ~PHINode(); 2116 2117 /// Provide fast operand accessors 2118 DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value); 2119 2120 // Block iterator interface. This provides access to the list of incoming 2121 // basic blocks, which parallels the list of incoming values. 2122 2123 typedef BasicBlock **block_iterator; 2124 typedef BasicBlock * const *const_block_iterator; 2125 2126 block_iterator block_begin() { 2127 Use::UserRef *ref = 2128 reinterpret_cast<Use::UserRef*>(op_begin() + ReservedSpace); 2129 return reinterpret_cast<block_iterator>(ref + 1); 2130 } 2131 2132 const_block_iterator block_begin() const { 2133 const Use::UserRef *ref = 2134 reinterpret_cast<const Use::UserRef*>(op_begin() + ReservedSpace); 2135 return reinterpret_cast<const_block_iterator>(ref + 1); 2136 } 2137 2138 block_iterator block_end() { 2139 return block_begin() + getNumOperands(); 2140 } 2141 2142 const_block_iterator block_end() const { 2143 return block_begin() + getNumOperands(); 2144 } 2145 2146 /// getNumIncomingValues - Return the number of incoming edges 2147 /// 2148 unsigned getNumIncomingValues() const { return getNumOperands(); } 2149 2150 /// getIncomingValue - Return incoming value number x 2151 /// 2152 Value *getIncomingValue(unsigned i) const { 2153 return getOperand(i); 2154 } 2155 void setIncomingValue(unsigned i, Value *V) { 2156 setOperand(i, V); 2157 } 2158 static unsigned getOperandNumForIncomingValue(unsigned i) { 2159 return i; 2160 } 2161 static unsigned getIncomingValueNumForOperand(unsigned i) { 2162 return i; 2163 } 2164 2165 /// getIncomingBlock - Return incoming basic block number @p i. 2166 /// 2167 BasicBlock *getIncomingBlock(unsigned i) const { 2168 return block_begin()[i]; 2169 } 2170 2171 /// getIncomingBlock - Return incoming basic block corresponding 2172 /// to an operand of the PHI. 2173 /// 2174 BasicBlock *getIncomingBlock(const Use &U) const { 2175 assert(this == U.getUser() && "Iterator doesn't point to PHI's Uses?"); 2176 return getIncomingBlock(unsigned(&U - op_begin())); 2177 } 2178 2179 /// getIncomingBlock - Return incoming basic block corresponding 2180 /// to value use iterator. 2181 /// 2182 BasicBlock *getIncomingBlock(Value::const_user_iterator I) const { 2183 return getIncomingBlock(I.getUse()); 2184 } 2185 2186 void setIncomingBlock(unsigned i, BasicBlock *BB) { 2187 block_begin()[i] = BB; 2188 } 2189 2190 /// addIncoming - Add an incoming value to the end of the PHI list 2191 /// 2192 void addIncoming(Value *V, BasicBlock *BB) { 2193 assert(V && "PHI node got a null value!"); 2194 assert(BB && "PHI node got a null basic block!"); 2195 assert(getType() == V->getType() && 2196 "All operands to PHI node must be the same type as the PHI node!"); 2197 if (NumOperands == ReservedSpace) 2198 growOperands(); // Get more space! 2199 // Initialize some new operands. 2200 ++NumOperands; 2201 setIncomingValue(NumOperands - 1, V); 2202 setIncomingBlock(NumOperands - 1, BB); 2203 } 2204 2205 /// removeIncomingValue - Remove an incoming value. This is useful if a 2206 /// predecessor basic block is deleted. The value removed is returned. 2207 /// 2208 /// If the last incoming value for a PHI node is removed (and DeletePHIIfEmpty 2209 /// is true), the PHI node is destroyed and any uses of it are replaced with 2210 /// dummy values. The only time there should be zero incoming values to a PHI 2211 /// node is when the block is dead, so this strategy is sound. 2212 /// 2213 Value *removeIncomingValue(unsigned Idx, bool DeletePHIIfEmpty = true); 2214 2215 Value *removeIncomingValue(const BasicBlock *BB, bool DeletePHIIfEmpty=true) { 2216 int Idx = getBasicBlockIndex(BB); 2217 assert(Idx >= 0 && "Invalid basic block argument to remove!"); 2218 return removeIncomingValue(Idx, DeletePHIIfEmpty); 2219 } 2220 2221 /// getBasicBlockIndex - Return the first index of the specified basic 2222 /// block in the value list for this PHI. Returns -1 if no instance. 2223 /// 2224 int getBasicBlockIndex(const BasicBlock *BB) const { 2225 for (unsigned i = 0, e = getNumOperands(); i != e; ++i) 2226 if (block_begin()[i] == BB) 2227 return i; 2228 return -1; 2229 } 2230 2231 Value *getIncomingValueForBlock(const BasicBlock *BB) const { 2232 int Idx = getBasicBlockIndex(BB); 2233 assert(Idx >= 0 && "Invalid basic block argument!"); 2234 return getIncomingValue(Idx); 2235 } 2236 2237 /// hasConstantValue - If the specified PHI node always merges together the 2238 /// same value, return the value, otherwise return null. 2239 Value *hasConstantValue() const; 2240 2241 /// Methods for support type inquiry through isa, cast, and dyn_cast: 2242 static inline bool classof(const Instruction *I) { 2243 return I->getOpcode() == Instruction::PHI; 2244 } 2245 static inline bool classof(const Value *V) { 2246 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 2247 } 2248 private: 2249 void growOperands(); 2250 }; 2251 2252 template <> 2253 struct OperandTraits<PHINode> : public HungoffOperandTraits<2> { 2254 }; 2255 2256 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(PHINode, Value) 2257 2258 //===----------------------------------------------------------------------===// 2259 // LandingPadInst Class 2260 //===----------------------------------------------------------------------===// 2261 2262 //===--------------------------------------------------------------------------- 2263 /// LandingPadInst - The landingpad instruction holds all of the information 2264 /// necessary to generate correct exception handling. The landingpad instruction 2265 /// cannot be moved from the top of a landing pad block, which itself is 2266 /// accessible only from the 'unwind' edge of an invoke. This uses the 2267 /// SubclassData field in Value to store whether or not the landingpad is a 2268 /// cleanup. 2269 /// 2270 class LandingPadInst : public Instruction { 2271 /// ReservedSpace - The number of operands actually allocated. NumOperands is 2272 /// the number actually in use. 2273 unsigned ReservedSpace; 2274 LandingPadInst(const LandingPadInst &LP); 2275 public: 2276 enum ClauseType { Catch, Filter }; 2277 private: 2278 void *operator new(size_t, unsigned) LLVM_DELETED_FUNCTION; 2279 // Allocate space for exactly zero operands. 2280 void *operator new(size_t s) { 2281 return User::operator new(s, 0); 2282 } 2283 void growOperands(unsigned Size); 2284 void init(Value *PersFn, unsigned NumReservedValues, const Twine &NameStr); 2285 2286 explicit LandingPadInst(Type *RetTy, Value *PersonalityFn, 2287 unsigned NumReservedValues, const Twine &NameStr, 2288 Instruction *InsertBefore); 2289 explicit LandingPadInst(Type *RetTy, Value *PersonalityFn, 2290 unsigned NumReservedValues, const Twine &NameStr, 2291 BasicBlock *InsertAtEnd); 2292 protected: 2293 LandingPadInst *clone_impl() const override; 2294 public: 2295 /// Constructors - NumReservedClauses is a hint for the number of incoming 2296 /// clauses that this landingpad will have (use 0 if you really have no idea). 2297 static LandingPadInst *Create(Type *RetTy, Value *PersonalityFn, 2298 unsigned NumReservedClauses, 2299 const Twine &NameStr = "", 2300 Instruction *InsertBefore = nullptr); 2301 static LandingPadInst *Create(Type *RetTy, Value *PersonalityFn, 2302 unsigned NumReservedClauses, 2303 const Twine &NameStr, BasicBlock *InsertAtEnd); 2304 ~LandingPadInst(); 2305 2306 /// Provide fast operand accessors 2307 DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value); 2308 2309 /// getPersonalityFn - Get the personality function associated with this 2310 /// landing pad. 2311 Value *getPersonalityFn() const { return getOperand(0); } 2312 2313 /// isCleanup - Return 'true' if this landingpad instruction is a 2314 /// cleanup. I.e., it should be run when unwinding even if its landing pad 2315 /// doesn't catch the exception. 2316 bool isCleanup() const { return getSubclassDataFromInstruction() & 1; } 2317 2318 /// setCleanup - Indicate that this landingpad instruction is a cleanup. 2319 void setCleanup(bool V) { 2320 setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) | 2321 (V ? 1 : 0)); 2322 } 2323 2324 /// Add a catch or filter clause to the landing pad. 2325 void addClause(Constant *ClauseVal); 2326 2327 /// Get the value of the clause at index Idx. Use isCatch/isFilter to 2328 /// determine what type of clause this is. 2329 Constant *getClause(unsigned Idx) const { 2330 return cast<Constant>(OperandList[Idx + 1]); 2331 } 2332 2333 /// isCatch - Return 'true' if the clause and index Idx is a catch clause. 2334 bool isCatch(unsigned Idx) const { 2335 return !isa<ArrayType>(OperandList[Idx + 1]->getType()); 2336 } 2337 2338 /// isFilter - Return 'true' if the clause and index Idx is a filter clause. 2339 bool isFilter(unsigned Idx) const { 2340 return isa<ArrayType>(OperandList[Idx + 1]->getType()); 2341 } 2342 2343 /// getNumClauses - Get the number of clauses for this landing pad. 2344 unsigned getNumClauses() const { return getNumOperands() - 1; } 2345 2346 /// reserveClauses - Grow the size of the operand list to accommodate the new 2347 /// number of clauses. 2348 void reserveClauses(unsigned Size) { growOperands(Size); } 2349 2350 // Methods for support type inquiry through isa, cast, and dyn_cast: 2351 static inline bool classof(const Instruction *I) { 2352 return I->getOpcode() == Instruction::LandingPad; 2353 } 2354 static inline bool classof(const Value *V) { 2355 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 2356 } 2357 }; 2358 2359 template <> 2360 struct OperandTraits<LandingPadInst> : public HungoffOperandTraits<2> { 2361 }; 2362 2363 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(LandingPadInst, Value) 2364 2365 //===----------------------------------------------------------------------===// 2366 // ReturnInst Class 2367 //===----------------------------------------------------------------------===// 2368 2369 //===--------------------------------------------------------------------------- 2370 /// ReturnInst - Return a value (possibly void), from a function. Execution 2371 /// does not continue in this function any longer. 2372 /// 2373 class ReturnInst : public TerminatorInst { 2374 ReturnInst(const ReturnInst &RI); 2375 2376 private: 2377 // ReturnInst constructors: 2378 // ReturnInst() - 'ret void' instruction 2379 // ReturnInst( null) - 'ret void' instruction 2380 // ReturnInst(Value* X) - 'ret X' instruction 2381 // ReturnInst( null, Inst *I) - 'ret void' instruction, insert before I 2382 // ReturnInst(Value* X, Inst *I) - 'ret X' instruction, insert before I 2383 // ReturnInst( null, BB *B) - 'ret void' instruction, insert @ end of B 2384 // ReturnInst(Value* X, BB *B) - 'ret X' instruction, insert @ end of B 2385 // 2386 // NOTE: If the Value* passed is of type void then the constructor behaves as 2387 // if it was passed NULL. 2388 explicit ReturnInst(LLVMContext &C, Value *retVal = nullptr, 2389 Instruction *InsertBefore = nullptr); 2390 ReturnInst(LLVMContext &C, Value *retVal, BasicBlock *InsertAtEnd); 2391 explicit ReturnInst(LLVMContext &C, BasicBlock *InsertAtEnd); 2392 protected: 2393 ReturnInst *clone_impl() const override; 2394 public: 2395 static ReturnInst* Create(LLVMContext &C, Value *retVal = nullptr, 2396 Instruction *InsertBefore = nullptr) { 2397 return new(!!retVal) ReturnInst(C, retVal, InsertBefore); 2398 } 2399 static ReturnInst* Create(LLVMContext &C, Value *retVal, 2400 BasicBlock *InsertAtEnd) { 2401 return new(!!retVal) ReturnInst(C, retVal, InsertAtEnd); 2402 } 2403 static ReturnInst* Create(LLVMContext &C, BasicBlock *InsertAtEnd) { 2404 return new(0) ReturnInst(C, InsertAtEnd); 2405 } 2406 virtual ~ReturnInst(); 2407 2408 /// Provide fast operand accessors 2409 DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value); 2410 2411 /// Convenience accessor. Returns null if there is no return value. 2412 Value *getReturnValue() const { 2413 return getNumOperands() != 0 ? getOperand(0) : nullptr; 2414 } 2415 2416 unsigned getNumSuccessors() const { return 0; } 2417 2418 // Methods for support type inquiry through isa, cast, and dyn_cast: 2419 static inline bool classof(const Instruction *I) { 2420 return (I->getOpcode() == Instruction::Ret); 2421 } 2422 static inline bool classof(const Value *V) { 2423 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 2424 } 2425 private: 2426 BasicBlock *getSuccessorV(unsigned idx) const override; 2427 unsigned getNumSuccessorsV() const override; 2428 void setSuccessorV(unsigned idx, BasicBlock *B) override; 2429 }; 2430 2431 template <> 2432 struct OperandTraits<ReturnInst> : public VariadicOperandTraits<ReturnInst> { 2433 }; 2434 2435 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(ReturnInst, Value) 2436 2437 //===----------------------------------------------------------------------===// 2438 // BranchInst Class 2439 //===----------------------------------------------------------------------===// 2440 2441 //===--------------------------------------------------------------------------- 2442 /// BranchInst - Conditional or Unconditional Branch instruction. 2443 /// 2444 class BranchInst : public TerminatorInst { 2445 /// Ops list - Branches are strange. The operands are ordered: 2446 /// [Cond, FalseDest,] TrueDest. This makes some accessors faster because 2447 /// they don't have to check for cond/uncond branchness. These are mostly 2448 /// accessed relative from op_end(). 2449 BranchInst(const BranchInst &BI); 2450 void AssertOK(); 2451 // BranchInst constructors (where {B, T, F} are blocks, and C is a condition): 2452 // BranchInst(BB *B) - 'br B' 2453 // BranchInst(BB* T, BB *F, Value *C) - 'br C, T, F' 2454 // BranchInst(BB* B, Inst *I) - 'br B' insert before I 2455 // BranchInst(BB* T, BB *F, Value *C, Inst *I) - 'br C, T, F', insert before I 2456 // BranchInst(BB* B, BB *I) - 'br B' insert at end 2457 // BranchInst(BB* T, BB *F, Value *C, BB *I) - 'br C, T, F', insert at end 2458 explicit BranchInst(BasicBlock *IfTrue, Instruction *InsertBefore = nullptr); 2459 BranchInst(BasicBlock *IfTrue, BasicBlock *IfFalse, Value *Cond, 2460 Instruction *InsertBefore = nullptr); 2461 BranchInst(BasicBlock *IfTrue, BasicBlock *InsertAtEnd); 2462 BranchInst(BasicBlock *IfTrue, BasicBlock *IfFalse, Value *Cond, 2463 BasicBlock *InsertAtEnd); 2464 protected: 2465 BranchInst *clone_impl() const override; 2466 public: 2467 static BranchInst *Create(BasicBlock *IfTrue, 2468 Instruction *InsertBefore = nullptr) { 2469 return new(1) BranchInst(IfTrue, InsertBefore); 2470 } 2471 static BranchInst *Create(BasicBlock *IfTrue, BasicBlock *IfFalse, 2472 Value *Cond, Instruction *InsertBefore = nullptr) { 2473 return new(3) BranchInst(IfTrue, IfFalse, Cond, InsertBefore); 2474 } 2475 static BranchInst *Create(BasicBlock *IfTrue, BasicBlock *InsertAtEnd) { 2476 return new(1) BranchInst(IfTrue, InsertAtEnd); 2477 } 2478 static BranchInst *Create(BasicBlock *IfTrue, BasicBlock *IfFalse, 2479 Value *Cond, BasicBlock *InsertAtEnd) { 2480 return new(3) BranchInst(IfTrue, IfFalse, Cond, InsertAtEnd); 2481 } 2482 2483 /// Transparently provide more efficient getOperand methods. 2484 DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value); 2485 2486 bool isUnconditional() const { return getNumOperands() == 1; } 2487 bool isConditional() const { return getNumOperands() == 3; } 2488 2489 Value *getCondition() const { 2490 assert(isConditional() && "Cannot get condition of an uncond branch!"); 2491 return Op<-3>(); 2492 } 2493 2494 void setCondition(Value *V) { 2495 assert(isConditional() && "Cannot set condition of unconditional branch!"); 2496 Op<-3>() = V; 2497 } 2498 2499 unsigned getNumSuccessors() const { return 1+isConditional(); } 2500 2501 BasicBlock *getSuccessor(unsigned i) const { 2502 assert(i < getNumSuccessors() && "Successor # out of range for Branch!"); 2503 return cast_or_null<BasicBlock>((&Op<-1>() - i)->get()); 2504 } 2505 2506 void setSuccessor(unsigned idx, BasicBlock *NewSucc) { 2507 assert(idx < getNumSuccessors() && "Successor # out of range for Branch!"); 2508 *(&Op<-1>() - idx) = (Value*)NewSucc; 2509 } 2510 2511 /// \brief Swap the successors of this branch instruction. 2512 /// 2513 /// Swaps the successors of the branch instruction. This also swaps any 2514 /// branch weight metadata associated with the instruction so that it 2515 /// continues to map correctly to each operand. 2516 void swapSuccessors(); 2517 2518 // Methods for support type inquiry through isa, cast, and dyn_cast: 2519 static inline bool classof(const Instruction *I) { 2520 return (I->getOpcode() == Instruction::Br); 2521 } 2522 static inline bool classof(const Value *V) { 2523 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 2524 } 2525 private: 2526 BasicBlock *getSuccessorV(unsigned idx) const override; 2527 unsigned getNumSuccessorsV() const override; 2528 void setSuccessorV(unsigned idx, BasicBlock *B) override; 2529 }; 2530 2531 template <> 2532 struct OperandTraits<BranchInst> : public VariadicOperandTraits<BranchInst, 1> { 2533 }; 2534 2535 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(BranchInst, Value) 2536 2537 //===----------------------------------------------------------------------===// 2538 // SwitchInst Class 2539 //===----------------------------------------------------------------------===// 2540 2541 //===--------------------------------------------------------------------------- 2542 /// SwitchInst - Multiway switch 2543 /// 2544 class SwitchInst : public TerminatorInst { 2545 void *operator new(size_t, unsigned) LLVM_DELETED_FUNCTION; 2546 unsigned ReservedSpace; 2547 // Operand[0] = Value to switch on 2548 // Operand[1] = Default basic block destination 2549 // Operand[2n ] = Value to match 2550 // Operand[2n+1] = BasicBlock to go to on match 2551 SwitchInst(const SwitchInst &SI); 2552 void init(Value *Value, BasicBlock *Default, unsigned NumReserved); 2553 void growOperands(); 2554 // allocate space for exactly zero operands 2555 void *operator new(size_t s) { 2556 return User::operator new(s, 0); 2557 } 2558 /// SwitchInst ctor - Create a new switch instruction, specifying a value to 2559 /// switch on and a default destination. The number of additional cases can 2560 /// be specified here to make memory allocation more efficient. This 2561 /// constructor can also autoinsert before another instruction. 2562 SwitchInst(Value *Value, BasicBlock *Default, unsigned NumCases, 2563 Instruction *InsertBefore); 2564 2565 /// SwitchInst ctor - Create a new switch instruction, specifying a value to 2566 /// switch on and a default destination. The number of additional cases can 2567 /// be specified here to make memory allocation more efficient. This 2568 /// constructor also autoinserts at the end of the specified BasicBlock. 2569 SwitchInst(Value *Value, BasicBlock *Default, unsigned NumCases, 2570 BasicBlock *InsertAtEnd); 2571 protected: 2572 SwitchInst *clone_impl() const override; 2573 public: 2574 2575 // -2 2576 static const unsigned DefaultPseudoIndex = static_cast<unsigned>(~0L-1); 2577 2578 template <class SwitchInstTy, class ConstantIntTy, class BasicBlockTy> 2579 class CaseIteratorT { 2580 protected: 2581 2582 SwitchInstTy *SI; 2583 unsigned Index; 2584 2585 public: 2586 2587 typedef CaseIteratorT<SwitchInstTy, ConstantIntTy, BasicBlockTy> Self; 2588 2589 /// Initializes case iterator for given SwitchInst and for given 2590 /// case number. 2591 CaseIteratorT(SwitchInstTy *SI, unsigned CaseNum) { 2592 this->SI = SI; 2593 Index = CaseNum; 2594 } 2595 2596 /// Initializes case iterator for given SwitchInst and for given 2597 /// TerminatorInst's successor index. 2598 static Self fromSuccessorIndex(SwitchInstTy *SI, unsigned SuccessorIndex) { 2599 assert(SuccessorIndex < SI->getNumSuccessors() && 2600 "Successor index # out of range!"); 2601 return SuccessorIndex != 0 ? 2602 Self(SI, SuccessorIndex - 1) : 2603 Self(SI, DefaultPseudoIndex); 2604 } 2605 2606 /// Resolves case value for current case. 2607 ConstantIntTy *getCaseValue() { 2608 assert(Index < SI->getNumCases() && "Index out the number of cases."); 2609 return reinterpret_cast<ConstantIntTy*>(SI->getOperand(2 + Index*2)); 2610 } 2611 2612 /// Resolves successor for current case. 2613 BasicBlockTy *getCaseSuccessor() { 2614 assert((Index < SI->getNumCases() || 2615 Index == DefaultPseudoIndex) && 2616 "Index out the number of cases."); 2617 return SI->getSuccessor(getSuccessorIndex()); 2618 } 2619 2620 /// Returns number of current case. 2621 unsigned getCaseIndex() const { return Index; } 2622 2623 /// Returns TerminatorInst's successor index for current case successor. 2624 unsigned getSuccessorIndex() const { 2625 assert((Index == DefaultPseudoIndex || Index < SI->getNumCases()) && 2626 "Index out the number of cases."); 2627 return Index != DefaultPseudoIndex ? Index + 1 : 0; 2628 } 2629 2630 Self operator++() { 2631 // Check index correctness after increment. 2632 // Note: Index == getNumCases() means end(). 2633 assert(Index+1 <= SI->getNumCases() && "Index out the number of cases."); 2634 ++Index; 2635 return *this; 2636 } 2637 Self operator++(int) { 2638 Self tmp = *this; 2639 ++(*this); 2640 return tmp; 2641 } 2642 Self operator--() { 2643 // Check index correctness after decrement. 2644 // Note: Index == getNumCases() means end(). 2645 // Also allow "-1" iterator here. That will became valid after ++. 2646 assert((Index == 0 || Index-1 <= SI->getNumCases()) && 2647 "Index out the number of cases."); 2648 --Index; 2649 return *this; 2650 } 2651 Self operator--(int) { 2652 Self tmp = *this; 2653 --(*this); 2654 return tmp; 2655 } 2656 bool operator==(const Self& RHS) const { 2657 assert(RHS.SI == SI && "Incompatible operators."); 2658 return RHS.Index == Index; 2659 } 2660 bool operator!=(const Self& RHS) const { 2661 assert(RHS.SI == SI && "Incompatible operators."); 2662 return RHS.Index != Index; 2663 } 2664 Self &operator*() { 2665 return *this; 2666 } 2667 }; 2668 2669 typedef CaseIteratorT<const SwitchInst, const ConstantInt, const BasicBlock> 2670 ConstCaseIt; 2671 2672 class CaseIt : public CaseIteratorT<SwitchInst, ConstantInt, BasicBlock> { 2673 2674 typedef CaseIteratorT<SwitchInst, ConstantInt, BasicBlock> ParentTy; 2675 2676 public: 2677 2678 CaseIt(const ParentTy& Src) : ParentTy(Src) {} 2679 CaseIt(SwitchInst *SI, unsigned CaseNum) : ParentTy(SI, CaseNum) {} 2680 2681 /// Sets the new value for current case. 2682 void setValue(ConstantInt *V) { 2683 assert(Index < SI->getNumCases() && "Index out the number of cases."); 2684 SI->setOperand(2 + Index*2, reinterpret_cast<Value*>(V)); 2685 } 2686 2687 /// Sets the new successor for current case. 2688 void setSuccessor(BasicBlock *S) { 2689 SI->setSuccessor(getSuccessorIndex(), S); 2690 } 2691 }; 2692 2693 static SwitchInst *Create(Value *Value, BasicBlock *Default, 2694 unsigned NumCases, 2695 Instruction *InsertBefore = nullptr) { 2696 return new SwitchInst(Value, Default, NumCases, InsertBefore); 2697 } 2698 static SwitchInst *Create(Value *Value, BasicBlock *Default, 2699 unsigned NumCases, BasicBlock *InsertAtEnd) { 2700 return new SwitchInst(Value, Default, NumCases, InsertAtEnd); 2701 } 2702 2703 ~SwitchInst(); 2704 2705 /// Provide fast operand accessors 2706 DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value); 2707 2708 // Accessor Methods for Switch stmt 2709 Value *getCondition() const { return getOperand(0); } 2710 void setCondition(Value *V) { setOperand(0, V); } 2711 2712 BasicBlock *getDefaultDest() const { 2713 return cast<BasicBlock>(getOperand(1)); 2714 } 2715 2716 void setDefaultDest(BasicBlock *DefaultCase) { 2717 setOperand(1, reinterpret_cast<Value*>(DefaultCase)); 2718 } 2719 2720 /// getNumCases - return the number of 'cases' in this switch instruction, 2721 /// except the default case 2722 unsigned getNumCases() const { 2723 return getNumOperands()/2 - 1; 2724 } 2725 2726 /// Returns a read/write iterator that points to the first 2727 /// case in SwitchInst. 2728 CaseIt case_begin() { 2729 return CaseIt(this, 0); 2730 } 2731 /// Returns a read-only iterator that points to the first 2732 /// case in the SwitchInst. 2733 ConstCaseIt case_begin() const { 2734 return ConstCaseIt(this, 0); 2735 } 2736 2737 /// Returns a read/write iterator that points one past the last 2738 /// in the SwitchInst. 2739 CaseIt case_end() { 2740 return CaseIt(this, getNumCases()); 2741 } 2742 /// Returns a read-only iterator that points one past the last 2743 /// in the SwitchInst. 2744 ConstCaseIt case_end() const { 2745 return ConstCaseIt(this, getNumCases()); 2746 } 2747 2748 /// cases - iteration adapter for range-for loops. 2749 iterator_range<CaseIt> cases() { 2750 return iterator_range<CaseIt>(case_begin(), case_end()); 2751 } 2752 2753 /// cases - iteration adapter for range-for loops. 2754 iterator_range<ConstCaseIt> cases() const { 2755 return iterator_range<ConstCaseIt>(case_begin(), case_end()); 2756 } 2757 2758 /// Returns an iterator that points to the default case. 2759 /// Note: this iterator allows to resolve successor only. Attempt 2760 /// to resolve case value causes an assertion. 2761 /// Also note, that increment and decrement also causes an assertion and 2762 /// makes iterator invalid. 2763 CaseIt case_default() { 2764 return CaseIt(this, DefaultPseudoIndex); 2765 } 2766 ConstCaseIt case_default() const { 2767 return ConstCaseIt(this, DefaultPseudoIndex); 2768 } 2769 2770 /// findCaseValue - Search all of the case values for the specified constant. 2771 /// If it is explicitly handled, return the case iterator of it, otherwise 2772 /// return default case iterator to indicate 2773 /// that it is handled by the default handler. 2774 CaseIt findCaseValue(const ConstantInt *C) { 2775 for (CaseIt i = case_begin(), e = case_end(); i != e; ++i) 2776 if (i.getCaseValue() == C) 2777 return i; 2778 return case_default(); 2779 } 2780 ConstCaseIt findCaseValue(const ConstantInt *C) const { 2781 for (ConstCaseIt i = case_begin(), e = case_end(); i != e; ++i) 2782 if (i.getCaseValue() == C) 2783 return i; 2784 return case_default(); 2785 } 2786 2787 /// findCaseDest - Finds the unique case value for a given successor. Returns 2788 /// null if the successor is not found, not unique, or is the default case. 2789 ConstantInt *findCaseDest(BasicBlock *BB) { 2790 if (BB == getDefaultDest()) return nullptr; 2791 2792 ConstantInt *CI = nullptr; 2793 for (CaseIt i = case_begin(), e = case_end(); i != e; ++i) { 2794 if (i.getCaseSuccessor() == BB) { 2795 if (CI) return nullptr; // Multiple cases lead to BB. 2796 else CI = i.getCaseValue(); 2797 } 2798 } 2799 return CI; 2800 } 2801 2802 /// addCase - Add an entry to the switch instruction... 2803 /// Note: 2804 /// This action invalidates case_end(). Old case_end() iterator will 2805 /// point to the added case. 2806 void addCase(ConstantInt *OnVal, BasicBlock *Dest); 2807 2808 /// removeCase - This method removes the specified case and its successor 2809 /// from the switch instruction. Note that this operation may reorder the 2810 /// remaining cases at index idx and above. 2811 /// Note: 2812 /// This action invalidates iterators for all cases following the one removed, 2813 /// including the case_end() iterator. 2814 void removeCase(CaseIt i); 2815 2816 unsigned getNumSuccessors() const { return getNumOperands()/2; } 2817 BasicBlock *getSuccessor(unsigned idx) const { 2818 assert(idx < getNumSuccessors() &&"Successor idx out of range for switch!"); 2819 return cast<BasicBlock>(getOperand(idx*2+1)); 2820 } 2821 void setSuccessor(unsigned idx, BasicBlock *NewSucc) { 2822 assert(idx < getNumSuccessors() && "Successor # out of range for switch!"); 2823 setOperand(idx*2+1, (Value*)NewSucc); 2824 } 2825 2826 // Methods for support type inquiry through isa, cast, and dyn_cast: 2827 static inline bool classof(const Instruction *I) { 2828 return I->getOpcode() == Instruction::Switch; 2829 } 2830 static inline bool classof(const Value *V) { 2831 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 2832 } 2833 private: 2834 BasicBlock *getSuccessorV(unsigned idx) const override; 2835 unsigned getNumSuccessorsV() const override; 2836 void setSuccessorV(unsigned idx, BasicBlock *B) override; 2837 }; 2838 2839 template <> 2840 struct OperandTraits<SwitchInst> : public HungoffOperandTraits<2> { 2841 }; 2842 2843 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(SwitchInst, Value) 2844 2845 2846 //===----------------------------------------------------------------------===// 2847 // IndirectBrInst Class 2848 //===----------------------------------------------------------------------===// 2849 2850 //===--------------------------------------------------------------------------- 2851 /// IndirectBrInst - Indirect Branch Instruction. 2852 /// 2853 class IndirectBrInst : public TerminatorInst { 2854 void *operator new(size_t, unsigned) LLVM_DELETED_FUNCTION; 2855 unsigned ReservedSpace; 2856 // Operand[0] = Value to switch on 2857 // Operand[1] = Default basic block destination 2858 // Operand[2n ] = Value to match 2859 // Operand[2n+1] = BasicBlock to go to on match 2860 IndirectBrInst(const IndirectBrInst &IBI); 2861 void init(Value *Address, unsigned NumDests); 2862 void growOperands(); 2863 // allocate space for exactly zero operands 2864 void *operator new(size_t s) { 2865 return User::operator new(s, 0); 2866 } 2867 /// IndirectBrInst ctor - Create a new indirectbr instruction, specifying an 2868 /// Address to jump to. The number of expected destinations can be specified 2869 /// here to make memory allocation more efficient. This constructor can also 2870 /// autoinsert before another instruction. 2871 IndirectBrInst(Value *Address, unsigned NumDests, Instruction *InsertBefore); 2872 2873 /// IndirectBrInst ctor - Create a new indirectbr instruction, specifying an 2874 /// Address to jump to. The number of expected destinations can be specified 2875 /// here to make memory allocation more efficient. This constructor also 2876 /// autoinserts at the end of the specified BasicBlock. 2877 IndirectBrInst(Value *Address, unsigned NumDests, BasicBlock *InsertAtEnd); 2878 protected: 2879 IndirectBrInst *clone_impl() const override; 2880 public: 2881 static IndirectBrInst *Create(Value *Address, unsigned NumDests, 2882 Instruction *InsertBefore = nullptr) { 2883 return new IndirectBrInst(Address, NumDests, InsertBefore); 2884 } 2885 static IndirectBrInst *Create(Value *Address, unsigned NumDests, 2886 BasicBlock *InsertAtEnd) { 2887 return new IndirectBrInst(Address, NumDests, InsertAtEnd); 2888 } 2889 ~IndirectBrInst(); 2890 2891 /// Provide fast operand accessors. 2892 DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value); 2893 2894 // Accessor Methods for IndirectBrInst instruction. 2895 Value *getAddress() { return getOperand(0); } 2896 const Value *getAddress() const { return getOperand(0); } 2897 void setAddress(Value *V) { setOperand(0, V); } 2898 2899 2900 /// getNumDestinations - return the number of possible destinations in this 2901 /// indirectbr instruction. 2902 unsigned getNumDestinations() const { return getNumOperands()-1; } 2903 2904 /// getDestination - Return the specified destination. 2905 BasicBlock *getDestination(unsigned i) { return getSuccessor(i); } 2906 const BasicBlock *getDestination(unsigned i) const { return getSuccessor(i); } 2907 2908 /// addDestination - Add a destination. 2909 /// 2910 void addDestination(BasicBlock *Dest); 2911 2912 /// removeDestination - This method removes the specified successor from the 2913 /// indirectbr instruction. 2914 void removeDestination(unsigned i); 2915 2916 unsigned getNumSuccessors() const { return getNumOperands()-1; } 2917 BasicBlock *getSuccessor(unsigned i) const { 2918 return cast<BasicBlock>(getOperand(i+1)); 2919 } 2920 void setSuccessor(unsigned i, BasicBlock *NewSucc) { 2921 setOperand(i+1, (Value*)NewSucc); 2922 } 2923 2924 // Methods for support type inquiry through isa, cast, and dyn_cast: 2925 static inline bool classof(const Instruction *I) { 2926 return I->getOpcode() == Instruction::IndirectBr; 2927 } 2928 static inline bool classof(const Value *V) { 2929 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 2930 } 2931 private: 2932 BasicBlock *getSuccessorV(unsigned idx) const override; 2933 unsigned getNumSuccessorsV() const override; 2934 void setSuccessorV(unsigned idx, BasicBlock *B) override; 2935 }; 2936 2937 template <> 2938 struct OperandTraits<IndirectBrInst> : public HungoffOperandTraits<1> { 2939 }; 2940 2941 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(IndirectBrInst, Value) 2942 2943 2944 //===----------------------------------------------------------------------===// 2945 // InvokeInst Class 2946 //===----------------------------------------------------------------------===// 2947 2948 /// InvokeInst - Invoke instruction. The SubclassData field is used to hold the 2949 /// calling convention of the call. 2950 /// 2951 class InvokeInst : public TerminatorInst { 2952 AttributeSet AttributeList; 2953 InvokeInst(const InvokeInst &BI); 2954 void init(Value *Func, BasicBlock *IfNormal, BasicBlock *IfException, 2955 ArrayRef<Value *> Args, const Twine &NameStr); 2956 2957 /// Construct an InvokeInst given a range of arguments. 2958 /// 2959 /// \brief Construct an InvokeInst from a range of arguments 2960 inline InvokeInst(Value *Func, BasicBlock *IfNormal, BasicBlock *IfException, 2961 ArrayRef<Value *> Args, unsigned Values, 2962 const Twine &NameStr, Instruction *InsertBefore); 2963 2964 /// Construct an InvokeInst given a range of arguments. 2965 /// 2966 /// \brief Construct an InvokeInst from a range of arguments 2967 inline InvokeInst(Value *Func, BasicBlock *IfNormal, BasicBlock *IfException, 2968 ArrayRef<Value *> Args, unsigned Values, 2969 const Twine &NameStr, BasicBlock *InsertAtEnd); 2970 protected: 2971 InvokeInst *clone_impl() const override; 2972 public: 2973 static InvokeInst *Create(Value *Func, 2974 BasicBlock *IfNormal, BasicBlock *IfException, 2975 ArrayRef<Value *> Args, const Twine &NameStr = "", 2976 Instruction *InsertBefore = nullptr) { 2977 unsigned Values = unsigned(Args.size()) + 3; 2978 return new(Values) InvokeInst(Func, IfNormal, IfException, Args, 2979 Values, NameStr, InsertBefore); 2980 } 2981 static InvokeInst *Create(Value *Func, 2982 BasicBlock *IfNormal, BasicBlock *IfException, 2983 ArrayRef<Value *> Args, const Twine &NameStr, 2984 BasicBlock *InsertAtEnd) { 2985 unsigned Values = unsigned(Args.size()) + 3; 2986 return new(Values) InvokeInst(Func, IfNormal, IfException, Args, 2987 Values, NameStr, InsertAtEnd); 2988 } 2989 2990 /// Provide fast operand accessors 2991 DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value); 2992 2993 /// getNumArgOperands - Return the number of invoke arguments. 2994 /// 2995 unsigned getNumArgOperands() const { return getNumOperands() - 3; } 2996 2997 /// getArgOperand/setArgOperand - Return/set the i-th invoke argument. 2998 /// 2999 Value *getArgOperand(unsigned i) const { return getOperand(i); } 3000 void setArgOperand(unsigned i, Value *v) { setOperand(i, v); } 3001 3002 /// arg_operands - iteration adapter for range-for loops. 3003 iterator_range<op_iterator> arg_operands() { 3004 return iterator_range<op_iterator>(op_begin(), op_end() - 3); 3005 } 3006 3007 /// arg_operands - iteration adapter for range-for loops. 3008 iterator_range<const_op_iterator> arg_operands() const { 3009 return iterator_range<const_op_iterator>(op_begin(), op_end() - 3); 3010 } 3011 3012 /// \brief Wrappers for getting the \c Use of a invoke argument. 3013 const Use &getArgOperandUse(unsigned i) const { return getOperandUse(i); } 3014 Use &getArgOperandUse(unsigned i) { return getOperandUse(i); } 3015 3016 /// getCallingConv/setCallingConv - Get or set the calling convention of this 3017 /// function call. 3018 CallingConv::ID getCallingConv() const { 3019 return static_cast<CallingConv::ID>(getSubclassDataFromInstruction()); 3020 } 3021 void setCallingConv(CallingConv::ID CC) { 3022 setInstructionSubclassData(static_cast<unsigned>(CC)); 3023 } 3024 3025 /// getAttributes - Return the parameter attributes for this invoke. 3026 /// 3027 const AttributeSet &getAttributes() const { return AttributeList; } 3028 3029 /// setAttributes - Set the parameter attributes for this invoke. 3030 /// 3031 void setAttributes(const AttributeSet &Attrs) { AttributeList = Attrs; } 3032 3033 /// addAttribute - adds the attribute to the list of attributes. 3034 void addAttribute(unsigned i, Attribute::AttrKind attr); 3035 3036 /// removeAttribute - removes the attribute from the list of attributes. 3037 void removeAttribute(unsigned i, Attribute attr); 3038 3039 /// \brief Determine whether this call has the given attribute. 3040 bool hasFnAttr(Attribute::AttrKind A) const { 3041 assert(A != Attribute::NoBuiltin && 3042 "Use CallInst::isNoBuiltin() to check for Attribute::NoBuiltin"); 3043 return hasFnAttrImpl(A); 3044 } 3045 3046 /// \brief Determine whether the call or the callee has the given attributes. 3047 bool paramHasAttr(unsigned i, Attribute::AttrKind A) const; 3048 3049 /// \brief Extract the alignment for a call or parameter (0=unknown). 3050 unsigned getParamAlignment(unsigned i) const { 3051 return AttributeList.getParamAlignment(i); 3052 } 3053 3054 /// \brief Return true if the call should not be treated as a call to a 3055 /// builtin. 3056 bool isNoBuiltin() const { 3057 // We assert in hasFnAttr if one passes in Attribute::NoBuiltin, so we have 3058 // to check it by hand. 3059 return hasFnAttrImpl(Attribute::NoBuiltin) && 3060 !hasFnAttrImpl(Attribute::Builtin); 3061 } 3062 3063 /// \brief Return true if the call should not be inlined. 3064 bool isNoInline() const { return hasFnAttr(Attribute::NoInline); } 3065 void setIsNoInline() { 3066 addAttribute(AttributeSet::FunctionIndex, Attribute::NoInline); 3067 } 3068 3069 /// \brief Determine if the call does not access memory. 3070 bool doesNotAccessMemory() const { 3071 return hasFnAttr(Attribute::ReadNone); 3072 } 3073 void setDoesNotAccessMemory() { 3074 addAttribute(AttributeSet::FunctionIndex, Attribute::ReadNone); 3075 } 3076 3077 /// \brief Determine if the call does not access or only reads memory. 3078 bool onlyReadsMemory() const { 3079 return doesNotAccessMemory() || hasFnAttr(Attribute::ReadOnly); 3080 } 3081 void setOnlyReadsMemory() { 3082 addAttribute(AttributeSet::FunctionIndex, Attribute::ReadOnly); 3083 } 3084 3085 /// \brief Determine if the call cannot return. 3086 bool doesNotReturn() const { return hasFnAttr(Attribute::NoReturn); } 3087 void setDoesNotReturn() { 3088 addAttribute(AttributeSet::FunctionIndex, Attribute::NoReturn); 3089 } 3090 3091 /// \brief Determine if the call cannot unwind. 3092 bool doesNotThrow() const { return hasFnAttr(Attribute::NoUnwind); } 3093 void setDoesNotThrow() { 3094 addAttribute(AttributeSet::FunctionIndex, Attribute::NoUnwind); 3095 } 3096 3097 /// \brief Determine if the invoke cannot be duplicated. 3098 bool cannotDuplicate() const {return hasFnAttr(Attribute::NoDuplicate); } 3099 void setCannotDuplicate() { 3100 addAttribute(AttributeSet::FunctionIndex, Attribute::NoDuplicate); 3101 } 3102 3103 /// \brief Determine if the call returns a structure through first 3104 /// pointer argument. 3105 bool hasStructRetAttr() const { 3106 // Be friendly and also check the callee. 3107 return paramHasAttr(1, Attribute::StructRet); 3108 } 3109 3110 /// \brief Determine if any call argument is an aggregate passed by value. 3111 bool hasByValArgument() const { 3112 return AttributeList.hasAttrSomewhere(Attribute::ByVal); 3113 } 3114 3115 /// getCalledFunction - Return the function called, or null if this is an 3116 /// indirect function invocation. 3117 /// 3118 Function *getCalledFunction() const { 3119 return dyn_cast<Function>(Op<-3>()); 3120 } 3121 3122 /// getCalledValue - Get a pointer to the function that is invoked by this 3123 /// instruction 3124 const Value *getCalledValue() const { return Op<-3>(); } 3125 Value *getCalledValue() { return Op<-3>(); } 3126 3127 /// setCalledFunction - Set the function called. 3128 void setCalledFunction(Value* Fn) { 3129 Op<-3>() = Fn; 3130 } 3131 3132 // get*Dest - Return the destination basic blocks... 3133 BasicBlock *getNormalDest() const { 3134 return cast<BasicBlock>(Op<-2>()); 3135 } 3136 BasicBlock *getUnwindDest() const { 3137 return cast<BasicBlock>(Op<-1>()); 3138 } 3139 void setNormalDest(BasicBlock *B) { 3140 Op<-2>() = reinterpret_cast<Value*>(B); 3141 } 3142 void setUnwindDest(BasicBlock *B) { 3143 Op<-1>() = reinterpret_cast<Value*>(B); 3144 } 3145 3146 /// getLandingPadInst - Get the landingpad instruction from the landing pad 3147 /// block (the unwind destination). 3148 LandingPadInst *getLandingPadInst() const; 3149 3150 BasicBlock *getSuccessor(unsigned i) const { 3151 assert(i < 2 && "Successor # out of range for invoke!"); 3152 return i == 0 ? getNormalDest() : getUnwindDest(); 3153 } 3154 3155 void setSuccessor(unsigned idx, BasicBlock *NewSucc) { 3156 assert(idx < 2 && "Successor # out of range for invoke!"); 3157 *(&Op<-2>() + idx) = reinterpret_cast<Value*>(NewSucc); 3158 } 3159 3160 unsigned getNumSuccessors() const { return 2; } 3161 3162 // Methods for support type inquiry through isa, cast, and dyn_cast: 3163 static inline bool classof(const Instruction *I) { 3164 return (I->getOpcode() == Instruction::Invoke); 3165 } 3166 static inline bool classof(const Value *V) { 3167 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 3168 } 3169 3170 private: 3171 BasicBlock *getSuccessorV(unsigned idx) const override; 3172 unsigned getNumSuccessorsV() const override; 3173 void setSuccessorV(unsigned idx, BasicBlock *B) override; 3174 3175 bool hasFnAttrImpl(Attribute::AttrKind A) const; 3176 3177 // Shadow Instruction::setInstructionSubclassData with a private forwarding 3178 // method so that subclasses cannot accidentally use it. 3179 void setInstructionSubclassData(unsigned short D) { 3180 Instruction::setInstructionSubclassData(D); 3181 } 3182 }; 3183 3184 template <> 3185 struct OperandTraits<InvokeInst> : public VariadicOperandTraits<InvokeInst, 3> { 3186 }; 3187 3188 InvokeInst::InvokeInst(Value *Func, 3189 BasicBlock *IfNormal, BasicBlock *IfException, 3190 ArrayRef<Value *> Args, unsigned Values, 3191 const Twine &NameStr, Instruction *InsertBefore) 3192 : TerminatorInst(cast<FunctionType>(cast<PointerType>(Func->getType()) 3193 ->getElementType())->getReturnType(), 3194 Instruction::Invoke, 3195 OperandTraits<InvokeInst>::op_end(this) - Values, 3196 Values, InsertBefore) { 3197 init(Func, IfNormal, IfException, Args, NameStr); 3198 } 3199 InvokeInst::InvokeInst(Value *Func, 3200 BasicBlock *IfNormal, BasicBlock *IfException, 3201 ArrayRef<Value *> Args, unsigned Values, 3202 const Twine &NameStr, BasicBlock *InsertAtEnd) 3203 : TerminatorInst(cast<FunctionType>(cast<PointerType>(Func->getType()) 3204 ->getElementType())->getReturnType(), 3205 Instruction::Invoke, 3206 OperandTraits<InvokeInst>::op_end(this) - Values, 3207 Values, InsertAtEnd) { 3208 init(Func, IfNormal, IfException, Args, NameStr); 3209 } 3210 3211 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(InvokeInst, Value) 3212 3213 //===----------------------------------------------------------------------===// 3214 // ResumeInst Class 3215 //===----------------------------------------------------------------------===// 3216 3217 //===--------------------------------------------------------------------------- 3218 /// ResumeInst - Resume the propagation of an exception. 3219 /// 3220 class ResumeInst : public TerminatorInst { 3221 ResumeInst(const ResumeInst &RI); 3222 3223 explicit ResumeInst(Value *Exn, Instruction *InsertBefore=nullptr); 3224 ResumeInst(Value *Exn, BasicBlock *InsertAtEnd); 3225 protected: 3226 ResumeInst *clone_impl() const override; 3227 public: 3228 static ResumeInst *Create(Value *Exn, Instruction *InsertBefore = nullptr) { 3229 return new(1) ResumeInst(Exn, InsertBefore); 3230 } 3231 static ResumeInst *Create(Value *Exn, BasicBlock *InsertAtEnd) { 3232 return new(1) ResumeInst(Exn, InsertAtEnd); 3233 } 3234 3235 /// Provide fast operand accessors 3236 DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value); 3237 3238 /// Convenience accessor. 3239 Value *getValue() const { return Op<0>(); } 3240 3241 unsigned getNumSuccessors() const { return 0; } 3242 3243 // Methods for support type inquiry through isa, cast, and dyn_cast: 3244 static inline bool classof(const Instruction *I) { 3245 return I->getOpcode() == Instruction::Resume; 3246 } 3247 static inline bool classof(const Value *V) { 3248 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 3249 } 3250 private: 3251 BasicBlock *getSuccessorV(unsigned idx) const override; 3252 unsigned getNumSuccessorsV() const override; 3253 void setSuccessorV(unsigned idx, BasicBlock *B) override; 3254 }; 3255 3256 template <> 3257 struct OperandTraits<ResumeInst> : 3258 public FixedNumOperandTraits<ResumeInst, 1> { 3259 }; 3260 3261 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(ResumeInst, Value) 3262 3263 //===----------------------------------------------------------------------===// 3264 // UnreachableInst Class 3265 //===----------------------------------------------------------------------===// 3266 3267 //===--------------------------------------------------------------------------- 3268 /// UnreachableInst - This function has undefined behavior. In particular, the 3269 /// presence of this instruction indicates some higher level knowledge that the 3270 /// end of the block cannot be reached. 3271 /// 3272 class UnreachableInst : public TerminatorInst { 3273 void *operator new(size_t, unsigned) LLVM_DELETED_FUNCTION; 3274 protected: 3275 UnreachableInst *clone_impl() const override; 3276 3277 public: 3278 // allocate space for exactly zero operands 3279 void *operator new(size_t s) { 3280 return User::operator new(s, 0); 3281 } 3282 explicit UnreachableInst(LLVMContext &C, Instruction *InsertBefore = nullptr); 3283 explicit UnreachableInst(LLVMContext &C, BasicBlock *InsertAtEnd); 3284 3285 unsigned getNumSuccessors() const { return 0; } 3286 3287 // Methods for support type inquiry through isa, cast, and dyn_cast: 3288 static inline bool classof(const Instruction *I) { 3289 return I->getOpcode() == Instruction::Unreachable; 3290 } 3291 static inline bool classof(const Value *V) { 3292 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 3293 } 3294 private: 3295 BasicBlock *getSuccessorV(unsigned idx) const override; 3296 unsigned getNumSuccessorsV() const override; 3297 void setSuccessorV(unsigned idx, BasicBlock *B) override; 3298 }; 3299 3300 //===----------------------------------------------------------------------===// 3301 // TruncInst Class 3302 //===----------------------------------------------------------------------===// 3303 3304 /// \brief This class represents a truncation of integer types. 3305 class TruncInst : public CastInst { 3306 protected: 3307 /// \brief Clone an identical TruncInst 3308 TruncInst *clone_impl() const override; 3309 3310 public: 3311 /// \brief Constructor with insert-before-instruction semantics 3312 TruncInst( 3313 Value *S, ///< The value to be truncated 3314 Type *Ty, ///< The (smaller) type to truncate to 3315 const Twine &NameStr = "", ///< A name for the new instruction 3316 Instruction *InsertBefore = nullptr ///< Where to insert the new instruction 3317 ); 3318 3319 /// \brief Constructor with insert-at-end-of-block semantics 3320 TruncInst( 3321 Value *S, ///< The value to be truncated 3322 Type *Ty, ///< The (smaller) type to truncate to 3323 const Twine &NameStr, ///< A name for the new instruction 3324 BasicBlock *InsertAtEnd ///< The block to insert the instruction into 3325 ); 3326 3327 /// \brief Methods for support type inquiry through isa, cast, and dyn_cast: 3328 static inline bool classof(const Instruction *I) { 3329 return I->getOpcode() == Trunc; 3330 } 3331 static inline bool classof(const Value *V) { 3332 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 3333 } 3334 }; 3335 3336 //===----------------------------------------------------------------------===// 3337 // ZExtInst Class 3338 //===----------------------------------------------------------------------===// 3339 3340 /// \brief This class represents zero extension of integer types. 3341 class ZExtInst : public CastInst { 3342 protected: 3343 /// \brief Clone an identical ZExtInst 3344 ZExtInst *clone_impl() const override; 3345 3346 public: 3347 /// \brief Constructor with insert-before-instruction semantics 3348 ZExtInst( 3349 Value *S, ///< The value to be zero extended 3350 Type *Ty, ///< The type to zero extend to 3351 const Twine &NameStr = "", ///< A name for the new instruction 3352 Instruction *InsertBefore = nullptr ///< Where to insert the new instruction 3353 ); 3354 3355 /// \brief Constructor with insert-at-end semantics. 3356 ZExtInst( 3357 Value *S, ///< The value to be zero extended 3358 Type *Ty, ///< The type to zero extend to 3359 const Twine &NameStr, ///< A name for the new instruction 3360 BasicBlock *InsertAtEnd ///< The block to insert the instruction into 3361 ); 3362 3363 /// \brief Methods for support type inquiry through isa, cast, and dyn_cast: 3364 static inline bool classof(const Instruction *I) { 3365 return I->getOpcode() == ZExt; 3366 } 3367 static inline bool classof(const Value *V) { 3368 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 3369 } 3370 }; 3371 3372 //===----------------------------------------------------------------------===// 3373 // SExtInst Class 3374 //===----------------------------------------------------------------------===// 3375 3376 /// \brief This class represents a sign extension of integer types. 3377 class SExtInst : public CastInst { 3378 protected: 3379 /// \brief Clone an identical SExtInst 3380 SExtInst *clone_impl() const override; 3381 3382 public: 3383 /// \brief Constructor with insert-before-instruction semantics 3384 SExtInst( 3385 Value *S, ///< The value to be sign extended 3386 Type *Ty, ///< The type to sign extend to 3387 const Twine &NameStr = "", ///< A name for the new instruction 3388 Instruction *InsertBefore = nullptr ///< Where to insert the new instruction 3389 ); 3390 3391 /// \brief Constructor with insert-at-end-of-block semantics 3392 SExtInst( 3393 Value *S, ///< The value to be sign extended 3394 Type *Ty, ///< The type to sign extend to 3395 const Twine &NameStr, ///< A name for the new instruction 3396 BasicBlock *InsertAtEnd ///< The block to insert the instruction into 3397 ); 3398 3399 /// \brief Methods for support type inquiry through isa, cast, and dyn_cast: 3400 static inline bool classof(const Instruction *I) { 3401 return I->getOpcode() == SExt; 3402 } 3403 static inline bool classof(const Value *V) { 3404 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 3405 } 3406 }; 3407 3408 //===----------------------------------------------------------------------===// 3409 // FPTruncInst Class 3410 //===----------------------------------------------------------------------===// 3411 3412 /// \brief This class represents a truncation of floating point types. 3413 class FPTruncInst : public CastInst { 3414 protected: 3415 /// \brief Clone an identical FPTruncInst 3416 FPTruncInst *clone_impl() const override; 3417 3418 public: 3419 /// \brief Constructor with insert-before-instruction semantics 3420 FPTruncInst( 3421 Value *S, ///< The value to be truncated 3422 Type *Ty, ///< The type to truncate to 3423 const Twine &NameStr = "", ///< A name for the new instruction 3424 Instruction *InsertBefore = nullptr ///< Where to insert the new instruction 3425 ); 3426 3427 /// \brief Constructor with insert-before-instruction semantics 3428 FPTruncInst( 3429 Value *S, ///< The value to be truncated 3430 Type *Ty, ///< The type to truncate to 3431 const Twine &NameStr, ///< A name for the new instruction 3432 BasicBlock *InsertAtEnd ///< The block to insert the instruction into 3433 ); 3434 3435 /// \brief Methods for support type inquiry through isa, cast, and dyn_cast: 3436 static inline bool classof(const Instruction *I) { 3437 return I->getOpcode() == FPTrunc; 3438 } 3439 static inline bool classof(const Value *V) { 3440 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 3441 } 3442 }; 3443 3444 //===----------------------------------------------------------------------===// 3445 // FPExtInst Class 3446 //===----------------------------------------------------------------------===// 3447 3448 /// \brief This class represents an extension of floating point types. 3449 class FPExtInst : public CastInst { 3450 protected: 3451 /// \brief Clone an identical FPExtInst 3452 FPExtInst *clone_impl() const override; 3453 3454 public: 3455 /// \brief Constructor with insert-before-instruction semantics 3456 FPExtInst( 3457 Value *S, ///< The value to be extended 3458 Type *Ty, ///< The type to extend to 3459 const Twine &NameStr = "", ///< A name for the new instruction 3460 Instruction *InsertBefore = nullptr ///< Where to insert the new instruction 3461 ); 3462 3463 /// \brief Constructor with insert-at-end-of-block semantics 3464 FPExtInst( 3465 Value *S, ///< The value to be extended 3466 Type *Ty, ///< The type to extend to 3467 const Twine &NameStr, ///< A name for the new instruction 3468 BasicBlock *InsertAtEnd ///< The block to insert the instruction into 3469 ); 3470 3471 /// \brief Methods for support type inquiry through isa, cast, and dyn_cast: 3472 static inline bool classof(const Instruction *I) { 3473 return I->getOpcode() == FPExt; 3474 } 3475 static inline bool classof(const Value *V) { 3476 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 3477 } 3478 }; 3479 3480 //===----------------------------------------------------------------------===// 3481 // UIToFPInst Class 3482 //===----------------------------------------------------------------------===// 3483 3484 /// \brief This class represents a cast unsigned integer to floating point. 3485 class UIToFPInst : public CastInst { 3486 protected: 3487 /// \brief Clone an identical UIToFPInst 3488 UIToFPInst *clone_impl() const override; 3489 3490 public: 3491 /// \brief Constructor with insert-before-instruction semantics 3492 UIToFPInst( 3493 Value *S, ///< The value to be converted 3494 Type *Ty, ///< The type to convert to 3495 const Twine &NameStr = "", ///< A name for the new instruction 3496 Instruction *InsertBefore = nullptr ///< Where to insert the new instruction 3497 ); 3498 3499 /// \brief Constructor with insert-at-end-of-block semantics 3500 UIToFPInst( 3501 Value *S, ///< The value to be converted 3502 Type *Ty, ///< The type to convert to 3503 const Twine &NameStr, ///< A name for the new instruction 3504 BasicBlock *InsertAtEnd ///< The block to insert the instruction into 3505 ); 3506 3507 /// \brief Methods for support type inquiry through isa, cast, and dyn_cast: 3508 static inline bool classof(const Instruction *I) { 3509 return I->getOpcode() == UIToFP; 3510 } 3511 static inline bool classof(const Value *V) { 3512 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 3513 } 3514 }; 3515 3516 //===----------------------------------------------------------------------===// 3517 // SIToFPInst Class 3518 //===----------------------------------------------------------------------===// 3519 3520 /// \brief This class represents a cast from signed integer to floating point. 3521 class SIToFPInst : public CastInst { 3522 protected: 3523 /// \brief Clone an identical SIToFPInst 3524 SIToFPInst *clone_impl() const override; 3525 3526 public: 3527 /// \brief Constructor with insert-before-instruction semantics 3528 SIToFPInst( 3529 Value *S, ///< The value to be converted 3530 Type *Ty, ///< The type to convert to 3531 const Twine &NameStr = "", ///< A name for the new instruction 3532 Instruction *InsertBefore = nullptr ///< Where to insert the new instruction 3533 ); 3534 3535 /// \brief Constructor with insert-at-end-of-block semantics 3536 SIToFPInst( 3537 Value *S, ///< The value to be converted 3538 Type *Ty, ///< The type to convert to 3539 const Twine &NameStr, ///< A name for the new instruction 3540 BasicBlock *InsertAtEnd ///< The block to insert the instruction into 3541 ); 3542 3543 /// \brief Methods for support type inquiry through isa, cast, and dyn_cast: 3544 static inline bool classof(const Instruction *I) { 3545 return I->getOpcode() == SIToFP; 3546 } 3547 static inline bool classof(const Value *V) { 3548 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 3549 } 3550 }; 3551 3552 //===----------------------------------------------------------------------===// 3553 // FPToUIInst Class 3554 //===----------------------------------------------------------------------===// 3555 3556 /// \brief This class represents a cast from floating point to unsigned integer 3557 class FPToUIInst : public CastInst { 3558 protected: 3559 /// \brief Clone an identical FPToUIInst 3560 FPToUIInst *clone_impl() const override; 3561 3562 public: 3563 /// \brief Constructor with insert-before-instruction semantics 3564 FPToUIInst( 3565 Value *S, ///< The value to be converted 3566 Type *Ty, ///< The type to convert to 3567 const Twine &NameStr = "", ///< A name for the new instruction 3568 Instruction *InsertBefore = nullptr ///< Where to insert the new instruction 3569 ); 3570 3571 /// \brief Constructor with insert-at-end-of-block semantics 3572 FPToUIInst( 3573 Value *S, ///< The value to be converted 3574 Type *Ty, ///< The type to convert to 3575 const Twine &NameStr, ///< A name for the new instruction 3576 BasicBlock *InsertAtEnd ///< Where to insert the new instruction 3577 ); 3578 3579 /// \brief Methods for support type inquiry through isa, cast, and dyn_cast: 3580 static inline bool classof(const Instruction *I) { 3581 return I->getOpcode() == FPToUI; 3582 } 3583 static inline bool classof(const Value *V) { 3584 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 3585 } 3586 }; 3587 3588 //===----------------------------------------------------------------------===// 3589 // FPToSIInst Class 3590 //===----------------------------------------------------------------------===// 3591 3592 /// \brief This class represents a cast from floating point to signed integer. 3593 class FPToSIInst : public CastInst { 3594 protected: 3595 /// \brief Clone an identical FPToSIInst 3596 FPToSIInst *clone_impl() const override; 3597 3598 public: 3599 /// \brief Constructor with insert-before-instruction semantics 3600 FPToSIInst( 3601 Value *S, ///< The value to be converted 3602 Type *Ty, ///< The type to convert to 3603 const Twine &NameStr = "", ///< A name for the new instruction 3604 Instruction *InsertBefore = nullptr ///< Where to insert the new instruction 3605 ); 3606 3607 /// \brief Constructor with insert-at-end-of-block semantics 3608 FPToSIInst( 3609 Value *S, ///< The value to be converted 3610 Type *Ty, ///< The type to convert to 3611 const Twine &NameStr, ///< A name for the new instruction 3612 BasicBlock *InsertAtEnd ///< The block to insert the instruction into 3613 ); 3614 3615 /// \brief Methods for support type inquiry through isa, cast, and dyn_cast: 3616 static inline bool classof(const Instruction *I) { 3617 return I->getOpcode() == FPToSI; 3618 } 3619 static inline bool classof(const Value *V) { 3620 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 3621 } 3622 }; 3623 3624 //===----------------------------------------------------------------------===// 3625 // IntToPtrInst Class 3626 //===----------------------------------------------------------------------===// 3627 3628 /// \brief This class represents a cast from an integer to a pointer. 3629 class IntToPtrInst : public CastInst { 3630 public: 3631 /// \brief Constructor with insert-before-instruction semantics 3632 IntToPtrInst( 3633 Value *S, ///< The value to be converted 3634 Type *Ty, ///< The type to convert to 3635 const Twine &NameStr = "", ///< A name for the new instruction 3636 Instruction *InsertBefore = nullptr ///< Where to insert the new instruction 3637 ); 3638 3639 /// \brief Constructor with insert-at-end-of-block semantics 3640 IntToPtrInst( 3641 Value *S, ///< The value to be converted 3642 Type *Ty, ///< The type to convert to 3643 const Twine &NameStr, ///< A name for the new instruction 3644 BasicBlock *InsertAtEnd ///< The block to insert the instruction into 3645 ); 3646 3647 /// \brief Clone an identical IntToPtrInst 3648 IntToPtrInst *clone_impl() const override; 3649 3650 /// \brief Returns the address space of this instruction's pointer type. 3651 unsigned getAddressSpace() const { 3652 return getType()->getPointerAddressSpace(); 3653 } 3654 3655 // Methods for support type inquiry through isa, cast, and dyn_cast: 3656 static inline bool classof(const Instruction *I) { 3657 return I->getOpcode() == IntToPtr; 3658 } 3659 static inline bool classof(const Value *V) { 3660 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 3661 } 3662 }; 3663 3664 //===----------------------------------------------------------------------===// 3665 // PtrToIntInst Class 3666 //===----------------------------------------------------------------------===// 3667 3668 /// \brief This class represents a cast from a pointer to an integer 3669 class PtrToIntInst : public CastInst { 3670 protected: 3671 /// \brief Clone an identical PtrToIntInst 3672 PtrToIntInst *clone_impl() const override; 3673 3674 public: 3675 /// \brief Constructor with insert-before-instruction semantics 3676 PtrToIntInst( 3677 Value *S, ///< The value to be converted 3678 Type *Ty, ///< The type to convert to 3679 const Twine &NameStr = "", ///< A name for the new instruction 3680 Instruction *InsertBefore = nullptr ///< Where to insert the new instruction 3681 ); 3682 3683 /// \brief Constructor with insert-at-end-of-block semantics 3684 PtrToIntInst( 3685 Value *S, ///< The value to be converted 3686 Type *Ty, ///< The type to convert to 3687 const Twine &NameStr, ///< A name for the new instruction 3688 BasicBlock *InsertAtEnd ///< The block to insert the instruction into 3689 ); 3690 3691 /// \brief Gets the pointer operand. 3692 Value *getPointerOperand() { return getOperand(0); } 3693 /// \brief Gets the pointer operand. 3694 const Value *getPointerOperand() const { return getOperand(0); } 3695 /// \brief Gets the operand index of the pointer operand. 3696 static unsigned getPointerOperandIndex() { return 0U; } 3697 3698 /// \brief Returns the address space of the pointer operand. 3699 unsigned getPointerAddressSpace() const { 3700 return getPointerOperand()->getType()->getPointerAddressSpace(); 3701 } 3702 3703 // Methods for support type inquiry through isa, cast, and dyn_cast: 3704 static inline bool classof(const Instruction *I) { 3705 return I->getOpcode() == PtrToInt; 3706 } 3707 static inline bool classof(const Value *V) { 3708 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 3709 } 3710 }; 3711 3712 //===----------------------------------------------------------------------===// 3713 // BitCastInst Class 3714 //===----------------------------------------------------------------------===// 3715 3716 /// \brief This class represents a no-op cast from one type to another. 3717 class BitCastInst : public CastInst { 3718 protected: 3719 /// \brief Clone an identical BitCastInst 3720 BitCastInst *clone_impl() const override; 3721 3722 public: 3723 /// \brief Constructor with insert-before-instruction semantics 3724 BitCastInst( 3725 Value *S, ///< The value to be casted 3726 Type *Ty, ///< The type to casted to 3727 const Twine &NameStr = "", ///< A name for the new instruction 3728 Instruction *InsertBefore = nullptr ///< Where to insert the new instruction 3729 ); 3730 3731 /// \brief Constructor with insert-at-end-of-block semantics 3732 BitCastInst( 3733 Value *S, ///< The value to be casted 3734 Type *Ty, ///< The type to casted to 3735 const Twine &NameStr, ///< A name for the new instruction 3736 BasicBlock *InsertAtEnd ///< The block to insert the instruction into 3737 ); 3738 3739 // Methods for support type inquiry through isa, cast, and dyn_cast: 3740 static inline bool classof(const Instruction *I) { 3741 return I->getOpcode() == BitCast; 3742 } 3743 static inline bool classof(const Value *V) { 3744 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 3745 } 3746 }; 3747 3748 //===----------------------------------------------------------------------===// 3749 // AddrSpaceCastInst Class 3750 //===----------------------------------------------------------------------===// 3751 3752 /// \brief This class represents a conversion between pointers from 3753 /// one address space to another. 3754 class AddrSpaceCastInst : public CastInst { 3755 protected: 3756 /// \brief Clone an identical AddrSpaceCastInst 3757 AddrSpaceCastInst *clone_impl() const override; 3758 3759 public: 3760 /// \brief Constructor with insert-before-instruction semantics 3761 AddrSpaceCastInst( 3762 Value *S, ///< The value to be casted 3763 Type *Ty, ///< The type to casted to 3764 const Twine &NameStr = "", ///< A name for the new instruction 3765 Instruction *InsertBefore = nullptr ///< Where to insert the new instruction 3766 ); 3767 3768 /// \brief Constructor with insert-at-end-of-block semantics 3769 AddrSpaceCastInst( 3770 Value *S, ///< The value to be casted 3771 Type *Ty, ///< The type to casted to 3772 const Twine &NameStr, ///< A name for the new instruction 3773 BasicBlock *InsertAtEnd ///< The block to insert the instruction into 3774 ); 3775 3776 // Methods for support type inquiry through isa, cast, and dyn_cast: 3777 static inline bool classof(const Instruction *I) { 3778 return I->getOpcode() == AddrSpaceCast; 3779 } 3780 static inline bool classof(const Value *V) { 3781 return isa<Instruction>(V) && classof(cast<Instruction>(V)); 3782 } 3783 }; 3784 3785 } // End llvm namespace 3786 3787 #endif 3788