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