1 //===-- Instructions.cpp - Implement the LLVM instructions ----------------===// 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 implements all of the non-inline methods for the LLVM instruction 11 // classes. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #include "llvm/IR/Instructions.h" 16 #include "LLVMContextImpl.h" 17 #include "llvm/IR/CallSite.h" 18 #include "llvm/IR/ConstantRange.h" 19 #include "llvm/IR/Constants.h" 20 #include "llvm/IR/DataLayout.h" 21 #include "llvm/IR/DerivedTypes.h" 22 #include "llvm/IR/Function.h" 23 #include "llvm/IR/Module.h" 24 #include "llvm/IR/Operator.h" 25 #include "llvm/Support/ErrorHandling.h" 26 #include "llvm/Support/MathExtras.h" 27 using namespace llvm; 28 29 //===----------------------------------------------------------------------===// 30 // CallSite Class 31 //===----------------------------------------------------------------------===// 32 33 User::op_iterator CallSite::getCallee() const { 34 Instruction *II(getInstruction()); 35 return isCall() 36 ? cast<CallInst>(II)->op_end() - 1 // Skip Callee 37 : cast<InvokeInst>(II)->op_end() - 3; // Skip BB, BB, Callee 38 } 39 40 //===----------------------------------------------------------------------===// 41 // TerminatorInst Class 42 //===----------------------------------------------------------------------===// 43 44 // Out of line virtual method, so the vtable, etc has a home. 45 TerminatorInst::~TerminatorInst() { 46 } 47 48 //===----------------------------------------------------------------------===// 49 // UnaryInstruction Class 50 //===----------------------------------------------------------------------===// 51 52 // Out of line virtual method, so the vtable, etc has a home. 53 UnaryInstruction::~UnaryInstruction() { 54 } 55 56 //===----------------------------------------------------------------------===// 57 // SelectInst Class 58 //===----------------------------------------------------------------------===// 59 60 /// areInvalidOperands - Return a string if the specified operands are invalid 61 /// for a select operation, otherwise return null. 62 const char *SelectInst::areInvalidOperands(Value *Op0, Value *Op1, Value *Op2) { 63 if (Op1->getType() != Op2->getType()) 64 return "both values to select must have same type"; 65 66 if (VectorType *VT = dyn_cast<VectorType>(Op0->getType())) { 67 // Vector select. 68 if (VT->getElementType() != Type::getInt1Ty(Op0->getContext())) 69 return "vector select condition element type must be i1"; 70 VectorType *ET = dyn_cast<VectorType>(Op1->getType()); 71 if (!ET) 72 return "selected values for vector select must be vectors"; 73 if (ET->getNumElements() != VT->getNumElements()) 74 return "vector select requires selected vectors to have " 75 "the same vector length as select condition"; 76 } else if (Op0->getType() != Type::getInt1Ty(Op0->getContext())) { 77 return "select condition must be i1 or <n x i1>"; 78 } 79 return nullptr; 80 } 81 82 83 //===----------------------------------------------------------------------===// 84 // PHINode Class 85 //===----------------------------------------------------------------------===// 86 87 PHINode::PHINode(const PHINode &PN) 88 : Instruction(PN.getType(), Instruction::PHI, 89 allocHungoffUses(PN.getNumOperands()), PN.getNumOperands()), 90 ReservedSpace(PN.getNumOperands()) { 91 std::copy(PN.op_begin(), PN.op_end(), op_begin()); 92 std::copy(PN.block_begin(), PN.block_end(), block_begin()); 93 SubclassOptionalData = PN.SubclassOptionalData; 94 } 95 96 PHINode::~PHINode() { 97 dropHungoffUses(); 98 } 99 100 Use *PHINode::allocHungoffUses(unsigned N) const { 101 // Allocate the array of Uses of the incoming values, followed by a pointer 102 // (with bottom bit set) to the User, followed by the array of pointers to 103 // the incoming basic blocks. 104 size_t size = N * sizeof(Use) + sizeof(Use::UserRef) 105 + N * sizeof(BasicBlock*); 106 Use *Begin = static_cast<Use*>(::operator new(size)); 107 Use *End = Begin + N; 108 (void) new(End) Use::UserRef(const_cast<PHINode*>(this), 1); 109 return Use::initTags(Begin, End); 110 } 111 112 // removeIncomingValue - Remove an incoming value. This is useful if a 113 // predecessor basic block is deleted. 114 Value *PHINode::removeIncomingValue(unsigned Idx, bool DeletePHIIfEmpty) { 115 Value *Removed = getIncomingValue(Idx); 116 117 // Move everything after this operand down. 118 // 119 // FIXME: we could just swap with the end of the list, then erase. However, 120 // clients might not expect this to happen. The code as it is thrashes the 121 // use/def lists, which is kinda lame. 122 std::copy(op_begin() + Idx + 1, op_end(), op_begin() + Idx); 123 std::copy(block_begin() + Idx + 1, block_end(), block_begin() + Idx); 124 125 // Nuke the last value. 126 Op<-1>().set(nullptr); 127 --NumOperands; 128 129 // If the PHI node is dead, because it has zero entries, nuke it now. 130 if (getNumOperands() == 0 && DeletePHIIfEmpty) { 131 // If anyone is using this PHI, make them use a dummy value instead... 132 replaceAllUsesWith(UndefValue::get(getType())); 133 eraseFromParent(); 134 } 135 return Removed; 136 } 137 138 /// growOperands - grow operands - This grows the operand list in response 139 /// to a push_back style of operation. This grows the number of ops by 1.5 140 /// times. 141 /// 142 void PHINode::growOperands() { 143 unsigned e = getNumOperands(); 144 unsigned NumOps = e + e / 2; 145 if (NumOps < 2) NumOps = 2; // 2 op PHI nodes are VERY common. 146 147 Use *OldOps = op_begin(); 148 BasicBlock **OldBlocks = block_begin(); 149 150 ReservedSpace = NumOps; 151 OperandList = allocHungoffUses(ReservedSpace); 152 153 std::copy(OldOps, OldOps + e, op_begin()); 154 std::copy(OldBlocks, OldBlocks + e, block_begin()); 155 156 Use::zap(OldOps, OldOps + e, true); 157 } 158 159 /// hasConstantValue - If the specified PHI node always merges together the same 160 /// value, return the value, otherwise return null. 161 Value *PHINode::hasConstantValue() const { 162 // Exploit the fact that phi nodes always have at least one entry. 163 Value *ConstantValue = getIncomingValue(0); 164 for (unsigned i = 1, e = getNumIncomingValues(); i != e; ++i) 165 if (getIncomingValue(i) != ConstantValue && getIncomingValue(i) != this) { 166 if (ConstantValue != this) 167 return nullptr; // Incoming values not all the same. 168 // The case where the first value is this PHI. 169 ConstantValue = getIncomingValue(i); 170 } 171 if (ConstantValue == this) 172 return UndefValue::get(getType()); 173 return ConstantValue; 174 } 175 176 //===----------------------------------------------------------------------===// 177 // LandingPadInst Implementation 178 //===----------------------------------------------------------------------===// 179 180 LandingPadInst::LandingPadInst(Type *RetTy, Value *PersonalityFn, 181 unsigned NumReservedValues, const Twine &NameStr, 182 Instruction *InsertBefore) 183 : Instruction(RetTy, Instruction::LandingPad, nullptr, 0, InsertBefore) { 184 init(PersonalityFn, 1 + NumReservedValues, NameStr); 185 } 186 187 LandingPadInst::LandingPadInst(Type *RetTy, Value *PersonalityFn, 188 unsigned NumReservedValues, const Twine &NameStr, 189 BasicBlock *InsertAtEnd) 190 : Instruction(RetTy, Instruction::LandingPad, nullptr, 0, InsertAtEnd) { 191 init(PersonalityFn, 1 + NumReservedValues, NameStr); 192 } 193 194 LandingPadInst::LandingPadInst(const LandingPadInst &LP) 195 : Instruction(LP.getType(), Instruction::LandingPad, 196 allocHungoffUses(LP.getNumOperands()), LP.getNumOperands()), 197 ReservedSpace(LP.getNumOperands()) { 198 Use *OL = OperandList, *InOL = LP.OperandList; 199 for (unsigned I = 0, E = ReservedSpace; I != E; ++I) 200 OL[I] = InOL[I]; 201 202 setCleanup(LP.isCleanup()); 203 } 204 205 LandingPadInst::~LandingPadInst() { 206 dropHungoffUses(); 207 } 208 209 LandingPadInst *LandingPadInst::Create(Type *RetTy, Value *PersonalityFn, 210 unsigned NumReservedClauses, 211 const Twine &NameStr, 212 Instruction *InsertBefore) { 213 return new LandingPadInst(RetTy, PersonalityFn, NumReservedClauses, NameStr, 214 InsertBefore); 215 } 216 217 LandingPadInst *LandingPadInst::Create(Type *RetTy, Value *PersonalityFn, 218 unsigned NumReservedClauses, 219 const Twine &NameStr, 220 BasicBlock *InsertAtEnd) { 221 return new LandingPadInst(RetTy, PersonalityFn, NumReservedClauses, NameStr, 222 InsertAtEnd); 223 } 224 225 void LandingPadInst::init(Value *PersFn, unsigned NumReservedValues, 226 const Twine &NameStr) { 227 ReservedSpace = NumReservedValues; 228 NumOperands = 1; 229 OperandList = allocHungoffUses(ReservedSpace); 230 OperandList[0] = PersFn; 231 setName(NameStr); 232 setCleanup(false); 233 } 234 235 /// growOperands - grow operands - This grows the operand list in response to a 236 /// push_back style of operation. This grows the number of ops by 2 times. 237 void LandingPadInst::growOperands(unsigned Size) { 238 unsigned e = getNumOperands(); 239 if (ReservedSpace >= e + Size) return; 240 ReservedSpace = (e + Size / 2) * 2; 241 242 Use *NewOps = allocHungoffUses(ReservedSpace); 243 Use *OldOps = OperandList; 244 for (unsigned i = 0; i != e; ++i) 245 NewOps[i] = OldOps[i]; 246 247 OperandList = NewOps; 248 Use::zap(OldOps, OldOps + e, true); 249 } 250 251 void LandingPadInst::addClause(Constant *Val) { 252 unsigned OpNo = getNumOperands(); 253 growOperands(1); 254 assert(OpNo < ReservedSpace && "Growing didn't work!"); 255 ++NumOperands; 256 OperandList[OpNo] = Val; 257 } 258 259 //===----------------------------------------------------------------------===// 260 // CallInst Implementation 261 //===----------------------------------------------------------------------===// 262 263 CallInst::~CallInst() { 264 } 265 266 void CallInst::init(Value *Func, ArrayRef<Value *> Args, const Twine &NameStr) { 267 assert(NumOperands == Args.size() + 1 && "NumOperands not set up?"); 268 Op<-1>() = Func; 269 270 #ifndef NDEBUG 271 FunctionType *FTy = 272 cast<FunctionType>(cast<PointerType>(Func->getType())->getElementType()); 273 274 assert((Args.size() == FTy->getNumParams() || 275 (FTy->isVarArg() && Args.size() > FTy->getNumParams())) && 276 "Calling a function with bad signature!"); 277 278 for (unsigned i = 0; i != Args.size(); ++i) 279 assert((i >= FTy->getNumParams() || 280 FTy->getParamType(i) == Args[i]->getType()) && 281 "Calling a function with a bad signature!"); 282 #endif 283 284 std::copy(Args.begin(), Args.end(), op_begin()); 285 setName(NameStr); 286 } 287 288 void CallInst::init(Value *Func, const Twine &NameStr) { 289 assert(NumOperands == 1 && "NumOperands not set up?"); 290 Op<-1>() = Func; 291 292 #ifndef NDEBUG 293 FunctionType *FTy = 294 cast<FunctionType>(cast<PointerType>(Func->getType())->getElementType()); 295 296 assert(FTy->getNumParams() == 0 && "Calling a function with bad signature"); 297 #endif 298 299 setName(NameStr); 300 } 301 302 CallInst::CallInst(Value *Func, const Twine &Name, 303 Instruction *InsertBefore) 304 : Instruction(cast<FunctionType>(cast<PointerType>(Func->getType()) 305 ->getElementType())->getReturnType(), 306 Instruction::Call, 307 OperandTraits<CallInst>::op_end(this) - 1, 308 1, InsertBefore) { 309 init(Func, Name); 310 } 311 312 CallInst::CallInst(Value *Func, const Twine &Name, 313 BasicBlock *InsertAtEnd) 314 : Instruction(cast<FunctionType>(cast<PointerType>(Func->getType()) 315 ->getElementType())->getReturnType(), 316 Instruction::Call, 317 OperandTraits<CallInst>::op_end(this) - 1, 318 1, InsertAtEnd) { 319 init(Func, Name); 320 } 321 322 CallInst::CallInst(const CallInst &CI) 323 : Instruction(CI.getType(), Instruction::Call, 324 OperandTraits<CallInst>::op_end(this) - CI.getNumOperands(), 325 CI.getNumOperands()) { 326 setAttributes(CI.getAttributes()); 327 setTailCallKind(CI.getTailCallKind()); 328 setCallingConv(CI.getCallingConv()); 329 330 std::copy(CI.op_begin(), CI.op_end(), op_begin()); 331 SubclassOptionalData = CI.SubclassOptionalData; 332 } 333 334 void CallInst::addAttribute(unsigned i, Attribute::AttrKind attr) { 335 AttributeSet PAL = getAttributes(); 336 PAL = PAL.addAttribute(getContext(), i, attr); 337 setAttributes(PAL); 338 } 339 340 void CallInst::removeAttribute(unsigned i, Attribute attr) { 341 AttributeSet PAL = getAttributes(); 342 AttrBuilder B(attr); 343 LLVMContext &Context = getContext(); 344 PAL = PAL.removeAttributes(Context, i, 345 AttributeSet::get(Context, i, B)); 346 setAttributes(PAL); 347 } 348 349 bool CallInst::hasFnAttrImpl(Attribute::AttrKind A) const { 350 if (AttributeList.hasAttribute(AttributeSet::FunctionIndex, A)) 351 return true; 352 if (const Function *F = getCalledFunction()) 353 return F->getAttributes().hasAttribute(AttributeSet::FunctionIndex, A); 354 return false; 355 } 356 357 bool CallInst::paramHasAttr(unsigned i, Attribute::AttrKind A) const { 358 if (AttributeList.hasAttribute(i, A)) 359 return true; 360 if (const Function *F = getCalledFunction()) 361 return F->getAttributes().hasAttribute(i, A); 362 return false; 363 } 364 365 /// IsConstantOne - Return true only if val is constant int 1 366 static bool IsConstantOne(Value *val) { 367 assert(val && "IsConstantOne does not work with NULL val"); 368 const ConstantInt *CVal = dyn_cast<ConstantInt>(val); 369 return CVal && CVal->isOne(); 370 } 371 372 static Instruction *createMalloc(Instruction *InsertBefore, 373 BasicBlock *InsertAtEnd, Type *IntPtrTy, 374 Type *AllocTy, Value *AllocSize, 375 Value *ArraySize, Function *MallocF, 376 const Twine &Name) { 377 assert(((!InsertBefore && InsertAtEnd) || (InsertBefore && !InsertAtEnd)) && 378 "createMalloc needs either InsertBefore or InsertAtEnd"); 379 380 // malloc(type) becomes: 381 // bitcast (i8* malloc(typeSize)) to type* 382 // malloc(type, arraySize) becomes: 383 // bitcast (i8 *malloc(typeSize*arraySize)) to type* 384 if (!ArraySize) 385 ArraySize = ConstantInt::get(IntPtrTy, 1); 386 else if (ArraySize->getType() != IntPtrTy) { 387 if (InsertBefore) 388 ArraySize = CastInst::CreateIntegerCast(ArraySize, IntPtrTy, false, 389 "", InsertBefore); 390 else 391 ArraySize = CastInst::CreateIntegerCast(ArraySize, IntPtrTy, false, 392 "", InsertAtEnd); 393 } 394 395 if (!IsConstantOne(ArraySize)) { 396 if (IsConstantOne(AllocSize)) { 397 AllocSize = ArraySize; // Operand * 1 = Operand 398 } else if (Constant *CO = dyn_cast<Constant>(ArraySize)) { 399 Constant *Scale = ConstantExpr::getIntegerCast(CO, IntPtrTy, 400 false /*ZExt*/); 401 // Malloc arg is constant product of type size and array size 402 AllocSize = ConstantExpr::getMul(Scale, cast<Constant>(AllocSize)); 403 } else { 404 // Multiply type size by the array size... 405 if (InsertBefore) 406 AllocSize = BinaryOperator::CreateMul(ArraySize, AllocSize, 407 "mallocsize", InsertBefore); 408 else 409 AllocSize = BinaryOperator::CreateMul(ArraySize, AllocSize, 410 "mallocsize", InsertAtEnd); 411 } 412 } 413 414 assert(AllocSize->getType() == IntPtrTy && "malloc arg is wrong size"); 415 // Create the call to Malloc. 416 BasicBlock* BB = InsertBefore ? InsertBefore->getParent() : InsertAtEnd; 417 Module* M = BB->getParent()->getParent(); 418 Type *BPTy = Type::getInt8PtrTy(BB->getContext()); 419 Value *MallocFunc = MallocF; 420 if (!MallocFunc) 421 // prototype malloc as "void *malloc(size_t)" 422 MallocFunc = M->getOrInsertFunction("malloc", BPTy, IntPtrTy, NULL); 423 PointerType *AllocPtrType = PointerType::getUnqual(AllocTy); 424 CallInst *MCall = nullptr; 425 Instruction *Result = nullptr; 426 if (InsertBefore) { 427 MCall = CallInst::Create(MallocFunc, AllocSize, "malloccall", InsertBefore); 428 Result = MCall; 429 if (Result->getType() != AllocPtrType) 430 // Create a cast instruction to convert to the right type... 431 Result = new BitCastInst(MCall, AllocPtrType, Name, InsertBefore); 432 } else { 433 MCall = CallInst::Create(MallocFunc, AllocSize, "malloccall"); 434 Result = MCall; 435 if (Result->getType() != AllocPtrType) { 436 InsertAtEnd->getInstList().push_back(MCall); 437 // Create a cast instruction to convert to the right type... 438 Result = new BitCastInst(MCall, AllocPtrType, Name); 439 } 440 } 441 MCall->setTailCall(); 442 if (Function *F = dyn_cast<Function>(MallocFunc)) { 443 MCall->setCallingConv(F->getCallingConv()); 444 if (!F->doesNotAlias(0)) F->setDoesNotAlias(0); 445 } 446 assert(!MCall->getType()->isVoidTy() && "Malloc has void return type"); 447 448 return Result; 449 } 450 451 /// CreateMalloc - Generate the IR for a call to malloc: 452 /// 1. Compute the malloc call's argument as the specified type's size, 453 /// possibly multiplied by the array size if the array size is not 454 /// constant 1. 455 /// 2. Call malloc with that argument. 456 /// 3. Bitcast the result of the malloc call to the specified type. 457 Instruction *CallInst::CreateMalloc(Instruction *InsertBefore, 458 Type *IntPtrTy, Type *AllocTy, 459 Value *AllocSize, Value *ArraySize, 460 Function * MallocF, 461 const Twine &Name) { 462 return createMalloc(InsertBefore, nullptr, IntPtrTy, AllocTy, AllocSize, 463 ArraySize, MallocF, Name); 464 } 465 466 /// CreateMalloc - Generate the IR for a call to malloc: 467 /// 1. Compute the malloc call's argument as the specified type's size, 468 /// possibly multiplied by the array size if the array size is not 469 /// constant 1. 470 /// 2. Call malloc with that argument. 471 /// 3. Bitcast the result of the malloc call to the specified type. 472 /// Note: This function does not add the bitcast to the basic block, that is the 473 /// responsibility of the caller. 474 Instruction *CallInst::CreateMalloc(BasicBlock *InsertAtEnd, 475 Type *IntPtrTy, Type *AllocTy, 476 Value *AllocSize, Value *ArraySize, 477 Function *MallocF, const Twine &Name) { 478 return createMalloc(nullptr, InsertAtEnd, IntPtrTy, AllocTy, AllocSize, 479 ArraySize, MallocF, Name); 480 } 481 482 static Instruction* createFree(Value* Source, Instruction *InsertBefore, 483 BasicBlock *InsertAtEnd) { 484 assert(((!InsertBefore && InsertAtEnd) || (InsertBefore && !InsertAtEnd)) && 485 "createFree needs either InsertBefore or InsertAtEnd"); 486 assert(Source->getType()->isPointerTy() && 487 "Can not free something of nonpointer type!"); 488 489 BasicBlock* BB = InsertBefore ? InsertBefore->getParent() : InsertAtEnd; 490 Module* M = BB->getParent()->getParent(); 491 492 Type *VoidTy = Type::getVoidTy(M->getContext()); 493 Type *IntPtrTy = Type::getInt8PtrTy(M->getContext()); 494 // prototype free as "void free(void*)" 495 Value *FreeFunc = M->getOrInsertFunction("free", VoidTy, IntPtrTy, NULL); 496 CallInst* Result = nullptr; 497 Value *PtrCast = Source; 498 if (InsertBefore) { 499 if (Source->getType() != IntPtrTy) 500 PtrCast = new BitCastInst(Source, IntPtrTy, "", InsertBefore); 501 Result = CallInst::Create(FreeFunc, PtrCast, "", InsertBefore); 502 } else { 503 if (Source->getType() != IntPtrTy) 504 PtrCast = new BitCastInst(Source, IntPtrTy, "", InsertAtEnd); 505 Result = CallInst::Create(FreeFunc, PtrCast, ""); 506 } 507 Result->setTailCall(); 508 if (Function *F = dyn_cast<Function>(FreeFunc)) 509 Result->setCallingConv(F->getCallingConv()); 510 511 return Result; 512 } 513 514 /// CreateFree - Generate the IR for a call to the builtin free function. 515 Instruction * CallInst::CreateFree(Value* Source, Instruction *InsertBefore) { 516 return createFree(Source, InsertBefore, nullptr); 517 } 518 519 /// CreateFree - Generate the IR for a call to the builtin free function. 520 /// Note: This function does not add the call to the basic block, that is the 521 /// responsibility of the caller. 522 Instruction* CallInst::CreateFree(Value* Source, BasicBlock *InsertAtEnd) { 523 Instruction* FreeCall = createFree(Source, nullptr, InsertAtEnd); 524 assert(FreeCall && "CreateFree did not create a CallInst"); 525 return FreeCall; 526 } 527 528 //===----------------------------------------------------------------------===// 529 // InvokeInst Implementation 530 //===----------------------------------------------------------------------===// 531 532 void InvokeInst::init(Value *Fn, BasicBlock *IfNormal, BasicBlock *IfException, 533 ArrayRef<Value *> Args, const Twine &NameStr) { 534 assert(NumOperands == 3 + Args.size() && "NumOperands not set up?"); 535 Op<-3>() = Fn; 536 Op<-2>() = IfNormal; 537 Op<-1>() = IfException; 538 539 #ifndef NDEBUG 540 FunctionType *FTy = 541 cast<FunctionType>(cast<PointerType>(Fn->getType())->getElementType()); 542 543 assert(((Args.size() == FTy->getNumParams()) || 544 (FTy->isVarArg() && Args.size() > FTy->getNumParams())) && 545 "Invoking a function with bad signature"); 546 547 for (unsigned i = 0, e = Args.size(); i != e; i++) 548 assert((i >= FTy->getNumParams() || 549 FTy->getParamType(i) == Args[i]->getType()) && 550 "Invoking a function with a bad signature!"); 551 #endif 552 553 std::copy(Args.begin(), Args.end(), op_begin()); 554 setName(NameStr); 555 } 556 557 InvokeInst::InvokeInst(const InvokeInst &II) 558 : TerminatorInst(II.getType(), Instruction::Invoke, 559 OperandTraits<InvokeInst>::op_end(this) 560 - II.getNumOperands(), 561 II.getNumOperands()) { 562 setAttributes(II.getAttributes()); 563 setCallingConv(II.getCallingConv()); 564 std::copy(II.op_begin(), II.op_end(), op_begin()); 565 SubclassOptionalData = II.SubclassOptionalData; 566 } 567 568 BasicBlock *InvokeInst::getSuccessorV(unsigned idx) const { 569 return getSuccessor(idx); 570 } 571 unsigned InvokeInst::getNumSuccessorsV() const { 572 return getNumSuccessors(); 573 } 574 void InvokeInst::setSuccessorV(unsigned idx, BasicBlock *B) { 575 return setSuccessor(idx, B); 576 } 577 578 bool InvokeInst::hasFnAttrImpl(Attribute::AttrKind A) const { 579 if (AttributeList.hasAttribute(AttributeSet::FunctionIndex, A)) 580 return true; 581 if (const Function *F = getCalledFunction()) 582 return F->getAttributes().hasAttribute(AttributeSet::FunctionIndex, A); 583 return false; 584 } 585 586 bool InvokeInst::paramHasAttr(unsigned i, Attribute::AttrKind A) const { 587 if (AttributeList.hasAttribute(i, A)) 588 return true; 589 if (const Function *F = getCalledFunction()) 590 return F->getAttributes().hasAttribute(i, A); 591 return false; 592 } 593 594 void InvokeInst::addAttribute(unsigned i, Attribute::AttrKind attr) { 595 AttributeSet PAL = getAttributes(); 596 PAL = PAL.addAttribute(getContext(), i, attr); 597 setAttributes(PAL); 598 } 599 600 void InvokeInst::removeAttribute(unsigned i, Attribute attr) { 601 AttributeSet PAL = getAttributes(); 602 AttrBuilder B(attr); 603 PAL = PAL.removeAttributes(getContext(), i, 604 AttributeSet::get(getContext(), i, B)); 605 setAttributes(PAL); 606 } 607 608 LandingPadInst *InvokeInst::getLandingPadInst() const { 609 return cast<LandingPadInst>(getUnwindDest()->getFirstNonPHI()); 610 } 611 612 //===----------------------------------------------------------------------===// 613 // ReturnInst Implementation 614 //===----------------------------------------------------------------------===// 615 616 ReturnInst::ReturnInst(const ReturnInst &RI) 617 : TerminatorInst(Type::getVoidTy(RI.getContext()), Instruction::Ret, 618 OperandTraits<ReturnInst>::op_end(this) - 619 RI.getNumOperands(), 620 RI.getNumOperands()) { 621 if (RI.getNumOperands()) 622 Op<0>() = RI.Op<0>(); 623 SubclassOptionalData = RI.SubclassOptionalData; 624 } 625 626 ReturnInst::ReturnInst(LLVMContext &C, Value *retVal, Instruction *InsertBefore) 627 : TerminatorInst(Type::getVoidTy(C), Instruction::Ret, 628 OperandTraits<ReturnInst>::op_end(this) - !!retVal, !!retVal, 629 InsertBefore) { 630 if (retVal) 631 Op<0>() = retVal; 632 } 633 ReturnInst::ReturnInst(LLVMContext &C, Value *retVal, BasicBlock *InsertAtEnd) 634 : TerminatorInst(Type::getVoidTy(C), Instruction::Ret, 635 OperandTraits<ReturnInst>::op_end(this) - !!retVal, !!retVal, 636 InsertAtEnd) { 637 if (retVal) 638 Op<0>() = retVal; 639 } 640 ReturnInst::ReturnInst(LLVMContext &Context, BasicBlock *InsertAtEnd) 641 : TerminatorInst(Type::getVoidTy(Context), Instruction::Ret, 642 OperandTraits<ReturnInst>::op_end(this), 0, InsertAtEnd) { 643 } 644 645 unsigned ReturnInst::getNumSuccessorsV() const { 646 return getNumSuccessors(); 647 } 648 649 /// Out-of-line ReturnInst method, put here so the C++ compiler can choose to 650 /// emit the vtable for the class in this translation unit. 651 void ReturnInst::setSuccessorV(unsigned idx, BasicBlock *NewSucc) { 652 llvm_unreachable("ReturnInst has no successors!"); 653 } 654 655 BasicBlock *ReturnInst::getSuccessorV(unsigned idx) const { 656 llvm_unreachable("ReturnInst has no successors!"); 657 } 658 659 ReturnInst::~ReturnInst() { 660 } 661 662 //===----------------------------------------------------------------------===// 663 // ResumeInst Implementation 664 //===----------------------------------------------------------------------===// 665 666 ResumeInst::ResumeInst(const ResumeInst &RI) 667 : TerminatorInst(Type::getVoidTy(RI.getContext()), Instruction::Resume, 668 OperandTraits<ResumeInst>::op_begin(this), 1) { 669 Op<0>() = RI.Op<0>(); 670 } 671 672 ResumeInst::ResumeInst(Value *Exn, Instruction *InsertBefore) 673 : TerminatorInst(Type::getVoidTy(Exn->getContext()), Instruction::Resume, 674 OperandTraits<ResumeInst>::op_begin(this), 1, InsertBefore) { 675 Op<0>() = Exn; 676 } 677 678 ResumeInst::ResumeInst(Value *Exn, BasicBlock *InsertAtEnd) 679 : TerminatorInst(Type::getVoidTy(Exn->getContext()), Instruction::Resume, 680 OperandTraits<ResumeInst>::op_begin(this), 1, InsertAtEnd) { 681 Op<0>() = Exn; 682 } 683 684 unsigned ResumeInst::getNumSuccessorsV() const { 685 return getNumSuccessors(); 686 } 687 688 void ResumeInst::setSuccessorV(unsigned idx, BasicBlock *NewSucc) { 689 llvm_unreachable("ResumeInst has no successors!"); 690 } 691 692 BasicBlock *ResumeInst::getSuccessorV(unsigned idx) const { 693 llvm_unreachable("ResumeInst has no successors!"); 694 } 695 696 //===----------------------------------------------------------------------===// 697 // UnreachableInst Implementation 698 //===----------------------------------------------------------------------===// 699 700 UnreachableInst::UnreachableInst(LLVMContext &Context, 701 Instruction *InsertBefore) 702 : TerminatorInst(Type::getVoidTy(Context), Instruction::Unreachable, 703 nullptr, 0, InsertBefore) { 704 } 705 UnreachableInst::UnreachableInst(LLVMContext &Context, BasicBlock *InsertAtEnd) 706 : TerminatorInst(Type::getVoidTy(Context), Instruction::Unreachable, 707 nullptr, 0, InsertAtEnd) { 708 } 709 710 unsigned UnreachableInst::getNumSuccessorsV() const { 711 return getNumSuccessors(); 712 } 713 714 void UnreachableInst::setSuccessorV(unsigned idx, BasicBlock *NewSucc) { 715 llvm_unreachable("UnreachableInst has no successors!"); 716 } 717 718 BasicBlock *UnreachableInst::getSuccessorV(unsigned idx) const { 719 llvm_unreachable("UnreachableInst has no successors!"); 720 } 721 722 //===----------------------------------------------------------------------===// 723 // BranchInst Implementation 724 //===----------------------------------------------------------------------===// 725 726 void BranchInst::AssertOK() { 727 if (isConditional()) 728 assert(getCondition()->getType()->isIntegerTy(1) && 729 "May only branch on boolean predicates!"); 730 } 731 732 BranchInst::BranchInst(BasicBlock *IfTrue, Instruction *InsertBefore) 733 : TerminatorInst(Type::getVoidTy(IfTrue->getContext()), Instruction::Br, 734 OperandTraits<BranchInst>::op_end(this) - 1, 735 1, InsertBefore) { 736 assert(IfTrue && "Branch destination may not be null!"); 737 Op<-1>() = IfTrue; 738 } 739 BranchInst::BranchInst(BasicBlock *IfTrue, BasicBlock *IfFalse, Value *Cond, 740 Instruction *InsertBefore) 741 : TerminatorInst(Type::getVoidTy(IfTrue->getContext()), Instruction::Br, 742 OperandTraits<BranchInst>::op_end(this) - 3, 743 3, InsertBefore) { 744 Op<-1>() = IfTrue; 745 Op<-2>() = IfFalse; 746 Op<-3>() = Cond; 747 #ifndef NDEBUG 748 AssertOK(); 749 #endif 750 } 751 752 BranchInst::BranchInst(BasicBlock *IfTrue, BasicBlock *InsertAtEnd) 753 : TerminatorInst(Type::getVoidTy(IfTrue->getContext()), Instruction::Br, 754 OperandTraits<BranchInst>::op_end(this) - 1, 755 1, InsertAtEnd) { 756 assert(IfTrue && "Branch destination may not be null!"); 757 Op<-1>() = IfTrue; 758 } 759 760 BranchInst::BranchInst(BasicBlock *IfTrue, BasicBlock *IfFalse, Value *Cond, 761 BasicBlock *InsertAtEnd) 762 : TerminatorInst(Type::getVoidTy(IfTrue->getContext()), Instruction::Br, 763 OperandTraits<BranchInst>::op_end(this) - 3, 764 3, InsertAtEnd) { 765 Op<-1>() = IfTrue; 766 Op<-2>() = IfFalse; 767 Op<-3>() = Cond; 768 #ifndef NDEBUG 769 AssertOK(); 770 #endif 771 } 772 773 774 BranchInst::BranchInst(const BranchInst &BI) : 775 TerminatorInst(Type::getVoidTy(BI.getContext()), Instruction::Br, 776 OperandTraits<BranchInst>::op_end(this) - BI.getNumOperands(), 777 BI.getNumOperands()) { 778 Op<-1>() = BI.Op<-1>(); 779 if (BI.getNumOperands() != 1) { 780 assert(BI.getNumOperands() == 3 && "BR can have 1 or 3 operands!"); 781 Op<-3>() = BI.Op<-3>(); 782 Op<-2>() = BI.Op<-2>(); 783 } 784 SubclassOptionalData = BI.SubclassOptionalData; 785 } 786 787 void BranchInst::swapSuccessors() { 788 assert(isConditional() && 789 "Cannot swap successors of an unconditional branch"); 790 Op<-1>().swap(Op<-2>()); 791 792 // Update profile metadata if present and it matches our structural 793 // expectations. 794 MDNode *ProfileData = getMetadata(LLVMContext::MD_prof); 795 if (!ProfileData || ProfileData->getNumOperands() != 3) 796 return; 797 798 // The first operand is the name. Fetch them backwards and build a new one. 799 Value *Ops[] = { 800 ProfileData->getOperand(0), 801 ProfileData->getOperand(2), 802 ProfileData->getOperand(1) 803 }; 804 setMetadata(LLVMContext::MD_prof, 805 MDNode::get(ProfileData->getContext(), Ops)); 806 } 807 808 BasicBlock *BranchInst::getSuccessorV(unsigned idx) const { 809 return getSuccessor(idx); 810 } 811 unsigned BranchInst::getNumSuccessorsV() const { 812 return getNumSuccessors(); 813 } 814 void BranchInst::setSuccessorV(unsigned idx, BasicBlock *B) { 815 setSuccessor(idx, B); 816 } 817 818 819 //===----------------------------------------------------------------------===// 820 // AllocaInst Implementation 821 //===----------------------------------------------------------------------===// 822 823 static Value *getAISize(LLVMContext &Context, Value *Amt) { 824 if (!Amt) 825 Amt = ConstantInt::get(Type::getInt32Ty(Context), 1); 826 else { 827 assert(!isa<BasicBlock>(Amt) && 828 "Passed basic block into allocation size parameter! Use other ctor"); 829 assert(Amt->getType()->isIntegerTy() && 830 "Allocation array size is not an integer!"); 831 } 832 return Amt; 833 } 834 835 AllocaInst::AllocaInst(Type *Ty, Value *ArraySize, 836 const Twine &Name, Instruction *InsertBefore) 837 : UnaryInstruction(PointerType::getUnqual(Ty), Alloca, 838 getAISize(Ty->getContext(), ArraySize), InsertBefore) { 839 setAlignment(0); 840 assert(!Ty->isVoidTy() && "Cannot allocate void!"); 841 setName(Name); 842 } 843 844 AllocaInst::AllocaInst(Type *Ty, Value *ArraySize, 845 const Twine &Name, BasicBlock *InsertAtEnd) 846 : UnaryInstruction(PointerType::getUnqual(Ty), Alloca, 847 getAISize(Ty->getContext(), ArraySize), InsertAtEnd) { 848 setAlignment(0); 849 assert(!Ty->isVoidTy() && "Cannot allocate void!"); 850 setName(Name); 851 } 852 853 AllocaInst::AllocaInst(Type *Ty, const Twine &Name, 854 Instruction *InsertBefore) 855 : UnaryInstruction(PointerType::getUnqual(Ty), Alloca, 856 getAISize(Ty->getContext(), nullptr), InsertBefore) { 857 setAlignment(0); 858 assert(!Ty->isVoidTy() && "Cannot allocate void!"); 859 setName(Name); 860 } 861 862 AllocaInst::AllocaInst(Type *Ty, const Twine &Name, 863 BasicBlock *InsertAtEnd) 864 : UnaryInstruction(PointerType::getUnqual(Ty), Alloca, 865 getAISize(Ty->getContext(), nullptr), InsertAtEnd) { 866 setAlignment(0); 867 assert(!Ty->isVoidTy() && "Cannot allocate void!"); 868 setName(Name); 869 } 870 871 AllocaInst::AllocaInst(Type *Ty, Value *ArraySize, unsigned Align, 872 const Twine &Name, Instruction *InsertBefore) 873 : UnaryInstruction(PointerType::getUnqual(Ty), Alloca, 874 getAISize(Ty->getContext(), ArraySize), InsertBefore) { 875 setAlignment(Align); 876 assert(!Ty->isVoidTy() && "Cannot allocate void!"); 877 setName(Name); 878 } 879 880 AllocaInst::AllocaInst(Type *Ty, Value *ArraySize, unsigned Align, 881 const Twine &Name, BasicBlock *InsertAtEnd) 882 : UnaryInstruction(PointerType::getUnqual(Ty), Alloca, 883 getAISize(Ty->getContext(), ArraySize), InsertAtEnd) { 884 setAlignment(Align); 885 assert(!Ty->isVoidTy() && "Cannot allocate void!"); 886 setName(Name); 887 } 888 889 // Out of line virtual method, so the vtable, etc has a home. 890 AllocaInst::~AllocaInst() { 891 } 892 893 void AllocaInst::setAlignment(unsigned Align) { 894 assert((Align & (Align-1)) == 0 && "Alignment is not a power of 2!"); 895 assert(Align <= MaximumAlignment && 896 "Alignment is greater than MaximumAlignment!"); 897 setInstructionSubclassData((getSubclassDataFromInstruction() & ~31) | 898 (Log2_32(Align) + 1)); 899 assert(getAlignment() == Align && "Alignment representation error!"); 900 } 901 902 bool AllocaInst::isArrayAllocation() const { 903 if (ConstantInt *CI = dyn_cast<ConstantInt>(getOperand(0))) 904 return !CI->isOne(); 905 return true; 906 } 907 908 Type *AllocaInst::getAllocatedType() const { 909 return getType()->getElementType(); 910 } 911 912 /// isStaticAlloca - Return true if this alloca is in the entry block of the 913 /// function and is a constant size. If so, the code generator will fold it 914 /// into the prolog/epilog code, so it is basically free. 915 bool AllocaInst::isStaticAlloca() const { 916 // Must be constant size. 917 if (!isa<ConstantInt>(getArraySize())) return false; 918 919 // Must be in the entry block. 920 const BasicBlock *Parent = getParent(); 921 return Parent == &Parent->getParent()->front() && !isUsedWithInAlloca(); 922 } 923 924 //===----------------------------------------------------------------------===// 925 // LoadInst Implementation 926 //===----------------------------------------------------------------------===// 927 928 void LoadInst::AssertOK() { 929 assert(getOperand(0)->getType()->isPointerTy() && 930 "Ptr must have pointer type."); 931 assert(!(isAtomic() && getAlignment() == 0) && 932 "Alignment required for atomic load"); 933 } 934 935 LoadInst::LoadInst(Value *Ptr, const Twine &Name, Instruction *InsertBef) 936 : UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(), 937 Load, Ptr, InsertBef) { 938 setVolatile(false); 939 setAlignment(0); 940 setAtomic(NotAtomic); 941 AssertOK(); 942 setName(Name); 943 } 944 945 LoadInst::LoadInst(Value *Ptr, const Twine &Name, BasicBlock *InsertAE) 946 : UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(), 947 Load, Ptr, InsertAE) { 948 setVolatile(false); 949 setAlignment(0); 950 setAtomic(NotAtomic); 951 AssertOK(); 952 setName(Name); 953 } 954 955 LoadInst::LoadInst(Value *Ptr, const Twine &Name, bool isVolatile, 956 Instruction *InsertBef) 957 : UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(), 958 Load, Ptr, InsertBef) { 959 setVolatile(isVolatile); 960 setAlignment(0); 961 setAtomic(NotAtomic); 962 AssertOK(); 963 setName(Name); 964 } 965 966 LoadInst::LoadInst(Value *Ptr, const Twine &Name, bool isVolatile, 967 BasicBlock *InsertAE) 968 : UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(), 969 Load, Ptr, InsertAE) { 970 setVolatile(isVolatile); 971 setAlignment(0); 972 setAtomic(NotAtomic); 973 AssertOK(); 974 setName(Name); 975 } 976 977 LoadInst::LoadInst(Value *Ptr, const Twine &Name, bool isVolatile, 978 unsigned Align, Instruction *InsertBef) 979 : UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(), 980 Load, Ptr, InsertBef) { 981 setVolatile(isVolatile); 982 setAlignment(Align); 983 setAtomic(NotAtomic); 984 AssertOK(); 985 setName(Name); 986 } 987 988 LoadInst::LoadInst(Value *Ptr, const Twine &Name, bool isVolatile, 989 unsigned Align, BasicBlock *InsertAE) 990 : UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(), 991 Load, Ptr, InsertAE) { 992 setVolatile(isVolatile); 993 setAlignment(Align); 994 setAtomic(NotAtomic); 995 AssertOK(); 996 setName(Name); 997 } 998 999 LoadInst::LoadInst(Value *Ptr, const Twine &Name, bool isVolatile, 1000 unsigned Align, AtomicOrdering Order, 1001 SynchronizationScope SynchScope, 1002 Instruction *InsertBef) 1003 : UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(), 1004 Load, Ptr, InsertBef) { 1005 setVolatile(isVolatile); 1006 setAlignment(Align); 1007 setAtomic(Order, SynchScope); 1008 AssertOK(); 1009 setName(Name); 1010 } 1011 1012 LoadInst::LoadInst(Value *Ptr, const Twine &Name, bool isVolatile, 1013 unsigned Align, AtomicOrdering Order, 1014 SynchronizationScope SynchScope, 1015 BasicBlock *InsertAE) 1016 : UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(), 1017 Load, Ptr, InsertAE) { 1018 setVolatile(isVolatile); 1019 setAlignment(Align); 1020 setAtomic(Order, SynchScope); 1021 AssertOK(); 1022 setName(Name); 1023 } 1024 1025 LoadInst::LoadInst(Value *Ptr, const char *Name, Instruction *InsertBef) 1026 : UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(), 1027 Load, Ptr, InsertBef) { 1028 setVolatile(false); 1029 setAlignment(0); 1030 setAtomic(NotAtomic); 1031 AssertOK(); 1032 if (Name && Name[0]) setName(Name); 1033 } 1034 1035 LoadInst::LoadInst(Value *Ptr, const char *Name, BasicBlock *InsertAE) 1036 : UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(), 1037 Load, Ptr, InsertAE) { 1038 setVolatile(false); 1039 setAlignment(0); 1040 setAtomic(NotAtomic); 1041 AssertOK(); 1042 if (Name && Name[0]) setName(Name); 1043 } 1044 1045 LoadInst::LoadInst(Value *Ptr, const char *Name, bool isVolatile, 1046 Instruction *InsertBef) 1047 : UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(), 1048 Load, Ptr, InsertBef) { 1049 setVolatile(isVolatile); 1050 setAlignment(0); 1051 setAtomic(NotAtomic); 1052 AssertOK(); 1053 if (Name && Name[0]) setName(Name); 1054 } 1055 1056 LoadInst::LoadInst(Value *Ptr, const char *Name, bool isVolatile, 1057 BasicBlock *InsertAE) 1058 : UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(), 1059 Load, Ptr, InsertAE) { 1060 setVolatile(isVolatile); 1061 setAlignment(0); 1062 setAtomic(NotAtomic); 1063 AssertOK(); 1064 if (Name && Name[0]) setName(Name); 1065 } 1066 1067 void LoadInst::setAlignment(unsigned Align) { 1068 assert((Align & (Align-1)) == 0 && "Alignment is not a power of 2!"); 1069 assert(Align <= MaximumAlignment && 1070 "Alignment is greater than MaximumAlignment!"); 1071 setInstructionSubclassData((getSubclassDataFromInstruction() & ~(31 << 1)) | 1072 ((Log2_32(Align)+1)<<1)); 1073 assert(getAlignment() == Align && "Alignment representation error!"); 1074 } 1075 1076 //===----------------------------------------------------------------------===// 1077 // StoreInst Implementation 1078 //===----------------------------------------------------------------------===// 1079 1080 void StoreInst::AssertOK() { 1081 assert(getOperand(0) && getOperand(1) && "Both operands must be non-null!"); 1082 assert(getOperand(1)->getType()->isPointerTy() && 1083 "Ptr must have pointer type!"); 1084 assert(getOperand(0)->getType() == 1085 cast<PointerType>(getOperand(1)->getType())->getElementType() 1086 && "Ptr must be a pointer to Val type!"); 1087 assert(!(isAtomic() && getAlignment() == 0) && 1088 "Alignment required for atomic store"); 1089 } 1090 1091 1092 StoreInst::StoreInst(Value *val, Value *addr, Instruction *InsertBefore) 1093 : Instruction(Type::getVoidTy(val->getContext()), Store, 1094 OperandTraits<StoreInst>::op_begin(this), 1095 OperandTraits<StoreInst>::operands(this), 1096 InsertBefore) { 1097 Op<0>() = val; 1098 Op<1>() = addr; 1099 setVolatile(false); 1100 setAlignment(0); 1101 setAtomic(NotAtomic); 1102 AssertOK(); 1103 } 1104 1105 StoreInst::StoreInst(Value *val, Value *addr, BasicBlock *InsertAtEnd) 1106 : Instruction(Type::getVoidTy(val->getContext()), Store, 1107 OperandTraits<StoreInst>::op_begin(this), 1108 OperandTraits<StoreInst>::operands(this), 1109 InsertAtEnd) { 1110 Op<0>() = val; 1111 Op<1>() = addr; 1112 setVolatile(false); 1113 setAlignment(0); 1114 setAtomic(NotAtomic); 1115 AssertOK(); 1116 } 1117 1118 StoreInst::StoreInst(Value *val, Value *addr, bool isVolatile, 1119 Instruction *InsertBefore) 1120 : Instruction(Type::getVoidTy(val->getContext()), Store, 1121 OperandTraits<StoreInst>::op_begin(this), 1122 OperandTraits<StoreInst>::operands(this), 1123 InsertBefore) { 1124 Op<0>() = val; 1125 Op<1>() = addr; 1126 setVolatile(isVolatile); 1127 setAlignment(0); 1128 setAtomic(NotAtomic); 1129 AssertOK(); 1130 } 1131 1132 StoreInst::StoreInst(Value *val, Value *addr, bool isVolatile, 1133 unsigned Align, Instruction *InsertBefore) 1134 : Instruction(Type::getVoidTy(val->getContext()), Store, 1135 OperandTraits<StoreInst>::op_begin(this), 1136 OperandTraits<StoreInst>::operands(this), 1137 InsertBefore) { 1138 Op<0>() = val; 1139 Op<1>() = addr; 1140 setVolatile(isVolatile); 1141 setAlignment(Align); 1142 setAtomic(NotAtomic); 1143 AssertOK(); 1144 } 1145 1146 StoreInst::StoreInst(Value *val, Value *addr, bool isVolatile, 1147 unsigned Align, AtomicOrdering Order, 1148 SynchronizationScope SynchScope, 1149 Instruction *InsertBefore) 1150 : Instruction(Type::getVoidTy(val->getContext()), Store, 1151 OperandTraits<StoreInst>::op_begin(this), 1152 OperandTraits<StoreInst>::operands(this), 1153 InsertBefore) { 1154 Op<0>() = val; 1155 Op<1>() = addr; 1156 setVolatile(isVolatile); 1157 setAlignment(Align); 1158 setAtomic(Order, SynchScope); 1159 AssertOK(); 1160 } 1161 1162 StoreInst::StoreInst(Value *val, Value *addr, bool isVolatile, 1163 BasicBlock *InsertAtEnd) 1164 : Instruction(Type::getVoidTy(val->getContext()), Store, 1165 OperandTraits<StoreInst>::op_begin(this), 1166 OperandTraits<StoreInst>::operands(this), 1167 InsertAtEnd) { 1168 Op<0>() = val; 1169 Op<1>() = addr; 1170 setVolatile(isVolatile); 1171 setAlignment(0); 1172 setAtomic(NotAtomic); 1173 AssertOK(); 1174 } 1175 1176 StoreInst::StoreInst(Value *val, Value *addr, bool isVolatile, 1177 unsigned Align, BasicBlock *InsertAtEnd) 1178 : Instruction(Type::getVoidTy(val->getContext()), Store, 1179 OperandTraits<StoreInst>::op_begin(this), 1180 OperandTraits<StoreInst>::operands(this), 1181 InsertAtEnd) { 1182 Op<0>() = val; 1183 Op<1>() = addr; 1184 setVolatile(isVolatile); 1185 setAlignment(Align); 1186 setAtomic(NotAtomic); 1187 AssertOK(); 1188 } 1189 1190 StoreInst::StoreInst(Value *val, Value *addr, bool isVolatile, 1191 unsigned Align, AtomicOrdering Order, 1192 SynchronizationScope SynchScope, 1193 BasicBlock *InsertAtEnd) 1194 : Instruction(Type::getVoidTy(val->getContext()), Store, 1195 OperandTraits<StoreInst>::op_begin(this), 1196 OperandTraits<StoreInst>::operands(this), 1197 InsertAtEnd) { 1198 Op<0>() = val; 1199 Op<1>() = addr; 1200 setVolatile(isVolatile); 1201 setAlignment(Align); 1202 setAtomic(Order, SynchScope); 1203 AssertOK(); 1204 } 1205 1206 void StoreInst::setAlignment(unsigned Align) { 1207 assert((Align & (Align-1)) == 0 && "Alignment is not a power of 2!"); 1208 assert(Align <= MaximumAlignment && 1209 "Alignment is greater than MaximumAlignment!"); 1210 setInstructionSubclassData((getSubclassDataFromInstruction() & ~(31 << 1)) | 1211 ((Log2_32(Align)+1) << 1)); 1212 assert(getAlignment() == Align && "Alignment representation error!"); 1213 } 1214 1215 //===----------------------------------------------------------------------===// 1216 // AtomicCmpXchgInst Implementation 1217 //===----------------------------------------------------------------------===// 1218 1219 void AtomicCmpXchgInst::Init(Value *Ptr, Value *Cmp, Value *NewVal, 1220 AtomicOrdering SuccessOrdering, 1221 AtomicOrdering FailureOrdering, 1222 SynchronizationScope SynchScope) { 1223 Op<0>() = Ptr; 1224 Op<1>() = Cmp; 1225 Op<2>() = NewVal; 1226 setSuccessOrdering(SuccessOrdering); 1227 setFailureOrdering(FailureOrdering); 1228 setSynchScope(SynchScope); 1229 1230 assert(getOperand(0) && getOperand(1) && getOperand(2) && 1231 "All operands must be non-null!"); 1232 assert(getOperand(0)->getType()->isPointerTy() && 1233 "Ptr must have pointer type!"); 1234 assert(getOperand(1)->getType() == 1235 cast<PointerType>(getOperand(0)->getType())->getElementType() 1236 && "Ptr must be a pointer to Cmp type!"); 1237 assert(getOperand(2)->getType() == 1238 cast<PointerType>(getOperand(0)->getType())->getElementType() 1239 && "Ptr must be a pointer to NewVal type!"); 1240 assert(SuccessOrdering != NotAtomic && 1241 "AtomicCmpXchg instructions must be atomic!"); 1242 assert(FailureOrdering != NotAtomic && 1243 "AtomicCmpXchg instructions must be atomic!"); 1244 assert(SuccessOrdering >= FailureOrdering && 1245 "AtomicCmpXchg success ordering must be at least as strong as fail"); 1246 assert(FailureOrdering != Release && FailureOrdering != AcquireRelease && 1247 "AtomicCmpXchg failure ordering cannot include release semantics"); 1248 } 1249 1250 AtomicCmpXchgInst::AtomicCmpXchgInst(Value *Ptr, Value *Cmp, Value *NewVal, 1251 AtomicOrdering SuccessOrdering, 1252 AtomicOrdering FailureOrdering, 1253 SynchronizationScope SynchScope, 1254 Instruction *InsertBefore) 1255 : Instruction( 1256 StructType::get(Cmp->getType(), Type::getInt1Ty(Cmp->getContext()), 1257 nullptr), 1258 AtomicCmpXchg, OperandTraits<AtomicCmpXchgInst>::op_begin(this), 1259 OperandTraits<AtomicCmpXchgInst>::operands(this), InsertBefore) { 1260 Init(Ptr, Cmp, NewVal, SuccessOrdering, FailureOrdering, SynchScope); 1261 } 1262 1263 AtomicCmpXchgInst::AtomicCmpXchgInst(Value *Ptr, Value *Cmp, Value *NewVal, 1264 AtomicOrdering SuccessOrdering, 1265 AtomicOrdering FailureOrdering, 1266 SynchronizationScope SynchScope, 1267 BasicBlock *InsertAtEnd) 1268 : Instruction( 1269 StructType::get(Cmp->getType(), Type::getInt1Ty(Cmp->getContext()), 1270 nullptr), 1271 AtomicCmpXchg, OperandTraits<AtomicCmpXchgInst>::op_begin(this), 1272 OperandTraits<AtomicCmpXchgInst>::operands(this), InsertAtEnd) { 1273 Init(Ptr, Cmp, NewVal, SuccessOrdering, FailureOrdering, SynchScope); 1274 } 1275 1276 //===----------------------------------------------------------------------===// 1277 // AtomicRMWInst Implementation 1278 //===----------------------------------------------------------------------===// 1279 1280 void AtomicRMWInst::Init(BinOp Operation, Value *Ptr, Value *Val, 1281 AtomicOrdering Ordering, 1282 SynchronizationScope SynchScope) { 1283 Op<0>() = Ptr; 1284 Op<1>() = Val; 1285 setOperation(Operation); 1286 setOrdering(Ordering); 1287 setSynchScope(SynchScope); 1288 1289 assert(getOperand(0) && getOperand(1) && 1290 "All operands must be non-null!"); 1291 assert(getOperand(0)->getType()->isPointerTy() && 1292 "Ptr must have pointer type!"); 1293 assert(getOperand(1)->getType() == 1294 cast<PointerType>(getOperand(0)->getType())->getElementType() 1295 && "Ptr must be a pointer to Val type!"); 1296 assert(Ordering != NotAtomic && 1297 "AtomicRMW instructions must be atomic!"); 1298 } 1299 1300 AtomicRMWInst::AtomicRMWInst(BinOp Operation, Value *Ptr, Value *Val, 1301 AtomicOrdering Ordering, 1302 SynchronizationScope SynchScope, 1303 Instruction *InsertBefore) 1304 : Instruction(Val->getType(), AtomicRMW, 1305 OperandTraits<AtomicRMWInst>::op_begin(this), 1306 OperandTraits<AtomicRMWInst>::operands(this), 1307 InsertBefore) { 1308 Init(Operation, Ptr, Val, Ordering, SynchScope); 1309 } 1310 1311 AtomicRMWInst::AtomicRMWInst(BinOp Operation, Value *Ptr, Value *Val, 1312 AtomicOrdering Ordering, 1313 SynchronizationScope SynchScope, 1314 BasicBlock *InsertAtEnd) 1315 : Instruction(Val->getType(), AtomicRMW, 1316 OperandTraits<AtomicRMWInst>::op_begin(this), 1317 OperandTraits<AtomicRMWInst>::operands(this), 1318 InsertAtEnd) { 1319 Init(Operation, Ptr, Val, Ordering, SynchScope); 1320 } 1321 1322 //===----------------------------------------------------------------------===// 1323 // FenceInst Implementation 1324 //===----------------------------------------------------------------------===// 1325 1326 FenceInst::FenceInst(LLVMContext &C, AtomicOrdering Ordering, 1327 SynchronizationScope SynchScope, 1328 Instruction *InsertBefore) 1329 : Instruction(Type::getVoidTy(C), Fence, nullptr, 0, InsertBefore) { 1330 setOrdering(Ordering); 1331 setSynchScope(SynchScope); 1332 } 1333 1334 FenceInst::FenceInst(LLVMContext &C, AtomicOrdering Ordering, 1335 SynchronizationScope SynchScope, 1336 BasicBlock *InsertAtEnd) 1337 : Instruction(Type::getVoidTy(C), Fence, nullptr, 0, InsertAtEnd) { 1338 setOrdering(Ordering); 1339 setSynchScope(SynchScope); 1340 } 1341 1342 //===----------------------------------------------------------------------===// 1343 // GetElementPtrInst Implementation 1344 //===----------------------------------------------------------------------===// 1345 1346 void GetElementPtrInst::init(Value *Ptr, ArrayRef<Value *> IdxList, 1347 const Twine &Name) { 1348 assert(NumOperands == 1 + IdxList.size() && "NumOperands not initialized?"); 1349 OperandList[0] = Ptr; 1350 std::copy(IdxList.begin(), IdxList.end(), op_begin() + 1); 1351 setName(Name); 1352 } 1353 1354 GetElementPtrInst::GetElementPtrInst(const GetElementPtrInst &GEPI) 1355 : Instruction(GEPI.getType(), GetElementPtr, 1356 OperandTraits<GetElementPtrInst>::op_end(this) 1357 - GEPI.getNumOperands(), 1358 GEPI.getNumOperands()) { 1359 std::copy(GEPI.op_begin(), GEPI.op_end(), op_begin()); 1360 SubclassOptionalData = GEPI.SubclassOptionalData; 1361 } 1362 1363 /// getIndexedType - Returns the type of the element that would be accessed with 1364 /// a gep instruction with the specified parameters. 1365 /// 1366 /// The Idxs pointer should point to a continuous piece of memory containing the 1367 /// indices, either as Value* or uint64_t. 1368 /// 1369 /// A null type is returned if the indices are invalid for the specified 1370 /// pointer type. 1371 /// 1372 template <typename IndexTy> 1373 static Type *getIndexedTypeInternal(Type *Ptr, ArrayRef<IndexTy> IdxList) { 1374 PointerType *PTy = dyn_cast<PointerType>(Ptr->getScalarType()); 1375 if (!PTy) return nullptr; // Type isn't a pointer type! 1376 Type *Agg = PTy->getElementType(); 1377 1378 // Handle the special case of the empty set index set, which is always valid. 1379 if (IdxList.empty()) 1380 return Agg; 1381 1382 // If there is at least one index, the top level type must be sized, otherwise 1383 // it cannot be 'stepped over'. 1384 if (!Agg->isSized()) 1385 return nullptr; 1386 1387 unsigned CurIdx = 1; 1388 for (; CurIdx != IdxList.size(); ++CurIdx) { 1389 CompositeType *CT = dyn_cast<CompositeType>(Agg); 1390 if (!CT || CT->isPointerTy()) return nullptr; 1391 IndexTy Index = IdxList[CurIdx]; 1392 if (!CT->indexValid(Index)) return nullptr; 1393 Agg = CT->getTypeAtIndex(Index); 1394 } 1395 return CurIdx == IdxList.size() ? Agg : nullptr; 1396 } 1397 1398 Type *GetElementPtrInst::getIndexedType(Type *Ptr, ArrayRef<Value *> IdxList) { 1399 return getIndexedTypeInternal(Ptr, IdxList); 1400 } 1401 1402 Type *GetElementPtrInst::getIndexedType(Type *Ptr, 1403 ArrayRef<Constant *> IdxList) { 1404 return getIndexedTypeInternal(Ptr, IdxList); 1405 } 1406 1407 Type *GetElementPtrInst::getIndexedType(Type *Ptr, ArrayRef<uint64_t> IdxList) { 1408 return getIndexedTypeInternal(Ptr, IdxList); 1409 } 1410 1411 /// hasAllZeroIndices - Return true if all of the indices of this GEP are 1412 /// zeros. If so, the result pointer and the first operand have the same 1413 /// value, just potentially different types. 1414 bool GetElementPtrInst::hasAllZeroIndices() const { 1415 for (unsigned i = 1, e = getNumOperands(); i != e; ++i) { 1416 if (ConstantInt *CI = dyn_cast<ConstantInt>(getOperand(i))) { 1417 if (!CI->isZero()) return false; 1418 } else { 1419 return false; 1420 } 1421 } 1422 return true; 1423 } 1424 1425 /// hasAllConstantIndices - Return true if all of the indices of this GEP are 1426 /// constant integers. If so, the result pointer and the first operand have 1427 /// a constant offset between them. 1428 bool GetElementPtrInst::hasAllConstantIndices() const { 1429 for (unsigned i = 1, e = getNumOperands(); i != e; ++i) { 1430 if (!isa<ConstantInt>(getOperand(i))) 1431 return false; 1432 } 1433 return true; 1434 } 1435 1436 void GetElementPtrInst::setIsInBounds(bool B) { 1437 cast<GEPOperator>(this)->setIsInBounds(B); 1438 } 1439 1440 bool GetElementPtrInst::isInBounds() const { 1441 return cast<GEPOperator>(this)->isInBounds(); 1442 } 1443 1444 bool GetElementPtrInst::accumulateConstantOffset(const DataLayout &DL, 1445 APInt &Offset) const { 1446 // Delegate to the generic GEPOperator implementation. 1447 return cast<GEPOperator>(this)->accumulateConstantOffset(DL, Offset); 1448 } 1449 1450 //===----------------------------------------------------------------------===// 1451 // ExtractElementInst Implementation 1452 //===----------------------------------------------------------------------===// 1453 1454 ExtractElementInst::ExtractElementInst(Value *Val, Value *Index, 1455 const Twine &Name, 1456 Instruction *InsertBef) 1457 : Instruction(cast<VectorType>(Val->getType())->getElementType(), 1458 ExtractElement, 1459 OperandTraits<ExtractElementInst>::op_begin(this), 1460 2, InsertBef) { 1461 assert(isValidOperands(Val, Index) && 1462 "Invalid extractelement instruction operands!"); 1463 Op<0>() = Val; 1464 Op<1>() = Index; 1465 setName(Name); 1466 } 1467 1468 ExtractElementInst::ExtractElementInst(Value *Val, Value *Index, 1469 const Twine &Name, 1470 BasicBlock *InsertAE) 1471 : Instruction(cast<VectorType>(Val->getType())->getElementType(), 1472 ExtractElement, 1473 OperandTraits<ExtractElementInst>::op_begin(this), 1474 2, InsertAE) { 1475 assert(isValidOperands(Val, Index) && 1476 "Invalid extractelement instruction operands!"); 1477 1478 Op<0>() = Val; 1479 Op<1>() = Index; 1480 setName(Name); 1481 } 1482 1483 1484 bool ExtractElementInst::isValidOperands(const Value *Val, const Value *Index) { 1485 if (!Val->getType()->isVectorTy() || !Index->getType()->isIntegerTy()) 1486 return false; 1487 return true; 1488 } 1489 1490 1491 //===----------------------------------------------------------------------===// 1492 // InsertElementInst Implementation 1493 //===----------------------------------------------------------------------===// 1494 1495 InsertElementInst::InsertElementInst(Value *Vec, Value *Elt, Value *Index, 1496 const Twine &Name, 1497 Instruction *InsertBef) 1498 : Instruction(Vec->getType(), InsertElement, 1499 OperandTraits<InsertElementInst>::op_begin(this), 1500 3, InsertBef) { 1501 assert(isValidOperands(Vec, Elt, Index) && 1502 "Invalid insertelement instruction operands!"); 1503 Op<0>() = Vec; 1504 Op<1>() = Elt; 1505 Op<2>() = Index; 1506 setName(Name); 1507 } 1508 1509 InsertElementInst::InsertElementInst(Value *Vec, Value *Elt, Value *Index, 1510 const Twine &Name, 1511 BasicBlock *InsertAE) 1512 : Instruction(Vec->getType(), InsertElement, 1513 OperandTraits<InsertElementInst>::op_begin(this), 1514 3, InsertAE) { 1515 assert(isValidOperands(Vec, Elt, Index) && 1516 "Invalid insertelement instruction operands!"); 1517 1518 Op<0>() = Vec; 1519 Op<1>() = Elt; 1520 Op<2>() = Index; 1521 setName(Name); 1522 } 1523 1524 bool InsertElementInst::isValidOperands(const Value *Vec, const Value *Elt, 1525 const Value *Index) { 1526 if (!Vec->getType()->isVectorTy()) 1527 return false; // First operand of insertelement must be vector type. 1528 1529 if (Elt->getType() != cast<VectorType>(Vec->getType())->getElementType()) 1530 return false;// Second operand of insertelement must be vector element type. 1531 1532 if (!Index->getType()->isIntegerTy()) 1533 return false; // Third operand of insertelement must be i32. 1534 return true; 1535 } 1536 1537 1538 //===----------------------------------------------------------------------===// 1539 // ShuffleVectorInst Implementation 1540 //===----------------------------------------------------------------------===// 1541 1542 ShuffleVectorInst::ShuffleVectorInst(Value *V1, Value *V2, Value *Mask, 1543 const Twine &Name, 1544 Instruction *InsertBefore) 1545 : Instruction(VectorType::get(cast<VectorType>(V1->getType())->getElementType(), 1546 cast<VectorType>(Mask->getType())->getNumElements()), 1547 ShuffleVector, 1548 OperandTraits<ShuffleVectorInst>::op_begin(this), 1549 OperandTraits<ShuffleVectorInst>::operands(this), 1550 InsertBefore) { 1551 assert(isValidOperands(V1, V2, Mask) && 1552 "Invalid shuffle vector instruction operands!"); 1553 Op<0>() = V1; 1554 Op<1>() = V2; 1555 Op<2>() = Mask; 1556 setName(Name); 1557 } 1558 1559 ShuffleVectorInst::ShuffleVectorInst(Value *V1, Value *V2, Value *Mask, 1560 const Twine &Name, 1561 BasicBlock *InsertAtEnd) 1562 : Instruction(VectorType::get(cast<VectorType>(V1->getType())->getElementType(), 1563 cast<VectorType>(Mask->getType())->getNumElements()), 1564 ShuffleVector, 1565 OperandTraits<ShuffleVectorInst>::op_begin(this), 1566 OperandTraits<ShuffleVectorInst>::operands(this), 1567 InsertAtEnd) { 1568 assert(isValidOperands(V1, V2, Mask) && 1569 "Invalid shuffle vector instruction operands!"); 1570 1571 Op<0>() = V1; 1572 Op<1>() = V2; 1573 Op<2>() = Mask; 1574 setName(Name); 1575 } 1576 1577 bool ShuffleVectorInst::isValidOperands(const Value *V1, const Value *V2, 1578 const Value *Mask) { 1579 // V1 and V2 must be vectors of the same type. 1580 if (!V1->getType()->isVectorTy() || V1->getType() != V2->getType()) 1581 return false; 1582 1583 // Mask must be vector of i32. 1584 VectorType *MaskTy = dyn_cast<VectorType>(Mask->getType()); 1585 if (!MaskTy || !MaskTy->getElementType()->isIntegerTy(32)) 1586 return false; 1587 1588 // Check to see if Mask is valid. 1589 if (isa<UndefValue>(Mask) || isa<ConstantAggregateZero>(Mask)) 1590 return true; 1591 1592 if (const ConstantVector *MV = dyn_cast<ConstantVector>(Mask)) { 1593 unsigned V1Size = cast<VectorType>(V1->getType())->getNumElements(); 1594 for (Value *Op : MV->operands()) { 1595 if (ConstantInt *CI = dyn_cast<ConstantInt>(Op)) { 1596 if (CI->uge(V1Size*2)) 1597 return false; 1598 } else if (!isa<UndefValue>(Op)) { 1599 return false; 1600 } 1601 } 1602 return true; 1603 } 1604 1605 if (const ConstantDataSequential *CDS = 1606 dyn_cast<ConstantDataSequential>(Mask)) { 1607 unsigned V1Size = cast<VectorType>(V1->getType())->getNumElements(); 1608 for (unsigned i = 0, e = MaskTy->getNumElements(); i != e; ++i) 1609 if (CDS->getElementAsInteger(i) >= V1Size*2) 1610 return false; 1611 return true; 1612 } 1613 1614 // The bitcode reader can create a place holder for a forward reference 1615 // used as the shuffle mask. When this occurs, the shuffle mask will 1616 // fall into this case and fail. To avoid this error, do this bit of 1617 // ugliness to allow such a mask pass. 1618 if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(Mask)) 1619 if (CE->getOpcode() == Instruction::UserOp1) 1620 return true; 1621 1622 return false; 1623 } 1624 1625 /// getMaskValue - Return the index from the shuffle mask for the specified 1626 /// output result. This is either -1 if the element is undef or a number less 1627 /// than 2*numelements. 1628 int ShuffleVectorInst::getMaskValue(Constant *Mask, unsigned i) { 1629 assert(i < Mask->getType()->getVectorNumElements() && "Index out of range"); 1630 if (ConstantDataSequential *CDS =dyn_cast<ConstantDataSequential>(Mask)) 1631 return CDS->getElementAsInteger(i); 1632 Constant *C = Mask->getAggregateElement(i); 1633 if (isa<UndefValue>(C)) 1634 return -1; 1635 return cast<ConstantInt>(C)->getZExtValue(); 1636 } 1637 1638 /// getShuffleMask - Return the full mask for this instruction, where each 1639 /// element is the element number and undef's are returned as -1. 1640 void ShuffleVectorInst::getShuffleMask(Constant *Mask, 1641 SmallVectorImpl<int> &Result) { 1642 unsigned NumElts = Mask->getType()->getVectorNumElements(); 1643 1644 if (ConstantDataSequential *CDS=dyn_cast<ConstantDataSequential>(Mask)) { 1645 for (unsigned i = 0; i != NumElts; ++i) 1646 Result.push_back(CDS->getElementAsInteger(i)); 1647 return; 1648 } 1649 for (unsigned i = 0; i != NumElts; ++i) { 1650 Constant *C = Mask->getAggregateElement(i); 1651 Result.push_back(isa<UndefValue>(C) ? -1 : 1652 cast<ConstantInt>(C)->getZExtValue()); 1653 } 1654 } 1655 1656 1657 //===----------------------------------------------------------------------===// 1658 // InsertValueInst Class 1659 //===----------------------------------------------------------------------===// 1660 1661 void InsertValueInst::init(Value *Agg, Value *Val, ArrayRef<unsigned> Idxs, 1662 const Twine &Name) { 1663 assert(NumOperands == 2 && "NumOperands not initialized?"); 1664 1665 // There's no fundamental reason why we require at least one index 1666 // (other than weirdness with &*IdxBegin being invalid; see 1667 // getelementptr's init routine for example). But there's no 1668 // present need to support it. 1669 assert(Idxs.size() > 0 && "InsertValueInst must have at least one index"); 1670 1671 assert(ExtractValueInst::getIndexedType(Agg->getType(), Idxs) == 1672 Val->getType() && "Inserted value must match indexed type!"); 1673 Op<0>() = Agg; 1674 Op<1>() = Val; 1675 1676 Indices.append(Idxs.begin(), Idxs.end()); 1677 setName(Name); 1678 } 1679 1680 InsertValueInst::InsertValueInst(const InsertValueInst &IVI) 1681 : Instruction(IVI.getType(), InsertValue, 1682 OperandTraits<InsertValueInst>::op_begin(this), 2), 1683 Indices(IVI.Indices) { 1684 Op<0>() = IVI.getOperand(0); 1685 Op<1>() = IVI.getOperand(1); 1686 SubclassOptionalData = IVI.SubclassOptionalData; 1687 } 1688 1689 //===----------------------------------------------------------------------===// 1690 // ExtractValueInst Class 1691 //===----------------------------------------------------------------------===// 1692 1693 void ExtractValueInst::init(ArrayRef<unsigned> Idxs, const Twine &Name) { 1694 assert(NumOperands == 1 && "NumOperands not initialized?"); 1695 1696 // There's no fundamental reason why we require at least one index. 1697 // But there's no present need to support it. 1698 assert(Idxs.size() > 0 && "ExtractValueInst must have at least one index"); 1699 1700 Indices.append(Idxs.begin(), Idxs.end()); 1701 setName(Name); 1702 } 1703 1704 ExtractValueInst::ExtractValueInst(const ExtractValueInst &EVI) 1705 : UnaryInstruction(EVI.getType(), ExtractValue, EVI.getOperand(0)), 1706 Indices(EVI.Indices) { 1707 SubclassOptionalData = EVI.SubclassOptionalData; 1708 } 1709 1710 // getIndexedType - Returns the type of the element that would be extracted 1711 // with an extractvalue instruction with the specified parameters. 1712 // 1713 // A null type is returned if the indices are invalid for the specified 1714 // pointer type. 1715 // 1716 Type *ExtractValueInst::getIndexedType(Type *Agg, 1717 ArrayRef<unsigned> Idxs) { 1718 for (unsigned Index : Idxs) { 1719 // We can't use CompositeType::indexValid(Index) here. 1720 // indexValid() always returns true for arrays because getelementptr allows 1721 // out-of-bounds indices. Since we don't allow those for extractvalue and 1722 // insertvalue we need to check array indexing manually. 1723 // Since the only other types we can index into are struct types it's just 1724 // as easy to check those manually as well. 1725 if (ArrayType *AT = dyn_cast<ArrayType>(Agg)) { 1726 if (Index >= AT->getNumElements()) 1727 return nullptr; 1728 } else if (StructType *ST = dyn_cast<StructType>(Agg)) { 1729 if (Index >= ST->getNumElements()) 1730 return nullptr; 1731 } else { 1732 // Not a valid type to index into. 1733 return nullptr; 1734 } 1735 1736 Agg = cast<CompositeType>(Agg)->getTypeAtIndex(Index); 1737 } 1738 return const_cast<Type*>(Agg); 1739 } 1740 1741 //===----------------------------------------------------------------------===// 1742 // BinaryOperator Class 1743 //===----------------------------------------------------------------------===// 1744 1745 BinaryOperator::BinaryOperator(BinaryOps iType, Value *S1, Value *S2, 1746 Type *Ty, const Twine &Name, 1747 Instruction *InsertBefore) 1748 : Instruction(Ty, iType, 1749 OperandTraits<BinaryOperator>::op_begin(this), 1750 OperandTraits<BinaryOperator>::operands(this), 1751 InsertBefore) { 1752 Op<0>() = S1; 1753 Op<1>() = S2; 1754 init(iType); 1755 setName(Name); 1756 } 1757 1758 BinaryOperator::BinaryOperator(BinaryOps iType, Value *S1, Value *S2, 1759 Type *Ty, const Twine &Name, 1760 BasicBlock *InsertAtEnd) 1761 : Instruction(Ty, iType, 1762 OperandTraits<BinaryOperator>::op_begin(this), 1763 OperandTraits<BinaryOperator>::operands(this), 1764 InsertAtEnd) { 1765 Op<0>() = S1; 1766 Op<1>() = S2; 1767 init(iType); 1768 setName(Name); 1769 } 1770 1771 1772 void BinaryOperator::init(BinaryOps iType) { 1773 Value *LHS = getOperand(0), *RHS = getOperand(1); 1774 (void)LHS; (void)RHS; // Silence warnings. 1775 assert(LHS->getType() == RHS->getType() && 1776 "Binary operator operand types must match!"); 1777 #ifndef NDEBUG 1778 switch (iType) { 1779 case Add: case Sub: 1780 case Mul: 1781 assert(getType() == LHS->getType() && 1782 "Arithmetic operation should return same type as operands!"); 1783 assert(getType()->isIntOrIntVectorTy() && 1784 "Tried to create an integer operation on a non-integer type!"); 1785 break; 1786 case FAdd: case FSub: 1787 case FMul: 1788 assert(getType() == LHS->getType() && 1789 "Arithmetic operation should return same type as operands!"); 1790 assert(getType()->isFPOrFPVectorTy() && 1791 "Tried to create a floating-point operation on a " 1792 "non-floating-point type!"); 1793 break; 1794 case UDiv: 1795 case SDiv: 1796 assert(getType() == LHS->getType() && 1797 "Arithmetic operation should return same type as operands!"); 1798 assert((getType()->isIntegerTy() || (getType()->isVectorTy() && 1799 cast<VectorType>(getType())->getElementType()->isIntegerTy())) && 1800 "Incorrect operand type (not integer) for S/UDIV"); 1801 break; 1802 case FDiv: 1803 assert(getType() == LHS->getType() && 1804 "Arithmetic operation should return same type as operands!"); 1805 assert(getType()->isFPOrFPVectorTy() && 1806 "Incorrect operand type (not floating point) for FDIV"); 1807 break; 1808 case URem: 1809 case SRem: 1810 assert(getType() == LHS->getType() && 1811 "Arithmetic operation should return same type as operands!"); 1812 assert((getType()->isIntegerTy() || (getType()->isVectorTy() && 1813 cast<VectorType>(getType())->getElementType()->isIntegerTy())) && 1814 "Incorrect operand type (not integer) for S/UREM"); 1815 break; 1816 case FRem: 1817 assert(getType() == LHS->getType() && 1818 "Arithmetic operation should return same type as operands!"); 1819 assert(getType()->isFPOrFPVectorTy() && 1820 "Incorrect operand type (not floating point) for FREM"); 1821 break; 1822 case Shl: 1823 case LShr: 1824 case AShr: 1825 assert(getType() == LHS->getType() && 1826 "Shift operation should return same type as operands!"); 1827 assert((getType()->isIntegerTy() || 1828 (getType()->isVectorTy() && 1829 cast<VectorType>(getType())->getElementType()->isIntegerTy())) && 1830 "Tried to create a shift operation on a non-integral type!"); 1831 break; 1832 case And: case Or: 1833 case Xor: 1834 assert(getType() == LHS->getType() && 1835 "Logical operation should return same type as operands!"); 1836 assert((getType()->isIntegerTy() || 1837 (getType()->isVectorTy() && 1838 cast<VectorType>(getType())->getElementType()->isIntegerTy())) && 1839 "Tried to create a logical operation on a non-integral type!"); 1840 break; 1841 default: 1842 break; 1843 } 1844 #endif 1845 } 1846 1847 BinaryOperator *BinaryOperator::Create(BinaryOps Op, Value *S1, Value *S2, 1848 const Twine &Name, 1849 Instruction *InsertBefore) { 1850 assert(S1->getType() == S2->getType() && 1851 "Cannot create binary operator with two operands of differing type!"); 1852 return new BinaryOperator(Op, S1, S2, S1->getType(), Name, InsertBefore); 1853 } 1854 1855 BinaryOperator *BinaryOperator::Create(BinaryOps Op, Value *S1, Value *S2, 1856 const Twine &Name, 1857 BasicBlock *InsertAtEnd) { 1858 BinaryOperator *Res = Create(Op, S1, S2, Name); 1859 InsertAtEnd->getInstList().push_back(Res); 1860 return Res; 1861 } 1862 1863 BinaryOperator *BinaryOperator::CreateNeg(Value *Op, const Twine &Name, 1864 Instruction *InsertBefore) { 1865 Value *zero = ConstantFP::getZeroValueForNegation(Op->getType()); 1866 return new BinaryOperator(Instruction::Sub, 1867 zero, Op, 1868 Op->getType(), Name, InsertBefore); 1869 } 1870 1871 BinaryOperator *BinaryOperator::CreateNeg(Value *Op, const Twine &Name, 1872 BasicBlock *InsertAtEnd) { 1873 Value *zero = ConstantFP::getZeroValueForNegation(Op->getType()); 1874 return new BinaryOperator(Instruction::Sub, 1875 zero, Op, 1876 Op->getType(), Name, InsertAtEnd); 1877 } 1878 1879 BinaryOperator *BinaryOperator::CreateNSWNeg(Value *Op, const Twine &Name, 1880 Instruction *InsertBefore) { 1881 Value *zero = ConstantFP::getZeroValueForNegation(Op->getType()); 1882 return BinaryOperator::CreateNSWSub(zero, Op, Name, InsertBefore); 1883 } 1884 1885 BinaryOperator *BinaryOperator::CreateNSWNeg(Value *Op, const Twine &Name, 1886 BasicBlock *InsertAtEnd) { 1887 Value *zero = ConstantFP::getZeroValueForNegation(Op->getType()); 1888 return BinaryOperator::CreateNSWSub(zero, Op, Name, InsertAtEnd); 1889 } 1890 1891 BinaryOperator *BinaryOperator::CreateNUWNeg(Value *Op, const Twine &Name, 1892 Instruction *InsertBefore) { 1893 Value *zero = ConstantFP::getZeroValueForNegation(Op->getType()); 1894 return BinaryOperator::CreateNUWSub(zero, Op, Name, InsertBefore); 1895 } 1896 1897 BinaryOperator *BinaryOperator::CreateNUWNeg(Value *Op, const Twine &Name, 1898 BasicBlock *InsertAtEnd) { 1899 Value *zero = ConstantFP::getZeroValueForNegation(Op->getType()); 1900 return BinaryOperator::CreateNUWSub(zero, Op, Name, InsertAtEnd); 1901 } 1902 1903 BinaryOperator *BinaryOperator::CreateFNeg(Value *Op, const Twine &Name, 1904 Instruction *InsertBefore) { 1905 Value *zero = ConstantFP::getZeroValueForNegation(Op->getType()); 1906 return new BinaryOperator(Instruction::FSub, zero, Op, 1907 Op->getType(), Name, InsertBefore); 1908 } 1909 1910 BinaryOperator *BinaryOperator::CreateFNeg(Value *Op, const Twine &Name, 1911 BasicBlock *InsertAtEnd) { 1912 Value *zero = ConstantFP::getZeroValueForNegation(Op->getType()); 1913 return new BinaryOperator(Instruction::FSub, zero, Op, 1914 Op->getType(), Name, InsertAtEnd); 1915 } 1916 1917 BinaryOperator *BinaryOperator::CreateNot(Value *Op, const Twine &Name, 1918 Instruction *InsertBefore) { 1919 Constant *C = Constant::getAllOnesValue(Op->getType()); 1920 return new BinaryOperator(Instruction::Xor, Op, C, 1921 Op->getType(), Name, InsertBefore); 1922 } 1923 1924 BinaryOperator *BinaryOperator::CreateNot(Value *Op, const Twine &Name, 1925 BasicBlock *InsertAtEnd) { 1926 Constant *AllOnes = Constant::getAllOnesValue(Op->getType()); 1927 return new BinaryOperator(Instruction::Xor, Op, AllOnes, 1928 Op->getType(), Name, InsertAtEnd); 1929 } 1930 1931 1932 // isConstantAllOnes - Helper function for several functions below 1933 static inline bool isConstantAllOnes(const Value *V) { 1934 if (const Constant *C = dyn_cast<Constant>(V)) 1935 return C->isAllOnesValue(); 1936 return false; 1937 } 1938 1939 bool BinaryOperator::isNeg(const Value *V) { 1940 if (const BinaryOperator *Bop = dyn_cast<BinaryOperator>(V)) 1941 if (Bop->getOpcode() == Instruction::Sub) 1942 if (Constant* C = dyn_cast<Constant>(Bop->getOperand(0))) 1943 return C->isNegativeZeroValue(); 1944 return false; 1945 } 1946 1947 bool BinaryOperator::isFNeg(const Value *V, bool IgnoreZeroSign) { 1948 if (const BinaryOperator *Bop = dyn_cast<BinaryOperator>(V)) 1949 if (Bop->getOpcode() == Instruction::FSub) 1950 if (Constant* C = dyn_cast<Constant>(Bop->getOperand(0))) { 1951 if (!IgnoreZeroSign) 1952 IgnoreZeroSign = cast<Instruction>(V)->hasNoSignedZeros(); 1953 return !IgnoreZeroSign ? C->isNegativeZeroValue() : C->isZeroValue(); 1954 } 1955 return false; 1956 } 1957 1958 bool BinaryOperator::isNot(const Value *V) { 1959 if (const BinaryOperator *Bop = dyn_cast<BinaryOperator>(V)) 1960 return (Bop->getOpcode() == Instruction::Xor && 1961 (isConstantAllOnes(Bop->getOperand(1)) || 1962 isConstantAllOnes(Bop->getOperand(0)))); 1963 return false; 1964 } 1965 1966 Value *BinaryOperator::getNegArgument(Value *BinOp) { 1967 return cast<BinaryOperator>(BinOp)->getOperand(1); 1968 } 1969 1970 const Value *BinaryOperator::getNegArgument(const Value *BinOp) { 1971 return getNegArgument(const_cast<Value*>(BinOp)); 1972 } 1973 1974 Value *BinaryOperator::getFNegArgument(Value *BinOp) { 1975 return cast<BinaryOperator>(BinOp)->getOperand(1); 1976 } 1977 1978 const Value *BinaryOperator::getFNegArgument(const Value *BinOp) { 1979 return getFNegArgument(const_cast<Value*>(BinOp)); 1980 } 1981 1982 Value *BinaryOperator::getNotArgument(Value *BinOp) { 1983 assert(isNot(BinOp) && "getNotArgument on non-'not' instruction!"); 1984 BinaryOperator *BO = cast<BinaryOperator>(BinOp); 1985 Value *Op0 = BO->getOperand(0); 1986 Value *Op1 = BO->getOperand(1); 1987 if (isConstantAllOnes(Op0)) return Op1; 1988 1989 assert(isConstantAllOnes(Op1)); 1990 return Op0; 1991 } 1992 1993 const Value *BinaryOperator::getNotArgument(const Value *BinOp) { 1994 return getNotArgument(const_cast<Value*>(BinOp)); 1995 } 1996 1997 1998 // swapOperands - Exchange the two operands to this instruction. This 1999 // instruction is safe to use on any binary instruction and does not 2000 // modify the semantics of the instruction. If the instruction is 2001 // order dependent (SetLT f.e.) the opcode is changed. 2002 // 2003 bool BinaryOperator::swapOperands() { 2004 if (!isCommutative()) 2005 return true; // Can't commute operands 2006 Op<0>().swap(Op<1>()); 2007 return false; 2008 } 2009 2010 void BinaryOperator::setHasNoUnsignedWrap(bool b) { 2011 cast<OverflowingBinaryOperator>(this)->setHasNoUnsignedWrap(b); 2012 } 2013 2014 void BinaryOperator::setHasNoSignedWrap(bool b) { 2015 cast<OverflowingBinaryOperator>(this)->setHasNoSignedWrap(b); 2016 } 2017 2018 void BinaryOperator::setIsExact(bool b) { 2019 cast<PossiblyExactOperator>(this)->setIsExact(b); 2020 } 2021 2022 bool BinaryOperator::hasNoUnsignedWrap() const { 2023 return cast<OverflowingBinaryOperator>(this)->hasNoUnsignedWrap(); 2024 } 2025 2026 bool BinaryOperator::hasNoSignedWrap() const { 2027 return cast<OverflowingBinaryOperator>(this)->hasNoSignedWrap(); 2028 } 2029 2030 bool BinaryOperator::isExact() const { 2031 return cast<PossiblyExactOperator>(this)->isExact(); 2032 } 2033 2034 void BinaryOperator::copyIRFlags(const Value *V) { 2035 // Copy the wrapping flags. 2036 if (auto *OB = dyn_cast<OverflowingBinaryOperator>(V)) { 2037 setHasNoSignedWrap(OB->hasNoSignedWrap()); 2038 setHasNoUnsignedWrap(OB->hasNoUnsignedWrap()); 2039 } 2040 2041 // Copy the exact flag. 2042 if (auto *PE = dyn_cast<PossiblyExactOperator>(V)) 2043 setIsExact(PE->isExact()); 2044 2045 // Copy the fast-math flags. 2046 if (auto *FP = dyn_cast<FPMathOperator>(V)) 2047 copyFastMathFlags(FP->getFastMathFlags()); 2048 } 2049 2050 void BinaryOperator::andIRFlags(const Value *V) { 2051 if (auto *OB = dyn_cast<OverflowingBinaryOperator>(V)) { 2052 setHasNoSignedWrap(hasNoSignedWrap() & OB->hasNoSignedWrap()); 2053 setHasNoUnsignedWrap(hasNoUnsignedWrap() & OB->hasNoUnsignedWrap()); 2054 } 2055 2056 if (auto *PE = dyn_cast<PossiblyExactOperator>(V)) 2057 setIsExact(isExact() & PE->isExact()); 2058 2059 if (auto *FP = dyn_cast<FPMathOperator>(V)) { 2060 FastMathFlags FM = getFastMathFlags(); 2061 FM &= FP->getFastMathFlags(); 2062 copyFastMathFlags(FM); 2063 } 2064 } 2065 2066 2067 //===----------------------------------------------------------------------===// 2068 // FPMathOperator Class 2069 //===----------------------------------------------------------------------===// 2070 2071 /// getFPAccuracy - Get the maximum error permitted by this operation in ULPs. 2072 /// An accuracy of 0.0 means that the operation should be performed with the 2073 /// default precision. 2074 float FPMathOperator::getFPAccuracy() const { 2075 const MDNode *MD = 2076 cast<Instruction>(this)->getMetadata(LLVMContext::MD_fpmath); 2077 if (!MD) 2078 return 0.0; 2079 ConstantFP *Accuracy = cast<ConstantFP>(MD->getOperand(0)); 2080 return Accuracy->getValueAPF().convertToFloat(); 2081 } 2082 2083 2084 //===----------------------------------------------------------------------===// 2085 // CastInst Class 2086 //===----------------------------------------------------------------------===// 2087 2088 void CastInst::anchor() {} 2089 2090 // Just determine if this cast only deals with integral->integral conversion. 2091 bool CastInst::isIntegerCast() const { 2092 switch (getOpcode()) { 2093 default: return false; 2094 case Instruction::ZExt: 2095 case Instruction::SExt: 2096 case Instruction::Trunc: 2097 return true; 2098 case Instruction::BitCast: 2099 return getOperand(0)->getType()->isIntegerTy() && 2100 getType()->isIntegerTy(); 2101 } 2102 } 2103 2104 bool CastInst::isLosslessCast() const { 2105 // Only BitCast can be lossless, exit fast if we're not BitCast 2106 if (getOpcode() != Instruction::BitCast) 2107 return false; 2108 2109 // Identity cast is always lossless 2110 Type* SrcTy = getOperand(0)->getType(); 2111 Type* DstTy = getType(); 2112 if (SrcTy == DstTy) 2113 return true; 2114 2115 // Pointer to pointer is always lossless. 2116 if (SrcTy->isPointerTy()) 2117 return DstTy->isPointerTy(); 2118 return false; // Other types have no identity values 2119 } 2120 2121 /// This function determines if the CastInst does not require any bits to be 2122 /// changed in order to effect the cast. Essentially, it identifies cases where 2123 /// no code gen is necessary for the cast, hence the name no-op cast. For 2124 /// example, the following are all no-op casts: 2125 /// # bitcast i32* %x to i8* 2126 /// # bitcast <2 x i32> %x to <4 x i16> 2127 /// # ptrtoint i32* %x to i32 ; on 32-bit plaforms only 2128 /// @brief Determine if the described cast is a no-op. 2129 bool CastInst::isNoopCast(Instruction::CastOps Opcode, 2130 Type *SrcTy, 2131 Type *DestTy, 2132 Type *IntPtrTy) { 2133 switch (Opcode) { 2134 default: llvm_unreachable("Invalid CastOp"); 2135 case Instruction::Trunc: 2136 case Instruction::ZExt: 2137 case Instruction::SExt: 2138 case Instruction::FPTrunc: 2139 case Instruction::FPExt: 2140 case Instruction::UIToFP: 2141 case Instruction::SIToFP: 2142 case Instruction::FPToUI: 2143 case Instruction::FPToSI: 2144 case Instruction::AddrSpaceCast: 2145 // TODO: Target informations may give a more accurate answer here. 2146 return false; 2147 case Instruction::BitCast: 2148 return true; // BitCast never modifies bits. 2149 case Instruction::PtrToInt: 2150 return IntPtrTy->getScalarSizeInBits() == 2151 DestTy->getScalarSizeInBits(); 2152 case Instruction::IntToPtr: 2153 return IntPtrTy->getScalarSizeInBits() == 2154 SrcTy->getScalarSizeInBits(); 2155 } 2156 } 2157 2158 /// @brief Determine if a cast is a no-op. 2159 bool CastInst::isNoopCast(Type *IntPtrTy) const { 2160 return isNoopCast(getOpcode(), getOperand(0)->getType(), getType(), IntPtrTy); 2161 } 2162 2163 bool CastInst::isNoopCast(const DataLayout *DL) const { 2164 if (!DL) { 2165 // Assume maximum pointer size. 2166 return isNoopCast(Type::getInt64Ty(getContext())); 2167 } 2168 2169 Type *PtrOpTy = nullptr; 2170 if (getOpcode() == Instruction::PtrToInt) 2171 PtrOpTy = getOperand(0)->getType(); 2172 else if (getOpcode() == Instruction::IntToPtr) 2173 PtrOpTy = getType(); 2174 2175 Type *IntPtrTy = PtrOpTy 2176 ? DL->getIntPtrType(PtrOpTy) 2177 : DL->getIntPtrType(getContext(), 0); 2178 2179 return isNoopCast(getOpcode(), getOperand(0)->getType(), getType(), IntPtrTy); 2180 } 2181 2182 /// This function determines if a pair of casts can be eliminated and what 2183 /// opcode should be used in the elimination. This assumes that there are two 2184 /// instructions like this: 2185 /// * %F = firstOpcode SrcTy %x to MidTy 2186 /// * %S = secondOpcode MidTy %F to DstTy 2187 /// The function returns a resultOpcode so these two casts can be replaced with: 2188 /// * %Replacement = resultOpcode %SrcTy %x to DstTy 2189 /// If no such cast is permited, the function returns 0. 2190 unsigned CastInst::isEliminableCastPair( 2191 Instruction::CastOps firstOp, Instruction::CastOps secondOp, 2192 Type *SrcTy, Type *MidTy, Type *DstTy, Type *SrcIntPtrTy, Type *MidIntPtrTy, 2193 Type *DstIntPtrTy) { 2194 // Define the 144 possibilities for these two cast instructions. The values 2195 // in this matrix determine what to do in a given situation and select the 2196 // case in the switch below. The rows correspond to firstOp, the columns 2197 // correspond to secondOp. In looking at the table below, keep in mind 2198 // the following cast properties: 2199 // 2200 // Size Compare Source Destination 2201 // Operator Src ? Size Type Sign Type Sign 2202 // -------- ------------ ------------------- --------------------- 2203 // TRUNC > Integer Any Integral Any 2204 // ZEXT < Integral Unsigned Integer Any 2205 // SEXT < Integral Signed Integer Any 2206 // FPTOUI n/a FloatPt n/a Integral Unsigned 2207 // FPTOSI n/a FloatPt n/a Integral Signed 2208 // UITOFP n/a Integral Unsigned FloatPt n/a 2209 // SITOFP n/a Integral Signed FloatPt n/a 2210 // FPTRUNC > FloatPt n/a FloatPt n/a 2211 // FPEXT < FloatPt n/a FloatPt n/a 2212 // PTRTOINT n/a Pointer n/a Integral Unsigned 2213 // INTTOPTR n/a Integral Unsigned Pointer n/a 2214 // BITCAST = FirstClass n/a FirstClass n/a 2215 // ADDRSPCST n/a Pointer n/a Pointer n/a 2216 // 2217 // NOTE: some transforms are safe, but we consider them to be non-profitable. 2218 // For example, we could merge "fptoui double to i32" + "zext i32 to i64", 2219 // into "fptoui double to i64", but this loses information about the range 2220 // of the produced value (we no longer know the top-part is all zeros). 2221 // Further this conversion is often much more expensive for typical hardware, 2222 // and causes issues when building libgcc. We disallow fptosi+sext for the 2223 // same reason. 2224 const unsigned numCastOps = 2225 Instruction::CastOpsEnd - Instruction::CastOpsBegin; 2226 static const uint8_t CastResults[numCastOps][numCastOps] = { 2227 // T F F U S F F P I B A -+ 2228 // R Z S P P I I T P 2 N T S | 2229 // U E E 2 2 2 2 R E I T C C +- secondOp 2230 // N X X U S F F N X N 2 V V | 2231 // C T T I I P P C T T P T T -+ 2232 { 1, 0, 0,99,99, 0, 0,99,99,99, 0, 3, 0}, // Trunc -+ 2233 { 8, 1, 9,99,99, 2, 0,99,99,99, 2, 3, 0}, // ZExt | 2234 { 8, 0, 1,99,99, 0, 2,99,99,99, 0, 3, 0}, // SExt | 2235 { 0, 0, 0,99,99, 0, 0,99,99,99, 0, 3, 0}, // FPToUI | 2236 { 0, 0, 0,99,99, 0, 0,99,99,99, 0, 3, 0}, // FPToSI | 2237 { 99,99,99, 0, 0,99,99, 0, 0,99,99, 4, 0}, // UIToFP +- firstOp 2238 { 99,99,99, 0, 0,99,99, 0, 0,99,99, 4, 0}, // SIToFP | 2239 { 99,99,99, 0, 0,99,99, 1, 0,99,99, 4, 0}, // FPTrunc | 2240 { 99,99,99, 2, 2,99,99,10, 2,99,99, 4, 0}, // FPExt | 2241 { 1, 0, 0,99,99, 0, 0,99,99,99, 7, 3, 0}, // PtrToInt | 2242 { 99,99,99,99,99,99,99,99,99,11,99,15, 0}, // IntToPtr | 2243 { 5, 5, 5, 6, 6, 5, 5, 6, 6,16, 5, 1,14}, // BitCast | 2244 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,13,12}, // AddrSpaceCast -+ 2245 }; 2246 2247 // If either of the casts are a bitcast from scalar to vector, disallow the 2248 // merging. However, bitcast of A->B->A are allowed. 2249 bool isFirstBitcast = (firstOp == Instruction::BitCast); 2250 bool isSecondBitcast = (secondOp == Instruction::BitCast); 2251 bool chainedBitcast = (SrcTy == DstTy && isFirstBitcast && isSecondBitcast); 2252 2253 // Check if any of the bitcasts convert scalars<->vectors. 2254 if ((isFirstBitcast && isa<VectorType>(SrcTy) != isa<VectorType>(MidTy)) || 2255 (isSecondBitcast && isa<VectorType>(MidTy) != isa<VectorType>(DstTy))) 2256 // Unless we are bitcasing to the original type, disallow optimizations. 2257 if (!chainedBitcast) return 0; 2258 2259 int ElimCase = CastResults[firstOp-Instruction::CastOpsBegin] 2260 [secondOp-Instruction::CastOpsBegin]; 2261 switch (ElimCase) { 2262 case 0: 2263 // Categorically disallowed. 2264 return 0; 2265 case 1: 2266 // Allowed, use first cast's opcode. 2267 return firstOp; 2268 case 2: 2269 // Allowed, use second cast's opcode. 2270 return secondOp; 2271 case 3: 2272 // No-op cast in second op implies firstOp as long as the DestTy 2273 // is integer and we are not converting between a vector and a 2274 // non-vector type. 2275 if (!SrcTy->isVectorTy() && DstTy->isIntegerTy()) 2276 return firstOp; 2277 return 0; 2278 case 4: 2279 // No-op cast in second op implies firstOp as long as the DestTy 2280 // is floating point. 2281 if (DstTy->isFloatingPointTy()) 2282 return firstOp; 2283 return 0; 2284 case 5: 2285 // No-op cast in first op implies secondOp as long as the SrcTy 2286 // is an integer. 2287 if (SrcTy->isIntegerTy()) 2288 return secondOp; 2289 return 0; 2290 case 6: 2291 // No-op cast in first op implies secondOp as long as the SrcTy 2292 // is a floating point. 2293 if (SrcTy->isFloatingPointTy()) 2294 return secondOp; 2295 return 0; 2296 case 7: { 2297 // Cannot simplify if address spaces are different! 2298 if (SrcTy->getPointerAddressSpace() != DstTy->getPointerAddressSpace()) 2299 return 0; 2300 2301 unsigned MidSize = MidTy->getScalarSizeInBits(); 2302 // We can still fold this without knowing the actual sizes as long we 2303 // know that the intermediate pointer is the largest possible 2304 // pointer size. 2305 // FIXME: Is this always true? 2306 if (MidSize == 64) 2307 return Instruction::BitCast; 2308 2309 // ptrtoint, inttoptr -> bitcast (ptr -> ptr) if int size is >= ptr size. 2310 if (!SrcIntPtrTy || DstIntPtrTy != SrcIntPtrTy) 2311 return 0; 2312 unsigned PtrSize = SrcIntPtrTy->getScalarSizeInBits(); 2313 if (MidSize >= PtrSize) 2314 return Instruction::BitCast; 2315 return 0; 2316 } 2317 case 8: { 2318 // ext, trunc -> bitcast, if the SrcTy and DstTy are same size 2319 // ext, trunc -> ext, if sizeof(SrcTy) < sizeof(DstTy) 2320 // ext, trunc -> trunc, if sizeof(SrcTy) > sizeof(DstTy) 2321 unsigned SrcSize = SrcTy->getScalarSizeInBits(); 2322 unsigned DstSize = DstTy->getScalarSizeInBits(); 2323 if (SrcSize == DstSize) 2324 return Instruction::BitCast; 2325 else if (SrcSize < DstSize) 2326 return firstOp; 2327 return secondOp; 2328 } 2329 case 9: 2330 // zext, sext -> zext, because sext can't sign extend after zext 2331 return Instruction::ZExt; 2332 case 10: 2333 // fpext followed by ftrunc is allowed if the bit size returned to is 2334 // the same as the original, in which case its just a bitcast 2335 if (SrcTy == DstTy) 2336 return Instruction::BitCast; 2337 return 0; // If the types are not the same we can't eliminate it. 2338 case 11: { 2339 // inttoptr, ptrtoint -> bitcast if SrcSize<=PtrSize and SrcSize==DstSize 2340 if (!MidIntPtrTy) 2341 return 0; 2342 unsigned PtrSize = MidIntPtrTy->getScalarSizeInBits(); 2343 unsigned SrcSize = SrcTy->getScalarSizeInBits(); 2344 unsigned DstSize = DstTy->getScalarSizeInBits(); 2345 if (SrcSize <= PtrSize && SrcSize == DstSize) 2346 return Instruction::BitCast; 2347 return 0; 2348 } 2349 case 12: { 2350 // addrspacecast, addrspacecast -> bitcast, if SrcAS == DstAS 2351 // addrspacecast, addrspacecast -> addrspacecast, if SrcAS != DstAS 2352 if (SrcTy->getPointerAddressSpace() != DstTy->getPointerAddressSpace()) 2353 return Instruction::AddrSpaceCast; 2354 return Instruction::BitCast; 2355 } 2356 case 13: 2357 // FIXME: this state can be merged with (1), but the following assert 2358 // is useful to check the correcteness of the sequence due to semantic 2359 // change of bitcast. 2360 assert( 2361 SrcTy->isPtrOrPtrVectorTy() && 2362 MidTy->isPtrOrPtrVectorTy() && 2363 DstTy->isPtrOrPtrVectorTy() && 2364 SrcTy->getPointerAddressSpace() != MidTy->getPointerAddressSpace() && 2365 MidTy->getPointerAddressSpace() == DstTy->getPointerAddressSpace() && 2366 "Illegal addrspacecast, bitcast sequence!"); 2367 // Allowed, use first cast's opcode 2368 return firstOp; 2369 case 14: 2370 // bitcast, addrspacecast -> addrspacecast if the element type of 2371 // bitcast's source is the same as that of addrspacecast's destination. 2372 if (SrcTy->getPointerElementType() == DstTy->getPointerElementType()) 2373 return Instruction::AddrSpaceCast; 2374 return 0; 2375 2376 case 15: 2377 // FIXME: this state can be merged with (1), but the following assert 2378 // is useful to check the correcteness of the sequence due to semantic 2379 // change of bitcast. 2380 assert( 2381 SrcTy->isIntOrIntVectorTy() && 2382 MidTy->isPtrOrPtrVectorTy() && 2383 DstTy->isPtrOrPtrVectorTy() && 2384 MidTy->getPointerAddressSpace() == DstTy->getPointerAddressSpace() && 2385 "Illegal inttoptr, bitcast sequence!"); 2386 // Allowed, use first cast's opcode 2387 return firstOp; 2388 case 16: 2389 // FIXME: this state can be merged with (2), but the following assert 2390 // is useful to check the correcteness of the sequence due to semantic 2391 // change of bitcast. 2392 assert( 2393 SrcTy->isPtrOrPtrVectorTy() && 2394 MidTy->isPtrOrPtrVectorTy() && 2395 DstTy->isIntOrIntVectorTy() && 2396 SrcTy->getPointerAddressSpace() == MidTy->getPointerAddressSpace() && 2397 "Illegal bitcast, ptrtoint sequence!"); 2398 // Allowed, use second cast's opcode 2399 return secondOp; 2400 case 99: 2401 // Cast combination can't happen (error in input). This is for all cases 2402 // where the MidTy is not the same for the two cast instructions. 2403 llvm_unreachable("Invalid Cast Combination"); 2404 default: 2405 llvm_unreachable("Error in CastResults table!!!"); 2406 } 2407 } 2408 2409 CastInst *CastInst::Create(Instruction::CastOps op, Value *S, Type *Ty, 2410 const Twine &Name, Instruction *InsertBefore) { 2411 assert(castIsValid(op, S, Ty) && "Invalid cast!"); 2412 // Construct and return the appropriate CastInst subclass 2413 switch (op) { 2414 case Trunc: return new TruncInst (S, Ty, Name, InsertBefore); 2415 case ZExt: return new ZExtInst (S, Ty, Name, InsertBefore); 2416 case SExt: return new SExtInst (S, Ty, Name, InsertBefore); 2417 case FPTrunc: return new FPTruncInst (S, Ty, Name, InsertBefore); 2418 case FPExt: return new FPExtInst (S, Ty, Name, InsertBefore); 2419 case UIToFP: return new UIToFPInst (S, Ty, Name, InsertBefore); 2420 case SIToFP: return new SIToFPInst (S, Ty, Name, InsertBefore); 2421 case FPToUI: return new FPToUIInst (S, Ty, Name, InsertBefore); 2422 case FPToSI: return new FPToSIInst (S, Ty, Name, InsertBefore); 2423 case PtrToInt: return new PtrToIntInst (S, Ty, Name, InsertBefore); 2424 case IntToPtr: return new IntToPtrInst (S, Ty, Name, InsertBefore); 2425 case BitCast: return new BitCastInst (S, Ty, Name, InsertBefore); 2426 case AddrSpaceCast: return new AddrSpaceCastInst (S, Ty, Name, InsertBefore); 2427 default: llvm_unreachable("Invalid opcode provided"); 2428 } 2429 } 2430 2431 CastInst *CastInst::Create(Instruction::CastOps op, Value *S, Type *Ty, 2432 const Twine &Name, BasicBlock *InsertAtEnd) { 2433 assert(castIsValid(op, S, Ty) && "Invalid cast!"); 2434 // Construct and return the appropriate CastInst subclass 2435 switch (op) { 2436 case Trunc: return new TruncInst (S, Ty, Name, InsertAtEnd); 2437 case ZExt: return new ZExtInst (S, Ty, Name, InsertAtEnd); 2438 case SExt: return new SExtInst (S, Ty, Name, InsertAtEnd); 2439 case FPTrunc: return new FPTruncInst (S, Ty, Name, InsertAtEnd); 2440 case FPExt: return new FPExtInst (S, Ty, Name, InsertAtEnd); 2441 case UIToFP: return new UIToFPInst (S, Ty, Name, InsertAtEnd); 2442 case SIToFP: return new SIToFPInst (S, Ty, Name, InsertAtEnd); 2443 case FPToUI: return new FPToUIInst (S, Ty, Name, InsertAtEnd); 2444 case FPToSI: return new FPToSIInst (S, Ty, Name, InsertAtEnd); 2445 case PtrToInt: return new PtrToIntInst (S, Ty, Name, InsertAtEnd); 2446 case IntToPtr: return new IntToPtrInst (S, Ty, Name, InsertAtEnd); 2447 case BitCast: return new BitCastInst (S, Ty, Name, InsertAtEnd); 2448 case AddrSpaceCast: return new AddrSpaceCastInst (S, Ty, Name, InsertAtEnd); 2449 default: llvm_unreachable("Invalid opcode provided"); 2450 } 2451 } 2452 2453 CastInst *CastInst::CreateZExtOrBitCast(Value *S, Type *Ty, 2454 const Twine &Name, 2455 Instruction *InsertBefore) { 2456 if (S->getType()->getScalarSizeInBits() == Ty->getScalarSizeInBits()) 2457 return Create(Instruction::BitCast, S, Ty, Name, InsertBefore); 2458 return Create(Instruction::ZExt, S, Ty, Name, InsertBefore); 2459 } 2460 2461 CastInst *CastInst::CreateZExtOrBitCast(Value *S, Type *Ty, 2462 const Twine &Name, 2463 BasicBlock *InsertAtEnd) { 2464 if (S->getType()->getScalarSizeInBits() == Ty->getScalarSizeInBits()) 2465 return Create(Instruction::BitCast, S, Ty, Name, InsertAtEnd); 2466 return Create(Instruction::ZExt, S, Ty, Name, InsertAtEnd); 2467 } 2468 2469 CastInst *CastInst::CreateSExtOrBitCast(Value *S, Type *Ty, 2470 const Twine &Name, 2471 Instruction *InsertBefore) { 2472 if (S->getType()->getScalarSizeInBits() == Ty->getScalarSizeInBits()) 2473 return Create(Instruction::BitCast, S, Ty, Name, InsertBefore); 2474 return Create(Instruction::SExt, S, Ty, Name, InsertBefore); 2475 } 2476 2477 CastInst *CastInst::CreateSExtOrBitCast(Value *S, Type *Ty, 2478 const Twine &Name, 2479 BasicBlock *InsertAtEnd) { 2480 if (S->getType()->getScalarSizeInBits() == Ty->getScalarSizeInBits()) 2481 return Create(Instruction::BitCast, S, Ty, Name, InsertAtEnd); 2482 return Create(Instruction::SExt, S, Ty, Name, InsertAtEnd); 2483 } 2484 2485 CastInst *CastInst::CreateTruncOrBitCast(Value *S, Type *Ty, 2486 const Twine &Name, 2487 Instruction *InsertBefore) { 2488 if (S->getType()->getScalarSizeInBits() == Ty->getScalarSizeInBits()) 2489 return Create(Instruction::BitCast, S, Ty, Name, InsertBefore); 2490 return Create(Instruction::Trunc, S, Ty, Name, InsertBefore); 2491 } 2492 2493 CastInst *CastInst::CreateTruncOrBitCast(Value *S, Type *Ty, 2494 const Twine &Name, 2495 BasicBlock *InsertAtEnd) { 2496 if (S->getType()->getScalarSizeInBits() == Ty->getScalarSizeInBits()) 2497 return Create(Instruction::BitCast, S, Ty, Name, InsertAtEnd); 2498 return Create(Instruction::Trunc, S, Ty, Name, InsertAtEnd); 2499 } 2500 2501 CastInst *CastInst::CreatePointerCast(Value *S, Type *Ty, 2502 const Twine &Name, 2503 BasicBlock *InsertAtEnd) { 2504 assert(S->getType()->isPtrOrPtrVectorTy() && "Invalid cast"); 2505 assert((Ty->isIntOrIntVectorTy() || Ty->isPtrOrPtrVectorTy()) && 2506 "Invalid cast"); 2507 assert(Ty->isVectorTy() == S->getType()->isVectorTy() && "Invalid cast"); 2508 assert((!Ty->isVectorTy() || 2509 Ty->getVectorNumElements() == S->getType()->getVectorNumElements()) && 2510 "Invalid cast"); 2511 2512 if (Ty->isIntOrIntVectorTy()) 2513 return Create(Instruction::PtrToInt, S, Ty, Name, InsertAtEnd); 2514 2515 return CreatePointerBitCastOrAddrSpaceCast(S, Ty, Name, InsertAtEnd); 2516 } 2517 2518 /// @brief Create a BitCast or a PtrToInt cast instruction 2519 CastInst *CastInst::CreatePointerCast(Value *S, Type *Ty, 2520 const Twine &Name, 2521 Instruction *InsertBefore) { 2522 assert(S->getType()->isPtrOrPtrVectorTy() && "Invalid cast"); 2523 assert((Ty->isIntOrIntVectorTy() || Ty->isPtrOrPtrVectorTy()) && 2524 "Invalid cast"); 2525 assert(Ty->isVectorTy() == S->getType()->isVectorTy() && "Invalid cast"); 2526 assert((!Ty->isVectorTy() || 2527 Ty->getVectorNumElements() == S->getType()->getVectorNumElements()) && 2528 "Invalid cast"); 2529 2530 if (Ty->isIntOrIntVectorTy()) 2531 return Create(Instruction::PtrToInt, S, Ty, Name, InsertBefore); 2532 2533 return CreatePointerBitCastOrAddrSpaceCast(S, Ty, Name, InsertBefore); 2534 } 2535 2536 CastInst *CastInst::CreatePointerBitCastOrAddrSpaceCast( 2537 Value *S, Type *Ty, 2538 const Twine &Name, 2539 BasicBlock *InsertAtEnd) { 2540 assert(S->getType()->isPtrOrPtrVectorTy() && "Invalid cast"); 2541 assert(Ty->isPtrOrPtrVectorTy() && "Invalid cast"); 2542 2543 if (S->getType()->getPointerAddressSpace() != Ty->getPointerAddressSpace()) 2544 return Create(Instruction::AddrSpaceCast, S, Ty, Name, InsertAtEnd); 2545 2546 return Create(Instruction::BitCast, S, Ty, Name, InsertAtEnd); 2547 } 2548 2549 CastInst *CastInst::CreatePointerBitCastOrAddrSpaceCast( 2550 Value *S, Type *Ty, 2551 const Twine &Name, 2552 Instruction *InsertBefore) { 2553 assert(S->getType()->isPtrOrPtrVectorTy() && "Invalid cast"); 2554 assert(Ty->isPtrOrPtrVectorTy() && "Invalid cast"); 2555 2556 if (S->getType()->getPointerAddressSpace() != Ty->getPointerAddressSpace()) 2557 return Create(Instruction::AddrSpaceCast, S, Ty, Name, InsertBefore); 2558 2559 return Create(Instruction::BitCast, S, Ty, Name, InsertBefore); 2560 } 2561 2562 CastInst *CastInst::CreateIntegerCast(Value *C, Type *Ty, 2563 bool isSigned, const Twine &Name, 2564 Instruction *InsertBefore) { 2565 assert(C->getType()->isIntOrIntVectorTy() && Ty->isIntOrIntVectorTy() && 2566 "Invalid integer cast"); 2567 unsigned SrcBits = C->getType()->getScalarSizeInBits(); 2568 unsigned DstBits = Ty->getScalarSizeInBits(); 2569 Instruction::CastOps opcode = 2570 (SrcBits == DstBits ? Instruction::BitCast : 2571 (SrcBits > DstBits ? Instruction::Trunc : 2572 (isSigned ? Instruction::SExt : Instruction::ZExt))); 2573 return Create(opcode, C, Ty, Name, InsertBefore); 2574 } 2575 2576 CastInst *CastInst::CreateIntegerCast(Value *C, Type *Ty, 2577 bool isSigned, const Twine &Name, 2578 BasicBlock *InsertAtEnd) { 2579 assert(C->getType()->isIntOrIntVectorTy() && Ty->isIntOrIntVectorTy() && 2580 "Invalid cast"); 2581 unsigned SrcBits = C->getType()->getScalarSizeInBits(); 2582 unsigned DstBits = Ty->getScalarSizeInBits(); 2583 Instruction::CastOps opcode = 2584 (SrcBits == DstBits ? Instruction::BitCast : 2585 (SrcBits > DstBits ? Instruction::Trunc : 2586 (isSigned ? Instruction::SExt : Instruction::ZExt))); 2587 return Create(opcode, C, Ty, Name, InsertAtEnd); 2588 } 2589 2590 CastInst *CastInst::CreateFPCast(Value *C, Type *Ty, 2591 const Twine &Name, 2592 Instruction *InsertBefore) { 2593 assert(C->getType()->isFPOrFPVectorTy() && Ty->isFPOrFPVectorTy() && 2594 "Invalid cast"); 2595 unsigned SrcBits = C->getType()->getScalarSizeInBits(); 2596 unsigned DstBits = Ty->getScalarSizeInBits(); 2597 Instruction::CastOps opcode = 2598 (SrcBits == DstBits ? Instruction::BitCast : 2599 (SrcBits > DstBits ? Instruction::FPTrunc : Instruction::FPExt)); 2600 return Create(opcode, C, Ty, Name, InsertBefore); 2601 } 2602 2603 CastInst *CastInst::CreateFPCast(Value *C, Type *Ty, 2604 const Twine &Name, 2605 BasicBlock *InsertAtEnd) { 2606 assert(C->getType()->isFPOrFPVectorTy() && Ty->isFPOrFPVectorTy() && 2607 "Invalid cast"); 2608 unsigned SrcBits = C->getType()->getScalarSizeInBits(); 2609 unsigned DstBits = Ty->getScalarSizeInBits(); 2610 Instruction::CastOps opcode = 2611 (SrcBits == DstBits ? Instruction::BitCast : 2612 (SrcBits > DstBits ? Instruction::FPTrunc : Instruction::FPExt)); 2613 return Create(opcode, C, Ty, Name, InsertAtEnd); 2614 } 2615 2616 // Check whether it is valid to call getCastOpcode for these types. 2617 // This routine must be kept in sync with getCastOpcode. 2618 bool CastInst::isCastable(Type *SrcTy, Type *DestTy) { 2619 if (!SrcTy->isFirstClassType() || !DestTy->isFirstClassType()) 2620 return false; 2621 2622 if (SrcTy == DestTy) 2623 return true; 2624 2625 if (VectorType *SrcVecTy = dyn_cast<VectorType>(SrcTy)) 2626 if (VectorType *DestVecTy = dyn_cast<VectorType>(DestTy)) 2627 if (SrcVecTy->getNumElements() == DestVecTy->getNumElements()) { 2628 // An element by element cast. Valid if casting the elements is valid. 2629 SrcTy = SrcVecTy->getElementType(); 2630 DestTy = DestVecTy->getElementType(); 2631 } 2632 2633 // Get the bit sizes, we'll need these 2634 unsigned SrcBits = SrcTy->getPrimitiveSizeInBits(); // 0 for ptr 2635 unsigned DestBits = DestTy->getPrimitiveSizeInBits(); // 0 for ptr 2636 2637 // Run through the possibilities ... 2638 if (DestTy->isIntegerTy()) { // Casting to integral 2639 if (SrcTy->isIntegerTy()) { // Casting from integral 2640 return true; 2641 } else if (SrcTy->isFloatingPointTy()) { // Casting from floating pt 2642 return true; 2643 } else if (SrcTy->isVectorTy()) { // Casting from vector 2644 return DestBits == SrcBits; 2645 } else { // Casting from something else 2646 return SrcTy->isPointerTy(); 2647 } 2648 } else if (DestTy->isFloatingPointTy()) { // Casting to floating pt 2649 if (SrcTy->isIntegerTy()) { // Casting from integral 2650 return true; 2651 } else if (SrcTy->isFloatingPointTy()) { // Casting from floating pt 2652 return true; 2653 } else if (SrcTy->isVectorTy()) { // Casting from vector 2654 return DestBits == SrcBits; 2655 } else { // Casting from something else 2656 return false; 2657 } 2658 } else if (DestTy->isVectorTy()) { // Casting to vector 2659 return DestBits == SrcBits; 2660 } else if (DestTy->isPointerTy()) { // Casting to pointer 2661 if (SrcTy->isPointerTy()) { // Casting from pointer 2662 return true; 2663 } else if (SrcTy->isIntegerTy()) { // Casting from integral 2664 return true; 2665 } else { // Casting from something else 2666 return false; 2667 } 2668 } else if (DestTy->isX86_MMXTy()) { 2669 if (SrcTy->isVectorTy()) { 2670 return DestBits == SrcBits; // 64-bit vector to MMX 2671 } else { 2672 return false; 2673 } 2674 } else { // Casting to something else 2675 return false; 2676 } 2677 } 2678 2679 bool CastInst::isBitCastable(Type *SrcTy, Type *DestTy) { 2680 if (!SrcTy->isFirstClassType() || !DestTy->isFirstClassType()) 2681 return false; 2682 2683 if (SrcTy == DestTy) 2684 return true; 2685 2686 if (VectorType *SrcVecTy = dyn_cast<VectorType>(SrcTy)) { 2687 if (VectorType *DestVecTy = dyn_cast<VectorType>(DestTy)) { 2688 if (SrcVecTy->getNumElements() == DestVecTy->getNumElements()) { 2689 // An element by element cast. Valid if casting the elements is valid. 2690 SrcTy = SrcVecTy->getElementType(); 2691 DestTy = DestVecTy->getElementType(); 2692 } 2693 } 2694 } 2695 2696 if (PointerType *DestPtrTy = dyn_cast<PointerType>(DestTy)) { 2697 if (PointerType *SrcPtrTy = dyn_cast<PointerType>(SrcTy)) { 2698 return SrcPtrTy->getAddressSpace() == DestPtrTy->getAddressSpace(); 2699 } 2700 } 2701 2702 unsigned SrcBits = SrcTy->getPrimitiveSizeInBits(); // 0 for ptr 2703 unsigned DestBits = DestTy->getPrimitiveSizeInBits(); // 0 for ptr 2704 2705 // Could still have vectors of pointers if the number of elements doesn't 2706 // match 2707 if (SrcBits == 0 || DestBits == 0) 2708 return false; 2709 2710 if (SrcBits != DestBits) 2711 return false; 2712 2713 if (DestTy->isX86_MMXTy() || SrcTy->isX86_MMXTy()) 2714 return false; 2715 2716 return true; 2717 } 2718 2719 // Provide a way to get a "cast" where the cast opcode is inferred from the 2720 // types and size of the operand. This, basically, is a parallel of the 2721 // logic in the castIsValid function below. This axiom should hold: 2722 // castIsValid( getCastOpcode(Val, Ty), Val, Ty) 2723 // should not assert in castIsValid. In other words, this produces a "correct" 2724 // casting opcode for the arguments passed to it. 2725 // This routine must be kept in sync with isCastable. 2726 Instruction::CastOps 2727 CastInst::getCastOpcode( 2728 const Value *Src, bool SrcIsSigned, Type *DestTy, bool DestIsSigned) { 2729 Type *SrcTy = Src->getType(); 2730 2731 assert(SrcTy->isFirstClassType() && DestTy->isFirstClassType() && 2732 "Only first class types are castable!"); 2733 2734 if (SrcTy == DestTy) 2735 return BitCast; 2736 2737 // FIXME: Check address space sizes here 2738 if (VectorType *SrcVecTy = dyn_cast<VectorType>(SrcTy)) 2739 if (VectorType *DestVecTy = dyn_cast<VectorType>(DestTy)) 2740 if (SrcVecTy->getNumElements() == DestVecTy->getNumElements()) { 2741 // An element by element cast. Find the appropriate opcode based on the 2742 // element types. 2743 SrcTy = SrcVecTy->getElementType(); 2744 DestTy = DestVecTy->getElementType(); 2745 } 2746 2747 // Get the bit sizes, we'll need these 2748 unsigned SrcBits = SrcTy->getPrimitiveSizeInBits(); // 0 for ptr 2749 unsigned DestBits = DestTy->getPrimitiveSizeInBits(); // 0 for ptr 2750 2751 // Run through the possibilities ... 2752 if (DestTy->isIntegerTy()) { // Casting to integral 2753 if (SrcTy->isIntegerTy()) { // Casting from integral 2754 if (DestBits < SrcBits) 2755 return Trunc; // int -> smaller int 2756 else if (DestBits > SrcBits) { // its an extension 2757 if (SrcIsSigned) 2758 return SExt; // signed -> SEXT 2759 else 2760 return ZExt; // unsigned -> ZEXT 2761 } else { 2762 return BitCast; // Same size, No-op cast 2763 } 2764 } else if (SrcTy->isFloatingPointTy()) { // Casting from floating pt 2765 if (DestIsSigned) 2766 return FPToSI; // FP -> sint 2767 else 2768 return FPToUI; // FP -> uint 2769 } else if (SrcTy->isVectorTy()) { 2770 assert(DestBits == SrcBits && 2771 "Casting vector to integer of different width"); 2772 return BitCast; // Same size, no-op cast 2773 } else { 2774 assert(SrcTy->isPointerTy() && 2775 "Casting from a value that is not first-class type"); 2776 return PtrToInt; // ptr -> int 2777 } 2778 } else if (DestTy->isFloatingPointTy()) { // Casting to floating pt 2779 if (SrcTy->isIntegerTy()) { // Casting from integral 2780 if (SrcIsSigned) 2781 return SIToFP; // sint -> FP 2782 else 2783 return UIToFP; // uint -> FP 2784 } else if (SrcTy->isFloatingPointTy()) { // Casting from floating pt 2785 if (DestBits < SrcBits) { 2786 return FPTrunc; // FP -> smaller FP 2787 } else if (DestBits > SrcBits) { 2788 return FPExt; // FP -> larger FP 2789 } else { 2790 return BitCast; // same size, no-op cast 2791 } 2792 } else if (SrcTy->isVectorTy()) { 2793 assert(DestBits == SrcBits && 2794 "Casting vector to floating point of different width"); 2795 return BitCast; // same size, no-op cast 2796 } 2797 llvm_unreachable("Casting pointer or non-first class to float"); 2798 } else if (DestTy->isVectorTy()) { 2799 assert(DestBits == SrcBits && 2800 "Illegal cast to vector (wrong type or size)"); 2801 return BitCast; 2802 } else if (DestTy->isPointerTy()) { 2803 if (SrcTy->isPointerTy()) { 2804 if (DestTy->getPointerAddressSpace() != SrcTy->getPointerAddressSpace()) 2805 return AddrSpaceCast; 2806 return BitCast; // ptr -> ptr 2807 } else if (SrcTy->isIntegerTy()) { 2808 return IntToPtr; // int -> ptr 2809 } 2810 llvm_unreachable("Casting pointer to other than pointer or int"); 2811 } else if (DestTy->isX86_MMXTy()) { 2812 if (SrcTy->isVectorTy()) { 2813 assert(DestBits == SrcBits && "Casting vector of wrong width to X86_MMX"); 2814 return BitCast; // 64-bit vector to MMX 2815 } 2816 llvm_unreachable("Illegal cast to X86_MMX"); 2817 } 2818 llvm_unreachable("Casting to type that is not first-class"); 2819 } 2820 2821 //===----------------------------------------------------------------------===// 2822 // CastInst SubClass Constructors 2823 //===----------------------------------------------------------------------===// 2824 2825 /// Check that the construction parameters for a CastInst are correct. This 2826 /// could be broken out into the separate constructors but it is useful to have 2827 /// it in one place and to eliminate the redundant code for getting the sizes 2828 /// of the types involved. 2829 bool 2830 CastInst::castIsValid(Instruction::CastOps op, Value *S, Type *DstTy) { 2831 2832 // Check for type sanity on the arguments 2833 Type *SrcTy = S->getType(); 2834 2835 // If this is a cast to the same type then it's trivially true. 2836 if (SrcTy == DstTy) 2837 return true; 2838 2839 if (!SrcTy->isFirstClassType() || !DstTy->isFirstClassType() || 2840 SrcTy->isAggregateType() || DstTy->isAggregateType()) 2841 return false; 2842 2843 // Get the size of the types in bits, we'll need this later 2844 unsigned SrcBitSize = SrcTy->getScalarSizeInBits(); 2845 unsigned DstBitSize = DstTy->getScalarSizeInBits(); 2846 2847 // If these are vector types, get the lengths of the vectors (using zero for 2848 // scalar types means that checking that vector lengths match also checks that 2849 // scalars are not being converted to vectors or vectors to scalars). 2850 unsigned SrcLength = SrcTy->isVectorTy() ? 2851 cast<VectorType>(SrcTy)->getNumElements() : 0; 2852 unsigned DstLength = DstTy->isVectorTy() ? 2853 cast<VectorType>(DstTy)->getNumElements() : 0; 2854 2855 // Switch on the opcode provided 2856 switch (op) { 2857 default: return false; // This is an input error 2858 case Instruction::Trunc: 2859 return SrcTy->isIntOrIntVectorTy() && DstTy->isIntOrIntVectorTy() && 2860 SrcLength == DstLength && SrcBitSize > DstBitSize; 2861 case Instruction::ZExt: 2862 return SrcTy->isIntOrIntVectorTy() && DstTy->isIntOrIntVectorTy() && 2863 SrcLength == DstLength && SrcBitSize < DstBitSize; 2864 case Instruction::SExt: 2865 return SrcTy->isIntOrIntVectorTy() && DstTy->isIntOrIntVectorTy() && 2866 SrcLength == DstLength && SrcBitSize < DstBitSize; 2867 case Instruction::FPTrunc: 2868 return SrcTy->isFPOrFPVectorTy() && DstTy->isFPOrFPVectorTy() && 2869 SrcLength == DstLength && SrcBitSize > DstBitSize; 2870 case Instruction::FPExt: 2871 return SrcTy->isFPOrFPVectorTy() && DstTy->isFPOrFPVectorTy() && 2872 SrcLength == DstLength && SrcBitSize < DstBitSize; 2873 case Instruction::UIToFP: 2874 case Instruction::SIToFP: 2875 return SrcTy->isIntOrIntVectorTy() && DstTy->isFPOrFPVectorTy() && 2876 SrcLength == DstLength; 2877 case Instruction::FPToUI: 2878 case Instruction::FPToSI: 2879 return SrcTy->isFPOrFPVectorTy() && DstTy->isIntOrIntVectorTy() && 2880 SrcLength == DstLength; 2881 case Instruction::PtrToInt: 2882 if (isa<VectorType>(SrcTy) != isa<VectorType>(DstTy)) 2883 return false; 2884 if (VectorType *VT = dyn_cast<VectorType>(SrcTy)) 2885 if (VT->getNumElements() != cast<VectorType>(DstTy)->getNumElements()) 2886 return false; 2887 return SrcTy->getScalarType()->isPointerTy() && 2888 DstTy->getScalarType()->isIntegerTy(); 2889 case Instruction::IntToPtr: 2890 if (isa<VectorType>(SrcTy) != isa<VectorType>(DstTy)) 2891 return false; 2892 if (VectorType *VT = dyn_cast<VectorType>(SrcTy)) 2893 if (VT->getNumElements() != cast<VectorType>(DstTy)->getNumElements()) 2894 return false; 2895 return SrcTy->getScalarType()->isIntegerTy() && 2896 DstTy->getScalarType()->isPointerTy(); 2897 case Instruction::BitCast: { 2898 PointerType *SrcPtrTy = dyn_cast<PointerType>(SrcTy->getScalarType()); 2899 PointerType *DstPtrTy = dyn_cast<PointerType>(DstTy->getScalarType()); 2900 2901 // BitCast implies a no-op cast of type only. No bits change. 2902 // However, you can't cast pointers to anything but pointers. 2903 if (!SrcPtrTy != !DstPtrTy) 2904 return false; 2905 2906 // For non-pointer cases, the cast is okay if the source and destination bit 2907 // widths are identical. 2908 if (!SrcPtrTy) 2909 return SrcTy->getPrimitiveSizeInBits() == DstTy->getPrimitiveSizeInBits(); 2910 2911 // If both are pointers then the address spaces must match. 2912 if (SrcPtrTy->getAddressSpace() != DstPtrTy->getAddressSpace()) 2913 return false; 2914 2915 // A vector of pointers must have the same number of elements. 2916 if (VectorType *SrcVecTy = dyn_cast<VectorType>(SrcTy)) { 2917 if (VectorType *DstVecTy = dyn_cast<VectorType>(DstTy)) 2918 return (SrcVecTy->getNumElements() == DstVecTy->getNumElements()); 2919 2920 return false; 2921 } 2922 2923 return true; 2924 } 2925 case Instruction::AddrSpaceCast: { 2926 PointerType *SrcPtrTy = dyn_cast<PointerType>(SrcTy->getScalarType()); 2927 if (!SrcPtrTy) 2928 return false; 2929 2930 PointerType *DstPtrTy = dyn_cast<PointerType>(DstTy->getScalarType()); 2931 if (!DstPtrTy) 2932 return false; 2933 2934 if (SrcPtrTy->getAddressSpace() == DstPtrTy->getAddressSpace()) 2935 return false; 2936 2937 if (VectorType *SrcVecTy = dyn_cast<VectorType>(SrcTy)) { 2938 if (VectorType *DstVecTy = dyn_cast<VectorType>(DstTy)) 2939 return (SrcVecTy->getNumElements() == DstVecTy->getNumElements()); 2940 2941 return false; 2942 } 2943 2944 return true; 2945 } 2946 } 2947 } 2948 2949 TruncInst::TruncInst( 2950 Value *S, Type *Ty, const Twine &Name, Instruction *InsertBefore 2951 ) : CastInst(Ty, Trunc, S, Name, InsertBefore) { 2952 assert(castIsValid(getOpcode(), S, Ty) && "Illegal Trunc"); 2953 } 2954 2955 TruncInst::TruncInst( 2956 Value *S, Type *Ty, const Twine &Name, BasicBlock *InsertAtEnd 2957 ) : CastInst(Ty, Trunc, S, Name, InsertAtEnd) { 2958 assert(castIsValid(getOpcode(), S, Ty) && "Illegal Trunc"); 2959 } 2960 2961 ZExtInst::ZExtInst( 2962 Value *S, Type *Ty, const Twine &Name, Instruction *InsertBefore 2963 ) : CastInst(Ty, ZExt, S, Name, InsertBefore) { 2964 assert(castIsValid(getOpcode(), S, Ty) && "Illegal ZExt"); 2965 } 2966 2967 ZExtInst::ZExtInst( 2968 Value *S, Type *Ty, const Twine &Name, BasicBlock *InsertAtEnd 2969 ) : CastInst(Ty, ZExt, S, Name, InsertAtEnd) { 2970 assert(castIsValid(getOpcode(), S, Ty) && "Illegal ZExt"); 2971 } 2972 SExtInst::SExtInst( 2973 Value *S, Type *Ty, const Twine &Name, Instruction *InsertBefore 2974 ) : CastInst(Ty, SExt, S, Name, InsertBefore) { 2975 assert(castIsValid(getOpcode(), S, Ty) && "Illegal SExt"); 2976 } 2977 2978 SExtInst::SExtInst( 2979 Value *S, Type *Ty, const Twine &Name, BasicBlock *InsertAtEnd 2980 ) : CastInst(Ty, SExt, S, Name, InsertAtEnd) { 2981 assert(castIsValid(getOpcode(), S, Ty) && "Illegal SExt"); 2982 } 2983 2984 FPTruncInst::FPTruncInst( 2985 Value *S, Type *Ty, const Twine &Name, Instruction *InsertBefore 2986 ) : CastInst(Ty, FPTrunc, S, Name, InsertBefore) { 2987 assert(castIsValid(getOpcode(), S, Ty) && "Illegal FPTrunc"); 2988 } 2989 2990 FPTruncInst::FPTruncInst( 2991 Value *S, Type *Ty, const Twine &Name, BasicBlock *InsertAtEnd 2992 ) : CastInst(Ty, FPTrunc, S, Name, InsertAtEnd) { 2993 assert(castIsValid(getOpcode(), S, Ty) && "Illegal FPTrunc"); 2994 } 2995 2996 FPExtInst::FPExtInst( 2997 Value *S, Type *Ty, const Twine &Name, Instruction *InsertBefore 2998 ) : CastInst(Ty, FPExt, S, Name, InsertBefore) { 2999 assert(castIsValid(getOpcode(), S, Ty) && "Illegal FPExt"); 3000 } 3001 3002 FPExtInst::FPExtInst( 3003 Value *S, Type *Ty, const Twine &Name, BasicBlock *InsertAtEnd 3004 ) : CastInst(Ty, FPExt, S, Name, InsertAtEnd) { 3005 assert(castIsValid(getOpcode(), S, Ty) && "Illegal FPExt"); 3006 } 3007 3008 UIToFPInst::UIToFPInst( 3009 Value *S, Type *Ty, const Twine &Name, Instruction *InsertBefore 3010 ) : CastInst(Ty, UIToFP, S, Name, InsertBefore) { 3011 assert(castIsValid(getOpcode(), S, Ty) && "Illegal UIToFP"); 3012 } 3013 3014 UIToFPInst::UIToFPInst( 3015 Value *S, Type *Ty, const Twine &Name, BasicBlock *InsertAtEnd 3016 ) : CastInst(Ty, UIToFP, S, Name, InsertAtEnd) { 3017 assert(castIsValid(getOpcode(), S, Ty) && "Illegal UIToFP"); 3018 } 3019 3020 SIToFPInst::SIToFPInst( 3021 Value *S, Type *Ty, const Twine &Name, Instruction *InsertBefore 3022 ) : CastInst(Ty, SIToFP, S, Name, InsertBefore) { 3023 assert(castIsValid(getOpcode(), S, Ty) && "Illegal SIToFP"); 3024 } 3025 3026 SIToFPInst::SIToFPInst( 3027 Value *S, Type *Ty, const Twine &Name, BasicBlock *InsertAtEnd 3028 ) : CastInst(Ty, SIToFP, S, Name, InsertAtEnd) { 3029 assert(castIsValid(getOpcode(), S, Ty) && "Illegal SIToFP"); 3030 } 3031 3032 FPToUIInst::FPToUIInst( 3033 Value *S, Type *Ty, const Twine &Name, Instruction *InsertBefore 3034 ) : CastInst(Ty, FPToUI, S, Name, InsertBefore) { 3035 assert(castIsValid(getOpcode(), S, Ty) && "Illegal FPToUI"); 3036 } 3037 3038 FPToUIInst::FPToUIInst( 3039 Value *S, Type *Ty, const Twine &Name, BasicBlock *InsertAtEnd 3040 ) : CastInst(Ty, FPToUI, S, Name, InsertAtEnd) { 3041 assert(castIsValid(getOpcode(), S, Ty) && "Illegal FPToUI"); 3042 } 3043 3044 FPToSIInst::FPToSIInst( 3045 Value *S, Type *Ty, const Twine &Name, Instruction *InsertBefore 3046 ) : CastInst(Ty, FPToSI, S, Name, InsertBefore) { 3047 assert(castIsValid(getOpcode(), S, Ty) && "Illegal FPToSI"); 3048 } 3049 3050 FPToSIInst::FPToSIInst( 3051 Value *S, Type *Ty, const Twine &Name, BasicBlock *InsertAtEnd 3052 ) : CastInst(Ty, FPToSI, S, Name, InsertAtEnd) { 3053 assert(castIsValid(getOpcode(), S, Ty) && "Illegal FPToSI"); 3054 } 3055 3056 PtrToIntInst::PtrToIntInst( 3057 Value *S, Type *Ty, const Twine &Name, Instruction *InsertBefore 3058 ) : CastInst(Ty, PtrToInt, S, Name, InsertBefore) { 3059 assert(castIsValid(getOpcode(), S, Ty) && "Illegal PtrToInt"); 3060 } 3061 3062 PtrToIntInst::PtrToIntInst( 3063 Value *S, Type *Ty, const Twine &Name, BasicBlock *InsertAtEnd 3064 ) : CastInst(Ty, PtrToInt, S, Name, InsertAtEnd) { 3065 assert(castIsValid(getOpcode(), S, Ty) && "Illegal PtrToInt"); 3066 } 3067 3068 IntToPtrInst::IntToPtrInst( 3069 Value *S, Type *Ty, const Twine &Name, Instruction *InsertBefore 3070 ) : CastInst(Ty, IntToPtr, S, Name, InsertBefore) { 3071 assert(castIsValid(getOpcode(), S, Ty) && "Illegal IntToPtr"); 3072 } 3073 3074 IntToPtrInst::IntToPtrInst( 3075 Value *S, Type *Ty, const Twine &Name, BasicBlock *InsertAtEnd 3076 ) : CastInst(Ty, IntToPtr, S, Name, InsertAtEnd) { 3077 assert(castIsValid(getOpcode(), S, Ty) && "Illegal IntToPtr"); 3078 } 3079 3080 BitCastInst::BitCastInst( 3081 Value *S, Type *Ty, const Twine &Name, Instruction *InsertBefore 3082 ) : CastInst(Ty, BitCast, S, Name, InsertBefore) { 3083 assert(castIsValid(getOpcode(), S, Ty) && "Illegal BitCast"); 3084 } 3085 3086 BitCastInst::BitCastInst( 3087 Value *S, Type *Ty, const Twine &Name, BasicBlock *InsertAtEnd 3088 ) : CastInst(Ty, BitCast, S, Name, InsertAtEnd) { 3089 assert(castIsValid(getOpcode(), S, Ty) && "Illegal BitCast"); 3090 } 3091 3092 AddrSpaceCastInst::AddrSpaceCastInst( 3093 Value *S, Type *Ty, const Twine &Name, Instruction *InsertBefore 3094 ) : CastInst(Ty, AddrSpaceCast, S, Name, InsertBefore) { 3095 assert(castIsValid(getOpcode(), S, Ty) && "Illegal AddrSpaceCast"); 3096 } 3097 3098 AddrSpaceCastInst::AddrSpaceCastInst( 3099 Value *S, Type *Ty, const Twine &Name, BasicBlock *InsertAtEnd 3100 ) : CastInst(Ty, AddrSpaceCast, S, Name, InsertAtEnd) { 3101 assert(castIsValid(getOpcode(), S, Ty) && "Illegal AddrSpaceCast"); 3102 } 3103 3104 //===----------------------------------------------------------------------===// 3105 // CmpInst Classes 3106 //===----------------------------------------------------------------------===// 3107 3108 void CmpInst::anchor() {} 3109 3110 CmpInst::CmpInst(Type *ty, OtherOps op, unsigned short predicate, 3111 Value *LHS, Value *RHS, const Twine &Name, 3112 Instruction *InsertBefore) 3113 : Instruction(ty, op, 3114 OperandTraits<CmpInst>::op_begin(this), 3115 OperandTraits<CmpInst>::operands(this), 3116 InsertBefore) { 3117 Op<0>() = LHS; 3118 Op<1>() = RHS; 3119 setPredicate((Predicate)predicate); 3120 setName(Name); 3121 } 3122 3123 CmpInst::CmpInst(Type *ty, OtherOps op, unsigned short predicate, 3124 Value *LHS, Value *RHS, const Twine &Name, 3125 BasicBlock *InsertAtEnd) 3126 : Instruction(ty, op, 3127 OperandTraits<CmpInst>::op_begin(this), 3128 OperandTraits<CmpInst>::operands(this), 3129 InsertAtEnd) { 3130 Op<0>() = LHS; 3131 Op<1>() = RHS; 3132 setPredicate((Predicate)predicate); 3133 setName(Name); 3134 } 3135 3136 CmpInst * 3137 CmpInst::Create(OtherOps Op, unsigned short predicate, 3138 Value *S1, Value *S2, 3139 const Twine &Name, Instruction *InsertBefore) { 3140 if (Op == Instruction::ICmp) { 3141 if (InsertBefore) 3142 return new ICmpInst(InsertBefore, CmpInst::Predicate(predicate), 3143 S1, S2, Name); 3144 else 3145 return new ICmpInst(CmpInst::Predicate(predicate), 3146 S1, S2, Name); 3147 } 3148 3149 if (InsertBefore) 3150 return new FCmpInst(InsertBefore, CmpInst::Predicate(predicate), 3151 S1, S2, Name); 3152 else 3153 return new FCmpInst(CmpInst::Predicate(predicate), 3154 S1, S2, Name); 3155 } 3156 3157 CmpInst * 3158 CmpInst::Create(OtherOps Op, unsigned short predicate, Value *S1, Value *S2, 3159 const Twine &Name, BasicBlock *InsertAtEnd) { 3160 if (Op == Instruction::ICmp) { 3161 return new ICmpInst(*InsertAtEnd, CmpInst::Predicate(predicate), 3162 S1, S2, Name); 3163 } 3164 return new FCmpInst(*InsertAtEnd, CmpInst::Predicate(predicate), 3165 S1, S2, Name); 3166 } 3167 3168 void CmpInst::swapOperands() { 3169 if (ICmpInst *IC = dyn_cast<ICmpInst>(this)) 3170 IC->swapOperands(); 3171 else 3172 cast<FCmpInst>(this)->swapOperands(); 3173 } 3174 3175 bool CmpInst::isCommutative() const { 3176 if (const ICmpInst *IC = dyn_cast<ICmpInst>(this)) 3177 return IC->isCommutative(); 3178 return cast<FCmpInst>(this)->isCommutative(); 3179 } 3180 3181 bool CmpInst::isEquality() const { 3182 if (const ICmpInst *IC = dyn_cast<ICmpInst>(this)) 3183 return IC->isEquality(); 3184 return cast<FCmpInst>(this)->isEquality(); 3185 } 3186 3187 3188 CmpInst::Predicate CmpInst::getInversePredicate(Predicate pred) { 3189 switch (pred) { 3190 default: llvm_unreachable("Unknown cmp predicate!"); 3191 case ICMP_EQ: return ICMP_NE; 3192 case ICMP_NE: return ICMP_EQ; 3193 case ICMP_UGT: return ICMP_ULE; 3194 case ICMP_ULT: return ICMP_UGE; 3195 case ICMP_UGE: return ICMP_ULT; 3196 case ICMP_ULE: return ICMP_UGT; 3197 case ICMP_SGT: return ICMP_SLE; 3198 case ICMP_SLT: return ICMP_SGE; 3199 case ICMP_SGE: return ICMP_SLT; 3200 case ICMP_SLE: return ICMP_SGT; 3201 3202 case FCMP_OEQ: return FCMP_UNE; 3203 case FCMP_ONE: return FCMP_UEQ; 3204 case FCMP_OGT: return FCMP_ULE; 3205 case FCMP_OLT: return FCMP_UGE; 3206 case FCMP_OGE: return FCMP_ULT; 3207 case FCMP_OLE: return FCMP_UGT; 3208 case FCMP_UEQ: return FCMP_ONE; 3209 case FCMP_UNE: return FCMP_OEQ; 3210 case FCMP_UGT: return FCMP_OLE; 3211 case FCMP_ULT: return FCMP_OGE; 3212 case FCMP_UGE: return FCMP_OLT; 3213 case FCMP_ULE: return FCMP_OGT; 3214 case FCMP_ORD: return FCMP_UNO; 3215 case FCMP_UNO: return FCMP_ORD; 3216 case FCMP_TRUE: return FCMP_FALSE; 3217 case FCMP_FALSE: return FCMP_TRUE; 3218 } 3219 } 3220 3221 ICmpInst::Predicate ICmpInst::getSignedPredicate(Predicate pred) { 3222 switch (pred) { 3223 default: llvm_unreachable("Unknown icmp predicate!"); 3224 case ICMP_EQ: case ICMP_NE: 3225 case ICMP_SGT: case ICMP_SLT: case ICMP_SGE: case ICMP_SLE: 3226 return pred; 3227 case ICMP_UGT: return ICMP_SGT; 3228 case ICMP_ULT: return ICMP_SLT; 3229 case ICMP_UGE: return ICMP_SGE; 3230 case ICMP_ULE: return ICMP_SLE; 3231 } 3232 } 3233 3234 ICmpInst::Predicate ICmpInst::getUnsignedPredicate(Predicate pred) { 3235 switch (pred) { 3236 default: llvm_unreachable("Unknown icmp predicate!"); 3237 case ICMP_EQ: case ICMP_NE: 3238 case ICMP_UGT: case ICMP_ULT: case ICMP_UGE: case ICMP_ULE: 3239 return pred; 3240 case ICMP_SGT: return ICMP_UGT; 3241 case ICMP_SLT: return ICMP_ULT; 3242 case ICMP_SGE: return ICMP_UGE; 3243 case ICMP_SLE: return ICMP_ULE; 3244 } 3245 } 3246 3247 /// Initialize a set of values that all satisfy the condition with C. 3248 /// 3249 ConstantRange 3250 ICmpInst::makeConstantRange(Predicate pred, const APInt &C) { 3251 APInt Lower(C); 3252 APInt Upper(C); 3253 uint32_t BitWidth = C.getBitWidth(); 3254 switch (pred) { 3255 default: llvm_unreachable("Invalid ICmp opcode to ConstantRange ctor!"); 3256 case ICmpInst::ICMP_EQ: ++Upper; break; 3257 case ICmpInst::ICMP_NE: ++Lower; break; 3258 case ICmpInst::ICMP_ULT: 3259 Lower = APInt::getMinValue(BitWidth); 3260 // Check for an empty-set condition. 3261 if (Lower == Upper) 3262 return ConstantRange(BitWidth, /*isFullSet=*/false); 3263 break; 3264 case ICmpInst::ICMP_SLT: 3265 Lower = APInt::getSignedMinValue(BitWidth); 3266 // Check for an empty-set condition. 3267 if (Lower == Upper) 3268 return ConstantRange(BitWidth, /*isFullSet=*/false); 3269 break; 3270 case ICmpInst::ICMP_UGT: 3271 ++Lower; Upper = APInt::getMinValue(BitWidth); // Min = Next(Max) 3272 // Check for an empty-set condition. 3273 if (Lower == Upper) 3274 return ConstantRange(BitWidth, /*isFullSet=*/false); 3275 break; 3276 case ICmpInst::ICMP_SGT: 3277 ++Lower; Upper = APInt::getSignedMinValue(BitWidth); // Min = Next(Max) 3278 // Check for an empty-set condition. 3279 if (Lower == Upper) 3280 return ConstantRange(BitWidth, /*isFullSet=*/false); 3281 break; 3282 case ICmpInst::ICMP_ULE: 3283 Lower = APInt::getMinValue(BitWidth); ++Upper; 3284 // Check for a full-set condition. 3285 if (Lower == Upper) 3286 return ConstantRange(BitWidth, /*isFullSet=*/true); 3287 break; 3288 case ICmpInst::ICMP_SLE: 3289 Lower = APInt::getSignedMinValue(BitWidth); ++Upper; 3290 // Check for a full-set condition. 3291 if (Lower == Upper) 3292 return ConstantRange(BitWidth, /*isFullSet=*/true); 3293 break; 3294 case ICmpInst::ICMP_UGE: 3295 Upper = APInt::getMinValue(BitWidth); // Min = Next(Max) 3296 // Check for a full-set condition. 3297 if (Lower == Upper) 3298 return ConstantRange(BitWidth, /*isFullSet=*/true); 3299 break; 3300 case ICmpInst::ICMP_SGE: 3301 Upper = APInt::getSignedMinValue(BitWidth); // Min = Next(Max) 3302 // Check for a full-set condition. 3303 if (Lower == Upper) 3304 return ConstantRange(BitWidth, /*isFullSet=*/true); 3305 break; 3306 } 3307 return ConstantRange(Lower, Upper); 3308 } 3309 3310 CmpInst::Predicate CmpInst::getSwappedPredicate(Predicate pred) { 3311 switch (pred) { 3312 default: llvm_unreachable("Unknown cmp predicate!"); 3313 case ICMP_EQ: case ICMP_NE: 3314 return pred; 3315 case ICMP_SGT: return ICMP_SLT; 3316 case ICMP_SLT: return ICMP_SGT; 3317 case ICMP_SGE: return ICMP_SLE; 3318 case ICMP_SLE: return ICMP_SGE; 3319 case ICMP_UGT: return ICMP_ULT; 3320 case ICMP_ULT: return ICMP_UGT; 3321 case ICMP_UGE: return ICMP_ULE; 3322 case ICMP_ULE: return ICMP_UGE; 3323 3324 case FCMP_FALSE: case FCMP_TRUE: 3325 case FCMP_OEQ: case FCMP_ONE: 3326 case FCMP_UEQ: case FCMP_UNE: 3327 case FCMP_ORD: case FCMP_UNO: 3328 return pred; 3329 case FCMP_OGT: return FCMP_OLT; 3330 case FCMP_OLT: return FCMP_OGT; 3331 case FCMP_OGE: return FCMP_OLE; 3332 case FCMP_OLE: return FCMP_OGE; 3333 case FCMP_UGT: return FCMP_ULT; 3334 case FCMP_ULT: return FCMP_UGT; 3335 case FCMP_UGE: return FCMP_ULE; 3336 case FCMP_ULE: return FCMP_UGE; 3337 } 3338 } 3339 3340 bool CmpInst::isUnsigned(unsigned short predicate) { 3341 switch (predicate) { 3342 default: return false; 3343 case ICmpInst::ICMP_ULT: case ICmpInst::ICMP_ULE: case ICmpInst::ICMP_UGT: 3344 case ICmpInst::ICMP_UGE: return true; 3345 } 3346 } 3347 3348 bool CmpInst::isSigned(unsigned short predicate) { 3349 switch (predicate) { 3350 default: return false; 3351 case ICmpInst::ICMP_SLT: case ICmpInst::ICMP_SLE: case ICmpInst::ICMP_SGT: 3352 case ICmpInst::ICMP_SGE: return true; 3353 } 3354 } 3355 3356 bool CmpInst::isOrdered(unsigned short predicate) { 3357 switch (predicate) { 3358 default: return false; 3359 case FCmpInst::FCMP_OEQ: case FCmpInst::FCMP_ONE: case FCmpInst::FCMP_OGT: 3360 case FCmpInst::FCMP_OLT: case FCmpInst::FCMP_OGE: case FCmpInst::FCMP_OLE: 3361 case FCmpInst::FCMP_ORD: return true; 3362 } 3363 } 3364 3365 bool CmpInst::isUnordered(unsigned short predicate) { 3366 switch (predicate) { 3367 default: return false; 3368 case FCmpInst::FCMP_UEQ: case FCmpInst::FCMP_UNE: case FCmpInst::FCMP_UGT: 3369 case FCmpInst::FCMP_ULT: case FCmpInst::FCMP_UGE: case FCmpInst::FCMP_ULE: 3370 case FCmpInst::FCMP_UNO: return true; 3371 } 3372 } 3373 3374 bool CmpInst::isTrueWhenEqual(unsigned short predicate) { 3375 switch(predicate) { 3376 default: return false; 3377 case ICMP_EQ: case ICMP_UGE: case ICMP_ULE: case ICMP_SGE: case ICMP_SLE: 3378 case FCMP_TRUE: case FCMP_UEQ: case FCMP_UGE: case FCMP_ULE: return true; 3379 } 3380 } 3381 3382 bool CmpInst::isFalseWhenEqual(unsigned short predicate) { 3383 switch(predicate) { 3384 case ICMP_NE: case ICMP_UGT: case ICMP_ULT: case ICMP_SGT: case ICMP_SLT: 3385 case FCMP_FALSE: case FCMP_ONE: case FCMP_OGT: case FCMP_OLT: return true; 3386 default: return false; 3387 } 3388 } 3389 3390 3391 //===----------------------------------------------------------------------===// 3392 // SwitchInst Implementation 3393 //===----------------------------------------------------------------------===// 3394 3395 void SwitchInst::init(Value *Value, BasicBlock *Default, unsigned NumReserved) { 3396 assert(Value && Default && NumReserved); 3397 ReservedSpace = NumReserved; 3398 NumOperands = 2; 3399 OperandList = allocHungoffUses(ReservedSpace); 3400 3401 OperandList[0] = Value; 3402 OperandList[1] = Default; 3403 } 3404 3405 /// SwitchInst ctor - Create a new switch instruction, specifying a value to 3406 /// switch on and a default destination. The number of additional cases can 3407 /// be specified here to make memory allocation more efficient. This 3408 /// constructor can also autoinsert before another instruction. 3409 SwitchInst::SwitchInst(Value *Value, BasicBlock *Default, unsigned NumCases, 3410 Instruction *InsertBefore) 3411 : TerminatorInst(Type::getVoidTy(Value->getContext()), Instruction::Switch, 3412 nullptr, 0, InsertBefore) { 3413 init(Value, Default, 2+NumCases*2); 3414 } 3415 3416 /// SwitchInst ctor - Create a new switch instruction, specifying a value to 3417 /// switch on and a default destination. The number of additional cases can 3418 /// be specified here to make memory allocation more efficient. This 3419 /// constructor also autoinserts at the end of the specified BasicBlock. 3420 SwitchInst::SwitchInst(Value *Value, BasicBlock *Default, unsigned NumCases, 3421 BasicBlock *InsertAtEnd) 3422 : TerminatorInst(Type::getVoidTy(Value->getContext()), Instruction::Switch, 3423 nullptr, 0, InsertAtEnd) { 3424 init(Value, Default, 2+NumCases*2); 3425 } 3426 3427 SwitchInst::SwitchInst(const SwitchInst &SI) 3428 : TerminatorInst(SI.getType(), Instruction::Switch, nullptr, 0) { 3429 init(SI.getCondition(), SI.getDefaultDest(), SI.getNumOperands()); 3430 NumOperands = SI.getNumOperands(); 3431 Use *OL = OperandList, *InOL = SI.OperandList; 3432 for (unsigned i = 2, E = SI.getNumOperands(); i != E; i += 2) { 3433 OL[i] = InOL[i]; 3434 OL[i+1] = InOL[i+1]; 3435 } 3436 SubclassOptionalData = SI.SubclassOptionalData; 3437 } 3438 3439 SwitchInst::~SwitchInst() { 3440 dropHungoffUses(); 3441 } 3442 3443 3444 /// addCase - Add an entry to the switch instruction... 3445 /// 3446 void SwitchInst::addCase(ConstantInt *OnVal, BasicBlock *Dest) { 3447 unsigned NewCaseIdx = getNumCases(); 3448 unsigned OpNo = NumOperands; 3449 if (OpNo+2 > ReservedSpace) 3450 growOperands(); // Get more space! 3451 // Initialize some new operands. 3452 assert(OpNo+1 < ReservedSpace && "Growing didn't work!"); 3453 NumOperands = OpNo+2; 3454 CaseIt Case(this, NewCaseIdx); 3455 Case.setValue(OnVal); 3456 Case.setSuccessor(Dest); 3457 } 3458 3459 /// removeCase - This method removes the specified case and its successor 3460 /// from the switch instruction. 3461 void SwitchInst::removeCase(CaseIt i) { 3462 unsigned idx = i.getCaseIndex(); 3463 3464 assert(2 + idx*2 < getNumOperands() && "Case index out of range!!!"); 3465 3466 unsigned NumOps = getNumOperands(); 3467 Use *OL = OperandList; 3468 3469 // Overwrite this case with the end of the list. 3470 if (2 + (idx + 1) * 2 != NumOps) { 3471 OL[2 + idx * 2] = OL[NumOps - 2]; 3472 OL[2 + idx * 2 + 1] = OL[NumOps - 1]; 3473 } 3474 3475 // Nuke the last value. 3476 OL[NumOps-2].set(nullptr); 3477 OL[NumOps-2+1].set(nullptr); 3478 NumOperands = NumOps-2; 3479 } 3480 3481 /// growOperands - grow operands - This grows the operand list in response 3482 /// to a push_back style of operation. This grows the number of ops by 3 times. 3483 /// 3484 void SwitchInst::growOperands() { 3485 unsigned e = getNumOperands(); 3486 unsigned NumOps = e*3; 3487 3488 ReservedSpace = NumOps; 3489 Use *NewOps = allocHungoffUses(NumOps); 3490 Use *OldOps = OperandList; 3491 for (unsigned i = 0; i != e; ++i) { 3492 NewOps[i] = OldOps[i]; 3493 } 3494 OperandList = NewOps; 3495 Use::zap(OldOps, OldOps + e, true); 3496 } 3497 3498 3499 BasicBlock *SwitchInst::getSuccessorV(unsigned idx) const { 3500 return getSuccessor(idx); 3501 } 3502 unsigned SwitchInst::getNumSuccessorsV() const { 3503 return getNumSuccessors(); 3504 } 3505 void SwitchInst::setSuccessorV(unsigned idx, BasicBlock *B) { 3506 setSuccessor(idx, B); 3507 } 3508 3509 //===----------------------------------------------------------------------===// 3510 // IndirectBrInst Implementation 3511 //===----------------------------------------------------------------------===// 3512 3513 void IndirectBrInst::init(Value *Address, unsigned NumDests) { 3514 assert(Address && Address->getType()->isPointerTy() && 3515 "Address of indirectbr must be a pointer"); 3516 ReservedSpace = 1+NumDests; 3517 NumOperands = 1; 3518 OperandList = allocHungoffUses(ReservedSpace); 3519 3520 OperandList[0] = Address; 3521 } 3522 3523 3524 /// growOperands - grow operands - This grows the operand list in response 3525 /// to a push_back style of operation. This grows the number of ops by 2 times. 3526 /// 3527 void IndirectBrInst::growOperands() { 3528 unsigned e = getNumOperands(); 3529 unsigned NumOps = e*2; 3530 3531 ReservedSpace = NumOps; 3532 Use *NewOps = allocHungoffUses(NumOps); 3533 Use *OldOps = OperandList; 3534 for (unsigned i = 0; i != e; ++i) 3535 NewOps[i] = OldOps[i]; 3536 OperandList = NewOps; 3537 Use::zap(OldOps, OldOps + e, true); 3538 } 3539 3540 IndirectBrInst::IndirectBrInst(Value *Address, unsigned NumCases, 3541 Instruction *InsertBefore) 3542 : TerminatorInst(Type::getVoidTy(Address->getContext()),Instruction::IndirectBr, 3543 nullptr, 0, InsertBefore) { 3544 init(Address, NumCases); 3545 } 3546 3547 IndirectBrInst::IndirectBrInst(Value *Address, unsigned NumCases, 3548 BasicBlock *InsertAtEnd) 3549 : TerminatorInst(Type::getVoidTy(Address->getContext()),Instruction::IndirectBr, 3550 nullptr, 0, InsertAtEnd) { 3551 init(Address, NumCases); 3552 } 3553 3554 IndirectBrInst::IndirectBrInst(const IndirectBrInst &IBI) 3555 : TerminatorInst(Type::getVoidTy(IBI.getContext()), Instruction::IndirectBr, 3556 allocHungoffUses(IBI.getNumOperands()), 3557 IBI.getNumOperands()) { 3558 Use *OL = OperandList, *InOL = IBI.OperandList; 3559 for (unsigned i = 0, E = IBI.getNumOperands(); i != E; ++i) 3560 OL[i] = InOL[i]; 3561 SubclassOptionalData = IBI.SubclassOptionalData; 3562 } 3563 3564 IndirectBrInst::~IndirectBrInst() { 3565 dropHungoffUses(); 3566 } 3567 3568 /// addDestination - Add a destination. 3569 /// 3570 void IndirectBrInst::addDestination(BasicBlock *DestBB) { 3571 unsigned OpNo = NumOperands; 3572 if (OpNo+1 > ReservedSpace) 3573 growOperands(); // Get more space! 3574 // Initialize some new operands. 3575 assert(OpNo < ReservedSpace && "Growing didn't work!"); 3576 NumOperands = OpNo+1; 3577 OperandList[OpNo] = DestBB; 3578 } 3579 3580 /// removeDestination - This method removes the specified successor from the 3581 /// indirectbr instruction. 3582 void IndirectBrInst::removeDestination(unsigned idx) { 3583 assert(idx < getNumOperands()-1 && "Successor index out of range!"); 3584 3585 unsigned NumOps = getNumOperands(); 3586 Use *OL = OperandList; 3587 3588 // Replace this value with the last one. 3589 OL[idx+1] = OL[NumOps-1]; 3590 3591 // Nuke the last value. 3592 OL[NumOps-1].set(nullptr); 3593 NumOperands = NumOps-1; 3594 } 3595 3596 BasicBlock *IndirectBrInst::getSuccessorV(unsigned idx) const { 3597 return getSuccessor(idx); 3598 } 3599 unsigned IndirectBrInst::getNumSuccessorsV() const { 3600 return getNumSuccessors(); 3601 } 3602 void IndirectBrInst::setSuccessorV(unsigned idx, BasicBlock *B) { 3603 setSuccessor(idx, B); 3604 } 3605 3606 //===----------------------------------------------------------------------===// 3607 // clone_impl() implementations 3608 //===----------------------------------------------------------------------===// 3609 3610 // Define these methods here so vtables don't get emitted into every translation 3611 // unit that uses these classes. 3612 3613 GetElementPtrInst *GetElementPtrInst::clone_impl() const { 3614 return new (getNumOperands()) GetElementPtrInst(*this); 3615 } 3616 3617 BinaryOperator *BinaryOperator::clone_impl() const { 3618 return Create(getOpcode(), Op<0>(), Op<1>()); 3619 } 3620 3621 FCmpInst* FCmpInst::clone_impl() const { 3622 return new FCmpInst(getPredicate(), Op<0>(), Op<1>()); 3623 } 3624 3625 ICmpInst* ICmpInst::clone_impl() const { 3626 return new ICmpInst(getPredicate(), Op<0>(), Op<1>()); 3627 } 3628 3629 ExtractValueInst *ExtractValueInst::clone_impl() const { 3630 return new ExtractValueInst(*this); 3631 } 3632 3633 InsertValueInst *InsertValueInst::clone_impl() const { 3634 return new InsertValueInst(*this); 3635 } 3636 3637 AllocaInst *AllocaInst::clone_impl() const { 3638 AllocaInst *Result = new AllocaInst(getAllocatedType(), 3639 (Value *)getOperand(0), getAlignment()); 3640 Result->setUsedWithInAlloca(isUsedWithInAlloca()); 3641 return Result; 3642 } 3643 3644 LoadInst *LoadInst::clone_impl() const { 3645 return new LoadInst(getOperand(0), Twine(), isVolatile(), 3646 getAlignment(), getOrdering(), getSynchScope()); 3647 } 3648 3649 StoreInst *StoreInst::clone_impl() const { 3650 return new StoreInst(getOperand(0), getOperand(1), isVolatile(), 3651 getAlignment(), getOrdering(), getSynchScope()); 3652 3653 } 3654 3655 AtomicCmpXchgInst *AtomicCmpXchgInst::clone_impl() const { 3656 AtomicCmpXchgInst *Result = 3657 new AtomicCmpXchgInst(getOperand(0), getOperand(1), getOperand(2), 3658 getSuccessOrdering(), getFailureOrdering(), 3659 getSynchScope()); 3660 Result->setVolatile(isVolatile()); 3661 Result->setWeak(isWeak()); 3662 return Result; 3663 } 3664 3665 AtomicRMWInst *AtomicRMWInst::clone_impl() const { 3666 AtomicRMWInst *Result = 3667 new AtomicRMWInst(getOperation(),getOperand(0), getOperand(1), 3668 getOrdering(), getSynchScope()); 3669 Result->setVolatile(isVolatile()); 3670 return Result; 3671 } 3672 3673 FenceInst *FenceInst::clone_impl() const { 3674 return new FenceInst(getContext(), getOrdering(), getSynchScope()); 3675 } 3676 3677 TruncInst *TruncInst::clone_impl() const { 3678 return new TruncInst(getOperand(0), getType()); 3679 } 3680 3681 ZExtInst *ZExtInst::clone_impl() const { 3682 return new ZExtInst(getOperand(0), getType()); 3683 } 3684 3685 SExtInst *SExtInst::clone_impl() const { 3686 return new SExtInst(getOperand(0), getType()); 3687 } 3688 3689 FPTruncInst *FPTruncInst::clone_impl() const { 3690 return new FPTruncInst(getOperand(0), getType()); 3691 } 3692 3693 FPExtInst *FPExtInst::clone_impl() const { 3694 return new FPExtInst(getOperand(0), getType()); 3695 } 3696 3697 UIToFPInst *UIToFPInst::clone_impl() const { 3698 return new UIToFPInst(getOperand(0), getType()); 3699 } 3700 3701 SIToFPInst *SIToFPInst::clone_impl() const { 3702 return new SIToFPInst(getOperand(0), getType()); 3703 } 3704 3705 FPToUIInst *FPToUIInst::clone_impl() const { 3706 return new FPToUIInst(getOperand(0), getType()); 3707 } 3708 3709 FPToSIInst *FPToSIInst::clone_impl() const { 3710 return new FPToSIInst(getOperand(0), getType()); 3711 } 3712 3713 PtrToIntInst *PtrToIntInst::clone_impl() const { 3714 return new PtrToIntInst(getOperand(0), getType()); 3715 } 3716 3717 IntToPtrInst *IntToPtrInst::clone_impl() const { 3718 return new IntToPtrInst(getOperand(0), getType()); 3719 } 3720 3721 BitCastInst *BitCastInst::clone_impl() const { 3722 return new BitCastInst(getOperand(0), getType()); 3723 } 3724 3725 AddrSpaceCastInst *AddrSpaceCastInst::clone_impl() const { 3726 return new AddrSpaceCastInst(getOperand(0), getType()); 3727 } 3728 3729 CallInst *CallInst::clone_impl() const { 3730 return new(getNumOperands()) CallInst(*this); 3731 } 3732 3733 SelectInst *SelectInst::clone_impl() const { 3734 return SelectInst::Create(getOperand(0), getOperand(1), getOperand(2)); 3735 } 3736 3737 VAArgInst *VAArgInst::clone_impl() const { 3738 return new VAArgInst(getOperand(0), getType()); 3739 } 3740 3741 ExtractElementInst *ExtractElementInst::clone_impl() const { 3742 return ExtractElementInst::Create(getOperand(0), getOperand(1)); 3743 } 3744 3745 InsertElementInst *InsertElementInst::clone_impl() const { 3746 return InsertElementInst::Create(getOperand(0), getOperand(1), getOperand(2)); 3747 } 3748 3749 ShuffleVectorInst *ShuffleVectorInst::clone_impl() const { 3750 return new ShuffleVectorInst(getOperand(0), getOperand(1), getOperand(2)); 3751 } 3752 3753 PHINode *PHINode::clone_impl() const { 3754 return new PHINode(*this); 3755 } 3756 3757 LandingPadInst *LandingPadInst::clone_impl() const { 3758 return new LandingPadInst(*this); 3759 } 3760 3761 ReturnInst *ReturnInst::clone_impl() const { 3762 return new(getNumOperands()) ReturnInst(*this); 3763 } 3764 3765 BranchInst *BranchInst::clone_impl() const { 3766 return new(getNumOperands()) BranchInst(*this); 3767 } 3768 3769 SwitchInst *SwitchInst::clone_impl() const { 3770 return new SwitchInst(*this); 3771 } 3772 3773 IndirectBrInst *IndirectBrInst::clone_impl() const { 3774 return new IndirectBrInst(*this); 3775 } 3776 3777 3778 InvokeInst *InvokeInst::clone_impl() const { 3779 return new(getNumOperands()) InvokeInst(*this); 3780 } 3781 3782 ResumeInst *ResumeInst::clone_impl() const { 3783 return new(1) ResumeInst(*this); 3784 } 3785 3786 UnreachableInst *UnreachableInst::clone_impl() const { 3787 LLVMContext &Context = getContext(); 3788 return new UnreachableInst(Context); 3789 } 3790