1 //===- InstCombineCalls.cpp -----------------------------------------------===// 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 the visitCall and visitInvoke functions. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "InstCombineInternal.h" 15 #include "llvm/ADT/Statistic.h" 16 #include "llvm/Analysis/InstructionSimplify.h" 17 #include "llvm/Analysis/MemoryBuiltins.h" 18 #include "llvm/IR/CallSite.h" 19 #include "llvm/IR/Dominators.h" 20 #include "llvm/IR/PatternMatch.h" 21 #include "llvm/IR/Statepoint.h" 22 #include "llvm/Transforms/Utils/BuildLibCalls.h" 23 #include "llvm/Transforms/Utils/Local.h" 24 #include "llvm/Transforms/Utils/SimplifyLibCalls.h" 25 using namespace llvm; 26 using namespace PatternMatch; 27 28 #define DEBUG_TYPE "instcombine" 29 30 STATISTIC(NumSimplified, "Number of library calls simplified"); 31 32 /// getPromotedType - Return the specified type promoted as it would be to pass 33 /// though a va_arg area. 34 static Type *getPromotedType(Type *Ty) { 35 if (IntegerType* ITy = dyn_cast<IntegerType>(Ty)) { 36 if (ITy->getBitWidth() < 32) 37 return Type::getInt32Ty(Ty->getContext()); 38 } 39 return Ty; 40 } 41 42 /// reduceToSingleValueType - Given an aggregate type which ultimately holds a 43 /// single scalar element, like {{{type}}} or [1 x type], return type. 44 static Type *reduceToSingleValueType(Type *T) { 45 while (!T->isSingleValueType()) { 46 if (StructType *STy = dyn_cast<StructType>(T)) { 47 if (STy->getNumElements() == 1) 48 T = STy->getElementType(0); 49 else 50 break; 51 } else if (ArrayType *ATy = dyn_cast<ArrayType>(T)) { 52 if (ATy->getNumElements() == 1) 53 T = ATy->getElementType(); 54 else 55 break; 56 } else 57 break; 58 } 59 60 return T; 61 } 62 63 Instruction *InstCombiner::SimplifyMemTransfer(MemIntrinsic *MI) { 64 unsigned DstAlign = getKnownAlignment(MI->getArgOperand(0), DL, MI, AC, DT); 65 unsigned SrcAlign = getKnownAlignment(MI->getArgOperand(1), DL, MI, AC, DT); 66 unsigned MinAlign = std::min(DstAlign, SrcAlign); 67 unsigned CopyAlign = MI->getAlignment(); 68 69 if (CopyAlign < MinAlign) { 70 MI->setAlignment(ConstantInt::get(MI->getAlignmentType(), MinAlign, false)); 71 return MI; 72 } 73 74 // If MemCpyInst length is 1/2/4/8 bytes then replace memcpy with 75 // load/store. 76 ConstantInt *MemOpLength = dyn_cast<ConstantInt>(MI->getArgOperand(2)); 77 if (!MemOpLength) return nullptr; 78 79 // Source and destination pointer types are always "i8*" for intrinsic. See 80 // if the size is something we can handle with a single primitive load/store. 81 // A single load+store correctly handles overlapping memory in the memmove 82 // case. 83 uint64_t Size = MemOpLength->getLimitedValue(); 84 assert(Size && "0-sized memory transferring should be removed already."); 85 86 if (Size > 8 || (Size&(Size-1))) 87 return nullptr; // If not 1/2/4/8 bytes, exit. 88 89 // Use an integer load+store unless we can find something better. 90 unsigned SrcAddrSp = 91 cast<PointerType>(MI->getArgOperand(1)->getType())->getAddressSpace(); 92 unsigned DstAddrSp = 93 cast<PointerType>(MI->getArgOperand(0)->getType())->getAddressSpace(); 94 95 IntegerType* IntType = IntegerType::get(MI->getContext(), Size<<3); 96 Type *NewSrcPtrTy = PointerType::get(IntType, SrcAddrSp); 97 Type *NewDstPtrTy = PointerType::get(IntType, DstAddrSp); 98 99 // Memcpy forces the use of i8* for the source and destination. That means 100 // that if you're using memcpy to move one double around, you'll get a cast 101 // from double* to i8*. We'd much rather use a double load+store rather than 102 // an i64 load+store, here because this improves the odds that the source or 103 // dest address will be promotable. See if we can find a better type than the 104 // integer datatype. 105 Value *StrippedDest = MI->getArgOperand(0)->stripPointerCasts(); 106 MDNode *CopyMD = nullptr; 107 if (StrippedDest != MI->getArgOperand(0)) { 108 Type *SrcETy = cast<PointerType>(StrippedDest->getType()) 109 ->getElementType(); 110 if (SrcETy->isSized() && DL.getTypeStoreSize(SrcETy) == Size) { 111 // The SrcETy might be something like {{{double}}} or [1 x double]. Rip 112 // down through these levels if so. 113 SrcETy = reduceToSingleValueType(SrcETy); 114 115 if (SrcETy->isSingleValueType()) { 116 NewSrcPtrTy = PointerType::get(SrcETy, SrcAddrSp); 117 NewDstPtrTy = PointerType::get(SrcETy, DstAddrSp); 118 119 // If the memcpy has metadata describing the members, see if we can 120 // get the TBAA tag describing our copy. 121 if (MDNode *M = MI->getMetadata(LLVMContext::MD_tbaa_struct)) { 122 if (M->getNumOperands() == 3 && M->getOperand(0) && 123 mdconst::hasa<ConstantInt>(M->getOperand(0)) && 124 mdconst::extract<ConstantInt>(M->getOperand(0))->isNullValue() && 125 M->getOperand(1) && 126 mdconst::hasa<ConstantInt>(M->getOperand(1)) && 127 mdconst::extract<ConstantInt>(M->getOperand(1))->getValue() == 128 Size && 129 M->getOperand(2) && isa<MDNode>(M->getOperand(2))) 130 CopyMD = cast<MDNode>(M->getOperand(2)); 131 } 132 } 133 } 134 } 135 136 // If the memcpy/memmove provides better alignment info than we can 137 // infer, use it. 138 SrcAlign = std::max(SrcAlign, CopyAlign); 139 DstAlign = std::max(DstAlign, CopyAlign); 140 141 Value *Src = Builder->CreateBitCast(MI->getArgOperand(1), NewSrcPtrTy); 142 Value *Dest = Builder->CreateBitCast(MI->getArgOperand(0), NewDstPtrTy); 143 LoadInst *L = Builder->CreateLoad(Src, MI->isVolatile()); 144 L->setAlignment(SrcAlign); 145 if (CopyMD) 146 L->setMetadata(LLVMContext::MD_tbaa, CopyMD); 147 StoreInst *S = Builder->CreateStore(L, Dest, MI->isVolatile()); 148 S->setAlignment(DstAlign); 149 if (CopyMD) 150 S->setMetadata(LLVMContext::MD_tbaa, CopyMD); 151 152 // Set the size of the copy to 0, it will be deleted on the next iteration. 153 MI->setArgOperand(2, Constant::getNullValue(MemOpLength->getType())); 154 return MI; 155 } 156 157 Instruction *InstCombiner::SimplifyMemSet(MemSetInst *MI) { 158 unsigned Alignment = getKnownAlignment(MI->getDest(), DL, MI, AC, DT); 159 if (MI->getAlignment() < Alignment) { 160 MI->setAlignment(ConstantInt::get(MI->getAlignmentType(), 161 Alignment, false)); 162 return MI; 163 } 164 165 // Extract the length and alignment and fill if they are constant. 166 ConstantInt *LenC = dyn_cast<ConstantInt>(MI->getLength()); 167 ConstantInt *FillC = dyn_cast<ConstantInt>(MI->getValue()); 168 if (!LenC || !FillC || !FillC->getType()->isIntegerTy(8)) 169 return nullptr; 170 uint64_t Len = LenC->getLimitedValue(); 171 Alignment = MI->getAlignment(); 172 assert(Len && "0-sized memory setting should be removed already."); 173 174 // memset(s,c,n) -> store s, c (for n=1,2,4,8) 175 if (Len <= 8 && isPowerOf2_32((uint32_t)Len)) { 176 Type *ITy = IntegerType::get(MI->getContext(), Len*8); // n=1 -> i8. 177 178 Value *Dest = MI->getDest(); 179 unsigned DstAddrSp = cast<PointerType>(Dest->getType())->getAddressSpace(); 180 Type *NewDstPtrTy = PointerType::get(ITy, DstAddrSp); 181 Dest = Builder->CreateBitCast(Dest, NewDstPtrTy); 182 183 // Alignment 0 is identity for alignment 1 for memset, but not store. 184 if (Alignment == 0) Alignment = 1; 185 186 // Extract the fill value and store. 187 uint64_t Fill = FillC->getZExtValue()*0x0101010101010101ULL; 188 StoreInst *S = Builder->CreateStore(ConstantInt::get(ITy, Fill), Dest, 189 MI->isVolatile()); 190 S->setAlignment(Alignment); 191 192 // Set the size of the copy to 0, it will be deleted on the next iteration. 193 MI->setLength(Constant::getNullValue(LenC->getType())); 194 return MI; 195 } 196 197 return nullptr; 198 } 199 200 static Value *SimplifyX86extend(const IntrinsicInst &II, 201 InstCombiner::BuilderTy &Builder, 202 bool SignExtend) { 203 VectorType *SrcTy = cast<VectorType>(II.getArgOperand(0)->getType()); 204 VectorType *DstTy = cast<VectorType>(II.getType()); 205 unsigned NumDstElts = DstTy->getNumElements(); 206 207 // Extract a subvector of the first NumDstElts lanes and sign/zero extend. 208 SmallVector<int, 8> ShuffleMask; 209 for (int i = 0; i != (int)NumDstElts; ++i) 210 ShuffleMask.push_back(i); 211 212 Value *SV = Builder.CreateShuffleVector(II.getArgOperand(0), 213 UndefValue::get(SrcTy), ShuffleMask); 214 return SignExtend ? Builder.CreateSExt(SV, DstTy) 215 : Builder.CreateZExt(SV, DstTy); 216 } 217 218 static Value *SimplifyX86insertps(const IntrinsicInst &II, 219 InstCombiner::BuilderTy &Builder) { 220 if (auto *CInt = dyn_cast<ConstantInt>(II.getArgOperand(2))) { 221 VectorType *VecTy = cast<VectorType>(II.getType()); 222 assert(VecTy->getNumElements() == 4 && "insertps with wrong vector type"); 223 224 // The immediate permute control byte looks like this: 225 // [3:0] - zero mask for each 32-bit lane 226 // [5:4] - select one 32-bit destination lane 227 // [7:6] - select one 32-bit source lane 228 229 uint8_t Imm = CInt->getZExtValue(); 230 uint8_t ZMask = Imm & 0xf; 231 uint8_t DestLane = (Imm >> 4) & 0x3; 232 uint8_t SourceLane = (Imm >> 6) & 0x3; 233 234 ConstantAggregateZero *ZeroVector = ConstantAggregateZero::get(VecTy); 235 236 // If all zero mask bits are set, this was just a weird way to 237 // generate a zero vector. 238 if (ZMask == 0xf) 239 return ZeroVector; 240 241 // Initialize by passing all of the first source bits through. 242 int ShuffleMask[4] = { 0, 1, 2, 3 }; 243 244 // We may replace the second operand with the zero vector. 245 Value *V1 = II.getArgOperand(1); 246 247 if (ZMask) { 248 // If the zero mask is being used with a single input or the zero mask 249 // overrides the destination lane, this is a shuffle with the zero vector. 250 if ((II.getArgOperand(0) == II.getArgOperand(1)) || 251 (ZMask & (1 << DestLane))) { 252 V1 = ZeroVector; 253 // We may still move 32-bits of the first source vector from one lane 254 // to another. 255 ShuffleMask[DestLane] = SourceLane; 256 // The zero mask may override the previous insert operation. 257 for (unsigned i = 0; i < 4; ++i) 258 if ((ZMask >> i) & 0x1) 259 ShuffleMask[i] = i + 4; 260 } else { 261 // TODO: Model this case as 2 shuffles or a 'logical and' plus shuffle? 262 return nullptr; 263 } 264 } else { 265 // Replace the selected destination lane with the selected source lane. 266 ShuffleMask[DestLane] = SourceLane + 4; 267 } 268 269 return Builder.CreateShuffleVector(II.getArgOperand(0), V1, ShuffleMask); 270 } 271 return nullptr; 272 } 273 274 /// The shuffle mask for a perm2*128 selects any two halves of two 256-bit 275 /// source vectors, unless a zero bit is set. If a zero bit is set, 276 /// then ignore that half of the mask and clear that half of the vector. 277 static Value *SimplifyX86vperm2(const IntrinsicInst &II, 278 InstCombiner::BuilderTy &Builder) { 279 if (auto *CInt = dyn_cast<ConstantInt>(II.getArgOperand(2))) { 280 VectorType *VecTy = cast<VectorType>(II.getType()); 281 ConstantAggregateZero *ZeroVector = ConstantAggregateZero::get(VecTy); 282 283 // The immediate permute control byte looks like this: 284 // [1:0] - select 128 bits from sources for low half of destination 285 // [2] - ignore 286 // [3] - zero low half of destination 287 // [5:4] - select 128 bits from sources for high half of destination 288 // [6] - ignore 289 // [7] - zero high half of destination 290 291 uint8_t Imm = CInt->getZExtValue(); 292 293 bool LowHalfZero = Imm & 0x08; 294 bool HighHalfZero = Imm & 0x80; 295 296 // If both zero mask bits are set, this was just a weird way to 297 // generate a zero vector. 298 if (LowHalfZero && HighHalfZero) 299 return ZeroVector; 300 301 // If 0 or 1 zero mask bits are set, this is a simple shuffle. 302 unsigned NumElts = VecTy->getNumElements(); 303 unsigned HalfSize = NumElts / 2; 304 SmallVector<int, 8> ShuffleMask(NumElts); 305 306 // The high bit of the selection field chooses the 1st or 2nd operand. 307 bool LowInputSelect = Imm & 0x02; 308 bool HighInputSelect = Imm & 0x20; 309 310 // The low bit of the selection field chooses the low or high half 311 // of the selected operand. 312 bool LowHalfSelect = Imm & 0x01; 313 bool HighHalfSelect = Imm & 0x10; 314 315 // Determine which operand(s) are actually in use for this instruction. 316 Value *V0 = LowInputSelect ? II.getArgOperand(1) : II.getArgOperand(0); 317 Value *V1 = HighInputSelect ? II.getArgOperand(1) : II.getArgOperand(0); 318 319 // If needed, replace operands based on zero mask. 320 V0 = LowHalfZero ? ZeroVector : V0; 321 V1 = HighHalfZero ? ZeroVector : V1; 322 323 // Permute low half of result. 324 unsigned StartIndex = LowHalfSelect ? HalfSize : 0; 325 for (unsigned i = 0; i < HalfSize; ++i) 326 ShuffleMask[i] = StartIndex + i; 327 328 // Permute high half of result. 329 StartIndex = HighHalfSelect ? HalfSize : 0; 330 StartIndex += NumElts; 331 for (unsigned i = 0; i < HalfSize; ++i) 332 ShuffleMask[i + HalfSize] = StartIndex + i; 333 334 return Builder.CreateShuffleVector(V0, V1, ShuffleMask); 335 } 336 return nullptr; 337 } 338 339 /// visitCallInst - CallInst simplification. This mostly only handles folding 340 /// of intrinsic instructions. For normal calls, it allows visitCallSite to do 341 /// the heavy lifting. 342 /// 343 Instruction *InstCombiner::visitCallInst(CallInst &CI) { 344 auto Args = CI.arg_operands(); 345 if (Value *V = SimplifyCall(CI.getCalledValue(), Args.begin(), Args.end(), DL, 346 TLI, DT, AC)) 347 return ReplaceInstUsesWith(CI, V); 348 349 if (isFreeCall(&CI, TLI)) 350 return visitFree(CI); 351 352 // If the caller function is nounwind, mark the call as nounwind, even if the 353 // callee isn't. 354 if (CI.getParent()->getParent()->doesNotThrow() && 355 !CI.doesNotThrow()) { 356 CI.setDoesNotThrow(); 357 return &CI; 358 } 359 360 IntrinsicInst *II = dyn_cast<IntrinsicInst>(&CI); 361 if (!II) return visitCallSite(&CI); 362 363 // Intrinsics cannot occur in an invoke, so handle them here instead of in 364 // visitCallSite. 365 if (MemIntrinsic *MI = dyn_cast<MemIntrinsic>(II)) { 366 bool Changed = false; 367 368 // memmove/cpy/set of zero bytes is a noop. 369 if (Constant *NumBytes = dyn_cast<Constant>(MI->getLength())) { 370 if (NumBytes->isNullValue()) 371 return EraseInstFromFunction(CI); 372 373 if (ConstantInt *CI = dyn_cast<ConstantInt>(NumBytes)) 374 if (CI->getZExtValue() == 1) { 375 // Replace the instruction with just byte operations. We would 376 // transform other cases to loads/stores, but we don't know if 377 // alignment is sufficient. 378 } 379 } 380 381 // No other transformations apply to volatile transfers. 382 if (MI->isVolatile()) 383 return nullptr; 384 385 // If we have a memmove and the source operation is a constant global, 386 // then the source and dest pointers can't alias, so we can change this 387 // into a call to memcpy. 388 if (MemMoveInst *MMI = dyn_cast<MemMoveInst>(MI)) { 389 if (GlobalVariable *GVSrc = dyn_cast<GlobalVariable>(MMI->getSource())) 390 if (GVSrc->isConstant()) { 391 Module *M = CI.getParent()->getParent()->getParent(); 392 Intrinsic::ID MemCpyID = Intrinsic::memcpy; 393 Type *Tys[3] = { CI.getArgOperand(0)->getType(), 394 CI.getArgOperand(1)->getType(), 395 CI.getArgOperand(2)->getType() }; 396 CI.setCalledFunction(Intrinsic::getDeclaration(M, MemCpyID, Tys)); 397 Changed = true; 398 } 399 } 400 401 if (MemTransferInst *MTI = dyn_cast<MemTransferInst>(MI)) { 402 // memmove(x,x,size) -> noop. 403 if (MTI->getSource() == MTI->getDest()) 404 return EraseInstFromFunction(CI); 405 } 406 407 // If we can determine a pointer alignment that is bigger than currently 408 // set, update the alignment. 409 if (isa<MemTransferInst>(MI)) { 410 if (Instruction *I = SimplifyMemTransfer(MI)) 411 return I; 412 } else if (MemSetInst *MSI = dyn_cast<MemSetInst>(MI)) { 413 if (Instruction *I = SimplifyMemSet(MSI)) 414 return I; 415 } 416 417 if (Changed) return II; 418 } 419 420 switch (II->getIntrinsicID()) { 421 default: break; 422 case Intrinsic::objectsize: { 423 uint64_t Size; 424 if (getObjectSize(II->getArgOperand(0), Size, DL, TLI)) 425 return ReplaceInstUsesWith(CI, ConstantInt::get(CI.getType(), Size)); 426 return nullptr; 427 } 428 case Intrinsic::bswap: { 429 Value *IIOperand = II->getArgOperand(0); 430 Value *X = nullptr; 431 432 // bswap(bswap(x)) -> x 433 if (match(IIOperand, m_BSwap(m_Value(X)))) 434 return ReplaceInstUsesWith(CI, X); 435 436 // bswap(trunc(bswap(x))) -> trunc(lshr(x, c)) 437 if (match(IIOperand, m_Trunc(m_BSwap(m_Value(X))))) { 438 unsigned C = X->getType()->getPrimitiveSizeInBits() - 439 IIOperand->getType()->getPrimitiveSizeInBits(); 440 Value *CV = ConstantInt::get(X->getType(), C); 441 Value *V = Builder->CreateLShr(X, CV); 442 return new TruncInst(V, IIOperand->getType()); 443 } 444 break; 445 } 446 447 case Intrinsic::powi: 448 if (ConstantInt *Power = dyn_cast<ConstantInt>(II->getArgOperand(1))) { 449 // powi(x, 0) -> 1.0 450 if (Power->isZero()) 451 return ReplaceInstUsesWith(CI, ConstantFP::get(CI.getType(), 1.0)); 452 // powi(x, 1) -> x 453 if (Power->isOne()) 454 return ReplaceInstUsesWith(CI, II->getArgOperand(0)); 455 // powi(x, -1) -> 1/x 456 if (Power->isAllOnesValue()) 457 return BinaryOperator::CreateFDiv(ConstantFP::get(CI.getType(), 1.0), 458 II->getArgOperand(0)); 459 } 460 break; 461 case Intrinsic::cttz: { 462 // If all bits below the first known one are known zero, 463 // this value is constant. 464 IntegerType *IT = dyn_cast<IntegerType>(II->getArgOperand(0)->getType()); 465 // FIXME: Try to simplify vectors of integers. 466 if (!IT) break; 467 uint32_t BitWidth = IT->getBitWidth(); 468 APInt KnownZero(BitWidth, 0); 469 APInt KnownOne(BitWidth, 0); 470 computeKnownBits(II->getArgOperand(0), KnownZero, KnownOne, 0, II); 471 unsigned TrailingZeros = KnownOne.countTrailingZeros(); 472 APInt Mask(APInt::getLowBitsSet(BitWidth, TrailingZeros)); 473 if ((Mask & KnownZero) == Mask) 474 return ReplaceInstUsesWith(CI, ConstantInt::get(IT, 475 APInt(BitWidth, TrailingZeros))); 476 477 } 478 break; 479 case Intrinsic::ctlz: { 480 // If all bits above the first known one are known zero, 481 // this value is constant. 482 IntegerType *IT = dyn_cast<IntegerType>(II->getArgOperand(0)->getType()); 483 // FIXME: Try to simplify vectors of integers. 484 if (!IT) break; 485 uint32_t BitWidth = IT->getBitWidth(); 486 APInt KnownZero(BitWidth, 0); 487 APInt KnownOne(BitWidth, 0); 488 computeKnownBits(II->getArgOperand(0), KnownZero, KnownOne, 0, II); 489 unsigned LeadingZeros = KnownOne.countLeadingZeros(); 490 APInt Mask(APInt::getHighBitsSet(BitWidth, LeadingZeros)); 491 if ((Mask & KnownZero) == Mask) 492 return ReplaceInstUsesWith(CI, ConstantInt::get(IT, 493 APInt(BitWidth, LeadingZeros))); 494 495 } 496 break; 497 498 case Intrinsic::uadd_with_overflow: 499 case Intrinsic::sadd_with_overflow: 500 case Intrinsic::umul_with_overflow: 501 case Intrinsic::smul_with_overflow: 502 if (isa<Constant>(II->getArgOperand(0)) && 503 !isa<Constant>(II->getArgOperand(1))) { 504 // Canonicalize constants into the RHS. 505 Value *LHS = II->getArgOperand(0); 506 II->setArgOperand(0, II->getArgOperand(1)); 507 II->setArgOperand(1, LHS); 508 return II; 509 } 510 // fall through 511 512 case Intrinsic::usub_with_overflow: 513 case Intrinsic::ssub_with_overflow: { 514 OverflowCheckFlavor OCF = 515 IntrinsicIDToOverflowCheckFlavor(II->getIntrinsicID()); 516 assert(OCF != OCF_INVALID && "unexpected!"); 517 518 Value *OperationResult = nullptr; 519 Constant *OverflowResult = nullptr; 520 if (OptimizeOverflowCheck(OCF, II->getArgOperand(0), II->getArgOperand(1), 521 *II, OperationResult, OverflowResult)) 522 return CreateOverflowTuple(II, OperationResult, OverflowResult); 523 524 break; 525 } 526 527 case Intrinsic::minnum: 528 case Intrinsic::maxnum: { 529 Value *Arg0 = II->getArgOperand(0); 530 Value *Arg1 = II->getArgOperand(1); 531 532 // fmin(x, x) -> x 533 if (Arg0 == Arg1) 534 return ReplaceInstUsesWith(CI, Arg0); 535 536 const ConstantFP *C0 = dyn_cast<ConstantFP>(Arg0); 537 const ConstantFP *C1 = dyn_cast<ConstantFP>(Arg1); 538 539 // Canonicalize constants into the RHS. 540 if (C0 && !C1) { 541 II->setArgOperand(0, Arg1); 542 II->setArgOperand(1, Arg0); 543 return II; 544 } 545 546 // fmin(x, nan) -> x 547 if (C1 && C1->isNaN()) 548 return ReplaceInstUsesWith(CI, Arg0); 549 550 // This is the value because if undef were NaN, we would return the other 551 // value and cannot return a NaN unless both operands are. 552 // 553 // fmin(undef, x) -> x 554 if (isa<UndefValue>(Arg0)) 555 return ReplaceInstUsesWith(CI, Arg1); 556 557 // fmin(x, undef) -> x 558 if (isa<UndefValue>(Arg1)) 559 return ReplaceInstUsesWith(CI, Arg0); 560 561 Value *X = nullptr; 562 Value *Y = nullptr; 563 if (II->getIntrinsicID() == Intrinsic::minnum) { 564 // fmin(x, fmin(x, y)) -> fmin(x, y) 565 // fmin(y, fmin(x, y)) -> fmin(x, y) 566 if (match(Arg1, m_FMin(m_Value(X), m_Value(Y)))) { 567 if (Arg0 == X || Arg0 == Y) 568 return ReplaceInstUsesWith(CI, Arg1); 569 } 570 571 // fmin(fmin(x, y), x) -> fmin(x, y) 572 // fmin(fmin(x, y), y) -> fmin(x, y) 573 if (match(Arg0, m_FMin(m_Value(X), m_Value(Y)))) { 574 if (Arg1 == X || Arg1 == Y) 575 return ReplaceInstUsesWith(CI, Arg0); 576 } 577 578 // TODO: fmin(nnan x, inf) -> x 579 // TODO: fmin(nnan ninf x, flt_max) -> x 580 if (C1 && C1->isInfinity()) { 581 // fmin(x, -inf) -> -inf 582 if (C1->isNegative()) 583 return ReplaceInstUsesWith(CI, Arg1); 584 } 585 } else { 586 assert(II->getIntrinsicID() == Intrinsic::maxnum); 587 // fmax(x, fmax(x, y)) -> fmax(x, y) 588 // fmax(y, fmax(x, y)) -> fmax(x, y) 589 if (match(Arg1, m_FMax(m_Value(X), m_Value(Y)))) { 590 if (Arg0 == X || Arg0 == Y) 591 return ReplaceInstUsesWith(CI, Arg1); 592 } 593 594 // fmax(fmax(x, y), x) -> fmax(x, y) 595 // fmax(fmax(x, y), y) -> fmax(x, y) 596 if (match(Arg0, m_FMax(m_Value(X), m_Value(Y)))) { 597 if (Arg1 == X || Arg1 == Y) 598 return ReplaceInstUsesWith(CI, Arg0); 599 } 600 601 // TODO: fmax(nnan x, -inf) -> x 602 // TODO: fmax(nnan ninf x, -flt_max) -> x 603 if (C1 && C1->isInfinity()) { 604 // fmax(x, inf) -> inf 605 if (!C1->isNegative()) 606 return ReplaceInstUsesWith(CI, Arg1); 607 } 608 } 609 break; 610 } 611 case Intrinsic::ppc_altivec_lvx: 612 case Intrinsic::ppc_altivec_lvxl: 613 // Turn PPC lvx -> load if the pointer is known aligned. 614 if (getOrEnforceKnownAlignment(II->getArgOperand(0), 16, DL, II, AC, DT) >= 615 16) { 616 Value *Ptr = Builder->CreateBitCast(II->getArgOperand(0), 617 PointerType::getUnqual(II->getType())); 618 return new LoadInst(Ptr); 619 } 620 break; 621 case Intrinsic::ppc_vsx_lxvw4x: 622 case Intrinsic::ppc_vsx_lxvd2x: { 623 // Turn PPC VSX loads into normal loads. 624 Value *Ptr = Builder->CreateBitCast(II->getArgOperand(0), 625 PointerType::getUnqual(II->getType())); 626 return new LoadInst(Ptr, Twine(""), false, 1); 627 } 628 case Intrinsic::ppc_altivec_stvx: 629 case Intrinsic::ppc_altivec_stvxl: 630 // Turn stvx -> store if the pointer is known aligned. 631 if (getOrEnforceKnownAlignment(II->getArgOperand(1), 16, DL, II, AC, DT) >= 632 16) { 633 Type *OpPtrTy = 634 PointerType::getUnqual(II->getArgOperand(0)->getType()); 635 Value *Ptr = Builder->CreateBitCast(II->getArgOperand(1), OpPtrTy); 636 return new StoreInst(II->getArgOperand(0), Ptr); 637 } 638 break; 639 case Intrinsic::ppc_vsx_stxvw4x: 640 case Intrinsic::ppc_vsx_stxvd2x: { 641 // Turn PPC VSX stores into normal stores. 642 Type *OpPtrTy = PointerType::getUnqual(II->getArgOperand(0)->getType()); 643 Value *Ptr = Builder->CreateBitCast(II->getArgOperand(1), OpPtrTy); 644 return new StoreInst(II->getArgOperand(0), Ptr, false, 1); 645 } 646 case Intrinsic::ppc_qpx_qvlfs: 647 // Turn PPC QPX qvlfs -> load if the pointer is known aligned. 648 if (getOrEnforceKnownAlignment(II->getArgOperand(0), 16, DL, II, AC, DT) >= 649 16) { 650 Type *VTy = VectorType::get(Builder->getFloatTy(), 651 II->getType()->getVectorNumElements()); 652 Value *Ptr = Builder->CreateBitCast(II->getArgOperand(0), 653 PointerType::getUnqual(VTy)); 654 Value *Load = Builder->CreateLoad(Ptr); 655 return new FPExtInst(Load, II->getType()); 656 } 657 break; 658 case Intrinsic::ppc_qpx_qvlfd: 659 // Turn PPC QPX qvlfd -> load if the pointer is known aligned. 660 if (getOrEnforceKnownAlignment(II->getArgOperand(0), 32, DL, II, AC, DT) >= 661 32) { 662 Value *Ptr = Builder->CreateBitCast(II->getArgOperand(0), 663 PointerType::getUnqual(II->getType())); 664 return new LoadInst(Ptr); 665 } 666 break; 667 case Intrinsic::ppc_qpx_qvstfs: 668 // Turn PPC QPX qvstfs -> store if the pointer is known aligned. 669 if (getOrEnforceKnownAlignment(II->getArgOperand(1), 16, DL, II, AC, DT) >= 670 16) { 671 Type *VTy = VectorType::get(Builder->getFloatTy(), 672 II->getArgOperand(0)->getType()->getVectorNumElements()); 673 Value *TOp = Builder->CreateFPTrunc(II->getArgOperand(0), VTy); 674 Type *OpPtrTy = PointerType::getUnqual(VTy); 675 Value *Ptr = Builder->CreateBitCast(II->getArgOperand(1), OpPtrTy); 676 return new StoreInst(TOp, Ptr); 677 } 678 break; 679 case Intrinsic::ppc_qpx_qvstfd: 680 // Turn PPC QPX qvstfd -> store if the pointer is known aligned. 681 if (getOrEnforceKnownAlignment(II->getArgOperand(1), 32, DL, II, AC, DT) >= 682 32) { 683 Type *OpPtrTy = 684 PointerType::getUnqual(II->getArgOperand(0)->getType()); 685 Value *Ptr = Builder->CreateBitCast(II->getArgOperand(1), OpPtrTy); 686 return new StoreInst(II->getArgOperand(0), Ptr); 687 } 688 break; 689 case Intrinsic::x86_sse_storeu_ps: 690 case Intrinsic::x86_sse2_storeu_pd: 691 case Intrinsic::x86_sse2_storeu_dq: 692 // Turn X86 storeu -> store if the pointer is known aligned. 693 if (getOrEnforceKnownAlignment(II->getArgOperand(0), 16, DL, II, AC, DT) >= 694 16) { 695 Type *OpPtrTy = 696 PointerType::getUnqual(II->getArgOperand(1)->getType()); 697 Value *Ptr = Builder->CreateBitCast(II->getArgOperand(0), OpPtrTy); 698 return new StoreInst(II->getArgOperand(1), Ptr); 699 } 700 break; 701 702 case Intrinsic::x86_sse_cvtss2si: 703 case Intrinsic::x86_sse_cvtss2si64: 704 case Intrinsic::x86_sse_cvttss2si: 705 case Intrinsic::x86_sse_cvttss2si64: 706 case Intrinsic::x86_sse2_cvtsd2si: 707 case Intrinsic::x86_sse2_cvtsd2si64: 708 case Intrinsic::x86_sse2_cvttsd2si: 709 case Intrinsic::x86_sse2_cvttsd2si64: { 710 // These intrinsics only demand the 0th element of their input vectors. If 711 // we can simplify the input based on that, do so now. 712 unsigned VWidth = 713 cast<VectorType>(II->getArgOperand(0)->getType())->getNumElements(); 714 APInt DemandedElts(VWidth, 1); 715 APInt UndefElts(VWidth, 0); 716 if (Value *V = SimplifyDemandedVectorElts(II->getArgOperand(0), 717 DemandedElts, UndefElts)) { 718 II->setArgOperand(0, V); 719 return II; 720 } 721 break; 722 } 723 724 // Constant fold <A x Bi> << Ci. 725 // FIXME: We don't handle _dq because it's a shift of an i128, but is 726 // represented in the IR as <2 x i64>. A per element shift is wrong. 727 case Intrinsic::x86_sse2_psll_d: 728 case Intrinsic::x86_sse2_psll_q: 729 case Intrinsic::x86_sse2_psll_w: 730 case Intrinsic::x86_sse2_pslli_d: 731 case Intrinsic::x86_sse2_pslli_q: 732 case Intrinsic::x86_sse2_pslli_w: 733 case Intrinsic::x86_avx2_psll_d: 734 case Intrinsic::x86_avx2_psll_q: 735 case Intrinsic::x86_avx2_psll_w: 736 case Intrinsic::x86_avx2_pslli_d: 737 case Intrinsic::x86_avx2_pslli_q: 738 case Intrinsic::x86_avx2_pslli_w: 739 case Intrinsic::x86_sse2_psrl_d: 740 case Intrinsic::x86_sse2_psrl_q: 741 case Intrinsic::x86_sse2_psrl_w: 742 case Intrinsic::x86_sse2_psrli_d: 743 case Intrinsic::x86_sse2_psrli_q: 744 case Intrinsic::x86_sse2_psrli_w: 745 case Intrinsic::x86_avx2_psrl_d: 746 case Intrinsic::x86_avx2_psrl_q: 747 case Intrinsic::x86_avx2_psrl_w: 748 case Intrinsic::x86_avx2_psrli_d: 749 case Intrinsic::x86_avx2_psrli_q: 750 case Intrinsic::x86_avx2_psrli_w: { 751 // Simplify if count is constant. To 0 if >= BitWidth, 752 // otherwise to shl/lshr. 753 auto CDV = dyn_cast<ConstantDataVector>(II->getArgOperand(1)); 754 auto CInt = dyn_cast<ConstantInt>(II->getArgOperand(1)); 755 if (!CDV && !CInt) 756 break; 757 ConstantInt *Count; 758 if (CDV) 759 Count = cast<ConstantInt>(CDV->getElementAsConstant(0)); 760 else 761 Count = CInt; 762 763 auto Vec = II->getArgOperand(0); 764 auto VT = cast<VectorType>(Vec->getType()); 765 if (Count->getZExtValue() > 766 VT->getElementType()->getPrimitiveSizeInBits() - 1) 767 return ReplaceInstUsesWith( 768 CI, ConstantAggregateZero::get(Vec->getType())); 769 770 bool isPackedShiftLeft = true; 771 switch (II->getIntrinsicID()) { 772 default : break; 773 case Intrinsic::x86_sse2_psrl_d: 774 case Intrinsic::x86_sse2_psrl_q: 775 case Intrinsic::x86_sse2_psrl_w: 776 case Intrinsic::x86_sse2_psrli_d: 777 case Intrinsic::x86_sse2_psrli_q: 778 case Intrinsic::x86_sse2_psrli_w: 779 case Intrinsic::x86_avx2_psrl_d: 780 case Intrinsic::x86_avx2_psrl_q: 781 case Intrinsic::x86_avx2_psrl_w: 782 case Intrinsic::x86_avx2_psrli_d: 783 case Intrinsic::x86_avx2_psrli_q: 784 case Intrinsic::x86_avx2_psrli_w: isPackedShiftLeft = false; break; 785 } 786 787 unsigned VWidth = VT->getNumElements(); 788 // Get a constant vector of the same type as the first operand. 789 auto VTCI = ConstantInt::get(VT->getElementType(), Count->getZExtValue()); 790 if (isPackedShiftLeft) 791 return BinaryOperator::CreateShl(Vec, 792 Builder->CreateVectorSplat(VWidth, VTCI)); 793 794 return BinaryOperator::CreateLShr(Vec, 795 Builder->CreateVectorSplat(VWidth, VTCI)); 796 } 797 798 case Intrinsic::x86_sse41_pmovsxbd: 799 case Intrinsic::x86_sse41_pmovsxbq: 800 case Intrinsic::x86_sse41_pmovsxbw: 801 case Intrinsic::x86_sse41_pmovsxdq: 802 case Intrinsic::x86_sse41_pmovsxwd: 803 case Intrinsic::x86_sse41_pmovsxwq: 804 case Intrinsic::x86_avx2_pmovsxbd: 805 case Intrinsic::x86_avx2_pmovsxbq: 806 case Intrinsic::x86_avx2_pmovsxbw: 807 case Intrinsic::x86_avx2_pmovsxdq: 808 case Intrinsic::x86_avx2_pmovsxwd: 809 case Intrinsic::x86_avx2_pmovsxwq: 810 if (Value *V = SimplifyX86extend(*II, *Builder, true)) 811 return ReplaceInstUsesWith(*II, V); 812 break; 813 814 case Intrinsic::x86_sse41_pmovzxbd: 815 case Intrinsic::x86_sse41_pmovzxbq: 816 case Intrinsic::x86_sse41_pmovzxbw: 817 case Intrinsic::x86_sse41_pmovzxdq: 818 case Intrinsic::x86_sse41_pmovzxwd: 819 case Intrinsic::x86_sse41_pmovzxwq: 820 case Intrinsic::x86_avx2_pmovzxbd: 821 case Intrinsic::x86_avx2_pmovzxbq: 822 case Intrinsic::x86_avx2_pmovzxbw: 823 case Intrinsic::x86_avx2_pmovzxdq: 824 case Intrinsic::x86_avx2_pmovzxwd: 825 case Intrinsic::x86_avx2_pmovzxwq: 826 if (Value *V = SimplifyX86extend(*II, *Builder, false)) 827 return ReplaceInstUsesWith(*II, V); 828 break; 829 830 case Intrinsic::x86_sse41_insertps: 831 if (Value *V = SimplifyX86insertps(*II, *Builder)) 832 return ReplaceInstUsesWith(*II, V); 833 break; 834 835 case Intrinsic::x86_sse4a_insertqi: { 836 // insertqi x, y, 64, 0 can just copy y's lower bits and leave the top 837 // ones undef 838 // TODO: eventually we should lower this intrinsic to IR 839 if (auto CILength = dyn_cast<ConstantInt>(II->getArgOperand(2))) { 840 if (auto CIIndex = dyn_cast<ConstantInt>(II->getArgOperand(3))) { 841 unsigned Index = CIIndex->getZExtValue(); 842 // From AMD documentation: "a value of zero in the field length is 843 // defined as length of 64". 844 unsigned Length = CILength->equalsInt(0) ? 64 : CILength->getZExtValue(); 845 846 // From AMD documentation: "If the sum of the bit index + length field 847 // is greater than 64, the results are undefined". 848 unsigned End = Index + Length; 849 850 // Note that both field index and field length are 8-bit quantities. 851 // Since variables 'Index' and 'Length' are unsigned values 852 // obtained from zero-extending field index and field length 853 // respectively, their sum should never wrap around. 854 if (End > 64) 855 return ReplaceInstUsesWith(CI, UndefValue::get(II->getType())); 856 857 if (Length == 64 && Index == 0) { 858 Value *Vec = II->getArgOperand(1); 859 Value *Undef = UndefValue::get(Vec->getType()); 860 const uint32_t Mask[] = { 0, 2 }; 861 return ReplaceInstUsesWith( 862 CI, 863 Builder->CreateShuffleVector( 864 Vec, Undef, ConstantDataVector::get( 865 II->getContext(), makeArrayRef(Mask)))); 866 } else if (auto Source = 867 dyn_cast<IntrinsicInst>(II->getArgOperand(0))) { 868 if (Source->hasOneUse() && 869 Source->getArgOperand(1) == II->getArgOperand(1)) { 870 // If the source of the insert has only one use and it's another 871 // insert (and they're both inserting from the same vector), try to 872 // bundle both together. 873 auto CISourceLength = 874 dyn_cast<ConstantInt>(Source->getArgOperand(2)); 875 auto CISourceIndex = 876 dyn_cast<ConstantInt>(Source->getArgOperand(3)); 877 if (CISourceIndex && CISourceLength) { 878 unsigned SourceIndex = CISourceIndex->getZExtValue(); 879 unsigned SourceLength = CISourceLength->getZExtValue(); 880 unsigned SourceEnd = SourceIndex + SourceLength; 881 unsigned NewIndex, NewLength; 882 bool ShouldReplace = false; 883 if (Index <= SourceIndex && SourceIndex <= End) { 884 NewIndex = Index; 885 NewLength = std::max(End, SourceEnd) - NewIndex; 886 ShouldReplace = true; 887 } else if (SourceIndex <= Index && Index <= SourceEnd) { 888 NewIndex = SourceIndex; 889 NewLength = std::max(SourceEnd, End) - NewIndex; 890 ShouldReplace = true; 891 } 892 893 if (ShouldReplace) { 894 Constant *ConstantLength = ConstantInt::get( 895 II->getArgOperand(2)->getType(), NewLength, false); 896 Constant *ConstantIndex = ConstantInt::get( 897 II->getArgOperand(3)->getType(), NewIndex, false); 898 Value *Args[4] = { Source->getArgOperand(0), 899 II->getArgOperand(1), ConstantLength, 900 ConstantIndex }; 901 Module *M = CI.getParent()->getParent()->getParent(); 902 Value *F = 903 Intrinsic::getDeclaration(M, Intrinsic::x86_sse4a_insertqi); 904 return ReplaceInstUsesWith(CI, Builder->CreateCall(F, Args)); 905 } 906 } 907 } 908 } 909 } 910 } 911 break; 912 } 913 914 case Intrinsic::x86_sse41_pblendvb: 915 case Intrinsic::x86_sse41_blendvps: 916 case Intrinsic::x86_sse41_blendvpd: 917 case Intrinsic::x86_avx_blendv_ps_256: 918 case Intrinsic::x86_avx_blendv_pd_256: 919 case Intrinsic::x86_avx2_pblendvb: { 920 // Convert blendv* to vector selects if the mask is constant. 921 // This optimization is convoluted because the intrinsic is defined as 922 // getting a vector of floats or doubles for the ps and pd versions. 923 // FIXME: That should be changed. 924 Value *Mask = II->getArgOperand(2); 925 if (auto C = dyn_cast<ConstantDataVector>(Mask)) { 926 auto Tyi1 = Builder->getInt1Ty(); 927 auto SelectorType = cast<VectorType>(Mask->getType()); 928 auto EltTy = SelectorType->getElementType(); 929 unsigned Size = SelectorType->getNumElements(); 930 unsigned BitWidth = 931 EltTy->isFloatTy() 932 ? 32 933 : (EltTy->isDoubleTy() ? 64 : EltTy->getIntegerBitWidth()); 934 assert((BitWidth == 64 || BitWidth == 32 || BitWidth == 8) && 935 "Wrong arguments for variable blend intrinsic"); 936 SmallVector<Constant *, 32> Selectors; 937 for (unsigned I = 0; I < Size; ++I) { 938 // The intrinsics only read the top bit 939 uint64_t Selector; 940 if (BitWidth == 8) 941 Selector = C->getElementAsInteger(I); 942 else 943 Selector = C->getElementAsAPFloat(I).bitcastToAPInt().getZExtValue(); 944 Selectors.push_back(ConstantInt::get(Tyi1, Selector >> (BitWidth - 1))); 945 } 946 auto NewSelector = ConstantVector::get(Selectors); 947 return SelectInst::Create(NewSelector, II->getArgOperand(1), 948 II->getArgOperand(0), "blendv"); 949 } else { 950 break; 951 } 952 } 953 954 case Intrinsic::x86_avx_vpermilvar_ps: 955 case Intrinsic::x86_avx_vpermilvar_ps_256: 956 case Intrinsic::x86_avx_vpermilvar_pd: 957 case Intrinsic::x86_avx_vpermilvar_pd_256: { 958 // Convert vpermil* to shufflevector if the mask is constant. 959 Value *V = II->getArgOperand(1); 960 unsigned Size = cast<VectorType>(V->getType())->getNumElements(); 961 assert(Size == 8 || Size == 4 || Size == 2); 962 uint32_t Indexes[8]; 963 if (auto C = dyn_cast<ConstantDataVector>(V)) { 964 // The intrinsics only read one or two bits, clear the rest. 965 for (unsigned I = 0; I < Size; ++I) { 966 uint32_t Index = C->getElementAsInteger(I) & 0x3; 967 if (II->getIntrinsicID() == Intrinsic::x86_avx_vpermilvar_pd || 968 II->getIntrinsicID() == Intrinsic::x86_avx_vpermilvar_pd_256) 969 Index >>= 1; 970 Indexes[I] = Index; 971 } 972 } else if (isa<ConstantAggregateZero>(V)) { 973 for (unsigned I = 0; I < Size; ++I) 974 Indexes[I] = 0; 975 } else { 976 break; 977 } 978 // The _256 variants are a bit trickier since the mask bits always index 979 // into the corresponding 128 half. In order to convert to a generic 980 // shuffle, we have to make that explicit. 981 if (II->getIntrinsicID() == Intrinsic::x86_avx_vpermilvar_ps_256 || 982 II->getIntrinsicID() == Intrinsic::x86_avx_vpermilvar_pd_256) { 983 for (unsigned I = Size / 2; I < Size; ++I) 984 Indexes[I] += Size / 2; 985 } 986 auto NewC = 987 ConstantDataVector::get(V->getContext(), makeArrayRef(Indexes, Size)); 988 auto V1 = II->getArgOperand(0); 989 auto V2 = UndefValue::get(V1->getType()); 990 auto Shuffle = Builder->CreateShuffleVector(V1, V2, NewC); 991 return ReplaceInstUsesWith(CI, Shuffle); 992 } 993 994 case Intrinsic::x86_avx_vperm2f128_pd_256: 995 case Intrinsic::x86_avx_vperm2f128_ps_256: 996 case Intrinsic::x86_avx_vperm2f128_si_256: 997 case Intrinsic::x86_avx2_vperm2i128: 998 if (Value *V = SimplifyX86vperm2(*II, *Builder)) 999 return ReplaceInstUsesWith(*II, V); 1000 break; 1001 1002 case Intrinsic::ppc_altivec_vperm: 1003 // Turn vperm(V1,V2,mask) -> shuffle(V1,V2,mask) if mask is a constant. 1004 // Note that ppc_altivec_vperm has a big-endian bias, so when creating 1005 // a vectorshuffle for little endian, we must undo the transformation 1006 // performed on vec_perm in altivec.h. That is, we must complement 1007 // the permutation mask with respect to 31 and reverse the order of 1008 // V1 and V2. 1009 if (Constant *Mask = dyn_cast<Constant>(II->getArgOperand(2))) { 1010 assert(Mask->getType()->getVectorNumElements() == 16 && 1011 "Bad type for intrinsic!"); 1012 1013 // Check that all of the elements are integer constants or undefs. 1014 bool AllEltsOk = true; 1015 for (unsigned i = 0; i != 16; ++i) { 1016 Constant *Elt = Mask->getAggregateElement(i); 1017 if (!Elt || !(isa<ConstantInt>(Elt) || isa<UndefValue>(Elt))) { 1018 AllEltsOk = false; 1019 break; 1020 } 1021 } 1022 1023 if (AllEltsOk) { 1024 // Cast the input vectors to byte vectors. 1025 Value *Op0 = Builder->CreateBitCast(II->getArgOperand(0), 1026 Mask->getType()); 1027 Value *Op1 = Builder->CreateBitCast(II->getArgOperand(1), 1028 Mask->getType()); 1029 Value *Result = UndefValue::get(Op0->getType()); 1030 1031 // Only extract each element once. 1032 Value *ExtractedElts[32]; 1033 memset(ExtractedElts, 0, sizeof(ExtractedElts)); 1034 1035 for (unsigned i = 0; i != 16; ++i) { 1036 if (isa<UndefValue>(Mask->getAggregateElement(i))) 1037 continue; 1038 unsigned Idx = 1039 cast<ConstantInt>(Mask->getAggregateElement(i))->getZExtValue(); 1040 Idx &= 31; // Match the hardware behavior. 1041 if (DL.isLittleEndian()) 1042 Idx = 31 - Idx; 1043 1044 if (!ExtractedElts[Idx]) { 1045 Value *Op0ToUse = (DL.isLittleEndian()) ? Op1 : Op0; 1046 Value *Op1ToUse = (DL.isLittleEndian()) ? Op0 : Op1; 1047 ExtractedElts[Idx] = 1048 Builder->CreateExtractElement(Idx < 16 ? Op0ToUse : Op1ToUse, 1049 Builder->getInt32(Idx&15)); 1050 } 1051 1052 // Insert this value into the result vector. 1053 Result = Builder->CreateInsertElement(Result, ExtractedElts[Idx], 1054 Builder->getInt32(i)); 1055 } 1056 return CastInst::Create(Instruction::BitCast, Result, CI.getType()); 1057 } 1058 } 1059 break; 1060 1061 case Intrinsic::arm_neon_vld1: 1062 case Intrinsic::arm_neon_vld2: 1063 case Intrinsic::arm_neon_vld3: 1064 case Intrinsic::arm_neon_vld4: 1065 case Intrinsic::arm_neon_vld2lane: 1066 case Intrinsic::arm_neon_vld3lane: 1067 case Intrinsic::arm_neon_vld4lane: 1068 case Intrinsic::arm_neon_vst1: 1069 case Intrinsic::arm_neon_vst2: 1070 case Intrinsic::arm_neon_vst3: 1071 case Intrinsic::arm_neon_vst4: 1072 case Intrinsic::arm_neon_vst2lane: 1073 case Intrinsic::arm_neon_vst3lane: 1074 case Intrinsic::arm_neon_vst4lane: { 1075 unsigned MemAlign = getKnownAlignment(II->getArgOperand(0), DL, II, AC, DT); 1076 unsigned AlignArg = II->getNumArgOperands() - 1; 1077 ConstantInt *IntrAlign = dyn_cast<ConstantInt>(II->getArgOperand(AlignArg)); 1078 if (IntrAlign && IntrAlign->getZExtValue() < MemAlign) { 1079 II->setArgOperand(AlignArg, 1080 ConstantInt::get(Type::getInt32Ty(II->getContext()), 1081 MemAlign, false)); 1082 return II; 1083 } 1084 break; 1085 } 1086 1087 case Intrinsic::arm_neon_vmulls: 1088 case Intrinsic::arm_neon_vmullu: 1089 case Intrinsic::aarch64_neon_smull: 1090 case Intrinsic::aarch64_neon_umull: { 1091 Value *Arg0 = II->getArgOperand(0); 1092 Value *Arg1 = II->getArgOperand(1); 1093 1094 // Handle mul by zero first: 1095 if (isa<ConstantAggregateZero>(Arg0) || isa<ConstantAggregateZero>(Arg1)) { 1096 return ReplaceInstUsesWith(CI, ConstantAggregateZero::get(II->getType())); 1097 } 1098 1099 // Check for constant LHS & RHS - in this case we just simplify. 1100 bool Zext = (II->getIntrinsicID() == Intrinsic::arm_neon_vmullu || 1101 II->getIntrinsicID() == Intrinsic::aarch64_neon_umull); 1102 VectorType *NewVT = cast<VectorType>(II->getType()); 1103 if (Constant *CV0 = dyn_cast<Constant>(Arg0)) { 1104 if (Constant *CV1 = dyn_cast<Constant>(Arg1)) { 1105 CV0 = ConstantExpr::getIntegerCast(CV0, NewVT, /*isSigned=*/!Zext); 1106 CV1 = ConstantExpr::getIntegerCast(CV1, NewVT, /*isSigned=*/!Zext); 1107 1108 return ReplaceInstUsesWith(CI, ConstantExpr::getMul(CV0, CV1)); 1109 } 1110 1111 // Couldn't simplify - canonicalize constant to the RHS. 1112 std::swap(Arg0, Arg1); 1113 } 1114 1115 // Handle mul by one: 1116 if (Constant *CV1 = dyn_cast<Constant>(Arg1)) 1117 if (ConstantInt *Splat = 1118 dyn_cast_or_null<ConstantInt>(CV1->getSplatValue())) 1119 if (Splat->isOne()) 1120 return CastInst::CreateIntegerCast(Arg0, II->getType(), 1121 /*isSigned=*/!Zext); 1122 1123 break; 1124 } 1125 1126 case Intrinsic::AMDGPU_rcp: { 1127 if (const ConstantFP *C = dyn_cast<ConstantFP>(II->getArgOperand(0))) { 1128 const APFloat &ArgVal = C->getValueAPF(); 1129 APFloat Val(ArgVal.getSemantics(), 1.0); 1130 APFloat::opStatus Status = Val.divide(ArgVal, 1131 APFloat::rmNearestTiesToEven); 1132 // Only do this if it was exact and therefore not dependent on the 1133 // rounding mode. 1134 if (Status == APFloat::opOK) 1135 return ReplaceInstUsesWith(CI, ConstantFP::get(II->getContext(), Val)); 1136 } 1137 1138 break; 1139 } 1140 case Intrinsic::stackrestore: { 1141 // If the save is right next to the restore, remove the restore. This can 1142 // happen when variable allocas are DCE'd. 1143 if (IntrinsicInst *SS = dyn_cast<IntrinsicInst>(II->getArgOperand(0))) { 1144 if (SS->getIntrinsicID() == Intrinsic::stacksave) { 1145 BasicBlock::iterator BI = SS; 1146 if (&*++BI == II) 1147 return EraseInstFromFunction(CI); 1148 } 1149 } 1150 1151 // Scan down this block to see if there is another stack restore in the 1152 // same block without an intervening call/alloca. 1153 BasicBlock::iterator BI = II; 1154 TerminatorInst *TI = II->getParent()->getTerminator(); 1155 bool CannotRemove = false; 1156 for (++BI; &*BI != TI; ++BI) { 1157 if (isa<AllocaInst>(BI)) { 1158 CannotRemove = true; 1159 break; 1160 } 1161 if (CallInst *BCI = dyn_cast<CallInst>(BI)) { 1162 if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(BCI)) { 1163 // If there is a stackrestore below this one, remove this one. 1164 if (II->getIntrinsicID() == Intrinsic::stackrestore) 1165 return EraseInstFromFunction(CI); 1166 // Otherwise, ignore the intrinsic. 1167 } else { 1168 // If we found a non-intrinsic call, we can't remove the stack 1169 // restore. 1170 CannotRemove = true; 1171 break; 1172 } 1173 } 1174 } 1175 1176 // If the stack restore is in a return, resume, or unwind block and if there 1177 // are no allocas or calls between the restore and the return, nuke the 1178 // restore. 1179 if (!CannotRemove && (isa<ReturnInst>(TI) || isa<ResumeInst>(TI))) 1180 return EraseInstFromFunction(CI); 1181 break; 1182 } 1183 case Intrinsic::assume: { 1184 // Canonicalize assume(a && b) -> assume(a); assume(b); 1185 // Note: New assumption intrinsics created here are registered by 1186 // the InstCombineIRInserter object. 1187 Value *IIOperand = II->getArgOperand(0), *A, *B, 1188 *AssumeIntrinsic = II->getCalledValue(); 1189 if (match(IIOperand, m_And(m_Value(A), m_Value(B)))) { 1190 Builder->CreateCall(AssumeIntrinsic, A, II->getName()); 1191 Builder->CreateCall(AssumeIntrinsic, B, II->getName()); 1192 return EraseInstFromFunction(*II); 1193 } 1194 // assume(!(a || b)) -> assume(!a); assume(!b); 1195 if (match(IIOperand, m_Not(m_Or(m_Value(A), m_Value(B))))) { 1196 Builder->CreateCall(AssumeIntrinsic, Builder->CreateNot(A), 1197 II->getName()); 1198 Builder->CreateCall(AssumeIntrinsic, Builder->CreateNot(B), 1199 II->getName()); 1200 return EraseInstFromFunction(*II); 1201 } 1202 1203 // assume( (load addr) != null ) -> add 'nonnull' metadata to load 1204 // (if assume is valid at the load) 1205 if (ICmpInst* ICmp = dyn_cast<ICmpInst>(IIOperand)) { 1206 Value *LHS = ICmp->getOperand(0); 1207 Value *RHS = ICmp->getOperand(1); 1208 if (ICmpInst::ICMP_NE == ICmp->getPredicate() && 1209 isa<LoadInst>(LHS) && 1210 isa<Constant>(RHS) && 1211 RHS->getType()->isPointerTy() && 1212 cast<Constant>(RHS)->isNullValue()) { 1213 LoadInst* LI = cast<LoadInst>(LHS); 1214 if (isValidAssumeForContext(II, LI, DT)) { 1215 MDNode *MD = MDNode::get(II->getContext(), None); 1216 LI->setMetadata(LLVMContext::MD_nonnull, MD); 1217 return EraseInstFromFunction(*II); 1218 } 1219 } 1220 // TODO: apply nonnull return attributes to calls and invokes 1221 // TODO: apply range metadata for range check patterns? 1222 } 1223 // If there is a dominating assume with the same condition as this one, 1224 // then this one is redundant, and should be removed. 1225 APInt KnownZero(1, 0), KnownOne(1, 0); 1226 computeKnownBits(IIOperand, KnownZero, KnownOne, 0, II); 1227 if (KnownOne.isAllOnesValue()) 1228 return EraseInstFromFunction(*II); 1229 1230 break; 1231 } 1232 case Intrinsic::experimental_gc_relocate: { 1233 // Translate facts known about a pointer before relocating into 1234 // facts about the relocate value, while being careful to 1235 // preserve relocation semantics. 1236 GCRelocateOperands Operands(II); 1237 Value *DerivedPtr = Operands.getDerivedPtr(); 1238 auto *GCRelocateType = cast<PointerType>(II->getType()); 1239 1240 // Remove the relocation if unused, note that this check is required 1241 // to prevent the cases below from looping forever. 1242 if (II->use_empty()) 1243 return EraseInstFromFunction(*II); 1244 1245 // Undef is undef, even after relocation. 1246 // TODO: provide a hook for this in GCStrategy. This is clearly legal for 1247 // most practical collectors, but there was discussion in the review thread 1248 // about whether it was legal for all possible collectors. 1249 if (isa<UndefValue>(DerivedPtr)) { 1250 // gc_relocate is uncasted. Use undef of gc_relocate's type to replace it. 1251 return ReplaceInstUsesWith(*II, UndefValue::get(GCRelocateType)); 1252 } 1253 1254 // The relocation of null will be null for most any collector. 1255 // TODO: provide a hook for this in GCStrategy. There might be some weird 1256 // collector this property does not hold for. 1257 if (isa<ConstantPointerNull>(DerivedPtr)) { 1258 // gc_relocate is uncasted. Use null-pointer of gc_relocate's type to replace it. 1259 return ReplaceInstUsesWith(*II, ConstantPointerNull::get(GCRelocateType)); 1260 } 1261 1262 // isKnownNonNull -> nonnull attribute 1263 if (isKnownNonNull(DerivedPtr)) 1264 II->addAttribute(AttributeSet::ReturnIndex, Attribute::NonNull); 1265 1266 // isDereferenceablePointer -> deref attribute 1267 if (isDereferenceablePointer(DerivedPtr, DL)) { 1268 if (Argument *A = dyn_cast<Argument>(DerivedPtr)) { 1269 uint64_t Bytes = A->getDereferenceableBytes(); 1270 II->addDereferenceableAttr(AttributeSet::ReturnIndex, Bytes); 1271 } 1272 } 1273 1274 // TODO: bitcast(relocate(p)) -> relocate(bitcast(p)) 1275 // Canonicalize on the type from the uses to the defs 1276 1277 // TODO: relocate((gep p, C, C2, ...)) -> gep(relocate(p), C, C2, ...) 1278 } 1279 } 1280 1281 return visitCallSite(II); 1282 } 1283 1284 // InvokeInst simplification 1285 // 1286 Instruction *InstCombiner::visitInvokeInst(InvokeInst &II) { 1287 return visitCallSite(&II); 1288 } 1289 1290 /// isSafeToEliminateVarargsCast - If this cast does not affect the value 1291 /// passed through the varargs area, we can eliminate the use of the cast. 1292 static bool isSafeToEliminateVarargsCast(const CallSite CS, 1293 const DataLayout &DL, 1294 const CastInst *const CI, 1295 const int ix) { 1296 if (!CI->isLosslessCast()) 1297 return false; 1298 1299 // If this is a GC intrinsic, avoid munging types. We need types for 1300 // statepoint reconstruction in SelectionDAG. 1301 // TODO: This is probably something which should be expanded to all 1302 // intrinsics since the entire point of intrinsics is that 1303 // they are understandable by the optimizer. 1304 if (isStatepoint(CS) || isGCRelocate(CS) || isGCResult(CS)) 1305 return false; 1306 1307 // The size of ByVal or InAlloca arguments is derived from the type, so we 1308 // can't change to a type with a different size. If the size were 1309 // passed explicitly we could avoid this check. 1310 if (!CS.isByValOrInAllocaArgument(ix)) 1311 return true; 1312 1313 Type* SrcTy = 1314 cast<PointerType>(CI->getOperand(0)->getType())->getElementType(); 1315 Type* DstTy = cast<PointerType>(CI->getType())->getElementType(); 1316 if (!SrcTy->isSized() || !DstTy->isSized()) 1317 return false; 1318 if (DL.getTypeAllocSize(SrcTy) != DL.getTypeAllocSize(DstTy)) 1319 return false; 1320 return true; 1321 } 1322 1323 // Try to fold some different type of calls here. 1324 // Currently we're only working with the checking functions, memcpy_chk, 1325 // mempcpy_chk, memmove_chk, memset_chk, strcpy_chk, stpcpy_chk, strncpy_chk, 1326 // strcat_chk and strncat_chk. 1327 Instruction *InstCombiner::tryOptimizeCall(CallInst *CI) { 1328 if (!CI->getCalledFunction()) return nullptr; 1329 1330 auto InstCombineRAUW = [this](Instruction *From, Value *With) { 1331 ReplaceInstUsesWith(*From, With); 1332 }; 1333 LibCallSimplifier Simplifier(DL, TLI, InstCombineRAUW); 1334 if (Value *With = Simplifier.optimizeCall(CI)) { 1335 ++NumSimplified; 1336 return CI->use_empty() ? CI : ReplaceInstUsesWith(*CI, With); 1337 } 1338 1339 return nullptr; 1340 } 1341 1342 static IntrinsicInst *FindInitTrampolineFromAlloca(Value *TrampMem) { 1343 // Strip off at most one level of pointer casts, looking for an alloca. This 1344 // is good enough in practice and simpler than handling any number of casts. 1345 Value *Underlying = TrampMem->stripPointerCasts(); 1346 if (Underlying != TrampMem && 1347 (!Underlying->hasOneUse() || Underlying->user_back() != TrampMem)) 1348 return nullptr; 1349 if (!isa<AllocaInst>(Underlying)) 1350 return nullptr; 1351 1352 IntrinsicInst *InitTrampoline = nullptr; 1353 for (User *U : TrampMem->users()) { 1354 IntrinsicInst *II = dyn_cast<IntrinsicInst>(U); 1355 if (!II) 1356 return nullptr; 1357 if (II->getIntrinsicID() == Intrinsic::init_trampoline) { 1358 if (InitTrampoline) 1359 // More than one init_trampoline writes to this value. Give up. 1360 return nullptr; 1361 InitTrampoline = II; 1362 continue; 1363 } 1364 if (II->getIntrinsicID() == Intrinsic::adjust_trampoline) 1365 // Allow any number of calls to adjust.trampoline. 1366 continue; 1367 return nullptr; 1368 } 1369 1370 // No call to init.trampoline found. 1371 if (!InitTrampoline) 1372 return nullptr; 1373 1374 // Check that the alloca is being used in the expected way. 1375 if (InitTrampoline->getOperand(0) != TrampMem) 1376 return nullptr; 1377 1378 return InitTrampoline; 1379 } 1380 1381 static IntrinsicInst *FindInitTrampolineFromBB(IntrinsicInst *AdjustTramp, 1382 Value *TrampMem) { 1383 // Visit all the previous instructions in the basic block, and try to find a 1384 // init.trampoline which has a direct path to the adjust.trampoline. 1385 for (BasicBlock::iterator I = AdjustTramp, 1386 E = AdjustTramp->getParent()->begin(); I != E; ) { 1387 Instruction *Inst = --I; 1388 if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(I)) 1389 if (II->getIntrinsicID() == Intrinsic::init_trampoline && 1390 II->getOperand(0) == TrampMem) 1391 return II; 1392 if (Inst->mayWriteToMemory()) 1393 return nullptr; 1394 } 1395 return nullptr; 1396 } 1397 1398 // Given a call to llvm.adjust.trampoline, find and return the corresponding 1399 // call to llvm.init.trampoline if the call to the trampoline can be optimized 1400 // to a direct call to a function. Otherwise return NULL. 1401 // 1402 static IntrinsicInst *FindInitTrampoline(Value *Callee) { 1403 Callee = Callee->stripPointerCasts(); 1404 IntrinsicInst *AdjustTramp = dyn_cast<IntrinsicInst>(Callee); 1405 if (!AdjustTramp || 1406 AdjustTramp->getIntrinsicID() != Intrinsic::adjust_trampoline) 1407 return nullptr; 1408 1409 Value *TrampMem = AdjustTramp->getOperand(0); 1410 1411 if (IntrinsicInst *IT = FindInitTrampolineFromAlloca(TrampMem)) 1412 return IT; 1413 if (IntrinsicInst *IT = FindInitTrampolineFromBB(AdjustTramp, TrampMem)) 1414 return IT; 1415 return nullptr; 1416 } 1417 1418 // visitCallSite - Improvements for call and invoke instructions. 1419 // 1420 Instruction *InstCombiner::visitCallSite(CallSite CS) { 1421 1422 if (isAllocLikeFn(CS.getInstruction(), TLI)) 1423 return visitAllocSite(*CS.getInstruction()); 1424 1425 bool Changed = false; 1426 1427 // Mark any parameters that are known to be non-null with the nonnull 1428 // attribute. This is helpful for inlining calls to functions with null 1429 // checks on their arguments. 1430 unsigned ArgNo = 0; 1431 for (Value *V : CS.args()) { 1432 if (!CS.paramHasAttr(ArgNo+1, Attribute::NonNull) && 1433 isKnownNonNull(V)) { 1434 AttributeSet AS = CS.getAttributes(); 1435 AS = AS.addAttribute(CS.getInstruction()->getContext(), ArgNo+1, 1436 Attribute::NonNull); 1437 CS.setAttributes(AS); 1438 Changed = true; 1439 } 1440 ArgNo++; 1441 } 1442 assert(ArgNo == CS.arg_size() && "sanity check"); 1443 1444 // If the callee is a pointer to a function, attempt to move any casts to the 1445 // arguments of the call/invoke. 1446 Value *Callee = CS.getCalledValue(); 1447 if (!isa<Function>(Callee) && transformConstExprCastCall(CS)) 1448 return nullptr; 1449 1450 if (Function *CalleeF = dyn_cast<Function>(Callee)) 1451 // If the call and callee calling conventions don't match, this call must 1452 // be unreachable, as the call is undefined. 1453 if (CalleeF->getCallingConv() != CS.getCallingConv() && 1454 // Only do this for calls to a function with a body. A prototype may 1455 // not actually end up matching the implementation's calling conv for a 1456 // variety of reasons (e.g. it may be written in assembly). 1457 !CalleeF->isDeclaration()) { 1458 Instruction *OldCall = CS.getInstruction(); 1459 new StoreInst(ConstantInt::getTrue(Callee->getContext()), 1460 UndefValue::get(Type::getInt1PtrTy(Callee->getContext())), 1461 OldCall); 1462 // If OldCall does not return void then replaceAllUsesWith undef. 1463 // This allows ValueHandlers and custom metadata to adjust itself. 1464 if (!OldCall->getType()->isVoidTy()) 1465 ReplaceInstUsesWith(*OldCall, UndefValue::get(OldCall->getType())); 1466 if (isa<CallInst>(OldCall)) 1467 return EraseInstFromFunction(*OldCall); 1468 1469 // We cannot remove an invoke, because it would change the CFG, just 1470 // change the callee to a null pointer. 1471 cast<InvokeInst>(OldCall)->setCalledFunction( 1472 Constant::getNullValue(CalleeF->getType())); 1473 return nullptr; 1474 } 1475 1476 if (isa<ConstantPointerNull>(Callee) || isa<UndefValue>(Callee)) { 1477 // If CS does not return void then replaceAllUsesWith undef. 1478 // This allows ValueHandlers and custom metadata to adjust itself. 1479 if (!CS.getInstruction()->getType()->isVoidTy()) 1480 ReplaceInstUsesWith(*CS.getInstruction(), 1481 UndefValue::get(CS.getInstruction()->getType())); 1482 1483 if (isa<InvokeInst>(CS.getInstruction())) { 1484 // Can't remove an invoke because we cannot change the CFG. 1485 return nullptr; 1486 } 1487 1488 // This instruction is not reachable, just remove it. We insert a store to 1489 // undef so that we know that this code is not reachable, despite the fact 1490 // that we can't modify the CFG here. 1491 new StoreInst(ConstantInt::getTrue(Callee->getContext()), 1492 UndefValue::get(Type::getInt1PtrTy(Callee->getContext())), 1493 CS.getInstruction()); 1494 1495 return EraseInstFromFunction(*CS.getInstruction()); 1496 } 1497 1498 if (IntrinsicInst *II = FindInitTrampoline(Callee)) 1499 return transformCallThroughTrampoline(CS, II); 1500 1501 PointerType *PTy = cast<PointerType>(Callee->getType()); 1502 FunctionType *FTy = cast<FunctionType>(PTy->getElementType()); 1503 if (FTy->isVarArg()) { 1504 int ix = FTy->getNumParams(); 1505 // See if we can optimize any arguments passed through the varargs area of 1506 // the call. 1507 for (CallSite::arg_iterator I = CS.arg_begin() + FTy->getNumParams(), 1508 E = CS.arg_end(); I != E; ++I, ++ix) { 1509 CastInst *CI = dyn_cast<CastInst>(*I); 1510 if (CI && isSafeToEliminateVarargsCast(CS, DL, CI, ix)) { 1511 *I = CI->getOperand(0); 1512 Changed = true; 1513 } 1514 } 1515 } 1516 1517 if (isa<InlineAsm>(Callee) && !CS.doesNotThrow()) { 1518 // Inline asm calls cannot throw - mark them 'nounwind'. 1519 CS.setDoesNotThrow(); 1520 Changed = true; 1521 } 1522 1523 // Try to optimize the call if possible, we require DataLayout for most of 1524 // this. None of these calls are seen as possibly dead so go ahead and 1525 // delete the instruction now. 1526 if (CallInst *CI = dyn_cast<CallInst>(CS.getInstruction())) { 1527 Instruction *I = tryOptimizeCall(CI); 1528 // If we changed something return the result, etc. Otherwise let 1529 // the fallthrough check. 1530 if (I) return EraseInstFromFunction(*I); 1531 } 1532 1533 return Changed ? CS.getInstruction() : nullptr; 1534 } 1535 1536 // transformConstExprCastCall - If the callee is a constexpr cast of a function, 1537 // attempt to move the cast to the arguments of the call/invoke. 1538 // 1539 bool InstCombiner::transformConstExprCastCall(CallSite CS) { 1540 Function *Callee = 1541 dyn_cast<Function>(CS.getCalledValue()->stripPointerCasts()); 1542 if (!Callee) 1543 return false; 1544 // The prototype of thunks are a lie, don't try to directly call such 1545 // functions. 1546 if (Callee->hasFnAttribute("thunk")) 1547 return false; 1548 Instruction *Caller = CS.getInstruction(); 1549 const AttributeSet &CallerPAL = CS.getAttributes(); 1550 1551 // Okay, this is a cast from a function to a different type. Unless doing so 1552 // would cause a type conversion of one of our arguments, change this call to 1553 // be a direct call with arguments casted to the appropriate types. 1554 // 1555 FunctionType *FT = Callee->getFunctionType(); 1556 Type *OldRetTy = Caller->getType(); 1557 Type *NewRetTy = FT->getReturnType(); 1558 1559 // Check to see if we are changing the return type... 1560 if (OldRetTy != NewRetTy) { 1561 1562 if (NewRetTy->isStructTy()) 1563 return false; // TODO: Handle multiple return values. 1564 1565 if (!CastInst::isBitOrNoopPointerCastable(NewRetTy, OldRetTy, DL)) { 1566 if (Callee->isDeclaration()) 1567 return false; // Cannot transform this return value. 1568 1569 if (!Caller->use_empty() && 1570 // void -> non-void is handled specially 1571 !NewRetTy->isVoidTy()) 1572 return false; // Cannot transform this return value. 1573 } 1574 1575 if (!CallerPAL.isEmpty() && !Caller->use_empty()) { 1576 AttrBuilder RAttrs(CallerPAL, AttributeSet::ReturnIndex); 1577 if (RAttrs.overlaps(AttributeFuncs::typeIncompatible(NewRetTy))) 1578 return false; // Attribute not compatible with transformed value. 1579 } 1580 1581 // If the callsite is an invoke instruction, and the return value is used by 1582 // a PHI node in a successor, we cannot change the return type of the call 1583 // because there is no place to put the cast instruction (without breaking 1584 // the critical edge). Bail out in this case. 1585 if (!Caller->use_empty()) 1586 if (InvokeInst *II = dyn_cast<InvokeInst>(Caller)) 1587 for (User *U : II->users()) 1588 if (PHINode *PN = dyn_cast<PHINode>(U)) 1589 if (PN->getParent() == II->getNormalDest() || 1590 PN->getParent() == II->getUnwindDest()) 1591 return false; 1592 } 1593 1594 unsigned NumActualArgs = CS.arg_size(); 1595 unsigned NumCommonArgs = std::min(FT->getNumParams(), NumActualArgs); 1596 1597 // Prevent us turning: 1598 // declare void @takes_i32_inalloca(i32* inalloca) 1599 // call void bitcast (void (i32*)* @takes_i32_inalloca to void (i32)*)(i32 0) 1600 // 1601 // into: 1602 // call void @takes_i32_inalloca(i32* null) 1603 // 1604 // Similarly, avoid folding away bitcasts of byval calls. 1605 if (Callee->getAttributes().hasAttrSomewhere(Attribute::InAlloca) || 1606 Callee->getAttributes().hasAttrSomewhere(Attribute::ByVal)) 1607 return false; 1608 1609 CallSite::arg_iterator AI = CS.arg_begin(); 1610 for (unsigned i = 0, e = NumCommonArgs; i != e; ++i, ++AI) { 1611 Type *ParamTy = FT->getParamType(i); 1612 Type *ActTy = (*AI)->getType(); 1613 1614 if (!CastInst::isBitOrNoopPointerCastable(ActTy, ParamTy, DL)) 1615 return false; // Cannot transform this parameter value. 1616 1617 if (AttrBuilder(CallerPAL.getParamAttributes(i + 1), i + 1). 1618 overlaps(AttributeFuncs::typeIncompatible(ParamTy))) 1619 return false; // Attribute not compatible with transformed value. 1620 1621 if (CS.isInAllocaArgument(i)) 1622 return false; // Cannot transform to and from inalloca. 1623 1624 // If the parameter is passed as a byval argument, then we have to have a 1625 // sized type and the sized type has to have the same size as the old type. 1626 if (ParamTy != ActTy && 1627 CallerPAL.getParamAttributes(i + 1).hasAttribute(i + 1, 1628 Attribute::ByVal)) { 1629 PointerType *ParamPTy = dyn_cast<PointerType>(ParamTy); 1630 if (!ParamPTy || !ParamPTy->getElementType()->isSized()) 1631 return false; 1632 1633 Type *CurElTy = ActTy->getPointerElementType(); 1634 if (DL.getTypeAllocSize(CurElTy) != 1635 DL.getTypeAllocSize(ParamPTy->getElementType())) 1636 return false; 1637 } 1638 } 1639 1640 if (Callee->isDeclaration()) { 1641 // Do not delete arguments unless we have a function body. 1642 if (FT->getNumParams() < NumActualArgs && !FT->isVarArg()) 1643 return false; 1644 1645 // If the callee is just a declaration, don't change the varargsness of the 1646 // call. We don't want to introduce a varargs call where one doesn't 1647 // already exist. 1648 PointerType *APTy = cast<PointerType>(CS.getCalledValue()->getType()); 1649 if (FT->isVarArg()!=cast<FunctionType>(APTy->getElementType())->isVarArg()) 1650 return false; 1651 1652 // If both the callee and the cast type are varargs, we still have to make 1653 // sure the number of fixed parameters are the same or we have the same 1654 // ABI issues as if we introduce a varargs call. 1655 if (FT->isVarArg() && 1656 cast<FunctionType>(APTy->getElementType())->isVarArg() && 1657 FT->getNumParams() != 1658 cast<FunctionType>(APTy->getElementType())->getNumParams()) 1659 return false; 1660 } 1661 1662 if (FT->getNumParams() < NumActualArgs && FT->isVarArg() && 1663 !CallerPAL.isEmpty()) 1664 // In this case we have more arguments than the new function type, but we 1665 // won't be dropping them. Check that these extra arguments have attributes 1666 // that are compatible with being a vararg call argument. 1667 for (unsigned i = CallerPAL.getNumSlots(); i; --i) { 1668 unsigned Index = CallerPAL.getSlotIndex(i - 1); 1669 if (Index <= FT->getNumParams()) 1670 break; 1671 1672 // Check if it has an attribute that's incompatible with varargs. 1673 AttributeSet PAttrs = CallerPAL.getSlotAttributes(i - 1); 1674 if (PAttrs.hasAttribute(Index, Attribute::StructRet)) 1675 return false; 1676 } 1677 1678 1679 // Okay, we decided that this is a safe thing to do: go ahead and start 1680 // inserting cast instructions as necessary. 1681 std::vector<Value*> Args; 1682 Args.reserve(NumActualArgs); 1683 SmallVector<AttributeSet, 8> attrVec; 1684 attrVec.reserve(NumCommonArgs); 1685 1686 // Get any return attributes. 1687 AttrBuilder RAttrs(CallerPAL, AttributeSet::ReturnIndex); 1688 1689 // If the return value is not being used, the type may not be compatible 1690 // with the existing attributes. Wipe out any problematic attributes. 1691 RAttrs.remove(AttributeFuncs::typeIncompatible(NewRetTy)); 1692 1693 // Add the new return attributes. 1694 if (RAttrs.hasAttributes()) 1695 attrVec.push_back(AttributeSet::get(Caller->getContext(), 1696 AttributeSet::ReturnIndex, RAttrs)); 1697 1698 AI = CS.arg_begin(); 1699 for (unsigned i = 0; i != NumCommonArgs; ++i, ++AI) { 1700 Type *ParamTy = FT->getParamType(i); 1701 1702 if ((*AI)->getType() == ParamTy) { 1703 Args.push_back(*AI); 1704 } else { 1705 Args.push_back(Builder->CreateBitOrPointerCast(*AI, ParamTy)); 1706 } 1707 1708 // Add any parameter attributes. 1709 AttrBuilder PAttrs(CallerPAL.getParamAttributes(i + 1), i + 1); 1710 if (PAttrs.hasAttributes()) 1711 attrVec.push_back(AttributeSet::get(Caller->getContext(), i + 1, 1712 PAttrs)); 1713 } 1714 1715 // If the function takes more arguments than the call was taking, add them 1716 // now. 1717 for (unsigned i = NumCommonArgs; i != FT->getNumParams(); ++i) 1718 Args.push_back(Constant::getNullValue(FT->getParamType(i))); 1719 1720 // If we are removing arguments to the function, emit an obnoxious warning. 1721 if (FT->getNumParams() < NumActualArgs) { 1722 // TODO: if (!FT->isVarArg()) this call may be unreachable. PR14722 1723 if (FT->isVarArg()) { 1724 // Add all of the arguments in their promoted form to the arg list. 1725 for (unsigned i = FT->getNumParams(); i != NumActualArgs; ++i, ++AI) { 1726 Type *PTy = getPromotedType((*AI)->getType()); 1727 if (PTy != (*AI)->getType()) { 1728 // Must promote to pass through va_arg area! 1729 Instruction::CastOps opcode = 1730 CastInst::getCastOpcode(*AI, false, PTy, false); 1731 Args.push_back(Builder->CreateCast(opcode, *AI, PTy)); 1732 } else { 1733 Args.push_back(*AI); 1734 } 1735 1736 // Add any parameter attributes. 1737 AttrBuilder PAttrs(CallerPAL.getParamAttributes(i + 1), i + 1); 1738 if (PAttrs.hasAttributes()) 1739 attrVec.push_back(AttributeSet::get(FT->getContext(), i + 1, 1740 PAttrs)); 1741 } 1742 } 1743 } 1744 1745 AttributeSet FnAttrs = CallerPAL.getFnAttributes(); 1746 if (CallerPAL.hasAttributes(AttributeSet::FunctionIndex)) 1747 attrVec.push_back(AttributeSet::get(Callee->getContext(), FnAttrs)); 1748 1749 if (NewRetTy->isVoidTy()) 1750 Caller->setName(""); // Void type should not have a name. 1751 1752 const AttributeSet &NewCallerPAL = AttributeSet::get(Callee->getContext(), 1753 attrVec); 1754 1755 Instruction *NC; 1756 if (InvokeInst *II = dyn_cast<InvokeInst>(Caller)) { 1757 NC = Builder->CreateInvoke(Callee, II->getNormalDest(), 1758 II->getUnwindDest(), Args); 1759 NC->takeName(II); 1760 cast<InvokeInst>(NC)->setCallingConv(II->getCallingConv()); 1761 cast<InvokeInst>(NC)->setAttributes(NewCallerPAL); 1762 } else { 1763 CallInst *CI = cast<CallInst>(Caller); 1764 NC = Builder->CreateCall(Callee, Args); 1765 NC->takeName(CI); 1766 if (CI->isTailCall()) 1767 cast<CallInst>(NC)->setTailCall(); 1768 cast<CallInst>(NC)->setCallingConv(CI->getCallingConv()); 1769 cast<CallInst>(NC)->setAttributes(NewCallerPAL); 1770 } 1771 1772 // Insert a cast of the return type as necessary. 1773 Value *NV = NC; 1774 if (OldRetTy != NV->getType() && !Caller->use_empty()) { 1775 if (!NV->getType()->isVoidTy()) { 1776 NV = NC = CastInst::CreateBitOrPointerCast(NC, OldRetTy); 1777 NC->setDebugLoc(Caller->getDebugLoc()); 1778 1779 // If this is an invoke instruction, we should insert it after the first 1780 // non-phi, instruction in the normal successor block. 1781 if (InvokeInst *II = dyn_cast<InvokeInst>(Caller)) { 1782 BasicBlock::iterator I = II->getNormalDest()->getFirstInsertionPt(); 1783 InsertNewInstBefore(NC, *I); 1784 } else { 1785 // Otherwise, it's a call, just insert cast right after the call. 1786 InsertNewInstBefore(NC, *Caller); 1787 } 1788 Worklist.AddUsersToWorkList(*Caller); 1789 } else { 1790 NV = UndefValue::get(Caller->getType()); 1791 } 1792 } 1793 1794 if (!Caller->use_empty()) 1795 ReplaceInstUsesWith(*Caller, NV); 1796 else if (Caller->hasValueHandle()) { 1797 if (OldRetTy == NV->getType()) 1798 ValueHandleBase::ValueIsRAUWd(Caller, NV); 1799 else 1800 // We cannot call ValueIsRAUWd with a different type, and the 1801 // actual tracked value will disappear. 1802 ValueHandleBase::ValueIsDeleted(Caller); 1803 } 1804 1805 EraseInstFromFunction(*Caller); 1806 return true; 1807 } 1808 1809 // transformCallThroughTrampoline - Turn a call to a function created by 1810 // init_trampoline / adjust_trampoline intrinsic pair into a direct call to the 1811 // underlying function. 1812 // 1813 Instruction * 1814 InstCombiner::transformCallThroughTrampoline(CallSite CS, 1815 IntrinsicInst *Tramp) { 1816 Value *Callee = CS.getCalledValue(); 1817 PointerType *PTy = cast<PointerType>(Callee->getType()); 1818 FunctionType *FTy = cast<FunctionType>(PTy->getElementType()); 1819 const AttributeSet &Attrs = CS.getAttributes(); 1820 1821 // If the call already has the 'nest' attribute somewhere then give up - 1822 // otherwise 'nest' would occur twice after splicing in the chain. 1823 if (Attrs.hasAttrSomewhere(Attribute::Nest)) 1824 return nullptr; 1825 1826 assert(Tramp && 1827 "transformCallThroughTrampoline called with incorrect CallSite."); 1828 1829 Function *NestF =cast<Function>(Tramp->getArgOperand(1)->stripPointerCasts()); 1830 PointerType *NestFPTy = cast<PointerType>(NestF->getType()); 1831 FunctionType *NestFTy = cast<FunctionType>(NestFPTy->getElementType()); 1832 1833 const AttributeSet &NestAttrs = NestF->getAttributes(); 1834 if (!NestAttrs.isEmpty()) { 1835 unsigned NestIdx = 1; 1836 Type *NestTy = nullptr; 1837 AttributeSet NestAttr; 1838 1839 // Look for a parameter marked with the 'nest' attribute. 1840 for (FunctionType::param_iterator I = NestFTy->param_begin(), 1841 E = NestFTy->param_end(); I != E; ++NestIdx, ++I) 1842 if (NestAttrs.hasAttribute(NestIdx, Attribute::Nest)) { 1843 // Record the parameter type and any other attributes. 1844 NestTy = *I; 1845 NestAttr = NestAttrs.getParamAttributes(NestIdx); 1846 break; 1847 } 1848 1849 if (NestTy) { 1850 Instruction *Caller = CS.getInstruction(); 1851 std::vector<Value*> NewArgs; 1852 NewArgs.reserve(CS.arg_size() + 1); 1853 1854 SmallVector<AttributeSet, 8> NewAttrs; 1855 NewAttrs.reserve(Attrs.getNumSlots() + 1); 1856 1857 // Insert the nest argument into the call argument list, which may 1858 // mean appending it. Likewise for attributes. 1859 1860 // Add any result attributes. 1861 if (Attrs.hasAttributes(AttributeSet::ReturnIndex)) 1862 NewAttrs.push_back(AttributeSet::get(Caller->getContext(), 1863 Attrs.getRetAttributes())); 1864 1865 { 1866 unsigned Idx = 1; 1867 CallSite::arg_iterator I = CS.arg_begin(), E = CS.arg_end(); 1868 do { 1869 if (Idx == NestIdx) { 1870 // Add the chain argument and attributes. 1871 Value *NestVal = Tramp->getArgOperand(2); 1872 if (NestVal->getType() != NestTy) 1873 NestVal = Builder->CreateBitCast(NestVal, NestTy, "nest"); 1874 NewArgs.push_back(NestVal); 1875 NewAttrs.push_back(AttributeSet::get(Caller->getContext(), 1876 NestAttr)); 1877 } 1878 1879 if (I == E) 1880 break; 1881 1882 // Add the original argument and attributes. 1883 NewArgs.push_back(*I); 1884 AttributeSet Attr = Attrs.getParamAttributes(Idx); 1885 if (Attr.hasAttributes(Idx)) { 1886 AttrBuilder B(Attr, Idx); 1887 NewAttrs.push_back(AttributeSet::get(Caller->getContext(), 1888 Idx + (Idx >= NestIdx), B)); 1889 } 1890 1891 ++Idx, ++I; 1892 } while (1); 1893 } 1894 1895 // Add any function attributes. 1896 if (Attrs.hasAttributes(AttributeSet::FunctionIndex)) 1897 NewAttrs.push_back(AttributeSet::get(FTy->getContext(), 1898 Attrs.getFnAttributes())); 1899 1900 // The trampoline may have been bitcast to a bogus type (FTy). 1901 // Handle this by synthesizing a new function type, equal to FTy 1902 // with the chain parameter inserted. 1903 1904 std::vector<Type*> NewTypes; 1905 NewTypes.reserve(FTy->getNumParams()+1); 1906 1907 // Insert the chain's type into the list of parameter types, which may 1908 // mean appending it. 1909 { 1910 unsigned Idx = 1; 1911 FunctionType::param_iterator I = FTy->param_begin(), 1912 E = FTy->param_end(); 1913 1914 do { 1915 if (Idx == NestIdx) 1916 // Add the chain's type. 1917 NewTypes.push_back(NestTy); 1918 1919 if (I == E) 1920 break; 1921 1922 // Add the original type. 1923 NewTypes.push_back(*I); 1924 1925 ++Idx, ++I; 1926 } while (1); 1927 } 1928 1929 // Replace the trampoline call with a direct call. Let the generic 1930 // code sort out any function type mismatches. 1931 FunctionType *NewFTy = FunctionType::get(FTy->getReturnType(), NewTypes, 1932 FTy->isVarArg()); 1933 Constant *NewCallee = 1934 NestF->getType() == PointerType::getUnqual(NewFTy) ? 1935 NestF : ConstantExpr::getBitCast(NestF, 1936 PointerType::getUnqual(NewFTy)); 1937 const AttributeSet &NewPAL = 1938 AttributeSet::get(FTy->getContext(), NewAttrs); 1939 1940 Instruction *NewCaller; 1941 if (InvokeInst *II = dyn_cast<InvokeInst>(Caller)) { 1942 NewCaller = InvokeInst::Create(NewCallee, 1943 II->getNormalDest(), II->getUnwindDest(), 1944 NewArgs); 1945 cast<InvokeInst>(NewCaller)->setCallingConv(II->getCallingConv()); 1946 cast<InvokeInst>(NewCaller)->setAttributes(NewPAL); 1947 } else { 1948 NewCaller = CallInst::Create(NewCallee, NewArgs); 1949 if (cast<CallInst>(Caller)->isTailCall()) 1950 cast<CallInst>(NewCaller)->setTailCall(); 1951 cast<CallInst>(NewCaller)-> 1952 setCallingConv(cast<CallInst>(Caller)->getCallingConv()); 1953 cast<CallInst>(NewCaller)->setAttributes(NewPAL); 1954 } 1955 1956 return NewCaller; 1957 } 1958 } 1959 1960 // Replace the trampoline call with a direct call. Since there is no 'nest' 1961 // parameter, there is no need to adjust the argument list. Let the generic 1962 // code sort out any function type mismatches. 1963 Constant *NewCallee = 1964 NestF->getType() == PTy ? NestF : 1965 ConstantExpr::getBitCast(NestF, PTy); 1966 CS.setCalledFunction(NewCallee); 1967 return CS.getInstruction(); 1968 } 1969