1 //===- ValueTracking.cpp - Walk computations to compute properties --------===// 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 contains routines that help analyze properties that chains of 11 // computations have. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #include "llvm/Analysis/ValueTracking.h" 16 #include "llvm/Constants.h" 17 #include "llvm/Instructions.h" 18 #include "llvm/GlobalVariable.h" 19 #include "llvm/GlobalAlias.h" 20 #include "llvm/IntrinsicInst.h" 21 #include "llvm/LLVMContext.h" 22 #include "llvm/Operator.h" 23 #include "llvm/Target/TargetData.h" 24 #include "llvm/Support/GetElementPtrTypeIterator.h" 25 #include "llvm/Support/MathExtras.h" 26 #include <cstring> 27 using namespace llvm; 28 29 /// ComputeMaskedBits - Determine which of the bits specified in Mask are 30 /// known to be either zero or one and return them in the KnownZero/KnownOne 31 /// bit sets. This code only analyzes bits in Mask, in order to short-circuit 32 /// processing. 33 /// NOTE: we cannot consider 'undef' to be "IsZero" here. The problem is that 34 /// we cannot optimize based on the assumption that it is zero without changing 35 /// it to be an explicit zero. If we don't change it to zero, other code could 36 /// optimized based on the contradictory assumption that it is non-zero. 37 /// Because instcombine aggressively folds operations with undef args anyway, 38 /// this won't lose us code quality. 39 /// 40 /// This function is defined on values with integer type, values with pointer 41 /// type (but only if TD is non-null), and vectors of integers. In the case 42 /// where V is a vector, the mask, known zero, and known one values are the 43 /// same width as the vector element, and the bit is set only if it is true 44 /// for all of the elements in the vector. 45 void llvm::ComputeMaskedBits(Value *V, const APInt &Mask, 46 APInt &KnownZero, APInt &KnownOne, 47 const TargetData *TD, unsigned Depth) { 48 const unsigned MaxDepth = 6; 49 assert(V && "No Value?"); 50 assert(Depth <= MaxDepth && "Limit Search Depth"); 51 unsigned BitWidth = Mask.getBitWidth(); 52 assert((V->getType()->isIntOrIntVector() || isa<PointerType>(V->getType())) && 53 "Not integer or pointer type!"); 54 assert((!TD || 55 TD->getTypeSizeInBits(V->getType()->getScalarType()) == BitWidth) && 56 (!V->getType()->isIntOrIntVector() || 57 V->getType()->getScalarSizeInBits() == BitWidth) && 58 KnownZero.getBitWidth() == BitWidth && 59 KnownOne.getBitWidth() == BitWidth && 60 "V, Mask, KnownOne and KnownZero should have same BitWidth"); 61 62 if (ConstantInt *CI = dyn_cast<ConstantInt>(V)) { 63 // We know all of the bits for a constant! 64 KnownOne = CI->getValue() & Mask; 65 KnownZero = ~KnownOne & Mask; 66 return; 67 } 68 // Null and aggregate-zero are all-zeros. 69 if (isa<ConstantPointerNull>(V) || 70 isa<ConstantAggregateZero>(V)) { 71 KnownOne.clear(); 72 KnownZero = Mask; 73 return; 74 } 75 // Handle a constant vector by taking the intersection of the known bits of 76 // each element. 77 if (ConstantVector *CV = dyn_cast<ConstantVector>(V)) { 78 KnownZero.set(); KnownOne.set(); 79 for (unsigned i = 0, e = CV->getNumOperands(); i != e; ++i) { 80 APInt KnownZero2(BitWidth, 0), KnownOne2(BitWidth, 0); 81 ComputeMaskedBits(CV->getOperand(i), Mask, KnownZero2, KnownOne2, 82 TD, Depth); 83 KnownZero &= KnownZero2; 84 KnownOne &= KnownOne2; 85 } 86 return; 87 } 88 // The address of an aligned GlobalValue has trailing zeros. 89 if (GlobalValue *GV = dyn_cast<GlobalValue>(V)) { 90 unsigned Align = GV->getAlignment(); 91 if (Align == 0 && TD && GV->getType()->getElementType()->isSized()) { 92 const Type *ObjectType = GV->getType()->getElementType(); 93 // If the object is defined in the current Module, we'll be giving 94 // it the preferred alignment. Otherwise, we have to assume that it 95 // may only have the minimum ABI alignment. 96 if (!GV->isDeclaration() && !GV->mayBeOverridden()) 97 Align = TD->getPrefTypeAlignment(ObjectType); 98 else 99 Align = TD->getABITypeAlignment(ObjectType); 100 } 101 if (Align > 0) 102 KnownZero = Mask & APInt::getLowBitsSet(BitWidth, 103 CountTrailingZeros_32(Align)); 104 else 105 KnownZero.clear(); 106 KnownOne.clear(); 107 return; 108 } 109 // A weak GlobalAlias is totally unknown. A non-weak GlobalAlias has 110 // the bits of its aliasee. 111 if (GlobalAlias *GA = dyn_cast<GlobalAlias>(V)) { 112 if (GA->mayBeOverridden()) { 113 KnownZero.clear(); KnownOne.clear(); 114 } else { 115 ComputeMaskedBits(GA->getAliasee(), Mask, KnownZero, KnownOne, 116 TD, Depth+1); 117 } 118 return; 119 } 120 121 KnownZero.clear(); KnownOne.clear(); // Start out not knowing anything. 122 123 if (Depth == MaxDepth || Mask == 0) 124 return; // Limit search depth. 125 126 Operator *I = dyn_cast<Operator>(V); 127 if (!I) return; 128 129 APInt KnownZero2(KnownZero), KnownOne2(KnownOne); 130 switch (I->getOpcode()) { 131 default: break; 132 case Instruction::And: { 133 // If either the LHS or the RHS are Zero, the result is zero. 134 ComputeMaskedBits(I->getOperand(1), Mask, KnownZero, KnownOne, TD, Depth+1); 135 APInt Mask2(Mask & ~KnownZero); 136 ComputeMaskedBits(I->getOperand(0), Mask2, KnownZero2, KnownOne2, TD, 137 Depth+1); 138 assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 139 assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 140 141 // Output known-1 bits are only known if set in both the LHS & RHS. 142 KnownOne &= KnownOne2; 143 // Output known-0 are known to be clear if zero in either the LHS | RHS. 144 KnownZero |= KnownZero2; 145 return; 146 } 147 case Instruction::Or: { 148 ComputeMaskedBits(I->getOperand(1), Mask, KnownZero, KnownOne, TD, Depth+1); 149 APInt Mask2(Mask & ~KnownOne); 150 ComputeMaskedBits(I->getOperand(0), Mask2, KnownZero2, KnownOne2, TD, 151 Depth+1); 152 assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 153 assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 154 155 // Output known-0 bits are only known if clear in both the LHS & RHS. 156 KnownZero &= KnownZero2; 157 // Output known-1 are known to be set if set in either the LHS | RHS. 158 KnownOne |= KnownOne2; 159 return; 160 } 161 case Instruction::Xor: { 162 ComputeMaskedBits(I->getOperand(1), Mask, KnownZero, KnownOne, TD, Depth+1); 163 ComputeMaskedBits(I->getOperand(0), Mask, KnownZero2, KnownOne2, TD, 164 Depth+1); 165 assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 166 assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 167 168 // Output known-0 bits are known if clear or set in both the LHS & RHS. 169 APInt KnownZeroOut = (KnownZero & KnownZero2) | (KnownOne & KnownOne2); 170 // Output known-1 are known to be set if set in only one of the LHS, RHS. 171 KnownOne = (KnownZero & KnownOne2) | (KnownOne & KnownZero2); 172 KnownZero = KnownZeroOut; 173 return; 174 } 175 case Instruction::Mul: { 176 APInt Mask2 = APInt::getAllOnesValue(BitWidth); 177 ComputeMaskedBits(I->getOperand(1), Mask2, KnownZero, KnownOne, TD,Depth+1); 178 ComputeMaskedBits(I->getOperand(0), Mask2, KnownZero2, KnownOne2, TD, 179 Depth+1); 180 assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 181 assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 182 183 // If low bits are zero in either operand, output low known-0 bits. 184 // Also compute a conserative estimate for high known-0 bits. 185 // More trickiness is possible, but this is sufficient for the 186 // interesting case of alignment computation. 187 KnownOne.clear(); 188 unsigned TrailZ = KnownZero.countTrailingOnes() + 189 KnownZero2.countTrailingOnes(); 190 unsigned LeadZ = std::max(KnownZero.countLeadingOnes() + 191 KnownZero2.countLeadingOnes(), 192 BitWidth) - BitWidth; 193 194 TrailZ = std::min(TrailZ, BitWidth); 195 LeadZ = std::min(LeadZ, BitWidth); 196 KnownZero = APInt::getLowBitsSet(BitWidth, TrailZ) | 197 APInt::getHighBitsSet(BitWidth, LeadZ); 198 KnownZero &= Mask; 199 return; 200 } 201 case Instruction::UDiv: { 202 // For the purposes of computing leading zeros we can conservatively 203 // treat a udiv as a logical right shift by the power of 2 known to 204 // be less than the denominator. 205 APInt AllOnes = APInt::getAllOnesValue(BitWidth); 206 ComputeMaskedBits(I->getOperand(0), 207 AllOnes, KnownZero2, KnownOne2, TD, Depth+1); 208 unsigned LeadZ = KnownZero2.countLeadingOnes(); 209 210 KnownOne2.clear(); 211 KnownZero2.clear(); 212 ComputeMaskedBits(I->getOperand(1), 213 AllOnes, KnownZero2, KnownOne2, TD, Depth+1); 214 unsigned RHSUnknownLeadingOnes = KnownOne2.countLeadingZeros(); 215 if (RHSUnknownLeadingOnes != BitWidth) 216 LeadZ = std::min(BitWidth, 217 LeadZ + BitWidth - RHSUnknownLeadingOnes - 1); 218 219 KnownZero = APInt::getHighBitsSet(BitWidth, LeadZ) & Mask; 220 return; 221 } 222 case Instruction::Select: 223 ComputeMaskedBits(I->getOperand(2), Mask, KnownZero, KnownOne, TD, Depth+1); 224 ComputeMaskedBits(I->getOperand(1), Mask, KnownZero2, KnownOne2, TD, 225 Depth+1); 226 assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 227 assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 228 229 // Only known if known in both the LHS and RHS. 230 KnownOne &= KnownOne2; 231 KnownZero &= KnownZero2; 232 return; 233 case Instruction::FPTrunc: 234 case Instruction::FPExt: 235 case Instruction::FPToUI: 236 case Instruction::FPToSI: 237 case Instruction::SIToFP: 238 case Instruction::UIToFP: 239 return; // Can't work with floating point. 240 case Instruction::PtrToInt: 241 case Instruction::IntToPtr: 242 // We can't handle these if we don't know the pointer size. 243 if (!TD) return; 244 // FALL THROUGH and handle them the same as zext/trunc. 245 case Instruction::ZExt: 246 case Instruction::Trunc: { 247 const Type *SrcTy = I->getOperand(0)->getType(); 248 249 unsigned SrcBitWidth; 250 // Note that we handle pointer operands here because of inttoptr/ptrtoint 251 // which fall through here. 252 if (isa<PointerType>(SrcTy)) 253 SrcBitWidth = TD->getTypeSizeInBits(SrcTy); 254 else 255 SrcBitWidth = SrcTy->getScalarSizeInBits(); 256 257 APInt MaskIn(Mask); 258 MaskIn.zextOrTrunc(SrcBitWidth); 259 KnownZero.zextOrTrunc(SrcBitWidth); 260 KnownOne.zextOrTrunc(SrcBitWidth); 261 ComputeMaskedBits(I->getOperand(0), MaskIn, KnownZero, KnownOne, TD, 262 Depth+1); 263 KnownZero.zextOrTrunc(BitWidth); 264 KnownOne.zextOrTrunc(BitWidth); 265 // Any top bits are known to be zero. 266 if (BitWidth > SrcBitWidth) 267 KnownZero |= APInt::getHighBitsSet(BitWidth, BitWidth - SrcBitWidth); 268 return; 269 } 270 case Instruction::BitCast: { 271 const Type *SrcTy = I->getOperand(0)->getType(); 272 if ((SrcTy->isInteger() || isa<PointerType>(SrcTy)) && 273 // TODO: For now, not handling conversions like: 274 // (bitcast i64 %x to <2 x i32>) 275 !isa<VectorType>(I->getType())) { 276 ComputeMaskedBits(I->getOperand(0), Mask, KnownZero, KnownOne, TD, 277 Depth+1); 278 return; 279 } 280 break; 281 } 282 case Instruction::SExt: { 283 // Compute the bits in the result that are not present in the input. 284 unsigned SrcBitWidth = I->getOperand(0)->getType()->getScalarSizeInBits(); 285 286 APInt MaskIn(Mask); 287 MaskIn.trunc(SrcBitWidth); 288 KnownZero.trunc(SrcBitWidth); 289 KnownOne.trunc(SrcBitWidth); 290 ComputeMaskedBits(I->getOperand(0), MaskIn, KnownZero, KnownOne, TD, 291 Depth+1); 292 assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 293 KnownZero.zext(BitWidth); 294 KnownOne.zext(BitWidth); 295 296 // If the sign bit of the input is known set or clear, then we know the 297 // top bits of the result. 298 if (KnownZero[SrcBitWidth-1]) // Input sign bit known zero 299 KnownZero |= APInt::getHighBitsSet(BitWidth, BitWidth - SrcBitWidth); 300 else if (KnownOne[SrcBitWidth-1]) // Input sign bit known set 301 KnownOne |= APInt::getHighBitsSet(BitWidth, BitWidth - SrcBitWidth); 302 return; 303 } 304 case Instruction::Shl: 305 // (shl X, C1) & C2 == 0 iff (X & C2 >>u C1) == 0 306 if (ConstantInt *SA = dyn_cast<ConstantInt>(I->getOperand(1))) { 307 uint64_t ShiftAmt = SA->getLimitedValue(BitWidth); 308 APInt Mask2(Mask.lshr(ShiftAmt)); 309 ComputeMaskedBits(I->getOperand(0), Mask2, KnownZero, KnownOne, TD, 310 Depth+1); 311 assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 312 KnownZero <<= ShiftAmt; 313 KnownOne <<= ShiftAmt; 314 KnownZero |= APInt::getLowBitsSet(BitWidth, ShiftAmt); // low bits known 0 315 return; 316 } 317 break; 318 case Instruction::LShr: 319 // (ushr X, C1) & C2 == 0 iff (-1 >> C1) & C2 == 0 320 if (ConstantInt *SA = dyn_cast<ConstantInt>(I->getOperand(1))) { 321 // Compute the new bits that are at the top now. 322 uint64_t ShiftAmt = SA->getLimitedValue(BitWidth); 323 324 // Unsigned shift right. 325 APInt Mask2(Mask.shl(ShiftAmt)); 326 ComputeMaskedBits(I->getOperand(0), Mask2, KnownZero,KnownOne, TD, 327 Depth+1); 328 assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 329 KnownZero = APIntOps::lshr(KnownZero, ShiftAmt); 330 KnownOne = APIntOps::lshr(KnownOne, ShiftAmt); 331 // high bits known zero. 332 KnownZero |= APInt::getHighBitsSet(BitWidth, ShiftAmt); 333 return; 334 } 335 break; 336 case Instruction::AShr: 337 // (ashr X, C1) & C2 == 0 iff (-1 >> C1) & C2 == 0 338 if (ConstantInt *SA = dyn_cast<ConstantInt>(I->getOperand(1))) { 339 // Compute the new bits that are at the top now. 340 uint64_t ShiftAmt = SA->getLimitedValue(BitWidth); 341 342 // Signed shift right. 343 APInt Mask2(Mask.shl(ShiftAmt)); 344 ComputeMaskedBits(I->getOperand(0), Mask2, KnownZero, KnownOne, TD, 345 Depth+1); 346 assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 347 KnownZero = APIntOps::lshr(KnownZero, ShiftAmt); 348 KnownOne = APIntOps::lshr(KnownOne, ShiftAmt); 349 350 APInt HighBits(APInt::getHighBitsSet(BitWidth, ShiftAmt)); 351 if (KnownZero[BitWidth-ShiftAmt-1]) // New bits are known zero. 352 KnownZero |= HighBits; 353 else if (KnownOne[BitWidth-ShiftAmt-1]) // New bits are known one. 354 KnownOne |= HighBits; 355 return; 356 } 357 break; 358 case Instruction::Sub: { 359 if (ConstantInt *CLHS = dyn_cast<ConstantInt>(I->getOperand(0))) { 360 // We know that the top bits of C-X are clear if X contains less bits 361 // than C (i.e. no wrap-around can happen). For example, 20-X is 362 // positive if we can prove that X is >= 0 and < 16. 363 if (!CLHS->getValue().isNegative()) { 364 unsigned NLZ = (CLHS->getValue()+1).countLeadingZeros(); 365 // NLZ can't be BitWidth with no sign bit 366 APInt MaskV = APInt::getHighBitsSet(BitWidth, NLZ+1); 367 ComputeMaskedBits(I->getOperand(1), MaskV, KnownZero2, KnownOne2, 368 TD, Depth+1); 369 370 // If all of the MaskV bits are known to be zero, then we know the 371 // output top bits are zero, because we now know that the output is 372 // from [0-C]. 373 if ((KnownZero2 & MaskV) == MaskV) { 374 unsigned NLZ2 = CLHS->getValue().countLeadingZeros(); 375 // Top bits known zero. 376 KnownZero = APInt::getHighBitsSet(BitWidth, NLZ2) & Mask; 377 } 378 } 379 } 380 } 381 // fall through 382 case Instruction::Add: { 383 // If one of the operands has trailing zeros, then the bits that the 384 // other operand has in those bit positions will be preserved in the 385 // result. For an add, this works with either operand. For a subtract, 386 // this only works if the known zeros are in the right operand. 387 APInt LHSKnownZero(BitWidth, 0), LHSKnownOne(BitWidth, 0); 388 APInt Mask2 = APInt::getLowBitsSet(BitWidth, 389 BitWidth - Mask.countLeadingZeros()); 390 ComputeMaskedBits(I->getOperand(0), Mask2, LHSKnownZero, LHSKnownOne, TD, 391 Depth+1); 392 assert((LHSKnownZero & LHSKnownOne) == 0 && 393 "Bits known to be one AND zero?"); 394 unsigned LHSKnownZeroOut = LHSKnownZero.countTrailingOnes(); 395 396 ComputeMaskedBits(I->getOperand(1), Mask2, KnownZero2, KnownOne2, TD, 397 Depth+1); 398 assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 399 unsigned RHSKnownZeroOut = KnownZero2.countTrailingOnes(); 400 401 // Determine which operand has more trailing zeros, and use that 402 // many bits from the other operand. 403 if (LHSKnownZeroOut > RHSKnownZeroOut) { 404 if (I->getOpcode() == Instruction::Add) { 405 APInt Mask = APInt::getLowBitsSet(BitWidth, LHSKnownZeroOut); 406 KnownZero |= KnownZero2 & Mask; 407 KnownOne |= KnownOne2 & Mask; 408 } else { 409 // If the known zeros are in the left operand for a subtract, 410 // fall back to the minimum known zeros in both operands. 411 KnownZero |= APInt::getLowBitsSet(BitWidth, 412 std::min(LHSKnownZeroOut, 413 RHSKnownZeroOut)); 414 } 415 } else if (RHSKnownZeroOut >= LHSKnownZeroOut) { 416 APInt Mask = APInt::getLowBitsSet(BitWidth, RHSKnownZeroOut); 417 KnownZero |= LHSKnownZero & Mask; 418 KnownOne |= LHSKnownOne & Mask; 419 } 420 return; 421 } 422 case Instruction::SRem: 423 if (ConstantInt *Rem = dyn_cast<ConstantInt>(I->getOperand(1))) { 424 APInt RA = Rem->getValue(); 425 if (RA.isPowerOf2() || (-RA).isPowerOf2()) { 426 APInt LowBits = RA.isStrictlyPositive() ? (RA - 1) : ~RA; 427 APInt Mask2 = LowBits | APInt::getSignBit(BitWidth); 428 ComputeMaskedBits(I->getOperand(0), Mask2, KnownZero2, KnownOne2, TD, 429 Depth+1); 430 431 // If the sign bit of the first operand is zero, the sign bit of 432 // the result is zero. If the first operand has no one bits below 433 // the second operand's single 1 bit, its sign will be zero. 434 if (KnownZero2[BitWidth-1] || ((KnownZero2 & LowBits) == LowBits)) 435 KnownZero2 |= ~LowBits; 436 437 KnownZero |= KnownZero2 & Mask; 438 439 assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 440 } 441 } 442 break; 443 case Instruction::URem: { 444 if (ConstantInt *Rem = dyn_cast<ConstantInt>(I->getOperand(1))) { 445 APInt RA = Rem->getValue(); 446 if (RA.isPowerOf2()) { 447 APInt LowBits = (RA - 1); 448 APInt Mask2 = LowBits & Mask; 449 KnownZero |= ~LowBits & Mask; 450 ComputeMaskedBits(I->getOperand(0), Mask2, KnownZero, KnownOne, TD, 451 Depth+1); 452 assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 453 break; 454 } 455 } 456 457 // Since the result is less than or equal to either operand, any leading 458 // zero bits in either operand must also exist in the result. 459 APInt AllOnes = APInt::getAllOnesValue(BitWidth); 460 ComputeMaskedBits(I->getOperand(0), AllOnes, KnownZero, KnownOne, 461 TD, Depth+1); 462 ComputeMaskedBits(I->getOperand(1), AllOnes, KnownZero2, KnownOne2, 463 TD, Depth+1); 464 465 unsigned Leaders = std::max(KnownZero.countLeadingOnes(), 466 KnownZero2.countLeadingOnes()); 467 KnownOne.clear(); 468 KnownZero = APInt::getHighBitsSet(BitWidth, Leaders) & Mask; 469 break; 470 } 471 472 case Instruction::Alloca: { 473 AllocaInst *AI = cast<AllocaInst>(V); 474 unsigned Align = AI->getAlignment(); 475 if (Align == 0 && TD) 476 Align = TD->getABITypeAlignment(AI->getType()->getElementType()); 477 478 if (Align > 0) 479 KnownZero = Mask & APInt::getLowBitsSet(BitWidth, 480 CountTrailingZeros_32(Align)); 481 break; 482 } 483 case Instruction::GetElementPtr: { 484 // Analyze all of the subscripts of this getelementptr instruction 485 // to determine if we can prove known low zero bits. 486 APInt LocalMask = APInt::getAllOnesValue(BitWidth); 487 APInt LocalKnownZero(BitWidth, 0), LocalKnownOne(BitWidth, 0); 488 ComputeMaskedBits(I->getOperand(0), LocalMask, 489 LocalKnownZero, LocalKnownOne, TD, Depth+1); 490 unsigned TrailZ = LocalKnownZero.countTrailingOnes(); 491 492 gep_type_iterator GTI = gep_type_begin(I); 493 for (unsigned i = 1, e = I->getNumOperands(); i != e; ++i, ++GTI) { 494 Value *Index = I->getOperand(i); 495 if (const StructType *STy = dyn_cast<StructType>(*GTI)) { 496 // Handle struct member offset arithmetic. 497 if (!TD) return; 498 const StructLayout *SL = TD->getStructLayout(STy); 499 unsigned Idx = cast<ConstantInt>(Index)->getZExtValue(); 500 uint64_t Offset = SL->getElementOffset(Idx); 501 TrailZ = std::min(TrailZ, 502 CountTrailingZeros_64(Offset)); 503 } else { 504 // Handle array index arithmetic. 505 const Type *IndexedTy = GTI.getIndexedType(); 506 if (!IndexedTy->isSized()) return; 507 unsigned GEPOpiBits = Index->getType()->getScalarSizeInBits(); 508 uint64_t TypeSize = TD ? TD->getTypeAllocSize(IndexedTy) : 1; 509 LocalMask = APInt::getAllOnesValue(GEPOpiBits); 510 LocalKnownZero = LocalKnownOne = APInt(GEPOpiBits, 0); 511 ComputeMaskedBits(Index, LocalMask, 512 LocalKnownZero, LocalKnownOne, TD, Depth+1); 513 TrailZ = std::min(TrailZ, 514 unsigned(CountTrailingZeros_64(TypeSize) + 515 LocalKnownZero.countTrailingOnes())); 516 } 517 } 518 519 KnownZero = APInt::getLowBitsSet(BitWidth, TrailZ) & Mask; 520 break; 521 } 522 case Instruction::PHI: { 523 PHINode *P = cast<PHINode>(I); 524 // Handle the case of a simple two-predecessor recurrence PHI. 525 // There's a lot more that could theoretically be done here, but 526 // this is sufficient to catch some interesting cases. 527 if (P->getNumIncomingValues() == 2) { 528 for (unsigned i = 0; i != 2; ++i) { 529 Value *L = P->getIncomingValue(i); 530 Value *R = P->getIncomingValue(!i); 531 Operator *LU = dyn_cast<Operator>(L); 532 if (!LU) 533 continue; 534 unsigned Opcode = LU->getOpcode(); 535 // Check for operations that have the property that if 536 // both their operands have low zero bits, the result 537 // will have low zero bits. 538 if (Opcode == Instruction::Add || 539 Opcode == Instruction::Sub || 540 Opcode == Instruction::And || 541 Opcode == Instruction::Or || 542 Opcode == Instruction::Mul) { 543 Value *LL = LU->getOperand(0); 544 Value *LR = LU->getOperand(1); 545 // Find a recurrence. 546 if (LL == I) 547 L = LR; 548 else if (LR == I) 549 L = LL; 550 else 551 break; 552 // Ok, we have a PHI of the form L op= R. Check for low 553 // zero bits. 554 APInt Mask2 = APInt::getAllOnesValue(BitWidth); 555 ComputeMaskedBits(R, Mask2, KnownZero2, KnownOne2, TD, Depth+1); 556 Mask2 = APInt::getLowBitsSet(BitWidth, 557 KnownZero2.countTrailingOnes()); 558 559 // We need to take the minimum number of known bits 560 APInt KnownZero3(KnownZero), KnownOne3(KnownOne); 561 ComputeMaskedBits(L, Mask2, KnownZero3, KnownOne3, TD, Depth+1); 562 563 KnownZero = Mask & 564 APInt::getLowBitsSet(BitWidth, 565 std::min(KnownZero2.countTrailingOnes(), 566 KnownZero3.countTrailingOnes())); 567 break; 568 } 569 } 570 } 571 572 // Otherwise take the unions of the known bit sets of the operands, 573 // taking conservative care to avoid excessive recursion. 574 if (Depth < MaxDepth - 1 && !KnownZero && !KnownOne) { 575 KnownZero = APInt::getAllOnesValue(BitWidth); 576 KnownOne = APInt::getAllOnesValue(BitWidth); 577 for (unsigned i = 0, e = P->getNumIncomingValues(); i != e; ++i) { 578 // Skip direct self references. 579 if (P->getIncomingValue(i) == P) continue; 580 581 KnownZero2 = APInt(BitWidth, 0); 582 KnownOne2 = APInt(BitWidth, 0); 583 // Recurse, but cap the recursion to one level, because we don't 584 // want to waste time spinning around in loops. 585 ComputeMaskedBits(P->getIncomingValue(i), KnownZero | KnownOne, 586 KnownZero2, KnownOne2, TD, MaxDepth-1); 587 KnownZero &= KnownZero2; 588 KnownOne &= KnownOne2; 589 // If all bits have been ruled out, there's no need to check 590 // more operands. 591 if (!KnownZero && !KnownOne) 592 break; 593 } 594 } 595 break; 596 } 597 case Instruction::Call: 598 if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(I)) { 599 switch (II->getIntrinsicID()) { 600 default: break; 601 case Intrinsic::ctpop: 602 case Intrinsic::ctlz: 603 case Intrinsic::cttz: { 604 unsigned LowBits = Log2_32(BitWidth)+1; 605 KnownZero = APInt::getHighBitsSet(BitWidth, BitWidth - LowBits); 606 break; 607 } 608 } 609 } 610 break; 611 } 612 } 613 614 /// MaskedValueIsZero - Return true if 'V & Mask' is known to be zero. We use 615 /// this predicate to simplify operations downstream. Mask is known to be zero 616 /// for bits that V cannot have. 617 /// 618 /// This function is defined on values with integer type, values with pointer 619 /// type (but only if TD is non-null), and vectors of integers. In the case 620 /// where V is a vector, the mask, known zero, and known one values are the 621 /// same width as the vector element, and the bit is set only if it is true 622 /// for all of the elements in the vector. 623 bool llvm::MaskedValueIsZero(Value *V, const APInt &Mask, 624 const TargetData *TD, unsigned Depth) { 625 APInt KnownZero(Mask.getBitWidth(), 0), KnownOne(Mask.getBitWidth(), 0); 626 ComputeMaskedBits(V, Mask, KnownZero, KnownOne, TD, Depth); 627 assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 628 return (KnownZero & Mask) == Mask; 629 } 630 631 632 633 /// ComputeNumSignBits - Return the number of times the sign bit of the 634 /// register is replicated into the other bits. We know that at least 1 bit 635 /// is always equal to the sign bit (itself), but other cases can give us 636 /// information. For example, immediately after an "ashr X, 2", we know that 637 /// the top 3 bits are all equal to each other, so we return 3. 638 /// 639 /// 'Op' must have a scalar integer type. 640 /// 641 unsigned llvm::ComputeNumSignBits(Value *V, const TargetData *TD, 642 unsigned Depth) { 643 assert((TD || V->getType()->isIntOrIntVector()) && 644 "ComputeNumSignBits requires a TargetData object to operate " 645 "on non-integer values!"); 646 const Type *Ty = V->getType(); 647 unsigned TyBits = TD ? TD->getTypeSizeInBits(V->getType()->getScalarType()) : 648 Ty->getScalarSizeInBits(); 649 unsigned Tmp, Tmp2; 650 unsigned FirstAnswer = 1; 651 652 // Note that ConstantInt is handled by the general ComputeMaskedBits case 653 // below. 654 655 if (Depth == 6) 656 return 1; // Limit search depth. 657 658 Operator *U = dyn_cast<Operator>(V); 659 switch (Operator::getOpcode(V)) { 660 default: break; 661 case Instruction::SExt: 662 Tmp = TyBits - U->getOperand(0)->getType()->getScalarSizeInBits(); 663 return ComputeNumSignBits(U->getOperand(0), TD, Depth+1) + Tmp; 664 665 case Instruction::AShr: 666 Tmp = ComputeNumSignBits(U->getOperand(0), TD, Depth+1); 667 // ashr X, C -> adds C sign bits. 668 if (ConstantInt *C = dyn_cast<ConstantInt>(U->getOperand(1))) { 669 Tmp += C->getZExtValue(); 670 if (Tmp > TyBits) Tmp = TyBits; 671 } 672 return Tmp; 673 case Instruction::Shl: 674 if (ConstantInt *C = dyn_cast<ConstantInt>(U->getOperand(1))) { 675 // shl destroys sign bits. 676 Tmp = ComputeNumSignBits(U->getOperand(0), TD, Depth+1); 677 if (C->getZExtValue() >= TyBits || // Bad shift. 678 C->getZExtValue() >= Tmp) break; // Shifted all sign bits out. 679 return Tmp - C->getZExtValue(); 680 } 681 break; 682 case Instruction::And: 683 case Instruction::Or: 684 case Instruction::Xor: // NOT is handled here. 685 // Logical binary ops preserve the number of sign bits at the worst. 686 Tmp = ComputeNumSignBits(U->getOperand(0), TD, Depth+1); 687 if (Tmp != 1) { 688 Tmp2 = ComputeNumSignBits(U->getOperand(1), TD, Depth+1); 689 FirstAnswer = std::min(Tmp, Tmp2); 690 // We computed what we know about the sign bits as our first 691 // answer. Now proceed to the generic code that uses 692 // ComputeMaskedBits, and pick whichever answer is better. 693 } 694 break; 695 696 case Instruction::Select: 697 Tmp = ComputeNumSignBits(U->getOperand(1), TD, Depth+1); 698 if (Tmp == 1) return 1; // Early out. 699 Tmp2 = ComputeNumSignBits(U->getOperand(2), TD, Depth+1); 700 return std::min(Tmp, Tmp2); 701 702 case Instruction::Add: 703 // Add can have at most one carry bit. Thus we know that the output 704 // is, at worst, one more bit than the inputs. 705 Tmp = ComputeNumSignBits(U->getOperand(0), TD, Depth+1); 706 if (Tmp == 1) return 1; // Early out. 707 708 // Special case decrementing a value (ADD X, -1): 709 if (ConstantInt *CRHS = dyn_cast<ConstantInt>(U->getOperand(1))) 710 if (CRHS->isAllOnesValue()) { 711 APInt KnownZero(TyBits, 0), KnownOne(TyBits, 0); 712 APInt Mask = APInt::getAllOnesValue(TyBits); 713 ComputeMaskedBits(U->getOperand(0), Mask, KnownZero, KnownOne, TD, 714 Depth+1); 715 716 // If the input is known to be 0 or 1, the output is 0/-1, which is all 717 // sign bits set. 718 if ((KnownZero | APInt(TyBits, 1)) == Mask) 719 return TyBits; 720 721 // If we are subtracting one from a positive number, there is no carry 722 // out of the result. 723 if (KnownZero.isNegative()) 724 return Tmp; 725 } 726 727 Tmp2 = ComputeNumSignBits(U->getOperand(1), TD, Depth+1); 728 if (Tmp2 == 1) return 1; 729 return std::min(Tmp, Tmp2)-1; 730 break; 731 732 case Instruction::Sub: 733 Tmp2 = ComputeNumSignBits(U->getOperand(1), TD, Depth+1); 734 if (Tmp2 == 1) return 1; 735 736 // Handle NEG. 737 if (ConstantInt *CLHS = dyn_cast<ConstantInt>(U->getOperand(0))) 738 if (CLHS->isNullValue()) { 739 APInt KnownZero(TyBits, 0), KnownOne(TyBits, 0); 740 APInt Mask = APInt::getAllOnesValue(TyBits); 741 ComputeMaskedBits(U->getOperand(1), Mask, KnownZero, KnownOne, 742 TD, Depth+1); 743 // If the input is known to be 0 or 1, the output is 0/-1, which is all 744 // sign bits set. 745 if ((KnownZero | APInt(TyBits, 1)) == Mask) 746 return TyBits; 747 748 // If the input is known to be positive (the sign bit is known clear), 749 // the output of the NEG has the same number of sign bits as the input. 750 if (KnownZero.isNegative()) 751 return Tmp2; 752 753 // Otherwise, we treat this like a SUB. 754 } 755 756 // Sub can have at most one carry bit. Thus we know that the output 757 // is, at worst, one more bit than the inputs. 758 Tmp = ComputeNumSignBits(U->getOperand(0), TD, Depth+1); 759 if (Tmp == 1) return 1; // Early out. 760 return std::min(Tmp, Tmp2)-1; 761 break; 762 case Instruction::Trunc: 763 // FIXME: it's tricky to do anything useful for this, but it is an important 764 // case for targets like X86. 765 break; 766 } 767 768 // Finally, if we can prove that the top bits of the result are 0's or 1's, 769 // use this information. 770 APInt KnownZero(TyBits, 0), KnownOne(TyBits, 0); 771 APInt Mask = APInt::getAllOnesValue(TyBits); 772 ComputeMaskedBits(V, Mask, KnownZero, KnownOne, TD, Depth); 773 774 if (KnownZero.isNegative()) { // sign bit is 0 775 Mask = KnownZero; 776 } else if (KnownOne.isNegative()) { // sign bit is 1; 777 Mask = KnownOne; 778 } else { 779 // Nothing known. 780 return FirstAnswer; 781 } 782 783 // Okay, we know that the sign bit in Mask is set. Use CLZ to determine 784 // the number of identical bits in the top of the input value. 785 Mask = ~Mask; 786 Mask <<= Mask.getBitWidth()-TyBits; 787 // Return # leading zeros. We use 'min' here in case Val was zero before 788 // shifting. We don't want to return '64' as for an i32 "0". 789 return std::max(FirstAnswer, std::min(TyBits, Mask.countLeadingZeros())); 790 } 791 792 /// ComputeMultiple - This function computes the integer multiple of Base that 793 /// equals V. If successful, it returns true and returns the multiple in 794 /// Multiple. If unsuccessful, it returns false. It looks 795 /// through SExt instructions only if LookThroughSExt is true. 796 bool llvm::ComputeMultiple(Value *V, unsigned Base, Value *&Multiple, 797 bool LookThroughSExt, unsigned Depth) { 798 const unsigned MaxDepth = 6; 799 800 assert(V && "No Value?"); 801 assert(Depth <= MaxDepth && "Limit Search Depth"); 802 assert(V->getType()->isInteger() && "Not integer or pointer type!"); 803 804 const Type *T = V->getType(); 805 806 ConstantInt *CI = dyn_cast<ConstantInt>(V); 807 808 if (Base == 0) 809 return false; 810 811 if (Base == 1) { 812 Multiple = V; 813 return true; 814 } 815 816 ConstantExpr *CO = dyn_cast<ConstantExpr>(V); 817 Constant *BaseVal = ConstantInt::get(T, Base); 818 if (CO && CO == BaseVal) { 819 // Multiple is 1. 820 Multiple = ConstantInt::get(T, 1); 821 return true; 822 } 823 824 if (CI && CI->getZExtValue() % Base == 0) { 825 Multiple = ConstantInt::get(T, CI->getZExtValue() / Base); 826 return true; 827 } 828 829 if (Depth == MaxDepth) return false; // Limit search depth. 830 831 Operator *I = dyn_cast<Operator>(V); 832 if (!I) return false; 833 834 switch (I->getOpcode()) { 835 default: break; 836 case Instruction::SExt: 837 if (!LookThroughSExt) return false; 838 // otherwise fall through to ZExt 839 case Instruction::ZExt: 840 return ComputeMultiple(I->getOperand(0), Base, Multiple, 841 LookThroughSExt, Depth+1); 842 case Instruction::Shl: 843 case Instruction::Mul: { 844 Value *Op0 = I->getOperand(0); 845 Value *Op1 = I->getOperand(1); 846 847 if (I->getOpcode() == Instruction::Shl) { 848 ConstantInt *Op1CI = dyn_cast<ConstantInt>(Op1); 849 if (!Op1CI) return false; 850 // Turn Op0 << Op1 into Op0 * 2^Op1 851 APInt Op1Int = Op1CI->getValue(); 852 uint64_t BitToSet = Op1Int.getLimitedValue(Op1Int.getBitWidth() - 1); 853 Op1 = ConstantInt::get(V->getContext(), 854 APInt(Op1Int.getBitWidth(), 0).set(BitToSet)); 855 } 856 857 Value *Mul0 = NULL; 858 Value *Mul1 = NULL; 859 bool M0 = ComputeMultiple(Op0, Base, Mul0, 860 LookThroughSExt, Depth+1); 861 bool M1 = ComputeMultiple(Op1, Base, Mul1, 862 LookThroughSExt, Depth+1); 863 864 if (M0) { 865 if (isa<Constant>(Op1) && isa<Constant>(Mul0)) { 866 // V == Base * (Mul0 * Op1), so return (Mul0 * Op1) 867 Multiple = ConstantExpr::getMul(cast<Constant>(Mul0), 868 cast<Constant>(Op1)); 869 return true; 870 } 871 872 if (ConstantInt *Mul0CI = dyn_cast<ConstantInt>(Mul0)) 873 if (Mul0CI->getValue() == 1) { 874 // V == Base * Op1, so return Op1 875 Multiple = Op1; 876 return true; 877 } 878 } 879 880 if (M1) { 881 if (isa<Constant>(Op0) && isa<Constant>(Mul1)) { 882 // V == Base * (Mul1 * Op0), so return (Mul1 * Op0) 883 Multiple = ConstantExpr::getMul(cast<Constant>(Mul1), 884 cast<Constant>(Op0)); 885 return true; 886 } 887 888 if (ConstantInt *Mul1CI = dyn_cast<ConstantInt>(Mul1)) 889 if (Mul1CI->getValue() == 1) { 890 // V == Base * Op0, so return Op0 891 Multiple = Op0; 892 return true; 893 } 894 } 895 } 896 } 897 898 // We could not determine if V is a multiple of Base. 899 return false; 900 } 901 902 /// CannotBeNegativeZero - Return true if we can prove that the specified FP 903 /// value is never equal to -0.0. 904 /// 905 /// NOTE: this function will need to be revisited when we support non-default 906 /// rounding modes! 907 /// 908 bool llvm::CannotBeNegativeZero(const Value *V, unsigned Depth) { 909 if (const ConstantFP *CFP = dyn_cast<ConstantFP>(V)) 910 return !CFP->getValueAPF().isNegZero(); 911 912 if (Depth == 6) 913 return 1; // Limit search depth. 914 915 const Operator *I = dyn_cast<Operator>(V); 916 if (I == 0) return false; 917 918 // (add x, 0.0) is guaranteed to return +0.0, not -0.0. 919 if (I->getOpcode() == Instruction::FAdd && 920 isa<ConstantFP>(I->getOperand(1)) && 921 cast<ConstantFP>(I->getOperand(1))->isNullValue()) 922 return true; 923 924 // sitofp and uitofp turn into +0.0 for zero. 925 if (isa<SIToFPInst>(I) || isa<UIToFPInst>(I)) 926 return true; 927 928 if (const IntrinsicInst *II = dyn_cast<IntrinsicInst>(I)) 929 // sqrt(-0.0) = -0.0, no other negative results are possible. 930 if (II->getIntrinsicID() == Intrinsic::sqrt) 931 return CannotBeNegativeZero(II->getOperand(1), Depth+1); 932 933 if (const CallInst *CI = dyn_cast<CallInst>(I)) 934 if (const Function *F = CI->getCalledFunction()) { 935 if (F->isDeclaration()) { 936 // abs(x) != -0.0 937 if (F->getName() == "abs") return true; 938 // fabs[lf](x) != -0.0 939 if (F->getName() == "fabs") return true; 940 if (F->getName() == "fabsf") return true; 941 if (F->getName() == "fabsl") return true; 942 if (F->getName() == "sqrt" || F->getName() == "sqrtf" || 943 F->getName() == "sqrtl") 944 return CannotBeNegativeZero(CI->getOperand(1), Depth+1); 945 } 946 } 947 948 return false; 949 } 950 951 952 /// GetLinearExpression - Analyze the specified value as a linear expression: 953 /// "A*V + B", where A and B are constant integers. Return the scale and offset 954 /// values as APInts and return V as a Value*. The incoming Value is known to 955 /// have IntegerType. Note that this looks through extends, so the high bits 956 /// may not be represented in the result. 957 static Value *GetLinearExpression(Value *V, APInt &Scale, APInt &Offset, 958 const TargetData *TD, unsigned Depth) { 959 assert(isa<IntegerType>(V->getType()) && "Not an integer value"); 960 961 // Limit our recursion depth. 962 if (Depth == 6) { 963 Scale = 1; 964 Offset = 0; 965 return V; 966 } 967 968 if (BinaryOperator *BOp = dyn_cast<BinaryOperator>(V)) { 969 if (ConstantInt *RHSC = dyn_cast<ConstantInt>(BOp->getOperand(1))) { 970 switch (BOp->getOpcode()) { 971 default: break; 972 case Instruction::Or: 973 // X|C == X+C if all the bits in C are unset in X. Otherwise we can't 974 // analyze it. 975 if (!MaskedValueIsZero(BOp->getOperand(0), RHSC->getValue(), TD)) 976 break; 977 // FALL THROUGH. 978 case Instruction::Add: 979 V = GetLinearExpression(BOp->getOperand(0), Scale, Offset, TD, Depth+1); 980 Offset += RHSC->getValue(); 981 return V; 982 case Instruction::Mul: 983 V = GetLinearExpression(BOp->getOperand(0), Scale, Offset, TD, Depth+1); 984 Offset *= RHSC->getValue(); 985 Scale *= RHSC->getValue(); 986 return V; 987 case Instruction::Shl: 988 V = GetLinearExpression(BOp->getOperand(0), Scale, Offset, TD, Depth+1); 989 Offset <<= RHSC->getValue().getLimitedValue(); 990 Scale <<= RHSC->getValue().getLimitedValue(); 991 return V; 992 } 993 } 994 } 995 996 // Since clients don't care about the high bits of the value, just scales and 997 // offsets, we can look through extensions. 998 if (isa<SExtInst>(V) || isa<ZExtInst>(V)) { 999 Value *CastOp = cast<CastInst>(V)->getOperand(0); 1000 unsigned OldWidth = Scale.getBitWidth(); 1001 unsigned SmallWidth = CastOp->getType()->getPrimitiveSizeInBits(); 1002 Scale.trunc(SmallWidth); 1003 Offset.trunc(SmallWidth); 1004 Value *Result = GetLinearExpression(CastOp, Scale, Offset, TD, Depth+1); 1005 Scale.zext(OldWidth); 1006 Offset.zext(OldWidth); 1007 return Result; 1008 } 1009 1010 Scale = 1; 1011 Offset = 0; 1012 return V; 1013 } 1014 1015 /// DecomposeGEPExpression - If V is a symbolic pointer expression, decompose it 1016 /// into a base pointer with a constant offset and a number of scaled symbolic 1017 /// offsets. 1018 /// 1019 /// The scaled symbolic offsets (represented by pairs of a Value* and a scale in 1020 /// the VarIndices vector) are Value*'s that are known to be scaled by the 1021 /// specified amount, but which may have other unrepresented high bits. As such, 1022 /// the gep cannot necessarily be reconstructed from its decomposed form. 1023 /// 1024 /// When TargetData is around, this function is capable of analyzing everything 1025 /// that Value::getUnderlyingObject() can look through. When not, it just looks 1026 /// through pointer casts. 1027 /// 1028 const Value *llvm::DecomposeGEPExpression(const Value *V, int64_t &BaseOffs, 1029 SmallVectorImpl<std::pair<const Value*, int64_t> > &VarIndices, 1030 const TargetData *TD) { 1031 // Limit recursion depth to limit compile time in crazy cases. 1032 unsigned MaxLookup = 6; 1033 1034 BaseOffs = 0; 1035 do { 1036 // See if this is a bitcast or GEP. 1037 const Operator *Op = dyn_cast<Operator>(V); 1038 if (Op == 0) { 1039 // The only non-operator case we can handle are GlobalAliases. 1040 if (const GlobalAlias *GA = dyn_cast<GlobalAlias>(V)) { 1041 if (!GA->mayBeOverridden()) { 1042 V = GA->getAliasee(); 1043 continue; 1044 } 1045 } 1046 return V; 1047 } 1048 1049 if (Op->getOpcode() == Instruction::BitCast) { 1050 V = Op->getOperand(0); 1051 continue; 1052 } 1053 1054 const GEPOperator *GEPOp = dyn_cast<GEPOperator>(Op); 1055 if (GEPOp == 0) 1056 return V; 1057 1058 // Don't attempt to analyze GEPs over unsized objects. 1059 if (!cast<PointerType>(GEPOp->getOperand(0)->getType()) 1060 ->getElementType()->isSized()) 1061 return V; 1062 1063 // If we are lacking TargetData information, we can't compute the offets of 1064 // elements computed by GEPs. However, we can handle bitcast equivalent 1065 // GEPs. 1066 if (!TD) { 1067 if (!GEPOp->hasAllZeroIndices()) 1068 return V; 1069 V = GEPOp->getOperand(0); 1070 continue; 1071 } 1072 1073 // Walk the indices of the GEP, accumulating them into BaseOff/VarIndices. 1074 gep_type_iterator GTI = gep_type_begin(GEPOp); 1075 for (User::const_op_iterator I = GEPOp->op_begin()+1, 1076 E = GEPOp->op_end(); I != E; ++I) { 1077 Value *Index = *I; 1078 // Compute the (potentially symbolic) offset in bytes for this index. 1079 if (const StructType *STy = dyn_cast<StructType>(*GTI++)) { 1080 // For a struct, add the member offset. 1081 unsigned FieldNo = cast<ConstantInt>(Index)->getZExtValue(); 1082 if (FieldNo == 0) continue; 1083 1084 BaseOffs += TD->getStructLayout(STy)->getElementOffset(FieldNo); 1085 continue; 1086 } 1087 1088 // For an array/pointer, add the element offset, explicitly scaled. 1089 if (ConstantInt *CIdx = dyn_cast<ConstantInt>(Index)) { 1090 if (CIdx->isZero()) continue; 1091 BaseOffs += TD->getTypeAllocSize(*GTI)*CIdx->getSExtValue(); 1092 continue; 1093 } 1094 1095 uint64_t Scale = TD->getTypeAllocSize(*GTI); 1096 1097 // Use GetLinearExpression to decompose the index into a C1*V+C2 form. 1098 unsigned Width = cast<IntegerType>(Index->getType())->getBitWidth(); 1099 APInt IndexScale(Width, 0), IndexOffset(Width, 0); 1100 Index = GetLinearExpression(Index, IndexScale, IndexOffset, TD, 0); 1101 1102 // The GEP index scale ("Scale") scales C1*V+C2, yielding (C1*V+C2)*Scale. 1103 // This gives us an aggregate computation of (C1*Scale)*V + C2*Scale. 1104 BaseOffs += IndexOffset.getZExtValue()*Scale; 1105 Scale *= IndexScale.getZExtValue(); 1106 1107 1108 // If we already had an occurrance of this index variable, merge this 1109 // scale into it. For example, we want to handle: 1110 // A[x][x] -> x*16 + x*4 -> x*20 1111 // This also ensures that 'x' only appears in the index list once. 1112 for (unsigned i = 0, e = VarIndices.size(); i != e; ++i) { 1113 if (VarIndices[i].first == Index) { 1114 Scale += VarIndices[i].second; 1115 VarIndices.erase(VarIndices.begin()+i); 1116 break; 1117 } 1118 } 1119 1120 // Make sure that we have a scale that makes sense for this target's 1121 // pointer size. 1122 if (unsigned ShiftBits = 64-TD->getPointerSizeInBits()) { 1123 Scale <<= ShiftBits; 1124 Scale >>= ShiftBits; 1125 } 1126 1127 if (Scale) 1128 VarIndices.push_back(std::make_pair(Index, Scale)); 1129 } 1130 1131 // Analyze the base pointer next. 1132 V = GEPOp->getOperand(0); 1133 } while (--MaxLookup); 1134 1135 // If the chain of expressions is too deep, just return early. 1136 return V; 1137 } 1138 1139 1140 // This is the recursive version of BuildSubAggregate. It takes a few different 1141 // arguments. Idxs is the index within the nested struct From that we are 1142 // looking at now (which is of type IndexedType). IdxSkip is the number of 1143 // indices from Idxs that should be left out when inserting into the resulting 1144 // struct. To is the result struct built so far, new insertvalue instructions 1145 // build on that. 1146 static Value *BuildSubAggregate(Value *From, Value* To, const Type *IndexedType, 1147 SmallVector<unsigned, 10> &Idxs, 1148 unsigned IdxSkip, 1149 Instruction *InsertBefore) { 1150 const llvm::StructType *STy = llvm::dyn_cast<llvm::StructType>(IndexedType); 1151 if (STy) { 1152 // Save the original To argument so we can modify it 1153 Value *OrigTo = To; 1154 // General case, the type indexed by Idxs is a struct 1155 for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i) { 1156 // Process each struct element recursively 1157 Idxs.push_back(i); 1158 Value *PrevTo = To; 1159 To = BuildSubAggregate(From, To, STy->getElementType(i), Idxs, IdxSkip, 1160 InsertBefore); 1161 Idxs.pop_back(); 1162 if (!To) { 1163 // Couldn't find any inserted value for this index? Cleanup 1164 while (PrevTo != OrigTo) { 1165 InsertValueInst* Del = cast<InsertValueInst>(PrevTo); 1166 PrevTo = Del->getAggregateOperand(); 1167 Del->eraseFromParent(); 1168 } 1169 // Stop processing elements 1170 break; 1171 } 1172 } 1173 // If we succesfully found a value for each of our subaggregates 1174 if (To) 1175 return To; 1176 } 1177 // Base case, the type indexed by SourceIdxs is not a struct, or not all of 1178 // the struct's elements had a value that was inserted directly. In the latter 1179 // case, perhaps we can't determine each of the subelements individually, but 1180 // we might be able to find the complete struct somewhere. 1181 1182 // Find the value that is at that particular spot 1183 Value *V = FindInsertedValue(From, Idxs.begin(), Idxs.end()); 1184 1185 if (!V) 1186 return NULL; 1187 1188 // Insert the value in the new (sub) aggregrate 1189 return llvm::InsertValueInst::Create(To, V, Idxs.begin() + IdxSkip, 1190 Idxs.end(), "tmp", InsertBefore); 1191 } 1192 1193 // This helper takes a nested struct and extracts a part of it (which is again a 1194 // struct) into a new value. For example, given the struct: 1195 // { a, { b, { c, d }, e } } 1196 // and the indices "1, 1" this returns 1197 // { c, d }. 1198 // 1199 // It does this by inserting an insertvalue for each element in the resulting 1200 // struct, as opposed to just inserting a single struct. This will only work if 1201 // each of the elements of the substruct are known (ie, inserted into From by an 1202 // insertvalue instruction somewhere). 1203 // 1204 // All inserted insertvalue instructions are inserted before InsertBefore 1205 static Value *BuildSubAggregate(Value *From, const unsigned *idx_begin, 1206 const unsigned *idx_end, 1207 Instruction *InsertBefore) { 1208 assert(InsertBefore && "Must have someplace to insert!"); 1209 const Type *IndexedType = ExtractValueInst::getIndexedType(From->getType(), 1210 idx_begin, 1211 idx_end); 1212 Value *To = UndefValue::get(IndexedType); 1213 SmallVector<unsigned, 10> Idxs(idx_begin, idx_end); 1214 unsigned IdxSkip = Idxs.size(); 1215 1216 return BuildSubAggregate(From, To, IndexedType, Idxs, IdxSkip, InsertBefore); 1217 } 1218 1219 /// FindInsertedValue - Given an aggregrate and an sequence of indices, see if 1220 /// the scalar value indexed is already around as a register, for example if it 1221 /// were inserted directly into the aggregrate. 1222 /// 1223 /// If InsertBefore is not null, this function will duplicate (modified) 1224 /// insertvalues when a part of a nested struct is extracted. 1225 Value *llvm::FindInsertedValue(Value *V, const unsigned *idx_begin, 1226 const unsigned *idx_end, Instruction *InsertBefore) { 1227 // Nothing to index? Just return V then (this is useful at the end of our 1228 // recursion) 1229 if (idx_begin == idx_end) 1230 return V; 1231 // We have indices, so V should have an indexable type 1232 assert((isa<StructType>(V->getType()) || isa<ArrayType>(V->getType())) 1233 && "Not looking at a struct or array?"); 1234 assert(ExtractValueInst::getIndexedType(V->getType(), idx_begin, idx_end) 1235 && "Invalid indices for type?"); 1236 const CompositeType *PTy = cast<CompositeType>(V->getType()); 1237 1238 if (isa<UndefValue>(V)) 1239 return UndefValue::get(ExtractValueInst::getIndexedType(PTy, 1240 idx_begin, 1241 idx_end)); 1242 else if (isa<ConstantAggregateZero>(V)) 1243 return Constant::getNullValue(ExtractValueInst::getIndexedType(PTy, 1244 idx_begin, 1245 idx_end)); 1246 else if (Constant *C = dyn_cast<Constant>(V)) { 1247 if (isa<ConstantArray>(C) || isa<ConstantStruct>(C)) 1248 // Recursively process this constant 1249 return FindInsertedValue(C->getOperand(*idx_begin), idx_begin + 1, 1250 idx_end, InsertBefore); 1251 } else if (InsertValueInst *I = dyn_cast<InsertValueInst>(V)) { 1252 // Loop the indices for the insertvalue instruction in parallel with the 1253 // requested indices 1254 const unsigned *req_idx = idx_begin; 1255 for (const unsigned *i = I->idx_begin(), *e = I->idx_end(); 1256 i != e; ++i, ++req_idx) { 1257 if (req_idx == idx_end) { 1258 if (InsertBefore) 1259 // The requested index identifies a part of a nested aggregate. Handle 1260 // this specially. For example, 1261 // %A = insertvalue { i32, {i32, i32 } } undef, i32 10, 1, 0 1262 // %B = insertvalue { i32, {i32, i32 } } %A, i32 11, 1, 1 1263 // %C = extractvalue {i32, { i32, i32 } } %B, 1 1264 // This can be changed into 1265 // %A = insertvalue {i32, i32 } undef, i32 10, 0 1266 // %C = insertvalue {i32, i32 } %A, i32 11, 1 1267 // which allows the unused 0,0 element from the nested struct to be 1268 // removed. 1269 return BuildSubAggregate(V, idx_begin, req_idx, InsertBefore); 1270 else 1271 // We can't handle this without inserting insertvalues 1272 return 0; 1273 } 1274 1275 // This insert value inserts something else than what we are looking for. 1276 // See if the (aggregrate) value inserted into has the value we are 1277 // looking for, then. 1278 if (*req_idx != *i) 1279 return FindInsertedValue(I->getAggregateOperand(), idx_begin, idx_end, 1280 InsertBefore); 1281 } 1282 // If we end up here, the indices of the insertvalue match with those 1283 // requested (though possibly only partially). Now we recursively look at 1284 // the inserted value, passing any remaining indices. 1285 return FindInsertedValue(I->getInsertedValueOperand(), req_idx, idx_end, 1286 InsertBefore); 1287 } else if (ExtractValueInst *I = dyn_cast<ExtractValueInst>(V)) { 1288 // If we're extracting a value from an aggregrate that was extracted from 1289 // something else, we can extract from that something else directly instead. 1290 // However, we will need to chain I's indices with the requested indices. 1291 1292 // Calculate the number of indices required 1293 unsigned size = I->getNumIndices() + (idx_end - idx_begin); 1294 // Allocate some space to put the new indices in 1295 SmallVector<unsigned, 5> Idxs; 1296 Idxs.reserve(size); 1297 // Add indices from the extract value instruction 1298 for (const unsigned *i = I->idx_begin(), *e = I->idx_end(); 1299 i != e; ++i) 1300 Idxs.push_back(*i); 1301 1302 // Add requested indices 1303 for (const unsigned *i = idx_begin, *e = idx_end; i != e; ++i) 1304 Idxs.push_back(*i); 1305 1306 assert(Idxs.size() == size 1307 && "Number of indices added not correct?"); 1308 1309 return FindInsertedValue(I->getAggregateOperand(), Idxs.begin(), Idxs.end(), 1310 InsertBefore); 1311 } 1312 // Otherwise, we don't know (such as, extracting from a function return value 1313 // or load instruction) 1314 return 0; 1315 } 1316 1317 /// GetConstantStringInfo - This function computes the length of a 1318 /// null-terminated C string pointed to by V. If successful, it returns true 1319 /// and returns the string in Str. If unsuccessful, it returns false. 1320 bool llvm::GetConstantStringInfo(Value *V, std::string &Str, uint64_t Offset, 1321 bool StopAtNul) { 1322 // If V is NULL then return false; 1323 if (V == NULL) return false; 1324 1325 // Look through bitcast instructions. 1326 if (BitCastInst *BCI = dyn_cast<BitCastInst>(V)) 1327 return GetConstantStringInfo(BCI->getOperand(0), Str, Offset, StopAtNul); 1328 1329 // If the value is not a GEP instruction nor a constant expression with a 1330 // GEP instruction, then return false because ConstantArray can't occur 1331 // any other way 1332 User *GEP = 0; 1333 if (GetElementPtrInst *GEPI = dyn_cast<GetElementPtrInst>(V)) { 1334 GEP = GEPI; 1335 } else if (ConstantExpr *CE = dyn_cast<ConstantExpr>(V)) { 1336 if (CE->getOpcode() == Instruction::BitCast) 1337 return GetConstantStringInfo(CE->getOperand(0), Str, Offset, StopAtNul); 1338 if (CE->getOpcode() != Instruction::GetElementPtr) 1339 return false; 1340 GEP = CE; 1341 } 1342 1343 if (GEP) { 1344 // Make sure the GEP has exactly three arguments. 1345 if (GEP->getNumOperands() != 3) 1346 return false; 1347 1348 // Make sure the index-ee is a pointer to array of i8. 1349 const PointerType *PT = cast<PointerType>(GEP->getOperand(0)->getType()); 1350 const ArrayType *AT = dyn_cast<ArrayType>(PT->getElementType()); 1351 if (AT == 0 || AT->getElementType() != Type::getInt8Ty(V->getContext())) 1352 return false; 1353 1354 // Check to make sure that the first operand of the GEP is an integer and 1355 // has value 0 so that we are sure we're indexing into the initializer. 1356 ConstantInt *FirstIdx = dyn_cast<ConstantInt>(GEP->getOperand(1)); 1357 if (FirstIdx == 0 || !FirstIdx->isZero()) 1358 return false; 1359 1360 // If the second index isn't a ConstantInt, then this is a variable index 1361 // into the array. If this occurs, we can't say anything meaningful about 1362 // the string. 1363 uint64_t StartIdx = 0; 1364 if (ConstantInt *CI = dyn_cast<ConstantInt>(GEP->getOperand(2))) 1365 StartIdx = CI->getZExtValue(); 1366 else 1367 return false; 1368 return GetConstantStringInfo(GEP->getOperand(0), Str, StartIdx+Offset, 1369 StopAtNul); 1370 } 1371 1372 if (MDString *MDStr = dyn_cast<MDString>(V)) { 1373 Str = MDStr->getString(); 1374 return true; 1375 } 1376 1377 // The GEP instruction, constant or instruction, must reference a global 1378 // variable that is a constant and is initialized. The referenced constant 1379 // initializer is the array that we'll use for optimization. 1380 GlobalVariable* GV = dyn_cast<GlobalVariable>(V); 1381 if (!GV || !GV->isConstant() || !GV->hasDefinitiveInitializer()) 1382 return false; 1383 Constant *GlobalInit = GV->getInitializer(); 1384 1385 // Handle the ConstantAggregateZero case 1386 if (isa<ConstantAggregateZero>(GlobalInit)) { 1387 // This is a degenerate case. The initializer is constant zero so the 1388 // length of the string must be zero. 1389 Str.clear(); 1390 return true; 1391 } 1392 1393 // Must be a Constant Array 1394 ConstantArray *Array = dyn_cast<ConstantArray>(GlobalInit); 1395 if (Array == 0 || 1396 Array->getType()->getElementType() != Type::getInt8Ty(V->getContext())) 1397 return false; 1398 1399 // Get the number of elements in the array 1400 uint64_t NumElts = Array->getType()->getNumElements(); 1401 1402 if (Offset > NumElts) 1403 return false; 1404 1405 // Traverse the constant array from 'Offset' which is the place the GEP refers 1406 // to in the array. 1407 Str.reserve(NumElts-Offset); 1408 for (unsigned i = Offset; i != NumElts; ++i) { 1409 Constant *Elt = Array->getOperand(i); 1410 ConstantInt *CI = dyn_cast<ConstantInt>(Elt); 1411 if (!CI) // This array isn't suitable, non-int initializer. 1412 return false; 1413 if (StopAtNul && CI->isZero()) 1414 return true; // we found end of string, success! 1415 Str += (char)CI->getZExtValue(); 1416 } 1417 1418 // The array isn't null terminated, but maybe this is a memcpy, not a strcpy. 1419 return true; 1420 } 1421