1 //===---- llvm/IRBuilder.h - Builder for LLVM Instructions ------*- 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 defines the IRBuilder class, which is used as a convenient way 11 // to create LLVM instructions with a consistent and simplified interface. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #ifndef LLVM_IR_IRBUILDER_H 16 #define LLVM_IR_IRBUILDER_H 17 18 #include "llvm/ADT/ArrayRef.h" 19 #include "llvm/ADT/StringRef.h" 20 #include "llvm/ADT/Twine.h" 21 #include "llvm/IR/BasicBlock.h" 22 #include "llvm/IR/DataLayout.h" 23 #include "llvm/IR/Instructions.h" 24 #include "llvm/IR/LLVMContext.h" 25 #include "llvm/IR/Operator.h" 26 #include "llvm/Support/CBindingWrapping.h" 27 #include "llvm/Support/ConstantFolder.h" 28 29 namespace llvm { 30 class MDNode; 31 32 /// \brief This provides the default implementation of the IRBuilder 33 /// 'InsertHelper' method that is called whenever an instruction is created by 34 /// IRBuilder and needs to be inserted. 35 /// 36 /// By default, this inserts the instruction at the insertion point. 37 template <bool preserveNames = true> 38 class IRBuilderDefaultInserter { 39 protected: 40 void InsertHelper(Instruction *I, const Twine &Name, 41 BasicBlock *BB, BasicBlock::iterator InsertPt) const { 42 if (BB) BB->getInstList().insert(InsertPt, I); 43 if (preserveNames) 44 I->setName(Name); 45 } 46 }; 47 48 /// \brief Common base class shared among various IRBuilders. 49 class IRBuilderBase { 50 DebugLoc CurDbgLocation; 51 protected: 52 BasicBlock *BB; 53 BasicBlock::iterator InsertPt; 54 LLVMContext &Context; 55 public: 56 57 IRBuilderBase(LLVMContext &context) 58 : Context(context) { 59 ClearInsertionPoint(); 60 } 61 62 //===--------------------------------------------------------------------===// 63 // Builder configuration methods 64 //===--------------------------------------------------------------------===// 65 66 /// \brief Clear the insertion point: created instructions will not be 67 /// inserted into a block. 68 void ClearInsertionPoint() { 69 BB = 0; 70 InsertPt = 0; 71 } 72 73 BasicBlock *GetInsertBlock() const { return BB; } 74 BasicBlock::iterator GetInsertPoint() const { return InsertPt; } 75 LLVMContext &getContext() const { return Context; } 76 77 /// \brief This specifies that created instructions should be appended to the 78 /// end of the specified block. 79 void SetInsertPoint(BasicBlock *TheBB) { 80 BB = TheBB; 81 InsertPt = BB->end(); 82 } 83 84 /// \brief This specifies that created instructions should be inserted before 85 /// the specified instruction. 86 void SetInsertPoint(Instruction *I) { 87 BB = I->getParent(); 88 InsertPt = I; 89 assert(I != BB->end() && "Can't read debug loc from end()"); 90 SetCurrentDebugLocation(I->getDebugLoc()); 91 } 92 93 /// \brief This specifies that created instructions should be inserted at the 94 /// specified point. 95 void SetInsertPoint(BasicBlock *TheBB, BasicBlock::iterator IP) { 96 BB = TheBB; 97 InsertPt = IP; 98 } 99 100 /// \brief Find the nearest point that dominates this use, and specify that 101 /// created instructions should be inserted at this point. 102 void SetInsertPoint(Use &U) { 103 Instruction *UseInst = cast<Instruction>(U.getUser()); 104 if (PHINode *Phi = dyn_cast<PHINode>(UseInst)) { 105 BasicBlock *PredBB = Phi->getIncomingBlock(U); 106 assert(U != PredBB->getTerminator() && "critical edge not split"); 107 SetInsertPoint(PredBB, PredBB->getTerminator()); 108 return; 109 } 110 SetInsertPoint(UseInst); 111 } 112 113 /// \brief Set location information used by debugging information. 114 void SetCurrentDebugLocation(const DebugLoc &L) { 115 CurDbgLocation = L; 116 } 117 118 /// \brief Get location information used by debugging information. 119 DebugLoc getCurrentDebugLocation() const { return CurDbgLocation; } 120 121 /// \brief If this builder has a current debug location, set it on the 122 /// specified instruction. 123 void SetInstDebugLocation(Instruction *I) const { 124 if (!CurDbgLocation.isUnknown()) 125 I->setDebugLoc(CurDbgLocation); 126 } 127 128 /// \brief Get the return type of the current function that we're emitting 129 /// into. 130 Type *getCurrentFunctionReturnType() const; 131 132 /// InsertPoint - A saved insertion point. 133 class InsertPoint { 134 BasicBlock *Block; 135 BasicBlock::iterator Point; 136 137 public: 138 /// \brief Creates a new insertion point which doesn't point to anything. 139 InsertPoint() : Block(0) {} 140 141 /// \brief Creates a new insertion point at the given location. 142 InsertPoint(BasicBlock *InsertBlock, BasicBlock::iterator InsertPoint) 143 : Block(InsertBlock), Point(InsertPoint) {} 144 145 /// \brief Returns true if this insert point is set. 146 bool isSet() const { return (Block != 0); } 147 148 llvm::BasicBlock *getBlock() const { return Block; } 149 llvm::BasicBlock::iterator getPoint() const { return Point; } 150 }; 151 152 /// \brief Returns the current insert point. 153 InsertPoint saveIP() const { 154 return InsertPoint(GetInsertBlock(), GetInsertPoint()); 155 } 156 157 /// \brief Returns the current insert point, clearing it in the process. 158 InsertPoint saveAndClearIP() { 159 InsertPoint IP(GetInsertBlock(), GetInsertPoint()); 160 ClearInsertionPoint(); 161 return IP; 162 } 163 164 /// \brief Sets the current insert point to a previously-saved location. 165 void restoreIP(InsertPoint IP) { 166 if (IP.isSet()) 167 SetInsertPoint(IP.getBlock(), IP.getPoint()); 168 else 169 ClearInsertionPoint(); 170 } 171 172 //===--------------------------------------------------------------------===// 173 // Miscellaneous creation methods. 174 //===--------------------------------------------------------------------===// 175 176 /// \brief Make a new global variable with initializer type i8* 177 /// 178 /// Make a new global variable with an initializer that has array of i8 type 179 /// filled in with the null terminated string value specified. The new global 180 /// variable will be marked mergable with any others of the same contents. If 181 /// Name is specified, it is the name of the global variable created. 182 Value *CreateGlobalString(StringRef Str, const Twine &Name = ""); 183 184 /// \brief Get a constant value representing either true or false. 185 ConstantInt *getInt1(bool V) { 186 return ConstantInt::get(getInt1Ty(), V); 187 } 188 189 /// \brief Get the constant value for i1 true. 190 ConstantInt *getTrue() { 191 return ConstantInt::getTrue(Context); 192 } 193 194 /// \brief Get the constant value for i1 false. 195 ConstantInt *getFalse() { 196 return ConstantInt::getFalse(Context); 197 } 198 199 /// \brief Get a constant 8-bit value. 200 ConstantInt *getInt8(uint8_t C) { 201 return ConstantInt::get(getInt8Ty(), C); 202 } 203 204 /// \brief Get a constant 16-bit value. 205 ConstantInt *getInt16(uint16_t C) { 206 return ConstantInt::get(getInt16Ty(), C); 207 } 208 209 /// \brief Get a constant 32-bit value. 210 ConstantInt *getInt32(uint32_t C) { 211 return ConstantInt::get(getInt32Ty(), C); 212 } 213 214 /// \brief Get a constant 64-bit value. 215 ConstantInt *getInt64(uint64_t C) { 216 return ConstantInt::get(getInt64Ty(), C); 217 } 218 219 /// \brief Get a constant integer value. 220 ConstantInt *getInt(const APInt &AI) { 221 return ConstantInt::get(Context, AI); 222 } 223 224 //===--------------------------------------------------------------------===// 225 // Type creation methods 226 //===--------------------------------------------------------------------===// 227 228 /// \brief Fetch the type representing a single bit 229 IntegerType *getInt1Ty() { 230 return Type::getInt1Ty(Context); 231 } 232 233 /// \brief Fetch the type representing an 8-bit integer. 234 IntegerType *getInt8Ty() { 235 return Type::getInt8Ty(Context); 236 } 237 238 /// \brief Fetch the type representing a 16-bit integer. 239 IntegerType *getInt16Ty() { 240 return Type::getInt16Ty(Context); 241 } 242 243 /// \brief Fetch the type representing a 32-bit integer. 244 IntegerType *getInt32Ty() { 245 return Type::getInt32Ty(Context); 246 } 247 248 /// \brief Fetch the type representing a 64-bit integer. 249 IntegerType *getInt64Ty() { 250 return Type::getInt64Ty(Context); 251 } 252 253 /// \brief Fetch the type representing a 32-bit floating point value. 254 Type *getFloatTy() { 255 return Type::getFloatTy(Context); 256 } 257 258 /// \brief Fetch the type representing a 64-bit floating point value. 259 Type *getDoubleTy() { 260 return Type::getDoubleTy(Context); 261 } 262 263 /// \brief Fetch the type representing void. 264 Type *getVoidTy() { 265 return Type::getVoidTy(Context); 266 } 267 268 /// \brief Fetch the type representing a pointer to an 8-bit integer value. 269 PointerType *getInt8PtrTy(unsigned AddrSpace = 0) { 270 return Type::getInt8PtrTy(Context, AddrSpace); 271 } 272 273 /// \brief Fetch the type representing a pointer to an integer value. 274 IntegerType* getIntPtrTy(const DataLayout *DL, unsigned AddrSpace = 0) { 275 return DL->getIntPtrType(Context, AddrSpace); 276 } 277 278 //===--------------------------------------------------------------------===// 279 // Intrinsic creation methods 280 //===--------------------------------------------------------------------===// 281 282 /// \brief Create and insert a memset to the specified pointer and the 283 /// specified value. 284 /// 285 /// If the pointer isn't an i8*, it will be converted. If a TBAA tag is 286 /// specified, it will be added to the instruction. 287 CallInst *CreateMemSet(Value *Ptr, Value *Val, uint64_t Size, unsigned Align, 288 bool isVolatile = false, MDNode *TBAATag = 0) { 289 return CreateMemSet(Ptr, Val, getInt64(Size), Align, isVolatile, TBAATag); 290 } 291 292 CallInst *CreateMemSet(Value *Ptr, Value *Val, Value *Size, unsigned Align, 293 bool isVolatile = false, MDNode *TBAATag = 0); 294 295 /// \brief Create and insert a memcpy between the specified pointers. 296 /// 297 /// If the pointers aren't i8*, they will be converted. If a TBAA tag is 298 /// specified, it will be added to the instruction. 299 CallInst *CreateMemCpy(Value *Dst, Value *Src, uint64_t Size, unsigned Align, 300 bool isVolatile = false, MDNode *TBAATag = 0, 301 MDNode *TBAAStructTag = 0) { 302 return CreateMemCpy(Dst, Src, getInt64(Size), Align, isVolatile, TBAATag, 303 TBAAStructTag); 304 } 305 306 CallInst *CreateMemCpy(Value *Dst, Value *Src, Value *Size, unsigned Align, 307 bool isVolatile = false, MDNode *TBAATag = 0, 308 MDNode *TBAAStructTag = 0); 309 310 /// \brief Create and insert a memmove between the specified 311 /// pointers. 312 /// 313 /// If the pointers aren't i8*, they will be converted. If a TBAA tag is 314 /// specified, it will be added to the instruction. 315 CallInst *CreateMemMove(Value *Dst, Value *Src, uint64_t Size, unsigned Align, 316 bool isVolatile = false, MDNode *TBAATag = 0) { 317 return CreateMemMove(Dst, Src, getInt64(Size), Align, isVolatile, TBAATag); 318 } 319 320 CallInst *CreateMemMove(Value *Dst, Value *Src, Value *Size, unsigned Align, 321 bool isVolatile = false, MDNode *TBAATag = 0); 322 323 /// \brief Create a lifetime.start intrinsic. 324 /// 325 /// If the pointer isn't i8* it will be converted. 326 CallInst *CreateLifetimeStart(Value *Ptr, ConstantInt *Size = 0); 327 328 /// \brief Create a lifetime.end intrinsic. 329 /// 330 /// If the pointer isn't i8* it will be converted. 331 CallInst *CreateLifetimeEnd(Value *Ptr, ConstantInt *Size = 0); 332 333 private: 334 Value *getCastedInt8PtrValue(Value *Ptr); 335 }; 336 337 /// \brief This provides a uniform API for creating instructions and inserting 338 /// them into a basic block: either at the end of a BasicBlock, or at a specific 339 /// iterator location in a block. 340 /// 341 /// Note that the builder does not expose the full generality of LLVM 342 /// instructions. For access to extra instruction properties, use the mutators 343 /// (e.g. setVolatile) on the instructions after they have been 344 /// created. Convenience state exists to specify fast-math flags and fp-math 345 /// tags. 346 /// 347 /// The first template argument handles whether or not to preserve names in the 348 /// final instruction output. This defaults to on. The second template argument 349 /// specifies a class to use for creating constants. This defaults to creating 350 /// minimally folded constants. The fourth template argument allows clients to 351 /// specify custom insertion hooks that are called on every newly created 352 /// insertion. 353 template<bool preserveNames = true, typename T = ConstantFolder, 354 typename Inserter = IRBuilderDefaultInserter<preserveNames> > 355 class IRBuilder : public IRBuilderBase, public Inserter { 356 T Folder; 357 MDNode *DefaultFPMathTag; 358 FastMathFlags FMF; 359 public: 360 IRBuilder(LLVMContext &C, const T &F, const Inserter &I = Inserter(), 361 MDNode *FPMathTag = 0) 362 : IRBuilderBase(C), Inserter(I), Folder(F), DefaultFPMathTag(FPMathTag), 363 FMF() { 364 } 365 366 explicit IRBuilder(LLVMContext &C, MDNode *FPMathTag = 0) 367 : IRBuilderBase(C), Folder(), DefaultFPMathTag(FPMathTag), FMF() { 368 } 369 370 explicit IRBuilder(BasicBlock *TheBB, const T &F, MDNode *FPMathTag = 0) 371 : IRBuilderBase(TheBB->getContext()), Folder(F), 372 DefaultFPMathTag(FPMathTag), FMF() { 373 SetInsertPoint(TheBB); 374 } 375 376 explicit IRBuilder(BasicBlock *TheBB, MDNode *FPMathTag = 0) 377 : IRBuilderBase(TheBB->getContext()), Folder(), 378 DefaultFPMathTag(FPMathTag), FMF() { 379 SetInsertPoint(TheBB); 380 } 381 382 explicit IRBuilder(Instruction *IP, MDNode *FPMathTag = 0) 383 : IRBuilderBase(IP->getContext()), Folder(), DefaultFPMathTag(FPMathTag), 384 FMF() { 385 SetInsertPoint(IP); 386 SetCurrentDebugLocation(IP->getDebugLoc()); 387 } 388 389 explicit IRBuilder(Use &U, MDNode *FPMathTag = 0) 390 : IRBuilderBase(U->getContext()), Folder(), DefaultFPMathTag(FPMathTag), 391 FMF() { 392 SetInsertPoint(U); 393 SetCurrentDebugLocation(cast<Instruction>(U.getUser())->getDebugLoc()); 394 } 395 396 IRBuilder(BasicBlock *TheBB, BasicBlock::iterator IP, const T& F, 397 MDNode *FPMathTag = 0) 398 : IRBuilderBase(TheBB->getContext()), Folder(F), 399 DefaultFPMathTag(FPMathTag), FMF() { 400 SetInsertPoint(TheBB, IP); 401 } 402 403 IRBuilder(BasicBlock *TheBB, BasicBlock::iterator IP, MDNode *FPMathTag = 0) 404 : IRBuilderBase(TheBB->getContext()), Folder(), 405 DefaultFPMathTag(FPMathTag), FMF() { 406 SetInsertPoint(TheBB, IP); 407 } 408 409 /// \brief Get the constant folder being used. 410 const T &getFolder() { return Folder; } 411 412 /// \brief Get the floating point math metadata being used. 413 MDNode *getDefaultFPMathTag() const { return DefaultFPMathTag; } 414 415 /// \brief Get the flags to be applied to created floating point ops 416 FastMathFlags getFastMathFlags() const { return FMF; } 417 418 /// \brief Clear the fast-math flags. 419 void clearFastMathFlags() { FMF.clear(); } 420 421 /// \brief SetDefaultFPMathTag - Set the floating point math metadata to be used. 422 void SetDefaultFPMathTag(MDNode *FPMathTag) { DefaultFPMathTag = FPMathTag; } 423 424 /// \brief Set the fast-math flags to be used with generated fp-math operators 425 void SetFastMathFlags(FastMathFlags NewFMF) { FMF = NewFMF; } 426 427 /// \brief Return true if this builder is configured to actually add the 428 /// requested names to IR created through it. 429 bool isNamePreserving() const { return preserveNames; } 430 431 /// \brief Insert and return the specified instruction. 432 template<typename InstTy> 433 InstTy *Insert(InstTy *I, const Twine &Name = "") const { 434 this->InsertHelper(I, Name, BB, InsertPt); 435 this->SetInstDebugLocation(I); 436 return I; 437 } 438 439 /// \brief No-op overload to handle constants. 440 Constant *Insert(Constant *C, const Twine& = "") const { 441 return C; 442 } 443 444 //===--------------------------------------------------------------------===// 445 // Instruction creation methods: Terminators 446 //===--------------------------------------------------------------------===// 447 448 private: 449 /// \brief Helper to add branch weight metadata onto an instruction. 450 /// \returns The annotated instruction. 451 template <typename InstTy> 452 InstTy *addBranchWeights(InstTy *I, MDNode *Weights) { 453 if (Weights) 454 I->setMetadata(LLVMContext::MD_prof, Weights); 455 return I; 456 } 457 458 public: 459 /// \brief Create a 'ret void' instruction. 460 ReturnInst *CreateRetVoid() { 461 return Insert(ReturnInst::Create(Context)); 462 } 463 464 /// \brief Create a 'ret <val>' instruction. 465 ReturnInst *CreateRet(Value *V) { 466 return Insert(ReturnInst::Create(Context, V)); 467 } 468 469 /// \brief Create a sequence of N insertvalue instructions, 470 /// with one Value from the retVals array each, that build a aggregate 471 /// return value one value at a time, and a ret instruction to return 472 /// the resulting aggregate value. 473 /// 474 /// This is a convenience function for code that uses aggregate return values 475 /// as a vehicle for having multiple return values. 476 ReturnInst *CreateAggregateRet(Value *const *retVals, unsigned N) { 477 Value *V = UndefValue::get(getCurrentFunctionReturnType()); 478 for (unsigned i = 0; i != N; ++i) 479 V = CreateInsertValue(V, retVals[i], i, "mrv"); 480 return Insert(ReturnInst::Create(Context, V)); 481 } 482 483 /// \brief Create an unconditional 'br label X' instruction. 484 BranchInst *CreateBr(BasicBlock *Dest) { 485 return Insert(BranchInst::Create(Dest)); 486 } 487 488 /// \brief Create a conditional 'br Cond, TrueDest, FalseDest' 489 /// instruction. 490 BranchInst *CreateCondBr(Value *Cond, BasicBlock *True, BasicBlock *False, 491 MDNode *BranchWeights = 0) { 492 return Insert(addBranchWeights(BranchInst::Create(True, False, Cond), 493 BranchWeights)); 494 } 495 496 /// \brief Create a switch instruction with the specified value, default dest, 497 /// and with a hint for the number of cases that will be added (for efficient 498 /// allocation). 499 SwitchInst *CreateSwitch(Value *V, BasicBlock *Dest, unsigned NumCases = 10, 500 MDNode *BranchWeights = 0) { 501 return Insert(addBranchWeights(SwitchInst::Create(V, Dest, NumCases), 502 BranchWeights)); 503 } 504 505 /// \brief Create an indirect branch instruction with the specified address 506 /// operand, with an optional hint for the number of destinations that will be 507 /// added (for efficient allocation). 508 IndirectBrInst *CreateIndirectBr(Value *Addr, unsigned NumDests = 10) { 509 return Insert(IndirectBrInst::Create(Addr, NumDests)); 510 } 511 512 InvokeInst *CreateInvoke(Value *Callee, BasicBlock *NormalDest, 513 BasicBlock *UnwindDest, const Twine &Name = "") { 514 return Insert(InvokeInst::Create(Callee, NormalDest, UnwindDest, 515 ArrayRef<Value *>()), 516 Name); 517 } 518 InvokeInst *CreateInvoke(Value *Callee, BasicBlock *NormalDest, 519 BasicBlock *UnwindDest, Value *Arg1, 520 const Twine &Name = "") { 521 return Insert(InvokeInst::Create(Callee, NormalDest, UnwindDest, Arg1), 522 Name); 523 } 524 InvokeInst *CreateInvoke3(Value *Callee, BasicBlock *NormalDest, 525 BasicBlock *UnwindDest, Value *Arg1, 526 Value *Arg2, Value *Arg3, 527 const Twine &Name = "") { 528 Value *Args[] = { Arg1, Arg2, Arg3 }; 529 return Insert(InvokeInst::Create(Callee, NormalDest, UnwindDest, Args), 530 Name); 531 } 532 /// \brief Create an invoke instruction. 533 InvokeInst *CreateInvoke(Value *Callee, BasicBlock *NormalDest, 534 BasicBlock *UnwindDest, ArrayRef<Value *> Args, 535 const Twine &Name = "") { 536 return Insert(InvokeInst::Create(Callee, NormalDest, UnwindDest, Args), 537 Name); 538 } 539 540 ResumeInst *CreateResume(Value *Exn) { 541 return Insert(ResumeInst::Create(Exn)); 542 } 543 544 UnreachableInst *CreateUnreachable() { 545 return Insert(new UnreachableInst(Context)); 546 } 547 548 //===--------------------------------------------------------------------===// 549 // Instruction creation methods: Binary Operators 550 //===--------------------------------------------------------------------===// 551 private: 552 BinaryOperator *CreateInsertNUWNSWBinOp(BinaryOperator::BinaryOps Opc, 553 Value *LHS, Value *RHS, 554 const Twine &Name, 555 bool HasNUW, bool HasNSW) { 556 BinaryOperator *BO = Insert(BinaryOperator::Create(Opc, LHS, RHS), Name); 557 if (HasNUW) BO->setHasNoUnsignedWrap(); 558 if (HasNSW) BO->setHasNoSignedWrap(); 559 return BO; 560 } 561 562 Instruction *AddFPMathAttributes(Instruction *I, 563 MDNode *FPMathTag, 564 FastMathFlags FMF) const { 565 if (!FPMathTag) 566 FPMathTag = DefaultFPMathTag; 567 if (FPMathTag) 568 I->setMetadata(LLVMContext::MD_fpmath, FPMathTag); 569 I->setFastMathFlags(FMF); 570 return I; 571 } 572 public: 573 Value *CreateAdd(Value *LHS, Value *RHS, const Twine &Name = "", 574 bool HasNUW = false, bool HasNSW = false) { 575 if (Constant *LC = dyn_cast<Constant>(LHS)) 576 if (Constant *RC = dyn_cast<Constant>(RHS)) 577 return Insert(Folder.CreateAdd(LC, RC, HasNUW, HasNSW), Name); 578 return CreateInsertNUWNSWBinOp(Instruction::Add, LHS, RHS, Name, 579 HasNUW, HasNSW); 580 } 581 Value *CreateNSWAdd(Value *LHS, Value *RHS, const Twine &Name = "") { 582 return CreateAdd(LHS, RHS, Name, false, true); 583 } 584 Value *CreateNUWAdd(Value *LHS, Value *RHS, const Twine &Name = "") { 585 return CreateAdd(LHS, RHS, Name, true, false); 586 } 587 Value *CreateFAdd(Value *LHS, Value *RHS, const Twine &Name = "", 588 MDNode *FPMathTag = 0) { 589 if (Constant *LC = dyn_cast<Constant>(LHS)) 590 if (Constant *RC = dyn_cast<Constant>(RHS)) 591 return Insert(Folder.CreateFAdd(LC, RC), Name); 592 return Insert(AddFPMathAttributes(BinaryOperator::CreateFAdd(LHS, RHS), 593 FPMathTag, FMF), Name); 594 } 595 Value *CreateSub(Value *LHS, Value *RHS, const Twine &Name = "", 596 bool HasNUW = false, bool HasNSW = false) { 597 if (Constant *LC = dyn_cast<Constant>(LHS)) 598 if (Constant *RC = dyn_cast<Constant>(RHS)) 599 return Insert(Folder.CreateSub(LC, RC), Name); 600 return CreateInsertNUWNSWBinOp(Instruction::Sub, LHS, RHS, Name, 601 HasNUW, HasNSW); 602 } 603 Value *CreateNSWSub(Value *LHS, Value *RHS, const Twine &Name = "") { 604 return CreateSub(LHS, RHS, Name, false, true); 605 } 606 Value *CreateNUWSub(Value *LHS, Value *RHS, const Twine &Name = "") { 607 return CreateSub(LHS, RHS, Name, true, false); 608 } 609 Value *CreateFSub(Value *LHS, Value *RHS, const Twine &Name = "", 610 MDNode *FPMathTag = 0) { 611 if (Constant *LC = dyn_cast<Constant>(LHS)) 612 if (Constant *RC = dyn_cast<Constant>(RHS)) 613 return Insert(Folder.CreateFSub(LC, RC), Name); 614 return Insert(AddFPMathAttributes(BinaryOperator::CreateFSub(LHS, RHS), 615 FPMathTag, FMF), Name); 616 } 617 Value *CreateMul(Value *LHS, Value *RHS, const Twine &Name = "", 618 bool HasNUW = false, bool HasNSW = false) { 619 if (Constant *LC = dyn_cast<Constant>(LHS)) 620 if (Constant *RC = dyn_cast<Constant>(RHS)) 621 return Insert(Folder.CreateMul(LC, RC), Name); 622 return CreateInsertNUWNSWBinOp(Instruction::Mul, LHS, RHS, Name, 623 HasNUW, HasNSW); 624 } 625 Value *CreateNSWMul(Value *LHS, Value *RHS, const Twine &Name = "") { 626 return CreateMul(LHS, RHS, Name, false, true); 627 } 628 Value *CreateNUWMul(Value *LHS, Value *RHS, const Twine &Name = "") { 629 return CreateMul(LHS, RHS, Name, true, false); 630 } 631 Value *CreateFMul(Value *LHS, Value *RHS, const Twine &Name = "", 632 MDNode *FPMathTag = 0) { 633 if (Constant *LC = dyn_cast<Constant>(LHS)) 634 if (Constant *RC = dyn_cast<Constant>(RHS)) 635 return Insert(Folder.CreateFMul(LC, RC), Name); 636 return Insert(AddFPMathAttributes(BinaryOperator::CreateFMul(LHS, RHS), 637 FPMathTag, FMF), Name); 638 } 639 Value *CreateUDiv(Value *LHS, Value *RHS, const Twine &Name = "", 640 bool isExact = false) { 641 if (Constant *LC = dyn_cast<Constant>(LHS)) 642 if (Constant *RC = dyn_cast<Constant>(RHS)) 643 return Insert(Folder.CreateUDiv(LC, RC, isExact), Name); 644 if (!isExact) 645 return Insert(BinaryOperator::CreateUDiv(LHS, RHS), Name); 646 return Insert(BinaryOperator::CreateExactUDiv(LHS, RHS), Name); 647 } 648 Value *CreateExactUDiv(Value *LHS, Value *RHS, const Twine &Name = "") { 649 return CreateUDiv(LHS, RHS, Name, true); 650 } 651 Value *CreateSDiv(Value *LHS, Value *RHS, const Twine &Name = "", 652 bool isExact = false) { 653 if (Constant *LC = dyn_cast<Constant>(LHS)) 654 if (Constant *RC = dyn_cast<Constant>(RHS)) 655 return Insert(Folder.CreateSDiv(LC, RC, isExact), Name); 656 if (!isExact) 657 return Insert(BinaryOperator::CreateSDiv(LHS, RHS), Name); 658 return Insert(BinaryOperator::CreateExactSDiv(LHS, RHS), Name); 659 } 660 Value *CreateExactSDiv(Value *LHS, Value *RHS, const Twine &Name = "") { 661 return CreateSDiv(LHS, RHS, Name, true); 662 } 663 Value *CreateFDiv(Value *LHS, Value *RHS, const Twine &Name = "", 664 MDNode *FPMathTag = 0) { 665 if (Constant *LC = dyn_cast<Constant>(LHS)) 666 if (Constant *RC = dyn_cast<Constant>(RHS)) 667 return Insert(Folder.CreateFDiv(LC, RC), Name); 668 return Insert(AddFPMathAttributes(BinaryOperator::CreateFDiv(LHS, RHS), 669 FPMathTag, FMF), Name); 670 } 671 Value *CreateURem(Value *LHS, Value *RHS, const Twine &Name = "") { 672 if (Constant *LC = dyn_cast<Constant>(LHS)) 673 if (Constant *RC = dyn_cast<Constant>(RHS)) 674 return Insert(Folder.CreateURem(LC, RC), Name); 675 return Insert(BinaryOperator::CreateURem(LHS, RHS), Name); 676 } 677 Value *CreateSRem(Value *LHS, Value *RHS, const Twine &Name = "") { 678 if (Constant *LC = dyn_cast<Constant>(LHS)) 679 if (Constant *RC = dyn_cast<Constant>(RHS)) 680 return Insert(Folder.CreateSRem(LC, RC), Name); 681 return Insert(BinaryOperator::CreateSRem(LHS, RHS), Name); 682 } 683 Value *CreateFRem(Value *LHS, Value *RHS, const Twine &Name = "", 684 MDNode *FPMathTag = 0) { 685 if (Constant *LC = dyn_cast<Constant>(LHS)) 686 if (Constant *RC = dyn_cast<Constant>(RHS)) 687 return Insert(Folder.CreateFRem(LC, RC), Name); 688 return Insert(AddFPMathAttributes(BinaryOperator::CreateFRem(LHS, RHS), 689 FPMathTag, FMF), Name); 690 } 691 692 Value *CreateShl(Value *LHS, Value *RHS, const Twine &Name = "", 693 bool HasNUW = false, bool HasNSW = false) { 694 if (Constant *LC = dyn_cast<Constant>(LHS)) 695 if (Constant *RC = dyn_cast<Constant>(RHS)) 696 return Insert(Folder.CreateShl(LC, RC, HasNUW, HasNSW), Name); 697 return CreateInsertNUWNSWBinOp(Instruction::Shl, LHS, RHS, Name, 698 HasNUW, HasNSW); 699 } 700 Value *CreateShl(Value *LHS, const APInt &RHS, const Twine &Name = "", 701 bool HasNUW = false, bool HasNSW = false) { 702 return CreateShl(LHS, ConstantInt::get(LHS->getType(), RHS), Name, 703 HasNUW, HasNSW); 704 } 705 Value *CreateShl(Value *LHS, uint64_t RHS, const Twine &Name = "", 706 bool HasNUW = false, bool HasNSW = false) { 707 return CreateShl(LHS, ConstantInt::get(LHS->getType(), RHS), Name, 708 HasNUW, HasNSW); 709 } 710 711 Value *CreateLShr(Value *LHS, Value *RHS, const Twine &Name = "", 712 bool isExact = false) { 713 if (Constant *LC = dyn_cast<Constant>(LHS)) 714 if (Constant *RC = dyn_cast<Constant>(RHS)) 715 return Insert(Folder.CreateLShr(LC, RC, isExact), Name); 716 if (!isExact) 717 return Insert(BinaryOperator::CreateLShr(LHS, RHS), Name); 718 return Insert(BinaryOperator::CreateExactLShr(LHS, RHS), Name); 719 } 720 Value *CreateLShr(Value *LHS, const APInt &RHS, const Twine &Name = "", 721 bool isExact = false) { 722 return CreateLShr(LHS, ConstantInt::get(LHS->getType(), RHS), Name,isExact); 723 } 724 Value *CreateLShr(Value *LHS, uint64_t RHS, const Twine &Name = "", 725 bool isExact = false) { 726 return CreateLShr(LHS, ConstantInt::get(LHS->getType(), RHS), Name,isExact); 727 } 728 729 Value *CreateAShr(Value *LHS, Value *RHS, const Twine &Name = "", 730 bool isExact = false) { 731 if (Constant *LC = dyn_cast<Constant>(LHS)) 732 if (Constant *RC = dyn_cast<Constant>(RHS)) 733 return Insert(Folder.CreateAShr(LC, RC, isExact), Name); 734 if (!isExact) 735 return Insert(BinaryOperator::CreateAShr(LHS, RHS), Name); 736 return Insert(BinaryOperator::CreateExactAShr(LHS, RHS), Name); 737 } 738 Value *CreateAShr(Value *LHS, const APInt &RHS, const Twine &Name = "", 739 bool isExact = false) { 740 return CreateAShr(LHS, ConstantInt::get(LHS->getType(), RHS), Name,isExact); 741 } 742 Value *CreateAShr(Value *LHS, uint64_t RHS, const Twine &Name = "", 743 bool isExact = false) { 744 return CreateAShr(LHS, ConstantInt::get(LHS->getType(), RHS), Name,isExact); 745 } 746 747 Value *CreateAnd(Value *LHS, Value *RHS, const Twine &Name = "") { 748 if (Constant *RC = dyn_cast<Constant>(RHS)) { 749 if (isa<ConstantInt>(RC) && cast<ConstantInt>(RC)->isAllOnesValue()) 750 return LHS; // LHS & -1 -> LHS 751 if (Constant *LC = dyn_cast<Constant>(LHS)) 752 return Insert(Folder.CreateAnd(LC, RC), Name); 753 } 754 return Insert(BinaryOperator::CreateAnd(LHS, RHS), Name); 755 } 756 Value *CreateAnd(Value *LHS, const APInt &RHS, const Twine &Name = "") { 757 return CreateAnd(LHS, ConstantInt::get(LHS->getType(), RHS), Name); 758 } 759 Value *CreateAnd(Value *LHS, uint64_t RHS, const Twine &Name = "") { 760 return CreateAnd(LHS, ConstantInt::get(LHS->getType(), RHS), Name); 761 } 762 763 Value *CreateOr(Value *LHS, Value *RHS, const Twine &Name = "") { 764 if (Constant *RC = dyn_cast<Constant>(RHS)) { 765 if (RC->isNullValue()) 766 return LHS; // LHS | 0 -> LHS 767 if (Constant *LC = dyn_cast<Constant>(LHS)) 768 return Insert(Folder.CreateOr(LC, RC), Name); 769 } 770 return Insert(BinaryOperator::CreateOr(LHS, RHS), Name); 771 } 772 Value *CreateOr(Value *LHS, const APInt &RHS, const Twine &Name = "") { 773 return CreateOr(LHS, ConstantInt::get(LHS->getType(), RHS), Name); 774 } 775 Value *CreateOr(Value *LHS, uint64_t RHS, const Twine &Name = "") { 776 return CreateOr(LHS, ConstantInt::get(LHS->getType(), RHS), Name); 777 } 778 779 Value *CreateXor(Value *LHS, Value *RHS, const Twine &Name = "") { 780 if (Constant *LC = dyn_cast<Constant>(LHS)) 781 if (Constant *RC = dyn_cast<Constant>(RHS)) 782 return Insert(Folder.CreateXor(LC, RC), Name); 783 return Insert(BinaryOperator::CreateXor(LHS, RHS), Name); 784 } 785 Value *CreateXor(Value *LHS, const APInt &RHS, const Twine &Name = "") { 786 return CreateXor(LHS, ConstantInt::get(LHS->getType(), RHS), Name); 787 } 788 Value *CreateXor(Value *LHS, uint64_t RHS, const Twine &Name = "") { 789 return CreateXor(LHS, ConstantInt::get(LHS->getType(), RHS), Name); 790 } 791 792 Value *CreateBinOp(Instruction::BinaryOps Opc, 793 Value *LHS, Value *RHS, const Twine &Name = "") { 794 if (Constant *LC = dyn_cast<Constant>(LHS)) 795 if (Constant *RC = dyn_cast<Constant>(RHS)) 796 return Insert(Folder.CreateBinOp(Opc, LC, RC), Name); 797 return Insert(BinaryOperator::Create(Opc, LHS, RHS), Name); 798 } 799 800 Value *CreateNeg(Value *V, const Twine &Name = "", 801 bool HasNUW = false, bool HasNSW = false) { 802 if (Constant *VC = dyn_cast<Constant>(V)) 803 return Insert(Folder.CreateNeg(VC, HasNUW, HasNSW), Name); 804 BinaryOperator *BO = Insert(BinaryOperator::CreateNeg(V), Name); 805 if (HasNUW) BO->setHasNoUnsignedWrap(); 806 if (HasNSW) BO->setHasNoSignedWrap(); 807 return BO; 808 } 809 Value *CreateNSWNeg(Value *V, const Twine &Name = "") { 810 return CreateNeg(V, Name, false, true); 811 } 812 Value *CreateNUWNeg(Value *V, const Twine &Name = "") { 813 return CreateNeg(V, Name, true, false); 814 } 815 Value *CreateFNeg(Value *V, const Twine &Name = "", MDNode *FPMathTag = 0) { 816 if (Constant *VC = dyn_cast<Constant>(V)) 817 return Insert(Folder.CreateFNeg(VC), Name); 818 return Insert(AddFPMathAttributes(BinaryOperator::CreateFNeg(V), 819 FPMathTag, FMF), Name); 820 } 821 Value *CreateNot(Value *V, const Twine &Name = "") { 822 if (Constant *VC = dyn_cast<Constant>(V)) 823 return Insert(Folder.CreateNot(VC), Name); 824 return Insert(BinaryOperator::CreateNot(V), Name); 825 } 826 827 //===--------------------------------------------------------------------===// 828 // Instruction creation methods: Memory Instructions 829 //===--------------------------------------------------------------------===// 830 831 AllocaInst *CreateAlloca(Type *Ty, Value *ArraySize = 0, 832 const Twine &Name = "") { 833 return Insert(new AllocaInst(Ty, ArraySize), Name); 834 } 835 // \brief Provided to resolve 'CreateLoad(Ptr, "...")' correctly, instead of 836 // converting the string to 'bool' for the isVolatile parameter. 837 LoadInst *CreateLoad(Value *Ptr, const char *Name) { 838 return Insert(new LoadInst(Ptr), Name); 839 } 840 LoadInst *CreateLoad(Value *Ptr, const Twine &Name = "") { 841 return Insert(new LoadInst(Ptr), Name); 842 } 843 LoadInst *CreateLoad(Value *Ptr, bool isVolatile, const Twine &Name = "") { 844 return Insert(new LoadInst(Ptr, 0, isVolatile), Name); 845 } 846 StoreInst *CreateStore(Value *Val, Value *Ptr, bool isVolatile = false) { 847 return Insert(new StoreInst(Val, Ptr, isVolatile)); 848 } 849 // \brief Provided to resolve 'CreateAlignedLoad(Ptr, Align, "...")' 850 // correctly, instead of converting the string to 'bool' for the isVolatile 851 // parameter. 852 LoadInst *CreateAlignedLoad(Value *Ptr, unsigned Align, const char *Name) { 853 LoadInst *LI = CreateLoad(Ptr, Name); 854 LI->setAlignment(Align); 855 return LI; 856 } 857 LoadInst *CreateAlignedLoad(Value *Ptr, unsigned Align, 858 const Twine &Name = "") { 859 LoadInst *LI = CreateLoad(Ptr, Name); 860 LI->setAlignment(Align); 861 return LI; 862 } 863 LoadInst *CreateAlignedLoad(Value *Ptr, unsigned Align, bool isVolatile, 864 const Twine &Name = "") { 865 LoadInst *LI = CreateLoad(Ptr, isVolatile, Name); 866 LI->setAlignment(Align); 867 return LI; 868 } 869 StoreInst *CreateAlignedStore(Value *Val, Value *Ptr, unsigned Align, 870 bool isVolatile = false) { 871 StoreInst *SI = CreateStore(Val, Ptr, isVolatile); 872 SI->setAlignment(Align); 873 return SI; 874 } 875 FenceInst *CreateFence(AtomicOrdering Ordering, 876 SynchronizationScope SynchScope = CrossThread) { 877 return Insert(new FenceInst(Context, Ordering, SynchScope)); 878 } 879 AtomicCmpXchgInst *CreateAtomicCmpXchg(Value *Ptr, Value *Cmp, Value *New, 880 AtomicOrdering Ordering, 881 SynchronizationScope SynchScope = CrossThread) { 882 return Insert(new AtomicCmpXchgInst(Ptr, Cmp, New, Ordering, SynchScope)); 883 } 884 AtomicRMWInst *CreateAtomicRMW(AtomicRMWInst::BinOp Op, Value *Ptr, Value *Val, 885 AtomicOrdering Ordering, 886 SynchronizationScope SynchScope = CrossThread) { 887 return Insert(new AtomicRMWInst(Op, Ptr, Val, Ordering, SynchScope)); 888 } 889 Value *CreateGEP(Value *Ptr, ArrayRef<Value *> IdxList, 890 const Twine &Name = "") { 891 if (Constant *PC = dyn_cast<Constant>(Ptr)) { 892 // Every index must be constant. 893 size_t i, e; 894 for (i = 0, e = IdxList.size(); i != e; ++i) 895 if (!isa<Constant>(IdxList[i])) 896 break; 897 if (i == e) 898 return Insert(Folder.CreateGetElementPtr(PC, IdxList), Name); 899 } 900 return Insert(GetElementPtrInst::Create(Ptr, IdxList), Name); 901 } 902 Value *CreateInBoundsGEP(Value *Ptr, ArrayRef<Value *> IdxList, 903 const Twine &Name = "") { 904 if (Constant *PC = dyn_cast<Constant>(Ptr)) { 905 // Every index must be constant. 906 size_t i, e; 907 for (i = 0, e = IdxList.size(); i != e; ++i) 908 if (!isa<Constant>(IdxList[i])) 909 break; 910 if (i == e) 911 return Insert(Folder.CreateInBoundsGetElementPtr(PC, IdxList), Name); 912 } 913 return Insert(GetElementPtrInst::CreateInBounds(Ptr, IdxList), Name); 914 } 915 Value *CreateGEP(Value *Ptr, Value *Idx, const Twine &Name = "") { 916 if (Constant *PC = dyn_cast<Constant>(Ptr)) 917 if (Constant *IC = dyn_cast<Constant>(Idx)) 918 return Insert(Folder.CreateGetElementPtr(PC, IC), Name); 919 return Insert(GetElementPtrInst::Create(Ptr, Idx), Name); 920 } 921 Value *CreateInBoundsGEP(Value *Ptr, Value *Idx, const Twine &Name = "") { 922 if (Constant *PC = dyn_cast<Constant>(Ptr)) 923 if (Constant *IC = dyn_cast<Constant>(Idx)) 924 return Insert(Folder.CreateInBoundsGetElementPtr(PC, IC), Name); 925 return Insert(GetElementPtrInst::CreateInBounds(Ptr, Idx), Name); 926 } 927 Value *CreateConstGEP1_32(Value *Ptr, unsigned Idx0, const Twine &Name = "") { 928 Value *Idx = ConstantInt::get(Type::getInt32Ty(Context), Idx0); 929 930 if (Constant *PC = dyn_cast<Constant>(Ptr)) 931 return Insert(Folder.CreateGetElementPtr(PC, Idx), Name); 932 933 return Insert(GetElementPtrInst::Create(Ptr, Idx), Name); 934 } 935 Value *CreateConstInBoundsGEP1_32(Value *Ptr, unsigned Idx0, 936 const Twine &Name = "") { 937 Value *Idx = ConstantInt::get(Type::getInt32Ty(Context), Idx0); 938 939 if (Constant *PC = dyn_cast<Constant>(Ptr)) 940 return Insert(Folder.CreateInBoundsGetElementPtr(PC, Idx), Name); 941 942 return Insert(GetElementPtrInst::CreateInBounds(Ptr, Idx), Name); 943 } 944 Value *CreateConstGEP2_32(Value *Ptr, unsigned Idx0, unsigned Idx1, 945 const Twine &Name = "") { 946 Value *Idxs[] = { 947 ConstantInt::get(Type::getInt32Ty(Context), Idx0), 948 ConstantInt::get(Type::getInt32Ty(Context), Idx1) 949 }; 950 951 if (Constant *PC = dyn_cast<Constant>(Ptr)) 952 return Insert(Folder.CreateGetElementPtr(PC, Idxs), Name); 953 954 return Insert(GetElementPtrInst::Create(Ptr, Idxs), Name); 955 } 956 Value *CreateConstInBoundsGEP2_32(Value *Ptr, unsigned Idx0, unsigned Idx1, 957 const Twine &Name = "") { 958 Value *Idxs[] = { 959 ConstantInt::get(Type::getInt32Ty(Context), Idx0), 960 ConstantInt::get(Type::getInt32Ty(Context), Idx1) 961 }; 962 963 if (Constant *PC = dyn_cast<Constant>(Ptr)) 964 return Insert(Folder.CreateInBoundsGetElementPtr(PC, Idxs), Name); 965 966 return Insert(GetElementPtrInst::CreateInBounds(Ptr, Idxs), Name); 967 } 968 Value *CreateConstGEP1_64(Value *Ptr, uint64_t Idx0, const Twine &Name = "") { 969 Value *Idx = ConstantInt::get(Type::getInt64Ty(Context), Idx0); 970 971 if (Constant *PC = dyn_cast<Constant>(Ptr)) 972 return Insert(Folder.CreateGetElementPtr(PC, Idx), Name); 973 974 return Insert(GetElementPtrInst::Create(Ptr, Idx), Name); 975 } 976 Value *CreateConstInBoundsGEP1_64(Value *Ptr, uint64_t Idx0, 977 const Twine &Name = "") { 978 Value *Idx = ConstantInt::get(Type::getInt64Ty(Context), Idx0); 979 980 if (Constant *PC = dyn_cast<Constant>(Ptr)) 981 return Insert(Folder.CreateInBoundsGetElementPtr(PC, Idx), Name); 982 983 return Insert(GetElementPtrInst::CreateInBounds(Ptr, Idx), Name); 984 } 985 Value *CreateConstGEP2_64(Value *Ptr, uint64_t Idx0, uint64_t Idx1, 986 const Twine &Name = "") { 987 Value *Idxs[] = { 988 ConstantInt::get(Type::getInt64Ty(Context), Idx0), 989 ConstantInt::get(Type::getInt64Ty(Context), Idx1) 990 }; 991 992 if (Constant *PC = dyn_cast<Constant>(Ptr)) 993 return Insert(Folder.CreateGetElementPtr(PC, Idxs), Name); 994 995 return Insert(GetElementPtrInst::Create(Ptr, Idxs), Name); 996 } 997 Value *CreateConstInBoundsGEP2_64(Value *Ptr, uint64_t Idx0, uint64_t Idx1, 998 const Twine &Name = "") { 999 Value *Idxs[] = { 1000 ConstantInt::get(Type::getInt64Ty(Context), Idx0), 1001 ConstantInt::get(Type::getInt64Ty(Context), Idx1) 1002 }; 1003 1004 if (Constant *PC = dyn_cast<Constant>(Ptr)) 1005 return Insert(Folder.CreateInBoundsGetElementPtr(PC, Idxs), Name); 1006 1007 return Insert(GetElementPtrInst::CreateInBounds(Ptr, Idxs), Name); 1008 } 1009 Value *CreateStructGEP(Value *Ptr, unsigned Idx, const Twine &Name = "") { 1010 return CreateConstInBoundsGEP2_32(Ptr, 0, Idx, Name); 1011 } 1012 1013 /// \brief Same as CreateGlobalString, but return a pointer with "i8*" type 1014 /// instead of a pointer to array of i8. 1015 Value *CreateGlobalStringPtr(StringRef Str, const Twine &Name = "") { 1016 Value *gv = CreateGlobalString(Str, Name); 1017 Value *zero = ConstantInt::get(Type::getInt32Ty(Context), 0); 1018 Value *Args[] = { zero, zero }; 1019 return CreateInBoundsGEP(gv, Args, Name); 1020 } 1021 1022 //===--------------------------------------------------------------------===// 1023 // Instruction creation methods: Cast/Conversion Operators 1024 //===--------------------------------------------------------------------===// 1025 1026 Value *CreateTrunc(Value *V, Type *DestTy, const Twine &Name = "") { 1027 return CreateCast(Instruction::Trunc, V, DestTy, Name); 1028 } 1029 Value *CreateZExt(Value *V, Type *DestTy, const Twine &Name = "") { 1030 return CreateCast(Instruction::ZExt, V, DestTy, Name); 1031 } 1032 Value *CreateSExt(Value *V, Type *DestTy, const Twine &Name = "") { 1033 return CreateCast(Instruction::SExt, V, DestTy, Name); 1034 } 1035 /// \brief Create a ZExt or Trunc from the integer value V to DestTy. Return 1036 /// the value untouched if the type of V is already DestTy. 1037 Value *CreateZExtOrTrunc(Value *V, Type *DestTy, 1038 const Twine &Name = "") { 1039 assert(V->getType()->isIntOrIntVectorTy() && 1040 DestTy->isIntOrIntVectorTy() && 1041 "Can only zero extend/truncate integers!"); 1042 Type *VTy = V->getType(); 1043 if (VTy->getScalarSizeInBits() < DestTy->getScalarSizeInBits()) 1044 return CreateZExt(V, DestTy, Name); 1045 if (VTy->getScalarSizeInBits() > DestTy->getScalarSizeInBits()) 1046 return CreateTrunc(V, DestTy, Name); 1047 return V; 1048 } 1049 /// \brief Create a SExt or Trunc from the integer value V to DestTy. Return 1050 /// the value untouched if the type of V is already DestTy. 1051 Value *CreateSExtOrTrunc(Value *V, Type *DestTy, 1052 const Twine &Name = "") { 1053 assert(V->getType()->isIntOrIntVectorTy() && 1054 DestTy->isIntOrIntVectorTy() && 1055 "Can only sign extend/truncate integers!"); 1056 Type *VTy = V->getType(); 1057 if (VTy->getScalarSizeInBits() < DestTy->getScalarSizeInBits()) 1058 return CreateSExt(V, DestTy, Name); 1059 if (VTy->getScalarSizeInBits() > DestTy->getScalarSizeInBits()) 1060 return CreateTrunc(V, DestTy, Name); 1061 return V; 1062 } 1063 Value *CreateFPToUI(Value *V, Type *DestTy, const Twine &Name = ""){ 1064 return CreateCast(Instruction::FPToUI, V, DestTy, Name); 1065 } 1066 Value *CreateFPToSI(Value *V, Type *DestTy, const Twine &Name = ""){ 1067 return CreateCast(Instruction::FPToSI, V, DestTy, Name); 1068 } 1069 Value *CreateUIToFP(Value *V, Type *DestTy, const Twine &Name = ""){ 1070 return CreateCast(Instruction::UIToFP, V, DestTy, Name); 1071 } 1072 Value *CreateSIToFP(Value *V, Type *DestTy, const Twine &Name = ""){ 1073 return CreateCast(Instruction::SIToFP, V, DestTy, Name); 1074 } 1075 Value *CreateFPTrunc(Value *V, Type *DestTy, 1076 const Twine &Name = "") { 1077 return CreateCast(Instruction::FPTrunc, V, DestTy, Name); 1078 } 1079 Value *CreateFPExt(Value *V, Type *DestTy, const Twine &Name = "") { 1080 return CreateCast(Instruction::FPExt, V, DestTy, Name); 1081 } 1082 Value *CreatePtrToInt(Value *V, Type *DestTy, 1083 const Twine &Name = "") { 1084 return CreateCast(Instruction::PtrToInt, V, DestTy, Name); 1085 } 1086 Value *CreateIntToPtr(Value *V, Type *DestTy, 1087 const Twine &Name = "") { 1088 return CreateCast(Instruction::IntToPtr, V, DestTy, Name); 1089 } 1090 Value *CreateBitCast(Value *V, Type *DestTy, 1091 const Twine &Name = "") { 1092 return CreateCast(Instruction::BitCast, V, DestTy, Name); 1093 } 1094 Value *CreateZExtOrBitCast(Value *V, Type *DestTy, 1095 const Twine &Name = "") { 1096 if (V->getType() == DestTy) 1097 return V; 1098 if (Constant *VC = dyn_cast<Constant>(V)) 1099 return Insert(Folder.CreateZExtOrBitCast(VC, DestTy), Name); 1100 return Insert(CastInst::CreateZExtOrBitCast(V, DestTy), Name); 1101 } 1102 Value *CreateSExtOrBitCast(Value *V, Type *DestTy, 1103 const Twine &Name = "") { 1104 if (V->getType() == DestTy) 1105 return V; 1106 if (Constant *VC = dyn_cast<Constant>(V)) 1107 return Insert(Folder.CreateSExtOrBitCast(VC, DestTy), Name); 1108 return Insert(CastInst::CreateSExtOrBitCast(V, DestTy), Name); 1109 } 1110 Value *CreateTruncOrBitCast(Value *V, Type *DestTy, 1111 const Twine &Name = "") { 1112 if (V->getType() == DestTy) 1113 return V; 1114 if (Constant *VC = dyn_cast<Constant>(V)) 1115 return Insert(Folder.CreateTruncOrBitCast(VC, DestTy), Name); 1116 return Insert(CastInst::CreateTruncOrBitCast(V, DestTy), Name); 1117 } 1118 Value *CreateCast(Instruction::CastOps Op, Value *V, Type *DestTy, 1119 const Twine &Name = "") { 1120 if (V->getType() == DestTy) 1121 return V; 1122 if (Constant *VC = dyn_cast<Constant>(V)) 1123 return Insert(Folder.CreateCast(Op, VC, DestTy), Name); 1124 return Insert(CastInst::Create(Op, V, DestTy), Name); 1125 } 1126 Value *CreatePointerCast(Value *V, Type *DestTy, 1127 const Twine &Name = "") { 1128 if (V->getType() == DestTy) 1129 return V; 1130 if (Constant *VC = dyn_cast<Constant>(V)) 1131 return Insert(Folder.CreatePointerCast(VC, DestTy), Name); 1132 return Insert(CastInst::CreatePointerCast(V, DestTy), Name); 1133 } 1134 Value *CreateIntCast(Value *V, Type *DestTy, bool isSigned, 1135 const Twine &Name = "") { 1136 if (V->getType() == DestTy) 1137 return V; 1138 if (Constant *VC = dyn_cast<Constant>(V)) 1139 return Insert(Folder.CreateIntCast(VC, DestTy, isSigned), Name); 1140 return Insert(CastInst::CreateIntegerCast(V, DestTy, isSigned), Name); 1141 } 1142 private: 1143 // \brief Provided to resolve 'CreateIntCast(Ptr, Ptr, "...")', giving a 1144 // compile time error, instead of converting the string to bool for the 1145 // isSigned parameter. 1146 Value *CreateIntCast(Value *, Type *, const char *) LLVM_DELETED_FUNCTION; 1147 public: 1148 Value *CreateFPCast(Value *V, Type *DestTy, const Twine &Name = "") { 1149 if (V->getType() == DestTy) 1150 return V; 1151 if (Constant *VC = dyn_cast<Constant>(V)) 1152 return Insert(Folder.CreateFPCast(VC, DestTy), Name); 1153 return Insert(CastInst::CreateFPCast(V, DestTy), Name); 1154 } 1155 1156 //===--------------------------------------------------------------------===// 1157 // Instruction creation methods: Compare Instructions 1158 //===--------------------------------------------------------------------===// 1159 1160 Value *CreateICmpEQ(Value *LHS, Value *RHS, const Twine &Name = "") { 1161 return CreateICmp(ICmpInst::ICMP_EQ, LHS, RHS, Name); 1162 } 1163 Value *CreateICmpNE(Value *LHS, Value *RHS, const Twine &Name = "") { 1164 return CreateICmp(ICmpInst::ICMP_NE, LHS, RHS, Name); 1165 } 1166 Value *CreateICmpUGT(Value *LHS, Value *RHS, const Twine &Name = "") { 1167 return CreateICmp(ICmpInst::ICMP_UGT, LHS, RHS, Name); 1168 } 1169 Value *CreateICmpUGE(Value *LHS, Value *RHS, const Twine &Name = "") { 1170 return CreateICmp(ICmpInst::ICMP_UGE, LHS, RHS, Name); 1171 } 1172 Value *CreateICmpULT(Value *LHS, Value *RHS, const Twine &Name = "") { 1173 return CreateICmp(ICmpInst::ICMP_ULT, LHS, RHS, Name); 1174 } 1175 Value *CreateICmpULE(Value *LHS, Value *RHS, const Twine &Name = "") { 1176 return CreateICmp(ICmpInst::ICMP_ULE, LHS, RHS, Name); 1177 } 1178 Value *CreateICmpSGT(Value *LHS, Value *RHS, const Twine &Name = "") { 1179 return CreateICmp(ICmpInst::ICMP_SGT, LHS, RHS, Name); 1180 } 1181 Value *CreateICmpSGE(Value *LHS, Value *RHS, const Twine &Name = "") { 1182 return CreateICmp(ICmpInst::ICMP_SGE, LHS, RHS, Name); 1183 } 1184 Value *CreateICmpSLT(Value *LHS, Value *RHS, const Twine &Name = "") { 1185 return CreateICmp(ICmpInst::ICMP_SLT, LHS, RHS, Name); 1186 } 1187 Value *CreateICmpSLE(Value *LHS, Value *RHS, const Twine &Name = "") { 1188 return CreateICmp(ICmpInst::ICMP_SLE, LHS, RHS, Name); 1189 } 1190 1191 Value *CreateFCmpOEQ(Value *LHS, Value *RHS, const Twine &Name = "") { 1192 return CreateFCmp(FCmpInst::FCMP_OEQ, LHS, RHS, Name); 1193 } 1194 Value *CreateFCmpOGT(Value *LHS, Value *RHS, const Twine &Name = "") { 1195 return CreateFCmp(FCmpInst::FCMP_OGT, LHS, RHS, Name); 1196 } 1197 Value *CreateFCmpOGE(Value *LHS, Value *RHS, const Twine &Name = "") { 1198 return CreateFCmp(FCmpInst::FCMP_OGE, LHS, RHS, Name); 1199 } 1200 Value *CreateFCmpOLT(Value *LHS, Value *RHS, const Twine &Name = "") { 1201 return CreateFCmp(FCmpInst::FCMP_OLT, LHS, RHS, Name); 1202 } 1203 Value *CreateFCmpOLE(Value *LHS, Value *RHS, const Twine &Name = "") { 1204 return CreateFCmp(FCmpInst::FCMP_OLE, LHS, RHS, Name); 1205 } 1206 Value *CreateFCmpONE(Value *LHS, Value *RHS, const Twine &Name = "") { 1207 return CreateFCmp(FCmpInst::FCMP_ONE, LHS, RHS, Name); 1208 } 1209 Value *CreateFCmpORD(Value *LHS, Value *RHS, const Twine &Name = "") { 1210 return CreateFCmp(FCmpInst::FCMP_ORD, LHS, RHS, Name); 1211 } 1212 Value *CreateFCmpUNO(Value *LHS, Value *RHS, const Twine &Name = "") { 1213 return CreateFCmp(FCmpInst::FCMP_UNO, LHS, RHS, Name); 1214 } 1215 Value *CreateFCmpUEQ(Value *LHS, Value *RHS, const Twine &Name = "") { 1216 return CreateFCmp(FCmpInst::FCMP_UEQ, LHS, RHS, Name); 1217 } 1218 Value *CreateFCmpUGT(Value *LHS, Value *RHS, const Twine &Name = "") { 1219 return CreateFCmp(FCmpInst::FCMP_UGT, LHS, RHS, Name); 1220 } 1221 Value *CreateFCmpUGE(Value *LHS, Value *RHS, const Twine &Name = "") { 1222 return CreateFCmp(FCmpInst::FCMP_UGE, LHS, RHS, Name); 1223 } 1224 Value *CreateFCmpULT(Value *LHS, Value *RHS, const Twine &Name = "") { 1225 return CreateFCmp(FCmpInst::FCMP_ULT, LHS, RHS, Name); 1226 } 1227 Value *CreateFCmpULE(Value *LHS, Value *RHS, const Twine &Name = "") { 1228 return CreateFCmp(FCmpInst::FCMP_ULE, LHS, RHS, Name); 1229 } 1230 Value *CreateFCmpUNE(Value *LHS, Value *RHS, const Twine &Name = "") { 1231 return CreateFCmp(FCmpInst::FCMP_UNE, LHS, RHS, Name); 1232 } 1233 1234 Value *CreateICmp(CmpInst::Predicate P, Value *LHS, Value *RHS, 1235 const Twine &Name = "") { 1236 if (Constant *LC = dyn_cast<Constant>(LHS)) 1237 if (Constant *RC = dyn_cast<Constant>(RHS)) 1238 return Insert(Folder.CreateICmp(P, LC, RC), Name); 1239 return Insert(new ICmpInst(P, LHS, RHS), Name); 1240 } 1241 Value *CreateFCmp(CmpInst::Predicate P, Value *LHS, Value *RHS, 1242 const Twine &Name = "") { 1243 if (Constant *LC = dyn_cast<Constant>(LHS)) 1244 if (Constant *RC = dyn_cast<Constant>(RHS)) 1245 return Insert(Folder.CreateFCmp(P, LC, RC), Name); 1246 return Insert(new FCmpInst(P, LHS, RHS), Name); 1247 } 1248 1249 //===--------------------------------------------------------------------===// 1250 // Instruction creation methods: Other Instructions 1251 //===--------------------------------------------------------------------===// 1252 1253 PHINode *CreatePHI(Type *Ty, unsigned NumReservedValues, 1254 const Twine &Name = "") { 1255 return Insert(PHINode::Create(Ty, NumReservedValues), Name); 1256 } 1257 1258 CallInst *CreateCall(Value *Callee, const Twine &Name = "") { 1259 return Insert(CallInst::Create(Callee), Name); 1260 } 1261 CallInst *CreateCall(Value *Callee, Value *Arg, const Twine &Name = "") { 1262 return Insert(CallInst::Create(Callee, Arg), Name); 1263 } 1264 CallInst *CreateCall2(Value *Callee, Value *Arg1, Value *Arg2, 1265 const Twine &Name = "") { 1266 Value *Args[] = { Arg1, Arg2 }; 1267 return Insert(CallInst::Create(Callee, Args), Name); 1268 } 1269 CallInst *CreateCall3(Value *Callee, Value *Arg1, Value *Arg2, Value *Arg3, 1270 const Twine &Name = "") { 1271 Value *Args[] = { Arg1, Arg2, Arg3 }; 1272 return Insert(CallInst::Create(Callee, Args), Name); 1273 } 1274 CallInst *CreateCall4(Value *Callee, Value *Arg1, Value *Arg2, Value *Arg3, 1275 Value *Arg4, const Twine &Name = "") { 1276 Value *Args[] = { Arg1, Arg2, Arg3, Arg4 }; 1277 return Insert(CallInst::Create(Callee, Args), Name); 1278 } 1279 CallInst *CreateCall5(Value *Callee, Value *Arg1, Value *Arg2, Value *Arg3, 1280 Value *Arg4, Value *Arg5, const Twine &Name = "") { 1281 Value *Args[] = { Arg1, Arg2, Arg3, Arg4, Arg5 }; 1282 return Insert(CallInst::Create(Callee, Args), Name); 1283 } 1284 1285 CallInst *CreateCall(Value *Callee, ArrayRef<Value *> Args, 1286 const Twine &Name = "") { 1287 return Insert(CallInst::Create(Callee, Args), Name); 1288 } 1289 1290 Value *CreateSelect(Value *C, Value *True, Value *False, 1291 const Twine &Name = "") { 1292 if (Constant *CC = dyn_cast<Constant>(C)) 1293 if (Constant *TC = dyn_cast<Constant>(True)) 1294 if (Constant *FC = dyn_cast<Constant>(False)) 1295 return Insert(Folder.CreateSelect(CC, TC, FC), Name); 1296 return Insert(SelectInst::Create(C, True, False), Name); 1297 } 1298 1299 VAArgInst *CreateVAArg(Value *List, Type *Ty, const Twine &Name = "") { 1300 return Insert(new VAArgInst(List, Ty), Name); 1301 } 1302 1303 Value *CreateExtractElement(Value *Vec, Value *Idx, 1304 const Twine &Name = "") { 1305 if (Constant *VC = dyn_cast<Constant>(Vec)) 1306 if (Constant *IC = dyn_cast<Constant>(Idx)) 1307 return Insert(Folder.CreateExtractElement(VC, IC), Name); 1308 return Insert(ExtractElementInst::Create(Vec, Idx), Name); 1309 } 1310 1311 Value *CreateInsertElement(Value *Vec, Value *NewElt, Value *Idx, 1312 const Twine &Name = "") { 1313 if (Constant *VC = dyn_cast<Constant>(Vec)) 1314 if (Constant *NC = dyn_cast<Constant>(NewElt)) 1315 if (Constant *IC = dyn_cast<Constant>(Idx)) 1316 return Insert(Folder.CreateInsertElement(VC, NC, IC), Name); 1317 return Insert(InsertElementInst::Create(Vec, NewElt, Idx), Name); 1318 } 1319 1320 Value *CreateShuffleVector(Value *V1, Value *V2, Value *Mask, 1321 const Twine &Name = "") { 1322 if (Constant *V1C = dyn_cast<Constant>(V1)) 1323 if (Constant *V2C = dyn_cast<Constant>(V2)) 1324 if (Constant *MC = dyn_cast<Constant>(Mask)) 1325 return Insert(Folder.CreateShuffleVector(V1C, V2C, MC), Name); 1326 return Insert(new ShuffleVectorInst(V1, V2, Mask), Name); 1327 } 1328 1329 Value *CreateExtractValue(Value *Agg, 1330 ArrayRef<unsigned> Idxs, 1331 const Twine &Name = "") { 1332 if (Constant *AggC = dyn_cast<Constant>(Agg)) 1333 return Insert(Folder.CreateExtractValue(AggC, Idxs), Name); 1334 return Insert(ExtractValueInst::Create(Agg, Idxs), Name); 1335 } 1336 1337 Value *CreateInsertValue(Value *Agg, Value *Val, 1338 ArrayRef<unsigned> Idxs, 1339 const Twine &Name = "") { 1340 if (Constant *AggC = dyn_cast<Constant>(Agg)) 1341 if (Constant *ValC = dyn_cast<Constant>(Val)) 1342 return Insert(Folder.CreateInsertValue(AggC, ValC, Idxs), Name); 1343 return Insert(InsertValueInst::Create(Agg, Val, Idxs), Name); 1344 } 1345 1346 LandingPadInst *CreateLandingPad(Type *Ty, Value *PersFn, unsigned NumClauses, 1347 const Twine &Name = "") { 1348 return Insert(LandingPadInst::Create(Ty, PersFn, NumClauses), Name); 1349 } 1350 1351 //===--------------------------------------------------------------------===// 1352 // Utility creation methods 1353 //===--------------------------------------------------------------------===// 1354 1355 /// \brief Return an i1 value testing if \p Arg is null. 1356 Value *CreateIsNull(Value *Arg, const Twine &Name = "") { 1357 return CreateICmpEQ(Arg, Constant::getNullValue(Arg->getType()), 1358 Name); 1359 } 1360 1361 /// \brief Return an i1 value testing if \p Arg is not null. 1362 Value *CreateIsNotNull(Value *Arg, const Twine &Name = "") { 1363 return CreateICmpNE(Arg, Constant::getNullValue(Arg->getType()), 1364 Name); 1365 } 1366 1367 /// \brief Return the i64 difference between two pointer values, dividing out 1368 /// the size of the pointed-to objects. 1369 /// 1370 /// This is intended to implement C-style pointer subtraction. As such, the 1371 /// pointers must be appropriately aligned for their element types and 1372 /// pointing into the same object. 1373 Value *CreatePtrDiff(Value *LHS, Value *RHS, const Twine &Name = "") { 1374 assert(LHS->getType() == RHS->getType() && 1375 "Pointer subtraction operand types must match!"); 1376 PointerType *ArgType = cast<PointerType>(LHS->getType()); 1377 Value *LHS_int = CreatePtrToInt(LHS, Type::getInt64Ty(Context)); 1378 Value *RHS_int = CreatePtrToInt(RHS, Type::getInt64Ty(Context)); 1379 Value *Difference = CreateSub(LHS_int, RHS_int); 1380 return CreateExactSDiv(Difference, 1381 ConstantExpr::getSizeOf(ArgType->getElementType()), 1382 Name); 1383 } 1384 1385 /// \brief Return a vector value that contains \arg V broadcasted to \p 1386 /// NumElts elements. 1387 Value *CreateVectorSplat(unsigned NumElts, Value *V, const Twine &Name = "") { 1388 assert(NumElts > 0 && "Cannot splat to an empty vector!"); 1389 1390 // First insert it into an undef vector so we can shuffle it. 1391 Type *I32Ty = getInt32Ty(); 1392 Value *Undef = UndefValue::get(VectorType::get(V->getType(), NumElts)); 1393 V = CreateInsertElement(Undef, V, ConstantInt::get(I32Ty, 0), 1394 Name + ".splatinsert"); 1395 1396 // Shuffle the value across the desired number of elements. 1397 Value *Zeros = ConstantAggregateZero::get(VectorType::get(I32Ty, NumElts)); 1398 return CreateShuffleVector(V, Undef, Zeros, Name + ".splat"); 1399 } 1400 }; 1401 1402 // Create wrappers for C Binding types (see CBindingWrapping.h). 1403 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(IRBuilder<>, LLVMBuilderRef) 1404 1405 } 1406 1407 #endif 1408