LLVM API Documentation
00001 //===- InstCombineCompares.cpp --------------------------------------------===// 00002 // 00003 // The LLVM Compiler Infrastructure 00004 // 00005 // This file is distributed under the University of Illinois Open Source 00006 // License. See LICENSE.TXT for details. 00007 // 00008 //===----------------------------------------------------------------------===// 00009 // 00010 // This file implements the visitICmp and visitFCmp functions. 00011 // 00012 //===----------------------------------------------------------------------===// 00013 00014 #include "InstCombine.h" 00015 #include "llvm/Analysis/ConstantFolding.h" 00016 #include "llvm/Analysis/InstructionSimplify.h" 00017 #include "llvm/Analysis/MemoryBuiltins.h" 00018 #include "llvm/IR/ConstantRange.h" 00019 #include "llvm/IR/DataLayout.h" 00020 #include "llvm/IR/GetElementPtrTypeIterator.h" 00021 #include "llvm/IR/IntrinsicInst.h" 00022 #include "llvm/IR/PatternMatch.h" 00023 #include "llvm/Target/TargetLibraryInfo.h" 00024 using namespace llvm; 00025 using namespace PatternMatch; 00026 00027 #define DEBUG_TYPE "instcombine" 00028 00029 static ConstantInt *getOne(Constant *C) { 00030 return ConstantInt::get(cast<IntegerType>(C->getType()), 1); 00031 } 00032 00033 static ConstantInt *ExtractElement(Constant *V, Constant *Idx) { 00034 return cast<ConstantInt>(ConstantExpr::getExtractElement(V, Idx)); 00035 } 00036 00037 static bool HasAddOverflow(ConstantInt *Result, 00038 ConstantInt *In1, ConstantInt *In2, 00039 bool IsSigned) { 00040 if (!IsSigned) 00041 return Result->getValue().ult(In1->getValue()); 00042 00043 if (In2->isNegative()) 00044 return Result->getValue().sgt(In1->getValue()); 00045 return Result->getValue().slt(In1->getValue()); 00046 } 00047 00048 /// AddWithOverflow - Compute Result = In1+In2, returning true if the result 00049 /// overflowed for this type. 00050 static bool AddWithOverflow(Constant *&Result, Constant *In1, 00051 Constant *In2, bool IsSigned = false) { 00052 Result = ConstantExpr::getAdd(In1, In2); 00053 00054 if (VectorType *VTy = dyn_cast<VectorType>(In1->getType())) { 00055 for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) { 00056 Constant *Idx = ConstantInt::get(Type::getInt32Ty(In1->getContext()), i); 00057 if (HasAddOverflow(ExtractElement(Result, Idx), 00058 ExtractElement(In1, Idx), 00059 ExtractElement(In2, Idx), 00060 IsSigned)) 00061 return true; 00062 } 00063 return false; 00064 } 00065 00066 return HasAddOverflow(cast<ConstantInt>(Result), 00067 cast<ConstantInt>(In1), cast<ConstantInt>(In2), 00068 IsSigned); 00069 } 00070 00071 static bool HasSubOverflow(ConstantInt *Result, 00072 ConstantInt *In1, ConstantInt *In2, 00073 bool IsSigned) { 00074 if (!IsSigned) 00075 return Result->getValue().ugt(In1->getValue()); 00076 00077 if (In2->isNegative()) 00078 return Result->getValue().slt(In1->getValue()); 00079 00080 return Result->getValue().sgt(In1->getValue()); 00081 } 00082 00083 /// SubWithOverflow - Compute Result = In1-In2, returning true if the result 00084 /// overflowed for this type. 00085 static bool SubWithOverflow(Constant *&Result, Constant *In1, 00086 Constant *In2, bool IsSigned = false) { 00087 Result = ConstantExpr::getSub(In1, In2); 00088 00089 if (VectorType *VTy = dyn_cast<VectorType>(In1->getType())) { 00090 for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) { 00091 Constant *Idx = ConstantInt::get(Type::getInt32Ty(In1->getContext()), i); 00092 if (HasSubOverflow(ExtractElement(Result, Idx), 00093 ExtractElement(In1, Idx), 00094 ExtractElement(In2, Idx), 00095 IsSigned)) 00096 return true; 00097 } 00098 return false; 00099 } 00100 00101 return HasSubOverflow(cast<ConstantInt>(Result), 00102 cast<ConstantInt>(In1), cast<ConstantInt>(In2), 00103 IsSigned); 00104 } 00105 00106 /// isSignBitCheck - Given an exploded icmp instruction, return true if the 00107 /// comparison only checks the sign bit. If it only checks the sign bit, set 00108 /// TrueIfSigned if the result of the comparison is true when the input value is 00109 /// signed. 00110 static bool isSignBitCheck(ICmpInst::Predicate pred, ConstantInt *RHS, 00111 bool &TrueIfSigned) { 00112 switch (pred) { 00113 case ICmpInst::ICMP_SLT: // True if LHS s< 0 00114 TrueIfSigned = true; 00115 return RHS->isZero(); 00116 case ICmpInst::ICMP_SLE: // True if LHS s<= RHS and RHS == -1 00117 TrueIfSigned = true; 00118 return RHS->isAllOnesValue(); 00119 case ICmpInst::ICMP_SGT: // True if LHS s> -1 00120 TrueIfSigned = false; 00121 return RHS->isAllOnesValue(); 00122 case ICmpInst::ICMP_UGT: 00123 // True if LHS u> RHS and RHS == high-bit-mask - 1 00124 TrueIfSigned = true; 00125 return RHS->isMaxValue(true); 00126 case ICmpInst::ICMP_UGE: 00127 // True if LHS u>= RHS and RHS == high-bit-mask (2^7, 2^15, 2^31, etc) 00128 TrueIfSigned = true; 00129 return RHS->getValue().isSignBit(); 00130 default: 00131 return false; 00132 } 00133 } 00134 00135 /// Returns true if the exploded icmp can be expressed as a signed comparison 00136 /// to zero and updates the predicate accordingly. 00137 /// The signedness of the comparison is preserved. 00138 static bool isSignTest(ICmpInst::Predicate &pred, const ConstantInt *RHS) { 00139 if (!ICmpInst::isSigned(pred)) 00140 return false; 00141 00142 if (RHS->isZero()) 00143 return ICmpInst::isRelational(pred); 00144 00145 if (RHS->isOne()) { 00146 if (pred == ICmpInst::ICMP_SLT) { 00147 pred = ICmpInst::ICMP_SLE; 00148 return true; 00149 } 00150 } else if (RHS->isAllOnesValue()) { 00151 if (pred == ICmpInst::ICMP_SGT) { 00152 pred = ICmpInst::ICMP_SGE; 00153 return true; 00154 } 00155 } 00156 00157 return false; 00158 } 00159 00160 // isHighOnes - Return true if the constant is of the form 1+0+. 00161 // This is the same as lowones(~X). 00162 static bool isHighOnes(const ConstantInt *CI) { 00163 return (~CI->getValue() + 1).isPowerOf2(); 00164 } 00165 00166 /// ComputeSignedMinMaxValuesFromKnownBits - Given a signed integer type and a 00167 /// set of known zero and one bits, compute the maximum and minimum values that 00168 /// could have the specified known zero and known one bits, returning them in 00169 /// min/max. 00170 static void ComputeSignedMinMaxValuesFromKnownBits(const APInt& KnownZero, 00171 const APInt& KnownOne, 00172 APInt& Min, APInt& Max) { 00173 assert(KnownZero.getBitWidth() == KnownOne.getBitWidth() && 00174 KnownZero.getBitWidth() == Min.getBitWidth() && 00175 KnownZero.getBitWidth() == Max.getBitWidth() && 00176 "KnownZero, KnownOne and Min, Max must have equal bitwidth."); 00177 APInt UnknownBits = ~(KnownZero|KnownOne); 00178 00179 // The minimum value is when all unknown bits are zeros, EXCEPT for the sign 00180 // bit if it is unknown. 00181 Min = KnownOne; 00182 Max = KnownOne|UnknownBits; 00183 00184 if (UnknownBits.isNegative()) { // Sign bit is unknown 00185 Min.setBit(Min.getBitWidth()-1); 00186 Max.clearBit(Max.getBitWidth()-1); 00187 } 00188 } 00189 00190 // ComputeUnsignedMinMaxValuesFromKnownBits - Given an unsigned integer type and 00191 // a set of known zero and one bits, compute the maximum and minimum values that 00192 // could have the specified known zero and known one bits, returning them in 00193 // min/max. 00194 static void ComputeUnsignedMinMaxValuesFromKnownBits(const APInt &KnownZero, 00195 const APInt &KnownOne, 00196 APInt &Min, APInt &Max) { 00197 assert(KnownZero.getBitWidth() == KnownOne.getBitWidth() && 00198 KnownZero.getBitWidth() == Min.getBitWidth() && 00199 KnownZero.getBitWidth() == Max.getBitWidth() && 00200 "Ty, KnownZero, KnownOne and Min, Max must have equal bitwidth."); 00201 APInt UnknownBits = ~(KnownZero|KnownOne); 00202 00203 // The minimum value is when the unknown bits are all zeros. 00204 Min = KnownOne; 00205 // The maximum value is when the unknown bits are all ones. 00206 Max = KnownOne|UnknownBits; 00207 } 00208 00209 00210 00211 /// FoldCmpLoadFromIndexedGlobal - Called we see this pattern: 00212 /// cmp pred (load (gep GV, ...)), cmpcst 00213 /// where GV is a global variable with a constant initializer. Try to simplify 00214 /// this into some simple computation that does not need the load. For example 00215 /// we can optimize "icmp eq (load (gep "foo", 0, i)), 0" into "icmp eq i, 3". 00216 /// 00217 /// If AndCst is non-null, then the loaded value is masked with that constant 00218 /// before doing the comparison. This handles cases like "A[i]&4 == 0". 00219 Instruction *InstCombiner:: 00220 FoldCmpLoadFromIndexedGlobal(GetElementPtrInst *GEP, GlobalVariable *GV, 00221 CmpInst &ICI, ConstantInt *AndCst) { 00222 // We need TD information to know the pointer size unless this is inbounds. 00223 if (!GEP->isInBounds() && !DL) 00224 return nullptr; 00225 00226 Constant *Init = GV->getInitializer(); 00227 if (!isa<ConstantArray>(Init) && !isa<ConstantDataArray>(Init)) 00228 return nullptr; 00229 00230 uint64_t ArrayElementCount = Init->getType()->getArrayNumElements(); 00231 if (ArrayElementCount > 1024) return nullptr; // Don't blow up on huge arrays. 00232 00233 // There are many forms of this optimization we can handle, for now, just do 00234 // the simple index into a single-dimensional array. 00235 // 00236 // Require: GEP GV, 0, i {{, constant indices}} 00237 if (GEP->getNumOperands() < 3 || 00238 !isa<ConstantInt>(GEP->getOperand(1)) || 00239 !cast<ConstantInt>(GEP->getOperand(1))->isZero() || 00240 isa<Constant>(GEP->getOperand(2))) 00241 return nullptr; 00242 00243 // Check that indices after the variable are constants and in-range for the 00244 // type they index. Collect the indices. This is typically for arrays of 00245 // structs. 00246 SmallVector<unsigned, 4> LaterIndices; 00247 00248 Type *EltTy = Init->getType()->getArrayElementType(); 00249 for (unsigned i = 3, e = GEP->getNumOperands(); i != e; ++i) { 00250 ConstantInt *Idx = dyn_cast<ConstantInt>(GEP->getOperand(i)); 00251 if (!Idx) return nullptr; // Variable index. 00252 00253 uint64_t IdxVal = Idx->getZExtValue(); 00254 if ((unsigned)IdxVal != IdxVal) return nullptr; // Too large array index. 00255 00256 if (StructType *STy = dyn_cast<StructType>(EltTy)) 00257 EltTy = STy->getElementType(IdxVal); 00258 else if (ArrayType *ATy = dyn_cast<ArrayType>(EltTy)) { 00259 if (IdxVal >= ATy->getNumElements()) return nullptr; 00260 EltTy = ATy->getElementType(); 00261 } else { 00262 return nullptr; // Unknown type. 00263 } 00264 00265 LaterIndices.push_back(IdxVal); 00266 } 00267 00268 enum { Overdefined = -3, Undefined = -2 }; 00269 00270 // Variables for our state machines. 00271 00272 // FirstTrueElement/SecondTrueElement - Used to emit a comparison of the form 00273 // "i == 47 | i == 87", where 47 is the first index the condition is true for, 00274 // and 87 is the second (and last) index. FirstTrueElement is -2 when 00275 // undefined, otherwise set to the first true element. SecondTrueElement is 00276 // -2 when undefined, -3 when overdefined and >= 0 when that index is true. 00277 int FirstTrueElement = Undefined, SecondTrueElement = Undefined; 00278 00279 // FirstFalseElement/SecondFalseElement - Used to emit a comparison of the 00280 // form "i != 47 & i != 87". Same state transitions as for true elements. 00281 int FirstFalseElement = Undefined, SecondFalseElement = Undefined; 00282 00283 /// TrueRangeEnd/FalseRangeEnd - In conjunction with First*Element, these 00284 /// define a state machine that triggers for ranges of values that the index 00285 /// is true or false for. This triggers on things like "abbbbc"[i] == 'b'. 00286 /// This is -2 when undefined, -3 when overdefined, and otherwise the last 00287 /// index in the range (inclusive). We use -2 for undefined here because we 00288 /// use relative comparisons and don't want 0-1 to match -1. 00289 int TrueRangeEnd = Undefined, FalseRangeEnd = Undefined; 00290 00291 // MagicBitvector - This is a magic bitvector where we set a bit if the 00292 // comparison is true for element 'i'. If there are 64 elements or less in 00293 // the array, this will fully represent all the comparison results. 00294 uint64_t MagicBitvector = 0; 00295 00296 00297 // Scan the array and see if one of our patterns matches. 00298 Constant *CompareRHS = cast<Constant>(ICI.getOperand(1)); 00299 for (unsigned i = 0, e = ArrayElementCount; i != e; ++i) { 00300 Constant *Elt = Init->getAggregateElement(i); 00301 if (!Elt) return nullptr; 00302 00303 // If this is indexing an array of structures, get the structure element. 00304 if (!LaterIndices.empty()) 00305 Elt = ConstantExpr::getExtractValue(Elt, LaterIndices); 00306 00307 // If the element is masked, handle it. 00308 if (AndCst) Elt = ConstantExpr::getAnd(Elt, AndCst); 00309 00310 // Find out if the comparison would be true or false for the i'th element. 00311 Constant *C = ConstantFoldCompareInstOperands(ICI.getPredicate(), Elt, 00312 CompareRHS, DL, TLI); 00313 // If the result is undef for this element, ignore it. 00314 if (isa<UndefValue>(C)) { 00315 // Extend range state machines to cover this element in case there is an 00316 // undef in the middle of the range. 00317 if (TrueRangeEnd == (int)i-1) 00318 TrueRangeEnd = i; 00319 if (FalseRangeEnd == (int)i-1) 00320 FalseRangeEnd = i; 00321 continue; 00322 } 00323 00324 // If we can't compute the result for any of the elements, we have to give 00325 // up evaluating the entire conditional. 00326 if (!isa<ConstantInt>(C)) return nullptr; 00327 00328 // Otherwise, we know if the comparison is true or false for this element, 00329 // update our state machines. 00330 bool IsTrueForElt = !cast<ConstantInt>(C)->isZero(); 00331 00332 // State machine for single/double/range index comparison. 00333 if (IsTrueForElt) { 00334 // Update the TrueElement state machine. 00335 if (FirstTrueElement == Undefined) 00336 FirstTrueElement = TrueRangeEnd = i; // First true element. 00337 else { 00338 // Update double-compare state machine. 00339 if (SecondTrueElement == Undefined) 00340 SecondTrueElement = i; 00341 else 00342 SecondTrueElement = Overdefined; 00343 00344 // Update range state machine. 00345 if (TrueRangeEnd == (int)i-1) 00346 TrueRangeEnd = i; 00347 else 00348 TrueRangeEnd = Overdefined; 00349 } 00350 } else { 00351 // Update the FalseElement state machine. 00352 if (FirstFalseElement == Undefined) 00353 FirstFalseElement = FalseRangeEnd = i; // First false element. 00354 else { 00355 // Update double-compare state machine. 00356 if (SecondFalseElement == Undefined) 00357 SecondFalseElement = i; 00358 else 00359 SecondFalseElement = Overdefined; 00360 00361 // Update range state machine. 00362 if (FalseRangeEnd == (int)i-1) 00363 FalseRangeEnd = i; 00364 else 00365 FalseRangeEnd = Overdefined; 00366 } 00367 } 00368 00369 00370 // If this element is in range, update our magic bitvector. 00371 if (i < 64 && IsTrueForElt) 00372 MagicBitvector |= 1ULL << i; 00373 00374 // If all of our states become overdefined, bail out early. Since the 00375 // predicate is expensive, only check it every 8 elements. This is only 00376 // really useful for really huge arrays. 00377 if ((i & 8) == 0 && i >= 64 && SecondTrueElement == Overdefined && 00378 SecondFalseElement == Overdefined && TrueRangeEnd == Overdefined && 00379 FalseRangeEnd == Overdefined) 00380 return nullptr; 00381 } 00382 00383 // Now that we've scanned the entire array, emit our new comparison(s). We 00384 // order the state machines in complexity of the generated code. 00385 Value *Idx = GEP->getOperand(2); 00386 00387 // If the index is larger than the pointer size of the target, truncate the 00388 // index down like the GEP would do implicitly. We don't have to do this for 00389 // an inbounds GEP because the index can't be out of range. 00390 if (!GEP->isInBounds()) { 00391 Type *IntPtrTy = DL->getIntPtrType(GEP->getType()); 00392 unsigned PtrSize = IntPtrTy->getIntegerBitWidth(); 00393 if (Idx->getType()->getPrimitiveSizeInBits() > PtrSize) 00394 Idx = Builder->CreateTrunc(Idx, IntPtrTy); 00395 } 00396 00397 // If the comparison is only true for one or two elements, emit direct 00398 // comparisons. 00399 if (SecondTrueElement != Overdefined) { 00400 // None true -> false. 00401 if (FirstTrueElement == Undefined) 00402 return ReplaceInstUsesWith(ICI, Builder->getFalse()); 00403 00404 Value *FirstTrueIdx = ConstantInt::get(Idx->getType(), FirstTrueElement); 00405 00406 // True for one element -> 'i == 47'. 00407 if (SecondTrueElement == Undefined) 00408 return new ICmpInst(ICmpInst::ICMP_EQ, Idx, FirstTrueIdx); 00409 00410 // True for two elements -> 'i == 47 | i == 72'. 00411 Value *C1 = Builder->CreateICmpEQ(Idx, FirstTrueIdx); 00412 Value *SecondTrueIdx = ConstantInt::get(Idx->getType(), SecondTrueElement); 00413 Value *C2 = Builder->CreateICmpEQ(Idx, SecondTrueIdx); 00414 return BinaryOperator::CreateOr(C1, C2); 00415 } 00416 00417 // If the comparison is only false for one or two elements, emit direct 00418 // comparisons. 00419 if (SecondFalseElement != Overdefined) { 00420 // None false -> true. 00421 if (FirstFalseElement == Undefined) 00422 return ReplaceInstUsesWith(ICI, Builder->getTrue()); 00423 00424 Value *FirstFalseIdx = ConstantInt::get(Idx->getType(), FirstFalseElement); 00425 00426 // False for one element -> 'i != 47'. 00427 if (SecondFalseElement == Undefined) 00428 return new ICmpInst(ICmpInst::ICMP_NE, Idx, FirstFalseIdx); 00429 00430 // False for two elements -> 'i != 47 & i != 72'. 00431 Value *C1 = Builder->CreateICmpNE(Idx, FirstFalseIdx); 00432 Value *SecondFalseIdx = ConstantInt::get(Idx->getType(),SecondFalseElement); 00433 Value *C2 = Builder->CreateICmpNE(Idx, SecondFalseIdx); 00434 return BinaryOperator::CreateAnd(C1, C2); 00435 } 00436 00437 // If the comparison can be replaced with a range comparison for the elements 00438 // where it is true, emit the range check. 00439 if (TrueRangeEnd != Overdefined) { 00440 assert(TrueRangeEnd != FirstTrueElement && "Should emit single compare"); 00441 00442 // Generate (i-FirstTrue) <u (TrueRangeEnd-FirstTrue+1). 00443 if (FirstTrueElement) { 00444 Value *Offs = ConstantInt::get(Idx->getType(), -FirstTrueElement); 00445 Idx = Builder->CreateAdd(Idx, Offs); 00446 } 00447 00448 Value *End = ConstantInt::get(Idx->getType(), 00449 TrueRangeEnd-FirstTrueElement+1); 00450 return new ICmpInst(ICmpInst::ICMP_ULT, Idx, End); 00451 } 00452 00453 // False range check. 00454 if (FalseRangeEnd != Overdefined) { 00455 assert(FalseRangeEnd != FirstFalseElement && "Should emit single compare"); 00456 // Generate (i-FirstFalse) >u (FalseRangeEnd-FirstFalse). 00457 if (FirstFalseElement) { 00458 Value *Offs = ConstantInt::get(Idx->getType(), -FirstFalseElement); 00459 Idx = Builder->CreateAdd(Idx, Offs); 00460 } 00461 00462 Value *End = ConstantInt::get(Idx->getType(), 00463 FalseRangeEnd-FirstFalseElement); 00464 return new ICmpInst(ICmpInst::ICMP_UGT, Idx, End); 00465 } 00466 00467 00468 // If a magic bitvector captures the entire comparison state 00469 // of this load, replace it with computation that does: 00470 // ((magic_cst >> i) & 1) != 0 00471 { 00472 Type *Ty = nullptr; 00473 00474 // Look for an appropriate type: 00475 // - The type of Idx if the magic fits 00476 // - The smallest fitting legal type if we have a DataLayout 00477 // - Default to i32 00478 if (ArrayElementCount <= Idx->getType()->getIntegerBitWidth()) 00479 Ty = Idx->getType(); 00480 else if (DL) 00481 Ty = DL->getSmallestLegalIntType(Init->getContext(), ArrayElementCount); 00482 else if (ArrayElementCount <= 32) 00483 Ty = Type::getInt32Ty(Init->getContext()); 00484 00485 if (Ty) { 00486 Value *V = Builder->CreateIntCast(Idx, Ty, false); 00487 V = Builder->CreateLShr(ConstantInt::get(Ty, MagicBitvector), V); 00488 V = Builder->CreateAnd(ConstantInt::get(Ty, 1), V); 00489 return new ICmpInst(ICmpInst::ICMP_NE, V, ConstantInt::get(Ty, 0)); 00490 } 00491 } 00492 00493 return nullptr; 00494 } 00495 00496 00497 /// EvaluateGEPOffsetExpression - Return a value that can be used to compare 00498 /// the *offset* implied by a GEP to zero. For example, if we have &A[i], we 00499 /// want to return 'i' for "icmp ne i, 0". Note that, in general, indices can 00500 /// be complex, and scales are involved. The above expression would also be 00501 /// legal to codegen as "icmp ne (i*4), 0" (assuming A is a pointer to i32). 00502 /// This later form is less amenable to optimization though, and we are allowed 00503 /// to generate the first by knowing that pointer arithmetic doesn't overflow. 00504 /// 00505 /// If we can't emit an optimized form for this expression, this returns null. 00506 /// 00507 static Value *EvaluateGEPOffsetExpression(User *GEP, InstCombiner &IC) { 00508 const DataLayout &DL = *IC.getDataLayout(); 00509 gep_type_iterator GTI = gep_type_begin(GEP); 00510 00511 // Check to see if this gep only has a single variable index. If so, and if 00512 // any constant indices are a multiple of its scale, then we can compute this 00513 // in terms of the scale of the variable index. For example, if the GEP 00514 // implies an offset of "12 + i*4", then we can codegen this as "3 + i", 00515 // because the expression will cross zero at the same point. 00516 unsigned i, e = GEP->getNumOperands(); 00517 int64_t Offset = 0; 00518 for (i = 1; i != e; ++i, ++GTI) { 00519 if (ConstantInt *CI = dyn_cast<ConstantInt>(GEP->getOperand(i))) { 00520 // Compute the aggregate offset of constant indices. 00521 if (CI->isZero()) continue; 00522 00523 // Handle a struct index, which adds its field offset to the pointer. 00524 if (StructType *STy = dyn_cast<StructType>(*GTI)) { 00525 Offset += DL.getStructLayout(STy)->getElementOffset(CI->getZExtValue()); 00526 } else { 00527 uint64_t Size = DL.getTypeAllocSize(GTI.getIndexedType()); 00528 Offset += Size*CI->getSExtValue(); 00529 } 00530 } else { 00531 // Found our variable index. 00532 break; 00533 } 00534 } 00535 00536 // If there are no variable indices, we must have a constant offset, just 00537 // evaluate it the general way. 00538 if (i == e) return nullptr; 00539 00540 Value *VariableIdx = GEP->getOperand(i); 00541 // Determine the scale factor of the variable element. For example, this is 00542 // 4 if the variable index is into an array of i32. 00543 uint64_t VariableScale = DL.getTypeAllocSize(GTI.getIndexedType()); 00544 00545 // Verify that there are no other variable indices. If so, emit the hard way. 00546 for (++i, ++GTI; i != e; ++i, ++GTI) { 00547 ConstantInt *CI = dyn_cast<ConstantInt>(GEP->getOperand(i)); 00548 if (!CI) return nullptr; 00549 00550 // Compute the aggregate offset of constant indices. 00551 if (CI->isZero()) continue; 00552 00553 // Handle a struct index, which adds its field offset to the pointer. 00554 if (StructType *STy = dyn_cast<StructType>(*GTI)) { 00555 Offset += DL.getStructLayout(STy)->getElementOffset(CI->getZExtValue()); 00556 } else { 00557 uint64_t Size = DL.getTypeAllocSize(GTI.getIndexedType()); 00558 Offset += Size*CI->getSExtValue(); 00559 } 00560 } 00561 00562 00563 00564 // Okay, we know we have a single variable index, which must be a 00565 // pointer/array/vector index. If there is no offset, life is simple, return 00566 // the index. 00567 Type *IntPtrTy = DL.getIntPtrType(GEP->getOperand(0)->getType()); 00568 unsigned IntPtrWidth = IntPtrTy->getIntegerBitWidth(); 00569 if (Offset == 0) { 00570 // Cast to intptrty in case a truncation occurs. If an extension is needed, 00571 // we don't need to bother extending: the extension won't affect where the 00572 // computation crosses zero. 00573 if (VariableIdx->getType()->getPrimitiveSizeInBits() > IntPtrWidth) { 00574 VariableIdx = IC.Builder->CreateTrunc(VariableIdx, IntPtrTy); 00575 } 00576 return VariableIdx; 00577 } 00578 00579 // Otherwise, there is an index. The computation we will do will be modulo 00580 // the pointer size, so get it. 00581 uint64_t PtrSizeMask = ~0ULL >> (64-IntPtrWidth); 00582 00583 Offset &= PtrSizeMask; 00584 VariableScale &= PtrSizeMask; 00585 00586 // To do this transformation, any constant index must be a multiple of the 00587 // variable scale factor. For example, we can evaluate "12 + 4*i" as "3 + i", 00588 // but we can't evaluate "10 + 3*i" in terms of i. Check that the offset is a 00589 // multiple of the variable scale. 00590 int64_t NewOffs = Offset / (int64_t)VariableScale; 00591 if (Offset != NewOffs*(int64_t)VariableScale) 00592 return nullptr; 00593 00594 // Okay, we can do this evaluation. Start by converting the index to intptr. 00595 if (VariableIdx->getType() != IntPtrTy) 00596 VariableIdx = IC.Builder->CreateIntCast(VariableIdx, IntPtrTy, 00597 true /*Signed*/); 00598 Constant *OffsetVal = ConstantInt::get(IntPtrTy, NewOffs); 00599 return IC.Builder->CreateAdd(VariableIdx, OffsetVal, "offset"); 00600 } 00601 00602 /// FoldGEPICmp - Fold comparisons between a GEP instruction and something 00603 /// else. At this point we know that the GEP is on the LHS of the comparison. 00604 Instruction *InstCombiner::FoldGEPICmp(GEPOperator *GEPLHS, Value *RHS, 00605 ICmpInst::Predicate Cond, 00606 Instruction &I) { 00607 // Don't transform signed compares of GEPs into index compares. Even if the 00608 // GEP is inbounds, the final add of the base pointer can have signed overflow 00609 // and would change the result of the icmp. 00610 // e.g. "&foo[0] <s &foo[1]" can't be folded to "true" because "foo" could be 00611 // the maximum signed value for the pointer type. 00612 if (ICmpInst::isSigned(Cond)) 00613 return nullptr; 00614 00615 // Look through bitcasts and addrspacecasts. We do not however want to remove 00616 // 0 GEPs. 00617 if (!isa<GetElementPtrInst>(RHS)) 00618 RHS = RHS->stripPointerCasts(); 00619 00620 Value *PtrBase = GEPLHS->getOperand(0); 00621 if (DL && PtrBase == RHS && GEPLHS->isInBounds()) { 00622 // ((gep Ptr, OFFSET) cmp Ptr) ---> (OFFSET cmp 0). 00623 // This transformation (ignoring the base and scales) is valid because we 00624 // know pointers can't overflow since the gep is inbounds. See if we can 00625 // output an optimized form. 00626 Value *Offset = EvaluateGEPOffsetExpression(GEPLHS, *this); 00627 00628 // If not, synthesize the offset the hard way. 00629 if (!Offset) 00630 Offset = EmitGEPOffset(GEPLHS); 00631 return new ICmpInst(ICmpInst::getSignedPredicate(Cond), Offset, 00632 Constant::getNullValue(Offset->getType())); 00633 } else if (GEPOperator *GEPRHS = dyn_cast<GEPOperator>(RHS)) { 00634 // If the base pointers are different, but the indices are the same, just 00635 // compare the base pointer. 00636 if (PtrBase != GEPRHS->getOperand(0)) { 00637 bool IndicesTheSame = GEPLHS->getNumOperands()==GEPRHS->getNumOperands(); 00638 IndicesTheSame &= GEPLHS->getOperand(0)->getType() == 00639 GEPRHS->getOperand(0)->getType(); 00640 if (IndicesTheSame) 00641 for (unsigned i = 1, e = GEPLHS->getNumOperands(); i != e; ++i) 00642 if (GEPLHS->getOperand(i) != GEPRHS->getOperand(i)) { 00643 IndicesTheSame = false; 00644 break; 00645 } 00646 00647 // If all indices are the same, just compare the base pointers. 00648 if (IndicesTheSame) 00649 return new ICmpInst(Cond, GEPLHS->getOperand(0), GEPRHS->getOperand(0)); 00650 00651 // If we're comparing GEPs with two base pointers that only differ in type 00652 // and both GEPs have only constant indices or just one use, then fold 00653 // the compare with the adjusted indices. 00654 if (DL && GEPLHS->isInBounds() && GEPRHS->isInBounds() && 00655 (GEPLHS->hasAllConstantIndices() || GEPLHS->hasOneUse()) && 00656 (GEPRHS->hasAllConstantIndices() || GEPRHS->hasOneUse()) && 00657 PtrBase->stripPointerCasts() == 00658 GEPRHS->getOperand(0)->stripPointerCasts()) { 00659 Value *LOffset = EmitGEPOffset(GEPLHS); 00660 Value *ROffset = EmitGEPOffset(GEPRHS); 00661 00662 // If we looked through an addrspacecast between different sized address 00663 // spaces, the LHS and RHS pointers are different sized 00664 // integers. Truncate to the smaller one. 00665 Type *LHSIndexTy = LOffset->getType(); 00666 Type *RHSIndexTy = ROffset->getType(); 00667 if (LHSIndexTy != RHSIndexTy) { 00668 if (LHSIndexTy->getPrimitiveSizeInBits() < 00669 RHSIndexTy->getPrimitiveSizeInBits()) { 00670 ROffset = Builder->CreateTrunc(ROffset, LHSIndexTy); 00671 } else 00672 LOffset = Builder->CreateTrunc(LOffset, RHSIndexTy); 00673 } 00674 00675 Value *Cmp = Builder->CreateICmp(ICmpInst::getSignedPredicate(Cond), 00676 LOffset, ROffset); 00677 return ReplaceInstUsesWith(I, Cmp); 00678 } 00679 00680 // Otherwise, the base pointers are different and the indices are 00681 // different, bail out. 00682 return nullptr; 00683 } 00684 00685 // If one of the GEPs has all zero indices, recurse. 00686 if (GEPLHS->hasAllZeroIndices()) 00687 return FoldGEPICmp(GEPRHS, GEPLHS->getOperand(0), 00688 ICmpInst::getSwappedPredicate(Cond), I); 00689 00690 // If the other GEP has all zero indices, recurse. 00691 if (GEPRHS->hasAllZeroIndices()) 00692 return FoldGEPICmp(GEPLHS, GEPRHS->getOperand(0), Cond, I); 00693 00694 bool GEPsInBounds = GEPLHS->isInBounds() && GEPRHS->isInBounds(); 00695 if (GEPLHS->getNumOperands() == GEPRHS->getNumOperands()) { 00696 // If the GEPs only differ by one index, compare it. 00697 unsigned NumDifferences = 0; // Keep track of # differences. 00698 unsigned DiffOperand = 0; // The operand that differs. 00699 for (unsigned i = 1, e = GEPRHS->getNumOperands(); i != e; ++i) 00700 if (GEPLHS->getOperand(i) != GEPRHS->getOperand(i)) { 00701 if (GEPLHS->getOperand(i)->getType()->getPrimitiveSizeInBits() != 00702 GEPRHS->getOperand(i)->getType()->getPrimitiveSizeInBits()) { 00703 // Irreconcilable differences. 00704 NumDifferences = 2; 00705 break; 00706 } else { 00707 if (NumDifferences++) break; 00708 DiffOperand = i; 00709 } 00710 } 00711 00712 if (NumDifferences == 0) // SAME GEP? 00713 return ReplaceInstUsesWith(I, // No comparison is needed here. 00714 Builder->getInt1(ICmpInst::isTrueWhenEqual(Cond))); 00715 00716 else if (NumDifferences == 1 && GEPsInBounds) { 00717 Value *LHSV = GEPLHS->getOperand(DiffOperand); 00718 Value *RHSV = GEPRHS->getOperand(DiffOperand); 00719 // Make sure we do a signed comparison here. 00720 return new ICmpInst(ICmpInst::getSignedPredicate(Cond), LHSV, RHSV); 00721 } 00722 } 00723 00724 // Only lower this if the icmp is the only user of the GEP or if we expect 00725 // the result to fold to a constant! 00726 if (DL && 00727 GEPsInBounds && 00728 (isa<ConstantExpr>(GEPLHS) || GEPLHS->hasOneUse()) && 00729 (isa<ConstantExpr>(GEPRHS) || GEPRHS->hasOneUse())) { 00730 // ((gep Ptr, OFFSET1) cmp (gep Ptr, OFFSET2) ---> (OFFSET1 cmp OFFSET2) 00731 Value *L = EmitGEPOffset(GEPLHS); 00732 Value *R = EmitGEPOffset(GEPRHS); 00733 return new ICmpInst(ICmpInst::getSignedPredicate(Cond), L, R); 00734 } 00735 } 00736 return nullptr; 00737 } 00738 00739 /// FoldICmpAddOpCst - Fold "icmp pred (X+CI), X". 00740 Instruction *InstCombiner::FoldICmpAddOpCst(Instruction &ICI, 00741 Value *X, ConstantInt *CI, 00742 ICmpInst::Predicate Pred) { 00743 // From this point on, we know that (X+C <= X) --> (X+C < X) because C != 0, 00744 // so the values can never be equal. Similarly for all other "or equals" 00745 // operators. 00746 00747 // (X+1) <u X --> X >u (MAXUINT-1) --> X == 255 00748 // (X+2) <u X --> X >u (MAXUINT-2) --> X > 253 00749 // (X+MAXUINT) <u X --> X >u (MAXUINT-MAXUINT) --> X != 0 00750 if (Pred == ICmpInst::ICMP_ULT || Pred == ICmpInst::ICMP_ULE) { 00751 Value *R = 00752 ConstantExpr::getSub(ConstantInt::getAllOnesValue(CI->getType()), CI); 00753 return new ICmpInst(ICmpInst::ICMP_UGT, X, R); 00754 } 00755 00756 // (X+1) >u X --> X <u (0-1) --> X != 255 00757 // (X+2) >u X --> X <u (0-2) --> X <u 254 00758 // (X+MAXUINT) >u X --> X <u (0-MAXUINT) --> X <u 1 --> X == 0 00759 if (Pred == ICmpInst::ICMP_UGT || Pred == ICmpInst::ICMP_UGE) 00760 return new ICmpInst(ICmpInst::ICMP_ULT, X, ConstantExpr::getNeg(CI)); 00761 00762 unsigned BitWidth = CI->getType()->getPrimitiveSizeInBits(); 00763 ConstantInt *SMax = ConstantInt::get(X->getContext(), 00764 APInt::getSignedMaxValue(BitWidth)); 00765 00766 // (X+ 1) <s X --> X >s (MAXSINT-1) --> X == 127 00767 // (X+ 2) <s X --> X >s (MAXSINT-2) --> X >s 125 00768 // (X+MAXSINT) <s X --> X >s (MAXSINT-MAXSINT) --> X >s 0 00769 // (X+MINSINT) <s X --> X >s (MAXSINT-MINSINT) --> X >s -1 00770 // (X+ -2) <s X --> X >s (MAXSINT- -2) --> X >s 126 00771 // (X+ -1) <s X --> X >s (MAXSINT- -1) --> X != 127 00772 if (Pred == ICmpInst::ICMP_SLT || Pred == ICmpInst::ICMP_SLE) 00773 return new ICmpInst(ICmpInst::ICMP_SGT, X, ConstantExpr::getSub(SMax, CI)); 00774 00775 // (X+ 1) >s X --> X <s (MAXSINT-(1-1)) --> X != 127 00776 // (X+ 2) >s X --> X <s (MAXSINT-(2-1)) --> X <s 126 00777 // (X+MAXSINT) >s X --> X <s (MAXSINT-(MAXSINT-1)) --> X <s 1 00778 // (X+MINSINT) >s X --> X <s (MAXSINT-(MINSINT-1)) --> X <s -2 00779 // (X+ -2) >s X --> X <s (MAXSINT-(-2-1)) --> X <s -126 00780 // (X+ -1) >s X --> X <s (MAXSINT-(-1-1)) --> X == -128 00781 00782 assert(Pred == ICmpInst::ICMP_SGT || Pred == ICmpInst::ICMP_SGE); 00783 Constant *C = Builder->getInt(CI->getValue()-1); 00784 return new ICmpInst(ICmpInst::ICMP_SLT, X, ConstantExpr::getSub(SMax, C)); 00785 } 00786 00787 /// FoldICmpDivCst - Fold "icmp pred, ([su]div X, DivRHS), CmpRHS" where DivRHS 00788 /// and CmpRHS are both known to be integer constants. 00789 Instruction *InstCombiner::FoldICmpDivCst(ICmpInst &ICI, BinaryOperator *DivI, 00790 ConstantInt *DivRHS) { 00791 ConstantInt *CmpRHS = cast<ConstantInt>(ICI.getOperand(1)); 00792 const APInt &CmpRHSV = CmpRHS->getValue(); 00793 00794 // FIXME: If the operand types don't match the type of the divide 00795 // then don't attempt this transform. The code below doesn't have the 00796 // logic to deal with a signed divide and an unsigned compare (and 00797 // vice versa). This is because (x /s C1) <s C2 produces different 00798 // results than (x /s C1) <u C2 or (x /u C1) <s C2 or even 00799 // (x /u C1) <u C2. Simply casting the operands and result won't 00800 // work. :( The if statement below tests that condition and bails 00801 // if it finds it. 00802 bool DivIsSigned = DivI->getOpcode() == Instruction::SDiv; 00803 if (!ICI.isEquality() && DivIsSigned != ICI.isSigned()) 00804 return nullptr; 00805 if (DivRHS->isZero()) 00806 return nullptr; // The ProdOV computation fails on divide by zero. 00807 if (DivIsSigned && DivRHS->isAllOnesValue()) 00808 return nullptr; // The overflow computation also screws up here 00809 if (DivRHS->isOne()) { 00810 // This eliminates some funny cases with INT_MIN. 00811 ICI.setOperand(0, DivI->getOperand(0)); // X/1 == X. 00812 return &ICI; 00813 } 00814 00815 // Compute Prod = CI * DivRHS. We are essentially solving an equation 00816 // of form X/C1=C2. We solve for X by multiplying C1 (DivRHS) and 00817 // C2 (CI). By solving for X we can turn this into a range check 00818 // instead of computing a divide. 00819 Constant *Prod = ConstantExpr::getMul(CmpRHS, DivRHS); 00820 00821 // Determine if the product overflows by seeing if the product is 00822 // not equal to the divide. Make sure we do the same kind of divide 00823 // as in the LHS instruction that we're folding. 00824 bool ProdOV = (DivIsSigned ? ConstantExpr::getSDiv(Prod, DivRHS) : 00825 ConstantExpr::getUDiv(Prod, DivRHS)) != CmpRHS; 00826 00827 // Get the ICmp opcode 00828 ICmpInst::Predicate Pred = ICI.getPredicate(); 00829 00830 /// If the division is known to be exact, then there is no remainder from the 00831 /// divide, so the covered range size is unit, otherwise it is the divisor. 00832 ConstantInt *RangeSize = DivI->isExact() ? getOne(Prod) : DivRHS; 00833 00834 // Figure out the interval that is being checked. For example, a comparison 00835 // like "X /u 5 == 0" is really checking that X is in the interval [0, 5). 00836 // Compute this interval based on the constants involved and the signedness of 00837 // the compare/divide. This computes a half-open interval, keeping track of 00838 // whether either value in the interval overflows. After analysis each 00839 // overflow variable is set to 0 if it's corresponding bound variable is valid 00840 // -1 if overflowed off the bottom end, or +1 if overflowed off the top end. 00841 int LoOverflow = 0, HiOverflow = 0; 00842 Constant *LoBound = nullptr, *HiBound = nullptr; 00843 00844 if (!DivIsSigned) { // udiv 00845 // e.g. X/5 op 3 --> [15, 20) 00846 LoBound = Prod; 00847 HiOverflow = LoOverflow = ProdOV; 00848 if (!HiOverflow) { 00849 // If this is not an exact divide, then many values in the range collapse 00850 // to the same result value. 00851 HiOverflow = AddWithOverflow(HiBound, LoBound, RangeSize, false); 00852 } 00853 00854 } else if (DivRHS->getValue().isStrictlyPositive()) { // Divisor is > 0. 00855 if (CmpRHSV == 0) { // (X / pos) op 0 00856 // Can't overflow. e.g. X/2 op 0 --> [-1, 2) 00857 LoBound = ConstantExpr::getNeg(SubOne(RangeSize)); 00858 HiBound = RangeSize; 00859 } else if (CmpRHSV.isStrictlyPositive()) { // (X / pos) op pos 00860 LoBound = Prod; // e.g. X/5 op 3 --> [15, 20) 00861 HiOverflow = LoOverflow = ProdOV; 00862 if (!HiOverflow) 00863 HiOverflow = AddWithOverflow(HiBound, Prod, RangeSize, true); 00864 } else { // (X / pos) op neg 00865 // e.g. X/5 op -3 --> [-15-4, -15+1) --> [-19, -14) 00866 HiBound = AddOne(Prod); 00867 LoOverflow = HiOverflow = ProdOV ? -1 : 0; 00868 if (!LoOverflow) { 00869 ConstantInt *DivNeg =cast<ConstantInt>(ConstantExpr::getNeg(RangeSize)); 00870 LoOverflow = AddWithOverflow(LoBound, HiBound, DivNeg, true) ? -1 : 0; 00871 } 00872 } 00873 } else if (DivRHS->isNegative()) { // Divisor is < 0. 00874 if (DivI->isExact()) 00875 RangeSize = cast<ConstantInt>(ConstantExpr::getNeg(RangeSize)); 00876 if (CmpRHSV == 0) { // (X / neg) op 0 00877 // e.g. X/-5 op 0 --> [-4, 5) 00878 LoBound = AddOne(RangeSize); 00879 HiBound = cast<ConstantInt>(ConstantExpr::getNeg(RangeSize)); 00880 if (HiBound == DivRHS) { // -INTMIN = INTMIN 00881 HiOverflow = 1; // [INTMIN+1, overflow) 00882 HiBound = nullptr; // e.g. X/INTMIN = 0 --> X > INTMIN 00883 } 00884 } else if (CmpRHSV.isStrictlyPositive()) { // (X / neg) op pos 00885 // e.g. X/-5 op 3 --> [-19, -14) 00886 HiBound = AddOne(Prod); 00887 HiOverflow = LoOverflow = ProdOV ? -1 : 0; 00888 if (!LoOverflow) 00889 LoOverflow = AddWithOverflow(LoBound, HiBound, RangeSize, true) ? -1:0; 00890 } else { // (X / neg) op neg 00891 LoBound = Prod; // e.g. X/-5 op -3 --> [15, 20) 00892 LoOverflow = HiOverflow = ProdOV; 00893 if (!HiOverflow) 00894 HiOverflow = SubWithOverflow(HiBound, Prod, RangeSize, true); 00895 } 00896 00897 // Dividing by a negative swaps the condition. LT <-> GT 00898 Pred = ICmpInst::getSwappedPredicate(Pred); 00899 } 00900 00901 Value *X = DivI->getOperand(0); 00902 switch (Pred) { 00903 default: llvm_unreachable("Unhandled icmp opcode!"); 00904 case ICmpInst::ICMP_EQ: 00905 if (LoOverflow && HiOverflow) 00906 return ReplaceInstUsesWith(ICI, Builder->getFalse()); 00907 if (HiOverflow) 00908 return new ICmpInst(DivIsSigned ? ICmpInst::ICMP_SGE : 00909 ICmpInst::ICMP_UGE, X, LoBound); 00910 if (LoOverflow) 00911 return new ICmpInst(DivIsSigned ? ICmpInst::ICMP_SLT : 00912 ICmpInst::ICMP_ULT, X, HiBound); 00913 return ReplaceInstUsesWith(ICI, InsertRangeTest(X, LoBound, HiBound, 00914 DivIsSigned, true)); 00915 case ICmpInst::ICMP_NE: 00916 if (LoOverflow && HiOverflow) 00917 return ReplaceInstUsesWith(ICI, Builder->getTrue()); 00918 if (HiOverflow) 00919 return new ICmpInst(DivIsSigned ? ICmpInst::ICMP_SLT : 00920 ICmpInst::ICMP_ULT, X, LoBound); 00921 if (LoOverflow) 00922 return new ICmpInst(DivIsSigned ? ICmpInst::ICMP_SGE : 00923 ICmpInst::ICMP_UGE, X, HiBound); 00924 return ReplaceInstUsesWith(ICI, InsertRangeTest(X, LoBound, HiBound, 00925 DivIsSigned, false)); 00926 case ICmpInst::ICMP_ULT: 00927 case ICmpInst::ICMP_SLT: 00928 if (LoOverflow == +1) // Low bound is greater than input range. 00929 return ReplaceInstUsesWith(ICI, Builder->getTrue()); 00930 if (LoOverflow == -1) // Low bound is less than input range. 00931 return ReplaceInstUsesWith(ICI, Builder->getFalse()); 00932 return new ICmpInst(Pred, X, LoBound); 00933 case ICmpInst::ICMP_UGT: 00934 case ICmpInst::ICMP_SGT: 00935 if (HiOverflow == +1) // High bound greater than input range. 00936 return ReplaceInstUsesWith(ICI, Builder->getFalse()); 00937 if (HiOverflow == -1) // High bound less than input range. 00938 return ReplaceInstUsesWith(ICI, Builder->getTrue()); 00939 if (Pred == ICmpInst::ICMP_UGT) 00940 return new ICmpInst(ICmpInst::ICMP_UGE, X, HiBound); 00941 return new ICmpInst(ICmpInst::ICMP_SGE, X, HiBound); 00942 } 00943 } 00944 00945 /// FoldICmpShrCst - Handle "icmp(([al]shr X, cst1), cst2)". 00946 Instruction *InstCombiner::FoldICmpShrCst(ICmpInst &ICI, BinaryOperator *Shr, 00947 ConstantInt *ShAmt) { 00948 const APInt &CmpRHSV = cast<ConstantInt>(ICI.getOperand(1))->getValue(); 00949 00950 // Check that the shift amount is in range. If not, don't perform 00951 // undefined shifts. When the shift is visited it will be 00952 // simplified. 00953 uint32_t TypeBits = CmpRHSV.getBitWidth(); 00954 uint32_t ShAmtVal = (uint32_t)ShAmt->getLimitedValue(TypeBits); 00955 if (ShAmtVal >= TypeBits || ShAmtVal == 0) 00956 return nullptr; 00957 00958 if (!ICI.isEquality()) { 00959 // If we have an unsigned comparison and an ashr, we can't simplify this. 00960 // Similarly for signed comparisons with lshr. 00961 if (ICI.isSigned() != (Shr->getOpcode() == Instruction::AShr)) 00962 return nullptr; 00963 00964 // Otherwise, all lshr and most exact ashr's are equivalent to a udiv/sdiv 00965 // by a power of 2. Since we already have logic to simplify these, 00966 // transform to div and then simplify the resultant comparison. 00967 if (Shr->getOpcode() == Instruction::AShr && 00968 (!Shr->isExact() || ShAmtVal == TypeBits - 1)) 00969 return nullptr; 00970 00971 // Revisit the shift (to delete it). 00972 Worklist.Add(Shr); 00973 00974 Constant *DivCst = 00975 ConstantInt::get(Shr->getType(), APInt::getOneBitSet(TypeBits, ShAmtVal)); 00976 00977 Value *Tmp = 00978 Shr->getOpcode() == Instruction::AShr ? 00979 Builder->CreateSDiv(Shr->getOperand(0), DivCst, "", Shr->isExact()) : 00980 Builder->CreateUDiv(Shr->getOperand(0), DivCst, "", Shr->isExact()); 00981 00982 ICI.setOperand(0, Tmp); 00983 00984 // If the builder folded the binop, just return it. 00985 BinaryOperator *TheDiv = dyn_cast<BinaryOperator>(Tmp); 00986 if (!TheDiv) 00987 return &ICI; 00988 00989 // Otherwise, fold this div/compare. 00990 assert(TheDiv->getOpcode() == Instruction::SDiv || 00991 TheDiv->getOpcode() == Instruction::UDiv); 00992 00993 Instruction *Res = FoldICmpDivCst(ICI, TheDiv, cast<ConstantInt>(DivCst)); 00994 assert(Res && "This div/cst should have folded!"); 00995 return Res; 00996 } 00997 00998 00999 // If we are comparing against bits always shifted out, the 01000 // comparison cannot succeed. 01001 APInt Comp = CmpRHSV << ShAmtVal; 01002 ConstantInt *ShiftedCmpRHS = Builder->getInt(Comp); 01003 if (Shr->getOpcode() == Instruction::LShr) 01004 Comp = Comp.lshr(ShAmtVal); 01005 else 01006 Comp = Comp.ashr(ShAmtVal); 01007 01008 if (Comp != CmpRHSV) { // Comparing against a bit that we know is zero. 01009 bool IsICMP_NE = ICI.getPredicate() == ICmpInst::ICMP_NE; 01010 Constant *Cst = Builder->getInt1(IsICMP_NE); 01011 return ReplaceInstUsesWith(ICI, Cst); 01012 } 01013 01014 // Otherwise, check to see if the bits shifted out are known to be zero. 01015 // If so, we can compare against the unshifted value: 01016 // (X & 4) >> 1 == 2 --> (X & 4) == 4. 01017 if (Shr->hasOneUse() && Shr->isExact()) 01018 return new ICmpInst(ICI.getPredicate(), Shr->getOperand(0), ShiftedCmpRHS); 01019 01020 if (Shr->hasOneUse()) { 01021 // Otherwise strength reduce the shift into an and. 01022 APInt Val(APInt::getHighBitsSet(TypeBits, TypeBits - ShAmtVal)); 01023 Constant *Mask = Builder->getInt(Val); 01024 01025 Value *And = Builder->CreateAnd(Shr->getOperand(0), 01026 Mask, Shr->getName()+".mask"); 01027 return new ICmpInst(ICI.getPredicate(), And, ShiftedCmpRHS); 01028 } 01029 return nullptr; 01030 } 01031 01032 /// FoldICmpCstShrCst - Handle "(icmp eq/ne (ashr/lshr const2, A), const1)" -> 01033 /// (icmp eq/ne A, Log2(const2/const1)) -> 01034 /// (icmp eq/ne A, Log2(const2) - Log2(const1)). 01035 Instruction *InstCombiner::FoldICmpCstShrCst(ICmpInst &I, Value *Op, Value *A, 01036 ConstantInt *CI1, 01037 ConstantInt *CI2) { 01038 assert(I.isEquality() && "Cannot fold icmp gt/lt"); 01039 01040 auto getConstant = [&I, this](bool IsTrue) { 01041 if (I.getPredicate() == I.ICMP_NE) 01042 IsTrue = !IsTrue; 01043 return ReplaceInstUsesWith(I, ConstantInt::get(I.getType(), IsTrue)); 01044 }; 01045 01046 auto getICmp = [&I](CmpInst::Predicate Pred, Value *LHS, Value *RHS) { 01047 if (I.getPredicate() == I.ICMP_NE) 01048 Pred = CmpInst::getInversePredicate(Pred); 01049 return new ICmpInst(Pred, LHS, RHS); 01050 }; 01051 01052 APInt AP1 = CI1->getValue(); 01053 APInt AP2 = CI2->getValue(); 01054 01055 if (!AP1) { 01056 if (!AP2) { 01057 // Both Constants are 0. 01058 return getConstant(true); 01059 } 01060 01061 if (cast<BinaryOperator>(Op)->isExact()) 01062 return getConstant(false); 01063 01064 if (AP2.isNegative()) { 01065 // MSB is set, so a lshr with a large enough 'A' would be undefined. 01066 return getConstant(false); 01067 } 01068 01069 // 'A' must be large enough to shift out the highest set bit. 01070 return getICmp(I.ICMP_UGT, A, 01071 ConstantInt::get(A->getType(), AP2.logBase2())); 01072 } 01073 01074 if (!AP2) { 01075 // Shifting 0 by any value gives 0. 01076 return getConstant(false); 01077 } 01078 01079 bool IsAShr = isa<AShrOperator>(Op); 01080 if (AP1 == AP2) { 01081 if (AP1.isAllOnesValue() && IsAShr) { 01082 // Arithmatic shift of -1 is always -1. 01083 return getConstant(true); 01084 } 01085 return getICmp(I.ICMP_EQ, A, ConstantInt::getNullValue(A->getType())); 01086 } 01087 01088 bool IsNegative = false; 01089 if (IsAShr) { 01090 if (AP1.isNegative() != AP2.isNegative()) { 01091 // Arithmetic shift will never change the sign. 01092 return getConstant(false); 01093 } 01094 // Both the constants are negative, take their positive to calculate log. 01095 if (AP1.isNegative()) { 01096 if (AP1.slt(AP2)) 01097 // Right-shifting won't increase the magnitude. 01098 return getConstant(false); 01099 IsNegative = true; 01100 } 01101 } 01102 01103 if (!IsNegative && AP1.ugt(AP2)) 01104 // Right-shifting will not increase the value. 01105 return getConstant(false); 01106 01107 // Get the distance between the highest bit that's set. 01108 int Shift; 01109 if (IsNegative) 01110 Shift = (-AP2).logBase2() - (-AP1).logBase2(); 01111 else 01112 Shift = AP2.logBase2() - AP1.logBase2(); 01113 01114 if (IsAShr ? AP1 == AP2.ashr(Shift) : AP1 == AP2.lshr(Shift)) 01115 return getICmp(I.ICMP_EQ, A, ConstantInt::get(A->getType(), Shift)); 01116 01117 // Shifting const2 will never be equal to const1. 01118 return getConstant(false); 01119 } 01120 01121 /// visitICmpInstWithInstAndIntCst - Handle "icmp (instr, intcst)". 01122 /// 01123 Instruction *InstCombiner::visitICmpInstWithInstAndIntCst(ICmpInst &ICI, 01124 Instruction *LHSI, 01125 ConstantInt *RHS) { 01126 const APInt &RHSV = RHS->getValue(); 01127 01128 switch (LHSI->getOpcode()) { 01129 case Instruction::Trunc: 01130 if (ICI.isEquality() && LHSI->hasOneUse()) { 01131 // Simplify icmp eq (trunc x to i8), 42 -> icmp eq x, 42|highbits if all 01132 // of the high bits truncated out of x are known. 01133 unsigned DstBits = LHSI->getType()->getPrimitiveSizeInBits(), 01134 SrcBits = LHSI->getOperand(0)->getType()->getPrimitiveSizeInBits(); 01135 APInt KnownZero(SrcBits, 0), KnownOne(SrcBits, 0); 01136 computeKnownBits(LHSI->getOperand(0), KnownZero, KnownOne, 0, &ICI); 01137 01138 // If all the high bits are known, we can do this xform. 01139 if ((KnownZero|KnownOne).countLeadingOnes() >= SrcBits-DstBits) { 01140 // Pull in the high bits from known-ones set. 01141 APInt NewRHS = RHS->getValue().zext(SrcBits); 01142 NewRHS |= KnownOne & APInt::getHighBitsSet(SrcBits, SrcBits-DstBits); 01143 return new ICmpInst(ICI.getPredicate(), LHSI->getOperand(0), 01144 Builder->getInt(NewRHS)); 01145 } 01146 } 01147 break; 01148 01149 case Instruction::Xor: // (icmp pred (xor X, XorCst), CI) 01150 if (ConstantInt *XorCst = dyn_cast<ConstantInt>(LHSI->getOperand(1))) { 01151 // If this is a comparison that tests the signbit (X < 0) or (x > -1), 01152 // fold the xor. 01153 if ((ICI.getPredicate() == ICmpInst::ICMP_SLT && RHSV == 0) || 01154 (ICI.getPredicate() == ICmpInst::ICMP_SGT && RHSV.isAllOnesValue())) { 01155 Value *CompareVal = LHSI->getOperand(0); 01156 01157 // If the sign bit of the XorCst is not set, there is no change to 01158 // the operation, just stop using the Xor. 01159 if (!XorCst->isNegative()) { 01160 ICI.setOperand(0, CompareVal); 01161 Worklist.Add(LHSI); 01162 return &ICI; 01163 } 01164 01165 // Was the old condition true if the operand is positive? 01166 bool isTrueIfPositive = ICI.getPredicate() == ICmpInst::ICMP_SGT; 01167 01168 // If so, the new one isn't. 01169 isTrueIfPositive ^= true; 01170 01171 if (isTrueIfPositive) 01172 return new ICmpInst(ICmpInst::ICMP_SGT, CompareVal, 01173 SubOne(RHS)); 01174 else 01175 return new ICmpInst(ICmpInst::ICMP_SLT, CompareVal, 01176 AddOne(RHS)); 01177 } 01178 01179 if (LHSI->hasOneUse()) { 01180 // (icmp u/s (xor A SignBit), C) -> (icmp s/u A, (xor C SignBit)) 01181 if (!ICI.isEquality() && XorCst->getValue().isSignBit()) { 01182 const APInt &SignBit = XorCst->getValue(); 01183 ICmpInst::Predicate Pred = ICI.isSigned() 01184 ? ICI.getUnsignedPredicate() 01185 : ICI.getSignedPredicate(); 01186 return new ICmpInst(Pred, LHSI->getOperand(0), 01187 Builder->getInt(RHSV ^ SignBit)); 01188 } 01189 01190 // (icmp u/s (xor A ~SignBit), C) -> (icmp s/u (xor C ~SignBit), A) 01191 if (!ICI.isEquality() && XorCst->isMaxValue(true)) { 01192 const APInt &NotSignBit = XorCst->getValue(); 01193 ICmpInst::Predicate Pred = ICI.isSigned() 01194 ? ICI.getUnsignedPredicate() 01195 : ICI.getSignedPredicate(); 01196 Pred = ICI.getSwappedPredicate(Pred); 01197 return new ICmpInst(Pred, LHSI->getOperand(0), 01198 Builder->getInt(RHSV ^ NotSignBit)); 01199 } 01200 } 01201 01202 // (icmp ugt (xor X, C), ~C) -> (icmp ult X, C) 01203 // iff -C is a power of 2 01204 if (ICI.getPredicate() == ICmpInst::ICMP_UGT && 01205 XorCst->getValue() == ~RHSV && (RHSV + 1).isPowerOf2()) 01206 return new ICmpInst(ICmpInst::ICMP_ULT, LHSI->getOperand(0), XorCst); 01207 01208 // (icmp ult (xor X, C), -C) -> (icmp uge X, C) 01209 // iff -C is a power of 2 01210 if (ICI.getPredicate() == ICmpInst::ICMP_ULT && 01211 XorCst->getValue() == -RHSV && RHSV.isPowerOf2()) 01212 return new ICmpInst(ICmpInst::ICMP_UGE, LHSI->getOperand(0), XorCst); 01213 } 01214 break; 01215 case Instruction::And: // (icmp pred (and X, AndCst), RHS) 01216 if (LHSI->hasOneUse() && isa<ConstantInt>(LHSI->getOperand(1)) && 01217 LHSI->getOperand(0)->hasOneUse()) { 01218 ConstantInt *AndCst = cast<ConstantInt>(LHSI->getOperand(1)); 01219 01220 // If the LHS is an AND of a truncating cast, we can widen the 01221 // and/compare to be the input width without changing the value 01222 // produced, eliminating a cast. 01223 if (TruncInst *Cast = dyn_cast<TruncInst>(LHSI->getOperand(0))) { 01224 // We can do this transformation if either the AND constant does not 01225 // have its sign bit set or if it is an equality comparison. 01226 // Extending a relational comparison when we're checking the sign 01227 // bit would not work. 01228 if (ICI.isEquality() || 01229 (!AndCst->isNegative() && RHSV.isNonNegative())) { 01230 Value *NewAnd = 01231 Builder->CreateAnd(Cast->getOperand(0), 01232 ConstantExpr::getZExt(AndCst, Cast->getSrcTy())); 01233 NewAnd->takeName(LHSI); 01234 return new ICmpInst(ICI.getPredicate(), NewAnd, 01235 ConstantExpr::getZExt(RHS, Cast->getSrcTy())); 01236 } 01237 } 01238 01239 // If the LHS is an AND of a zext, and we have an equality compare, we can 01240 // shrink the and/compare to the smaller type, eliminating the cast. 01241 if (ZExtInst *Cast = dyn_cast<ZExtInst>(LHSI->getOperand(0))) { 01242 IntegerType *Ty = cast<IntegerType>(Cast->getSrcTy()); 01243 // Make sure we don't compare the upper bits, SimplifyDemandedBits 01244 // should fold the icmp to true/false in that case. 01245 if (ICI.isEquality() && RHSV.getActiveBits() <= Ty->getBitWidth()) { 01246 Value *NewAnd = 01247 Builder->CreateAnd(Cast->getOperand(0), 01248 ConstantExpr::getTrunc(AndCst, Ty)); 01249 NewAnd->takeName(LHSI); 01250 return new ICmpInst(ICI.getPredicate(), NewAnd, 01251 ConstantExpr::getTrunc(RHS, Ty)); 01252 } 01253 } 01254 01255 // If this is: (X >> C1) & C2 != C3 (where any shift and any compare 01256 // could exist), turn it into (X & (C2 << C1)) != (C3 << C1). This 01257 // happens a LOT in code produced by the C front-end, for bitfield 01258 // access. 01259 BinaryOperator *Shift = dyn_cast<BinaryOperator>(LHSI->getOperand(0)); 01260 if (Shift && !Shift->isShift()) 01261 Shift = nullptr; 01262 01263 ConstantInt *ShAmt; 01264 ShAmt = Shift ? dyn_cast<ConstantInt>(Shift->getOperand(1)) : nullptr; 01265 01266 // This seemingly simple opportunity to fold away a shift turns out to 01267 // be rather complicated. See PR17827 01268 // ( http://llvm.org/bugs/show_bug.cgi?id=17827 ) for details. 01269 if (ShAmt) { 01270 bool CanFold = false; 01271 unsigned ShiftOpcode = Shift->getOpcode(); 01272 if (ShiftOpcode == Instruction::AShr) { 01273 // There may be some constraints that make this possible, 01274 // but nothing simple has been discovered yet. 01275 CanFold = false; 01276 } else if (ShiftOpcode == Instruction::Shl) { 01277 // For a left shift, we can fold if the comparison is not signed. 01278 // We can also fold a signed comparison if the mask value and 01279 // comparison value are not negative. These constraints may not be 01280 // obvious, but we can prove that they are correct using an SMT 01281 // solver. 01282 if (!ICI.isSigned() || (!AndCst->isNegative() && !RHS->isNegative())) 01283 CanFold = true; 01284 } else if (ShiftOpcode == Instruction::LShr) { 01285 // For a logical right shift, we can fold if the comparison is not 01286 // signed. We can also fold a signed comparison if the shifted mask 01287 // value and the shifted comparison value are not negative. 01288 // These constraints may not be obvious, but we can prove that they 01289 // are correct using an SMT solver. 01290 if (!ICI.isSigned()) 01291 CanFold = true; 01292 else { 01293 ConstantInt *ShiftedAndCst = 01294 cast<ConstantInt>(ConstantExpr::getShl(AndCst, ShAmt)); 01295 ConstantInt *ShiftedRHSCst = 01296 cast<ConstantInt>(ConstantExpr::getShl(RHS, ShAmt)); 01297 01298 if (!ShiftedAndCst->isNegative() && !ShiftedRHSCst->isNegative()) 01299 CanFold = true; 01300 } 01301 } 01302 01303 if (CanFold) { 01304 Constant *NewCst; 01305 if (ShiftOpcode == Instruction::Shl) 01306 NewCst = ConstantExpr::getLShr(RHS, ShAmt); 01307 else 01308 NewCst = ConstantExpr::getShl(RHS, ShAmt); 01309 01310 // Check to see if we are shifting out any of the bits being 01311 // compared. 01312 if (ConstantExpr::get(ShiftOpcode, NewCst, ShAmt) != RHS) { 01313 // If we shifted bits out, the fold is not going to work out. 01314 // As a special case, check to see if this means that the 01315 // result is always true or false now. 01316 if (ICI.getPredicate() == ICmpInst::ICMP_EQ) 01317 return ReplaceInstUsesWith(ICI, Builder->getFalse()); 01318 if (ICI.getPredicate() == ICmpInst::ICMP_NE) 01319 return ReplaceInstUsesWith(ICI, Builder->getTrue()); 01320 } else { 01321 ICI.setOperand(1, NewCst); 01322 Constant *NewAndCst; 01323 if (ShiftOpcode == Instruction::Shl) 01324 NewAndCst = ConstantExpr::getLShr(AndCst, ShAmt); 01325 else 01326 NewAndCst = ConstantExpr::getShl(AndCst, ShAmt); 01327 LHSI->setOperand(1, NewAndCst); 01328 LHSI->setOperand(0, Shift->getOperand(0)); 01329 Worklist.Add(Shift); // Shift is dead. 01330 return &ICI; 01331 } 01332 } 01333 } 01334 01335 // Turn ((X >> Y) & C) == 0 into (X & (C << Y)) == 0. The later is 01336 // preferable because it allows the C<<Y expression to be hoisted out 01337 // of a loop if Y is invariant and X is not. 01338 if (Shift && Shift->hasOneUse() && RHSV == 0 && 01339 ICI.isEquality() && !Shift->isArithmeticShift() && 01340 !isa<Constant>(Shift->getOperand(0))) { 01341 // Compute C << Y. 01342 Value *NS; 01343 if (Shift->getOpcode() == Instruction::LShr) { 01344 NS = Builder->CreateShl(AndCst, Shift->getOperand(1)); 01345 } else { 01346 // Insert a logical shift. 01347 NS = Builder->CreateLShr(AndCst, Shift->getOperand(1)); 01348 } 01349 01350 // Compute X & (C << Y). 01351 Value *NewAnd = 01352 Builder->CreateAnd(Shift->getOperand(0), NS, LHSI->getName()); 01353 01354 ICI.setOperand(0, NewAnd); 01355 return &ICI; 01356 } 01357 01358 // (icmp pred (and (or (lshr X, Y), X), 1), 0) --> 01359 // (icmp pred (and X, (or (shl 1, Y), 1), 0)) 01360 // 01361 // iff pred isn't signed 01362 { 01363 Value *X, *Y, *LShr; 01364 if (!ICI.isSigned() && RHSV == 0) { 01365 if (match(LHSI->getOperand(1), m_One())) { 01366 Constant *One = cast<Constant>(LHSI->getOperand(1)); 01367 Value *Or = LHSI->getOperand(0); 01368 if (match(Or, m_Or(m_Value(LShr), m_Value(X))) && 01369 match(LShr, m_LShr(m_Specific(X), m_Value(Y)))) { 01370 unsigned UsesRemoved = 0; 01371 if (LHSI->hasOneUse()) 01372 ++UsesRemoved; 01373 if (Or->hasOneUse()) 01374 ++UsesRemoved; 01375 if (LShr->hasOneUse()) 01376 ++UsesRemoved; 01377 Value *NewOr = nullptr; 01378 // Compute X & ((1 << Y) | 1) 01379 if (auto *C = dyn_cast<Constant>(Y)) { 01380 if (UsesRemoved >= 1) 01381 NewOr = 01382 ConstantExpr::getOr(ConstantExpr::getNUWShl(One, C), One); 01383 } else { 01384 if (UsesRemoved >= 3) 01385 NewOr = Builder->CreateOr(Builder->CreateShl(One, Y, 01386 LShr->getName(), 01387 /*HasNUW=*/true), 01388 One, Or->getName()); 01389 } 01390 if (NewOr) { 01391 Value *NewAnd = Builder->CreateAnd(X, NewOr, LHSI->getName()); 01392 ICI.setOperand(0, NewAnd); 01393 return &ICI; 01394 } 01395 } 01396 } 01397 } 01398 } 01399 01400 // Replace ((X & AndCst) > RHSV) with ((X & AndCst) != 0), if any 01401 // bit set in (X & AndCst) will produce a result greater than RHSV. 01402 if (ICI.getPredicate() == ICmpInst::ICMP_UGT) { 01403 unsigned NTZ = AndCst->getValue().countTrailingZeros(); 01404 if ((NTZ < AndCst->getBitWidth()) && 01405 APInt::getOneBitSet(AndCst->getBitWidth(), NTZ).ugt(RHSV)) 01406 return new ICmpInst(ICmpInst::ICMP_NE, LHSI, 01407 Constant::getNullValue(RHS->getType())); 01408 } 01409 } 01410 01411 // Try to optimize things like "A[i]&42 == 0" to index computations. 01412 if (LoadInst *LI = dyn_cast<LoadInst>(LHSI->getOperand(0))) { 01413 if (GetElementPtrInst *GEP = 01414 dyn_cast<GetElementPtrInst>(LI->getOperand(0))) 01415 if (GlobalVariable *GV = dyn_cast<GlobalVariable>(GEP->getOperand(0))) 01416 if (GV->isConstant() && GV->hasDefinitiveInitializer() && 01417 !LI->isVolatile() && isa<ConstantInt>(LHSI->getOperand(1))) { 01418 ConstantInt *C = cast<ConstantInt>(LHSI->getOperand(1)); 01419 if (Instruction *Res = FoldCmpLoadFromIndexedGlobal(GEP, GV,ICI, C)) 01420 return Res; 01421 } 01422 } 01423 01424 // X & -C == -C -> X > u ~C 01425 // X & -C != -C -> X <= u ~C 01426 // iff C is a power of 2 01427 if (ICI.isEquality() && RHS == LHSI->getOperand(1) && (-RHSV).isPowerOf2()) 01428 return new ICmpInst( 01429 ICI.getPredicate() == ICmpInst::ICMP_EQ ? ICmpInst::ICMP_UGT 01430 : ICmpInst::ICMP_ULE, 01431 LHSI->getOperand(0), SubOne(RHS)); 01432 break; 01433 01434 case Instruction::Or: { 01435 if (!ICI.isEquality() || !RHS->isNullValue() || !LHSI->hasOneUse()) 01436 break; 01437 Value *P, *Q; 01438 if (match(LHSI, m_Or(m_PtrToInt(m_Value(P)), m_PtrToInt(m_Value(Q))))) { 01439 // Simplify icmp eq (or (ptrtoint P), (ptrtoint Q)), 0 01440 // -> and (icmp eq P, null), (icmp eq Q, null). 01441 Value *ICIP = Builder->CreateICmp(ICI.getPredicate(), P, 01442 Constant::getNullValue(P->getType())); 01443 Value *ICIQ = Builder->CreateICmp(ICI.getPredicate(), Q, 01444 Constant::getNullValue(Q->getType())); 01445 Instruction *Op; 01446 if (ICI.getPredicate() == ICmpInst::ICMP_EQ) 01447 Op = BinaryOperator::CreateAnd(ICIP, ICIQ); 01448 else 01449 Op = BinaryOperator::CreateOr(ICIP, ICIQ); 01450 return Op; 01451 } 01452 break; 01453 } 01454 01455 case Instruction::Mul: { // (icmp pred (mul X, Val), CI) 01456 ConstantInt *Val = dyn_cast<ConstantInt>(LHSI->getOperand(1)); 01457 if (!Val) break; 01458 01459 // If this is a signed comparison to 0 and the mul is sign preserving, 01460 // use the mul LHS operand instead. 01461 ICmpInst::Predicate pred = ICI.getPredicate(); 01462 if (isSignTest(pred, RHS) && !Val->isZero() && 01463 cast<BinaryOperator>(LHSI)->hasNoSignedWrap()) 01464 return new ICmpInst(Val->isNegative() ? 01465 ICmpInst::getSwappedPredicate(pred) : pred, 01466 LHSI->getOperand(0), 01467 Constant::getNullValue(RHS->getType())); 01468 01469 break; 01470 } 01471 01472 case Instruction::Shl: { // (icmp pred (shl X, ShAmt), CI) 01473 uint32_t TypeBits = RHSV.getBitWidth(); 01474 ConstantInt *ShAmt = dyn_cast<ConstantInt>(LHSI->getOperand(1)); 01475 if (!ShAmt) { 01476 Value *X; 01477 // (1 << X) pred P2 -> X pred Log2(P2) 01478 if (match(LHSI, m_Shl(m_One(), m_Value(X)))) { 01479 bool RHSVIsPowerOf2 = RHSV.isPowerOf2(); 01480 ICmpInst::Predicate Pred = ICI.getPredicate(); 01481 if (ICI.isUnsigned()) { 01482 if (!RHSVIsPowerOf2) { 01483 // (1 << X) < 30 -> X <= 4 01484 // (1 << X) <= 30 -> X <= 4 01485 // (1 << X) >= 30 -> X > 4 01486 // (1 << X) > 30 -> X > 4 01487 if (Pred == ICmpInst::ICMP_ULT) 01488 Pred = ICmpInst::ICMP_ULE; 01489 else if (Pred == ICmpInst::ICMP_UGE) 01490 Pred = ICmpInst::ICMP_UGT; 01491 } 01492 unsigned RHSLog2 = RHSV.logBase2(); 01493 01494 // (1 << X) >= 2147483648 -> X >= 31 -> X == 31 01495 // (1 << X) < 2147483648 -> X < 31 -> X != 31 01496 if (RHSLog2 == TypeBits-1) { 01497 if (Pred == ICmpInst::ICMP_UGE) 01498 Pred = ICmpInst::ICMP_EQ; 01499 else if (Pred == ICmpInst::ICMP_ULT) 01500 Pred = ICmpInst::ICMP_NE; 01501 } 01502 01503 return new ICmpInst(Pred, X, 01504 ConstantInt::get(RHS->getType(), RHSLog2)); 01505 } else if (ICI.isSigned()) { 01506 if (RHSV.isAllOnesValue()) { 01507 // (1 << X) <= -1 -> X == 31 01508 if (Pred == ICmpInst::ICMP_SLE) 01509 return new ICmpInst(ICmpInst::ICMP_EQ, X, 01510 ConstantInt::get(RHS->getType(), TypeBits-1)); 01511 01512 // (1 << X) > -1 -> X != 31 01513 if (Pred == ICmpInst::ICMP_SGT) 01514 return new ICmpInst(ICmpInst::ICMP_NE, X, 01515 ConstantInt::get(RHS->getType(), TypeBits-1)); 01516 } else if (!RHSV) { 01517 // (1 << X) < 0 -> X == 31 01518 // (1 << X) <= 0 -> X == 31 01519 if (Pred == ICmpInst::ICMP_SLT || Pred == ICmpInst::ICMP_SLE) 01520 return new ICmpInst(ICmpInst::ICMP_EQ, X, 01521 ConstantInt::get(RHS->getType(), TypeBits-1)); 01522 01523 // (1 << X) >= 0 -> X != 31 01524 // (1 << X) > 0 -> X != 31 01525 if (Pred == ICmpInst::ICMP_SGT || Pred == ICmpInst::ICMP_SGE) 01526 return new ICmpInst(ICmpInst::ICMP_NE, X, 01527 ConstantInt::get(RHS->getType(), TypeBits-1)); 01528 } 01529 } else if (ICI.isEquality()) { 01530 if (RHSVIsPowerOf2) 01531 return new ICmpInst( 01532 Pred, X, ConstantInt::get(RHS->getType(), RHSV.logBase2())); 01533 } 01534 } 01535 break; 01536 } 01537 01538 // Check that the shift amount is in range. If not, don't perform 01539 // undefined shifts. When the shift is visited it will be 01540 // simplified. 01541 if (ShAmt->uge(TypeBits)) 01542 break; 01543 01544 if (ICI.isEquality()) { 01545 // If we are comparing against bits always shifted out, the 01546 // comparison cannot succeed. 01547 Constant *Comp = 01548 ConstantExpr::getShl(ConstantExpr::getLShr(RHS, ShAmt), 01549 ShAmt); 01550 if (Comp != RHS) {// Comparing against a bit that we know is zero. 01551 bool IsICMP_NE = ICI.getPredicate() == ICmpInst::ICMP_NE; 01552 Constant *Cst = Builder->getInt1(IsICMP_NE); 01553 return ReplaceInstUsesWith(ICI, Cst); 01554 } 01555 01556 // If the shift is NUW, then it is just shifting out zeros, no need for an 01557 // AND. 01558 if (cast<BinaryOperator>(LHSI)->hasNoUnsignedWrap()) 01559 return new ICmpInst(ICI.getPredicate(), LHSI->getOperand(0), 01560 ConstantExpr::getLShr(RHS, ShAmt)); 01561 01562 // If the shift is NSW and we compare to 0, then it is just shifting out 01563 // sign bits, no need for an AND either. 01564 if (cast<BinaryOperator>(LHSI)->hasNoSignedWrap() && RHSV == 0) 01565 return new ICmpInst(ICI.getPredicate(), LHSI->getOperand(0), 01566 ConstantExpr::getLShr(RHS, ShAmt)); 01567 01568 if (LHSI->hasOneUse()) { 01569 // Otherwise strength reduce the shift into an and. 01570 uint32_t ShAmtVal = (uint32_t)ShAmt->getLimitedValue(TypeBits); 01571 Constant *Mask = Builder->getInt(APInt::getLowBitsSet(TypeBits, 01572 TypeBits - ShAmtVal)); 01573 01574 Value *And = 01575 Builder->CreateAnd(LHSI->getOperand(0),Mask, LHSI->getName()+".mask"); 01576 return new ICmpInst(ICI.getPredicate(), And, 01577 ConstantExpr::getLShr(RHS, ShAmt)); 01578 } 01579 } 01580 01581 // If this is a signed comparison to 0 and the shift is sign preserving, 01582 // use the shift LHS operand instead. 01583 ICmpInst::Predicate pred = ICI.getPredicate(); 01584 if (isSignTest(pred, RHS) && 01585 cast<BinaryOperator>(LHSI)->hasNoSignedWrap()) 01586 return new ICmpInst(pred, 01587 LHSI->getOperand(0), 01588 Constant::getNullValue(RHS->getType())); 01589 01590 // Otherwise, if this is a comparison of the sign bit, simplify to and/test. 01591 bool TrueIfSigned = false; 01592 if (LHSI->hasOneUse() && 01593 isSignBitCheck(ICI.getPredicate(), RHS, TrueIfSigned)) { 01594 // (X << 31) <s 0 --> (X&1) != 0 01595 Constant *Mask = ConstantInt::get(LHSI->getOperand(0)->getType(), 01596 APInt::getOneBitSet(TypeBits, 01597 TypeBits-ShAmt->getZExtValue()-1)); 01598 Value *And = 01599 Builder->CreateAnd(LHSI->getOperand(0), Mask, LHSI->getName()+".mask"); 01600 return new ICmpInst(TrueIfSigned ? ICmpInst::ICMP_NE : ICmpInst::ICMP_EQ, 01601 And, Constant::getNullValue(And->getType())); 01602 } 01603 01604 // Transform (icmp pred iM (shl iM %v, N), CI) 01605 // -> (icmp pred i(M-N) (trunc %v iM to i(M-N)), (trunc (CI>>N)) 01606 // Transform the shl to a trunc if (trunc (CI>>N)) has no loss and M-N. 01607 // This enables to get rid of the shift in favor of a trunc which can be 01608 // free on the target. It has the additional benefit of comparing to a 01609 // smaller constant, which will be target friendly. 01610 unsigned Amt = ShAmt->getLimitedValue(TypeBits-1); 01611 if (LHSI->hasOneUse() && 01612 Amt != 0 && RHSV.countTrailingZeros() >= Amt) { 01613 Type *NTy = IntegerType::get(ICI.getContext(), TypeBits - Amt); 01614 Constant *NCI = ConstantExpr::getTrunc( 01615 ConstantExpr::getAShr(RHS, 01616 ConstantInt::get(RHS->getType(), Amt)), 01617 NTy); 01618 return new ICmpInst(ICI.getPredicate(), 01619 Builder->CreateTrunc(LHSI->getOperand(0), NTy), 01620 NCI); 01621 } 01622 01623 break; 01624 } 01625 01626 case Instruction::LShr: // (icmp pred (shr X, ShAmt), CI) 01627 case Instruction::AShr: { 01628 // Handle equality comparisons of shift-by-constant. 01629 BinaryOperator *BO = cast<BinaryOperator>(LHSI); 01630 if (ConstantInt *ShAmt = dyn_cast<ConstantInt>(LHSI->getOperand(1))) { 01631 if (Instruction *Res = FoldICmpShrCst(ICI, BO, ShAmt)) 01632 return Res; 01633 } 01634 01635 // Handle exact shr's. 01636 if (ICI.isEquality() && BO->isExact() && BO->hasOneUse()) { 01637 if (RHSV.isMinValue()) 01638 return new ICmpInst(ICI.getPredicate(), BO->getOperand(0), RHS); 01639 } 01640 break; 01641 } 01642 01643 case Instruction::SDiv: 01644 case Instruction::UDiv: 01645 // Fold: icmp pred ([us]div X, C1), C2 -> range test 01646 // Fold this div into the comparison, producing a range check. 01647 // Determine, based on the divide type, what the range is being 01648 // checked. If there is an overflow on the low or high side, remember 01649 // it, otherwise compute the range [low, hi) bounding the new value. 01650 // See: InsertRangeTest above for the kinds of replacements possible. 01651 if (ConstantInt *DivRHS = dyn_cast<ConstantInt>(LHSI->getOperand(1))) 01652 if (Instruction *R = FoldICmpDivCst(ICI, cast<BinaryOperator>(LHSI), 01653 DivRHS)) 01654 return R; 01655 break; 01656 01657 case Instruction::Sub: { 01658 ConstantInt *LHSC = dyn_cast<ConstantInt>(LHSI->getOperand(0)); 01659 if (!LHSC) break; 01660 const APInt &LHSV = LHSC->getValue(); 01661 01662 // C1-X <u C2 -> (X|(C2-1)) == C1 01663 // iff C1 & (C2-1) == C2-1 01664 // C2 is a power of 2 01665 if (ICI.getPredicate() == ICmpInst::ICMP_ULT && LHSI->hasOneUse() && 01666 RHSV.isPowerOf2() && (LHSV & (RHSV - 1)) == (RHSV - 1)) 01667 return new ICmpInst(ICmpInst::ICMP_EQ, 01668 Builder->CreateOr(LHSI->getOperand(1), RHSV - 1), 01669 LHSC); 01670 01671 // C1-X >u C2 -> (X|C2) != C1 01672 // iff C1 & C2 == C2 01673 // C2+1 is a power of 2 01674 if (ICI.getPredicate() == ICmpInst::ICMP_UGT && LHSI->hasOneUse() && 01675 (RHSV + 1).isPowerOf2() && (LHSV & RHSV) == RHSV) 01676 return new ICmpInst(ICmpInst::ICMP_NE, 01677 Builder->CreateOr(LHSI->getOperand(1), RHSV), LHSC); 01678 break; 01679 } 01680 01681 case Instruction::Add: 01682 // Fold: icmp pred (add X, C1), C2 01683 if (!ICI.isEquality()) { 01684 ConstantInt *LHSC = dyn_cast<ConstantInt>(LHSI->getOperand(1)); 01685 if (!LHSC) break; 01686 const APInt &LHSV = LHSC->getValue(); 01687 01688 ConstantRange CR = ICI.makeConstantRange(ICI.getPredicate(), RHSV) 01689 .subtract(LHSV); 01690 01691 if (ICI.isSigned()) { 01692 if (CR.getLower().isSignBit()) { 01693 return new ICmpInst(ICmpInst::ICMP_SLT, LHSI->getOperand(0), 01694 Builder->getInt(CR.getUpper())); 01695 } else if (CR.getUpper().isSignBit()) { 01696 return new ICmpInst(ICmpInst::ICMP_SGE, LHSI->getOperand(0), 01697 Builder->getInt(CR.getLower())); 01698 } 01699 } else { 01700 if (CR.getLower().isMinValue()) { 01701 return new ICmpInst(ICmpInst::ICMP_ULT, LHSI->getOperand(0), 01702 Builder->getInt(CR.getUpper())); 01703 } else if (CR.getUpper().isMinValue()) { 01704 return new ICmpInst(ICmpInst::ICMP_UGE, LHSI->getOperand(0), 01705 Builder->getInt(CR.getLower())); 01706 } 01707 } 01708 01709 // X-C1 <u C2 -> (X & -C2) == C1 01710 // iff C1 & (C2-1) == 0 01711 // C2 is a power of 2 01712 if (ICI.getPredicate() == ICmpInst::ICMP_ULT && LHSI->hasOneUse() && 01713 RHSV.isPowerOf2() && (LHSV & (RHSV - 1)) == 0) 01714 return new ICmpInst(ICmpInst::ICMP_EQ, 01715 Builder->CreateAnd(LHSI->getOperand(0), -RHSV), 01716 ConstantExpr::getNeg(LHSC)); 01717 01718 // X-C1 >u C2 -> (X & ~C2) != C1 01719 // iff C1 & C2 == 0 01720 // C2+1 is a power of 2 01721 if (ICI.getPredicate() == ICmpInst::ICMP_UGT && LHSI->hasOneUse() && 01722 (RHSV + 1).isPowerOf2() && (LHSV & RHSV) == 0) 01723 return new ICmpInst(ICmpInst::ICMP_NE, 01724 Builder->CreateAnd(LHSI->getOperand(0), ~RHSV), 01725 ConstantExpr::getNeg(LHSC)); 01726 } 01727 break; 01728 } 01729 01730 // Simplify icmp_eq and icmp_ne instructions with integer constant RHS. 01731 if (ICI.isEquality()) { 01732 bool isICMP_NE = ICI.getPredicate() == ICmpInst::ICMP_NE; 01733 01734 // If the first operand is (add|sub|and|or|xor|rem) with a constant, and 01735 // the second operand is a constant, simplify a bit. 01736 if (BinaryOperator *BO = dyn_cast<BinaryOperator>(LHSI)) { 01737 switch (BO->getOpcode()) { 01738 case Instruction::SRem: 01739 // If we have a signed (X % (2^c)) == 0, turn it into an unsigned one. 01740 if (RHSV == 0 && isa<ConstantInt>(BO->getOperand(1)) &&BO->hasOneUse()){ 01741 const APInt &V = cast<ConstantInt>(BO->getOperand(1))->getValue(); 01742 if (V.sgt(1) && V.isPowerOf2()) { 01743 Value *NewRem = 01744 Builder->CreateURem(BO->getOperand(0), BO->getOperand(1), 01745 BO->getName()); 01746 return new ICmpInst(ICI.getPredicate(), NewRem, 01747 Constant::getNullValue(BO->getType())); 01748 } 01749 } 01750 break; 01751 case Instruction::Add: 01752 // Replace ((add A, B) != C) with (A != C-B) if B & C are constants. 01753 if (ConstantInt *BOp1C = dyn_cast<ConstantInt>(BO->getOperand(1))) { 01754 if (BO->hasOneUse()) 01755 return new ICmpInst(ICI.getPredicate(), BO->getOperand(0), 01756 ConstantExpr::getSub(RHS, BOp1C)); 01757 } else if (RHSV == 0) { 01758 // Replace ((add A, B) != 0) with (A != -B) if A or B is 01759 // efficiently invertible, or if the add has just this one use. 01760 Value *BOp0 = BO->getOperand(0), *BOp1 = BO->getOperand(1); 01761 01762 if (Value *NegVal = dyn_castNegVal(BOp1)) 01763 return new ICmpInst(ICI.getPredicate(), BOp0, NegVal); 01764 if (Value *NegVal = dyn_castNegVal(BOp0)) 01765 return new ICmpInst(ICI.getPredicate(), NegVal, BOp1); 01766 if (BO->hasOneUse()) { 01767 Value *Neg = Builder->CreateNeg(BOp1); 01768 Neg->takeName(BO); 01769 return new ICmpInst(ICI.getPredicate(), BOp0, Neg); 01770 } 01771 } 01772 break; 01773 case Instruction::Xor: 01774 // For the xor case, we can xor two constants together, eliminating 01775 // the explicit xor. 01776 if (Constant *BOC = dyn_cast<Constant>(BO->getOperand(1))) { 01777 return new ICmpInst(ICI.getPredicate(), BO->getOperand(0), 01778 ConstantExpr::getXor(RHS, BOC)); 01779 } else if (RHSV == 0) { 01780 // Replace ((xor A, B) != 0) with (A != B) 01781 return new ICmpInst(ICI.getPredicate(), BO->getOperand(0), 01782 BO->getOperand(1)); 01783 } 01784 break; 01785 case Instruction::Sub: 01786 // Replace ((sub A, B) != C) with (B != A-C) if A & C are constants. 01787 if (ConstantInt *BOp0C = dyn_cast<ConstantInt>(BO->getOperand(0))) { 01788 if (BO->hasOneUse()) 01789 return new ICmpInst(ICI.getPredicate(), BO->getOperand(1), 01790 ConstantExpr::getSub(BOp0C, RHS)); 01791 } else if (RHSV == 0) { 01792 // Replace ((sub A, B) != 0) with (A != B) 01793 return new ICmpInst(ICI.getPredicate(), BO->getOperand(0), 01794 BO->getOperand(1)); 01795 } 01796 break; 01797 case Instruction::Or: 01798 // If bits are being or'd in that are not present in the constant we 01799 // are comparing against, then the comparison could never succeed! 01800 if (ConstantInt *BOC = dyn_cast<ConstantInt>(BO->getOperand(1))) { 01801 Constant *NotCI = ConstantExpr::getNot(RHS); 01802 if (!ConstantExpr::getAnd(BOC, NotCI)->isNullValue()) 01803 return ReplaceInstUsesWith(ICI, Builder->getInt1(isICMP_NE)); 01804 } 01805 break; 01806 01807 case Instruction::And: 01808 if (ConstantInt *BOC = dyn_cast<ConstantInt>(BO->getOperand(1))) { 01809 // If bits are being compared against that are and'd out, then the 01810 // comparison can never succeed! 01811 if ((RHSV & ~BOC->getValue()) != 0) 01812 return ReplaceInstUsesWith(ICI, Builder->getInt1(isICMP_NE)); 01813 01814 // If we have ((X & C) == C), turn it into ((X & C) != 0). 01815 if (RHS == BOC && RHSV.isPowerOf2()) 01816 return new ICmpInst(isICMP_NE ? ICmpInst::ICMP_EQ : 01817 ICmpInst::ICMP_NE, LHSI, 01818 Constant::getNullValue(RHS->getType())); 01819 01820 // Don't perform the following transforms if the AND has multiple uses 01821 if (!BO->hasOneUse()) 01822 break; 01823 01824 // Replace (and X, (1 << size(X)-1) != 0) with x s< 0 01825 if (BOC->getValue().isSignBit()) { 01826 Value *X = BO->getOperand(0); 01827 Constant *Zero = Constant::getNullValue(X->getType()); 01828 ICmpInst::Predicate pred = isICMP_NE ? 01829 ICmpInst::ICMP_SLT : ICmpInst::ICMP_SGE; 01830 return new ICmpInst(pred, X, Zero); 01831 } 01832 01833 // ((X & ~7) == 0) --> X < 8 01834 if (RHSV == 0 && isHighOnes(BOC)) { 01835 Value *X = BO->getOperand(0); 01836 Constant *NegX = ConstantExpr::getNeg(BOC); 01837 ICmpInst::Predicate pred = isICMP_NE ? 01838 ICmpInst::ICMP_UGE : ICmpInst::ICMP_ULT; 01839 return new ICmpInst(pred, X, NegX); 01840 } 01841 } 01842 break; 01843 case Instruction::Mul: 01844 if (RHSV == 0 && BO->hasNoSignedWrap()) { 01845 if (ConstantInt *BOC = dyn_cast<ConstantInt>(BO->getOperand(1))) { 01846 // The trivial case (mul X, 0) is handled by InstSimplify 01847 // General case : (mul X, C) != 0 iff X != 0 01848 // (mul X, C) == 0 iff X == 0 01849 if (!BOC->isZero()) 01850 return new ICmpInst(ICI.getPredicate(), BO->getOperand(0), 01851 Constant::getNullValue(RHS->getType())); 01852 } 01853 } 01854 break; 01855 default: break; 01856 } 01857 } else if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(LHSI)) { 01858 // Handle icmp {eq|ne} <intrinsic>, intcst. 01859 switch (II->getIntrinsicID()) { 01860 case Intrinsic::bswap: 01861 Worklist.Add(II); 01862 ICI.setOperand(0, II->getArgOperand(0)); 01863 ICI.setOperand(1, Builder->getInt(RHSV.byteSwap())); 01864 return &ICI; 01865 case Intrinsic::ctlz: 01866 case Intrinsic::cttz: 01867 // ctz(A) == bitwidth(a) -> A == 0 and likewise for != 01868 if (RHSV == RHS->getType()->getBitWidth()) { 01869 Worklist.Add(II); 01870 ICI.setOperand(0, II->getArgOperand(0)); 01871 ICI.setOperand(1, ConstantInt::get(RHS->getType(), 0)); 01872 return &ICI; 01873 } 01874 break; 01875 case Intrinsic::ctpop: 01876 // popcount(A) == 0 -> A == 0 and likewise for != 01877 if (RHS->isZero()) { 01878 Worklist.Add(II); 01879 ICI.setOperand(0, II->getArgOperand(0)); 01880 ICI.setOperand(1, RHS); 01881 return &ICI; 01882 } 01883 break; 01884 default: 01885 break; 01886 } 01887 } 01888 } 01889 return nullptr; 01890 } 01891 01892 /// visitICmpInstWithCastAndCast - Handle icmp (cast x to y), (cast/cst). 01893 /// We only handle extending casts so far. 01894 /// 01895 Instruction *InstCombiner::visitICmpInstWithCastAndCast(ICmpInst &ICI) { 01896 const CastInst *LHSCI = cast<CastInst>(ICI.getOperand(0)); 01897 Value *LHSCIOp = LHSCI->getOperand(0); 01898 Type *SrcTy = LHSCIOp->getType(); 01899 Type *DestTy = LHSCI->getType(); 01900 Value *RHSCIOp; 01901 01902 // Turn icmp (ptrtoint x), (ptrtoint/c) into a compare of the input if the 01903 // integer type is the same size as the pointer type. 01904 if (DL && LHSCI->getOpcode() == Instruction::PtrToInt && 01905 DL->getPointerTypeSizeInBits(SrcTy) == DestTy->getIntegerBitWidth()) { 01906 Value *RHSOp = nullptr; 01907 if (Constant *RHSC = dyn_cast<Constant>(ICI.getOperand(1))) { 01908 RHSOp = ConstantExpr::getIntToPtr(RHSC, SrcTy); 01909 } else if (PtrToIntInst *RHSC = dyn_cast<PtrToIntInst>(ICI.getOperand(1))) { 01910 RHSOp = RHSC->getOperand(0); 01911 // If the pointer types don't match, insert a bitcast. 01912 if (LHSCIOp->getType() != RHSOp->getType()) 01913 RHSOp = Builder->CreateBitCast(RHSOp, LHSCIOp->getType()); 01914 } 01915 01916 if (RHSOp) 01917 return new ICmpInst(ICI.getPredicate(), LHSCIOp, RHSOp); 01918 } 01919 01920 // The code below only handles extension cast instructions, so far. 01921 // Enforce this. 01922 if (LHSCI->getOpcode() != Instruction::ZExt && 01923 LHSCI->getOpcode() != Instruction::SExt) 01924 return nullptr; 01925 01926 bool isSignedExt = LHSCI->getOpcode() == Instruction::SExt; 01927 bool isSignedCmp = ICI.isSigned(); 01928 01929 if (CastInst *CI = dyn_cast<CastInst>(ICI.getOperand(1))) { 01930 // Not an extension from the same type? 01931 RHSCIOp = CI->getOperand(0); 01932 if (RHSCIOp->getType() != LHSCIOp->getType()) 01933 return nullptr; 01934 01935 // If the signedness of the two casts doesn't agree (i.e. one is a sext 01936 // and the other is a zext), then we can't handle this. 01937 if (CI->getOpcode() != LHSCI->getOpcode()) 01938 return nullptr; 01939 01940 // Deal with equality cases early. 01941 if (ICI.isEquality()) 01942 return new ICmpInst(ICI.getPredicate(), LHSCIOp, RHSCIOp); 01943 01944 // A signed comparison of sign extended values simplifies into a 01945 // signed comparison. 01946 if (isSignedCmp && isSignedExt) 01947 return new ICmpInst(ICI.getPredicate(), LHSCIOp, RHSCIOp); 01948 01949 // The other three cases all fold into an unsigned comparison. 01950 return new ICmpInst(ICI.getUnsignedPredicate(), LHSCIOp, RHSCIOp); 01951 } 01952 01953 // If we aren't dealing with a constant on the RHS, exit early 01954 ConstantInt *CI = dyn_cast<ConstantInt>(ICI.getOperand(1)); 01955 if (!CI) 01956 return nullptr; 01957 01958 // Compute the constant that would happen if we truncated to SrcTy then 01959 // reextended to DestTy. 01960 Constant *Res1 = ConstantExpr::getTrunc(CI, SrcTy); 01961 Constant *Res2 = ConstantExpr::getCast(LHSCI->getOpcode(), 01962 Res1, DestTy); 01963 01964 // If the re-extended constant didn't change... 01965 if (Res2 == CI) { 01966 // Deal with equality cases early. 01967 if (ICI.isEquality()) 01968 return new ICmpInst(ICI.getPredicate(), LHSCIOp, Res1); 01969 01970 // A signed comparison of sign extended values simplifies into a 01971 // signed comparison. 01972 if (isSignedExt && isSignedCmp) 01973 return new ICmpInst(ICI.getPredicate(), LHSCIOp, Res1); 01974 01975 // The other three cases all fold into an unsigned comparison. 01976 return new ICmpInst(ICI.getUnsignedPredicate(), LHSCIOp, Res1); 01977 } 01978 01979 // The re-extended constant changed so the constant cannot be represented 01980 // in the shorter type. Consequently, we cannot emit a simple comparison. 01981 // All the cases that fold to true or false will have already been handled 01982 // by SimplifyICmpInst, so only deal with the tricky case. 01983 01984 if (isSignedCmp || !isSignedExt) 01985 return nullptr; 01986 01987 // Evaluate the comparison for LT (we invert for GT below). LE and GE cases 01988 // should have been folded away previously and not enter in here. 01989 01990 // We're performing an unsigned comp with a sign extended value. 01991 // This is true if the input is >= 0. [aka >s -1] 01992 Constant *NegOne = Constant::getAllOnesValue(SrcTy); 01993 Value *Result = Builder->CreateICmpSGT(LHSCIOp, NegOne, ICI.getName()); 01994 01995 // Finally, return the value computed. 01996 if (ICI.getPredicate() == ICmpInst::ICMP_ULT) 01997 return ReplaceInstUsesWith(ICI, Result); 01998 01999 assert(ICI.getPredicate() == ICmpInst::ICMP_UGT && "ICmp should be folded!"); 02000 return BinaryOperator::CreateNot(Result); 02001 } 02002 02003 /// ProcessUGT_ADDCST_ADD - The caller has matched a pattern of the form: 02004 /// I = icmp ugt (add (add A, B), CI2), CI1 02005 /// If this is of the form: 02006 /// sum = a + b 02007 /// if (sum+128 >u 255) 02008 /// Then replace it with llvm.sadd.with.overflow.i8. 02009 /// 02010 static Instruction *ProcessUGT_ADDCST_ADD(ICmpInst &I, Value *A, Value *B, 02011 ConstantInt *CI2, ConstantInt *CI1, 02012 InstCombiner &IC) { 02013 // The transformation we're trying to do here is to transform this into an 02014 // llvm.sadd.with.overflow. To do this, we have to replace the original add 02015 // with a narrower add, and discard the add-with-constant that is part of the 02016 // range check (if we can't eliminate it, this isn't profitable). 02017 02018 // In order to eliminate the add-with-constant, the compare can be its only 02019 // use. 02020 Instruction *AddWithCst = cast<Instruction>(I.getOperand(0)); 02021 if (!AddWithCst->hasOneUse()) return nullptr; 02022 02023 // If CI2 is 2^7, 2^15, 2^31, then it might be an sadd.with.overflow. 02024 if (!CI2->getValue().isPowerOf2()) return nullptr; 02025 unsigned NewWidth = CI2->getValue().countTrailingZeros(); 02026 if (NewWidth != 7 && NewWidth != 15 && NewWidth != 31) return nullptr; 02027 02028 // The width of the new add formed is 1 more than the bias. 02029 ++NewWidth; 02030 02031 // Check to see that CI1 is an all-ones value with NewWidth bits. 02032 if (CI1->getBitWidth() == NewWidth || 02033 CI1->getValue() != APInt::getLowBitsSet(CI1->getBitWidth(), NewWidth)) 02034 return nullptr; 02035 02036 // This is only really a signed overflow check if the inputs have been 02037 // sign-extended; check for that condition. For example, if CI2 is 2^31 and 02038 // the operands of the add are 64 bits wide, we need at least 33 sign bits. 02039 unsigned NeededSignBits = CI1->getBitWidth() - NewWidth + 1; 02040 if (IC.ComputeNumSignBits(A, 0, &I) < NeededSignBits || 02041 IC.ComputeNumSignBits(B, 0, &I) < NeededSignBits) 02042 return nullptr; 02043 02044 // In order to replace the original add with a narrower 02045 // llvm.sadd.with.overflow, the only uses allowed are the add-with-constant 02046 // and truncates that discard the high bits of the add. Verify that this is 02047 // the case. 02048 Instruction *OrigAdd = cast<Instruction>(AddWithCst->getOperand(0)); 02049 for (User *U : OrigAdd->users()) { 02050 if (U == AddWithCst) continue; 02051 02052 // Only accept truncates for now. We would really like a nice recursive 02053 // predicate like SimplifyDemandedBits, but which goes downwards the use-def 02054 // chain to see which bits of a value are actually demanded. If the 02055 // original add had another add which was then immediately truncated, we 02056 // could still do the transformation. 02057 TruncInst *TI = dyn_cast<TruncInst>(U); 02058 if (!TI || TI->getType()->getPrimitiveSizeInBits() > NewWidth) 02059 return nullptr; 02060 } 02061 02062 // If the pattern matches, truncate the inputs to the narrower type and 02063 // use the sadd_with_overflow intrinsic to efficiently compute both the 02064 // result and the overflow bit. 02065 Module *M = I.getParent()->getParent()->getParent(); 02066 02067 Type *NewType = IntegerType::get(OrigAdd->getContext(), NewWidth); 02068 Value *F = Intrinsic::getDeclaration(M, Intrinsic::sadd_with_overflow, 02069 NewType); 02070 02071 InstCombiner::BuilderTy *Builder = IC.Builder; 02072 02073 // Put the new code above the original add, in case there are any uses of the 02074 // add between the add and the compare. 02075 Builder->SetInsertPoint(OrigAdd); 02076 02077 Value *TruncA = Builder->CreateTrunc(A, NewType, A->getName()+".trunc"); 02078 Value *TruncB = Builder->CreateTrunc(B, NewType, B->getName()+".trunc"); 02079 CallInst *Call = Builder->CreateCall2(F, TruncA, TruncB, "sadd"); 02080 Value *Add = Builder->CreateExtractValue(Call, 0, "sadd.result"); 02081 Value *ZExt = Builder->CreateZExt(Add, OrigAdd->getType()); 02082 02083 // The inner add was the result of the narrow add, zero extended to the 02084 // wider type. Replace it with the result computed by the intrinsic. 02085 IC.ReplaceInstUsesWith(*OrigAdd, ZExt); 02086 02087 // The original icmp gets replaced with the overflow value. 02088 return ExtractValueInst::Create(Call, 1, "sadd.overflow"); 02089 } 02090 02091 static Instruction *ProcessUAddIdiom(Instruction &I, Value *OrigAddV, 02092 InstCombiner &IC) { 02093 // Don't bother doing this transformation for pointers, don't do it for 02094 // vectors. 02095 if (!isa<IntegerType>(OrigAddV->getType())) return nullptr; 02096 02097 // If the add is a constant expr, then we don't bother transforming it. 02098 Instruction *OrigAdd = dyn_cast<Instruction>(OrigAddV); 02099 if (!OrigAdd) return nullptr; 02100 02101 Value *LHS = OrigAdd->getOperand(0), *RHS = OrigAdd->getOperand(1); 02102 02103 // Put the new code above the original add, in case there are any uses of the 02104 // add between the add and the compare. 02105 InstCombiner::BuilderTy *Builder = IC.Builder; 02106 Builder->SetInsertPoint(OrigAdd); 02107 02108 Module *M = I.getParent()->getParent()->getParent(); 02109 Type *Ty = LHS->getType(); 02110 Value *F = Intrinsic::getDeclaration(M, Intrinsic::uadd_with_overflow, Ty); 02111 CallInst *Call = Builder->CreateCall2(F, LHS, RHS, "uadd"); 02112 Value *Add = Builder->CreateExtractValue(Call, 0); 02113 02114 IC.ReplaceInstUsesWith(*OrigAdd, Add); 02115 02116 // The original icmp gets replaced with the overflow value. 02117 return ExtractValueInst::Create(Call, 1, "uadd.overflow"); 02118 } 02119 02120 /// \brief Recognize and process idiom involving test for multiplication 02121 /// overflow. 02122 /// 02123 /// The caller has matched a pattern of the form: 02124 /// I = cmp u (mul(zext A, zext B), V 02125 /// The function checks if this is a test for overflow and if so replaces 02126 /// multiplication with call to 'mul.with.overflow' intrinsic. 02127 /// 02128 /// \param I Compare instruction. 02129 /// \param MulVal Result of 'mult' instruction. It is one of the arguments of 02130 /// the compare instruction. Must be of integer type. 02131 /// \param OtherVal The other argument of compare instruction. 02132 /// \returns Instruction which must replace the compare instruction, NULL if no 02133 /// replacement required. 02134 static Instruction *ProcessUMulZExtIdiom(ICmpInst &I, Value *MulVal, 02135 Value *OtherVal, InstCombiner &IC) { 02136 // Don't bother doing this transformation for pointers, don't do it for 02137 // vectors. 02138 if (!isa<IntegerType>(MulVal->getType())) 02139 return nullptr; 02140 02141 assert(I.getOperand(0) == MulVal || I.getOperand(1) == MulVal); 02142 assert(I.getOperand(0) == OtherVal || I.getOperand(1) == OtherVal); 02143 Instruction *MulInstr = cast<Instruction>(MulVal); 02144 assert(MulInstr->getOpcode() == Instruction::Mul); 02145 02146 Instruction *LHS = cast<Instruction>(MulInstr->getOperand(0)), 02147 *RHS = cast<Instruction>(MulInstr->getOperand(1)); 02148 assert(LHS->getOpcode() == Instruction::ZExt); 02149 assert(RHS->getOpcode() == Instruction::ZExt); 02150 Value *A = LHS->getOperand(0), *B = RHS->getOperand(0); 02151 02152 // Calculate type and width of the result produced by mul.with.overflow. 02153 Type *TyA = A->getType(), *TyB = B->getType(); 02154 unsigned WidthA = TyA->getPrimitiveSizeInBits(), 02155 WidthB = TyB->getPrimitiveSizeInBits(); 02156 unsigned MulWidth; 02157 Type *MulType; 02158 if (WidthB > WidthA) { 02159 MulWidth = WidthB; 02160 MulType = TyB; 02161 } else { 02162 MulWidth = WidthA; 02163 MulType = TyA; 02164 } 02165 02166 // In order to replace the original mul with a narrower mul.with.overflow, 02167 // all uses must ignore upper bits of the product. The number of used low 02168 // bits must be not greater than the width of mul.with.overflow. 02169 if (MulVal->hasNUsesOrMore(2)) 02170 for (User *U : MulVal->users()) { 02171 if (U == &I) 02172 continue; 02173 if (TruncInst *TI = dyn_cast<TruncInst>(U)) { 02174 // Check if truncation ignores bits above MulWidth. 02175 unsigned TruncWidth = TI->getType()->getPrimitiveSizeInBits(); 02176 if (TruncWidth > MulWidth) 02177 return nullptr; 02178 } else if (BinaryOperator *BO = dyn_cast<BinaryOperator>(U)) { 02179 // Check if AND ignores bits above MulWidth. 02180 if (BO->getOpcode() != Instruction::And) 02181 return nullptr; 02182 if (ConstantInt *CI = dyn_cast<ConstantInt>(BO->getOperand(1))) { 02183 const APInt &CVal = CI->getValue(); 02184 if (CVal.getBitWidth() - CVal.countLeadingZeros() > MulWidth) 02185 return nullptr; 02186 } 02187 } else { 02188 // Other uses prohibit this transformation. 02189 return nullptr; 02190 } 02191 } 02192 02193 // Recognize patterns 02194 switch (I.getPredicate()) { 02195 case ICmpInst::ICMP_EQ: 02196 case ICmpInst::ICMP_NE: 02197 // Recognize pattern: 02198 // mulval = mul(zext A, zext B) 02199 // cmp eq/neq mulval, zext trunc mulval 02200 if (ZExtInst *Zext = dyn_cast<ZExtInst>(OtherVal)) 02201 if (Zext->hasOneUse()) { 02202 Value *ZextArg = Zext->getOperand(0); 02203 if (TruncInst *Trunc = dyn_cast<TruncInst>(ZextArg)) 02204 if (Trunc->getType()->getPrimitiveSizeInBits() == MulWidth) 02205 break; //Recognized 02206 } 02207 02208 // Recognize pattern: 02209 // mulval = mul(zext A, zext B) 02210 // cmp eq/neq mulval, and(mulval, mask), mask selects low MulWidth bits. 02211 ConstantInt *CI; 02212 Value *ValToMask; 02213 if (match(OtherVal, m_And(m_Value(ValToMask), m_ConstantInt(CI)))) { 02214 if (ValToMask != MulVal) 02215 return nullptr; 02216 const APInt &CVal = CI->getValue() + 1; 02217 if (CVal.isPowerOf2()) { 02218 unsigned MaskWidth = CVal.logBase2(); 02219 if (MaskWidth == MulWidth) 02220 break; // Recognized 02221 } 02222 } 02223 return nullptr; 02224 02225 case ICmpInst::ICMP_UGT: 02226 // Recognize pattern: 02227 // mulval = mul(zext A, zext B) 02228 // cmp ugt mulval, max 02229 if (ConstantInt *CI = dyn_cast<ConstantInt>(OtherVal)) { 02230 APInt MaxVal = APInt::getMaxValue(MulWidth); 02231 MaxVal = MaxVal.zext(CI->getBitWidth()); 02232 if (MaxVal.eq(CI->getValue())) 02233 break; // Recognized 02234 } 02235 return nullptr; 02236 02237 case ICmpInst::ICMP_UGE: 02238 // Recognize pattern: 02239 // mulval = mul(zext A, zext B) 02240 // cmp uge mulval, max+1 02241 if (ConstantInt *CI = dyn_cast<ConstantInt>(OtherVal)) { 02242 APInt MaxVal = APInt::getOneBitSet(CI->getBitWidth(), MulWidth); 02243 if (MaxVal.eq(CI->getValue())) 02244 break; // Recognized 02245 } 02246 return nullptr; 02247 02248 case ICmpInst::ICMP_ULE: 02249 // Recognize pattern: 02250 // mulval = mul(zext A, zext B) 02251 // cmp ule mulval, max 02252 if (ConstantInt *CI = dyn_cast<ConstantInt>(OtherVal)) { 02253 APInt MaxVal = APInt::getMaxValue(MulWidth); 02254 MaxVal = MaxVal.zext(CI->getBitWidth()); 02255 if (MaxVal.eq(CI->getValue())) 02256 break; // Recognized 02257 } 02258 return nullptr; 02259 02260 case ICmpInst::ICMP_ULT: 02261 // Recognize pattern: 02262 // mulval = mul(zext A, zext B) 02263 // cmp ule mulval, max + 1 02264 if (ConstantInt *CI = dyn_cast<ConstantInt>(OtherVal)) { 02265 APInt MaxVal = APInt::getOneBitSet(CI->getBitWidth(), MulWidth); 02266 if (MaxVal.eq(CI->getValue())) 02267 break; // Recognized 02268 } 02269 return nullptr; 02270 02271 default: 02272 return nullptr; 02273 } 02274 02275 InstCombiner::BuilderTy *Builder = IC.Builder; 02276 Builder->SetInsertPoint(MulInstr); 02277 Module *M = I.getParent()->getParent()->getParent(); 02278 02279 // Replace: mul(zext A, zext B) --> mul.with.overflow(A, B) 02280 Value *MulA = A, *MulB = B; 02281 if (WidthA < MulWidth) 02282 MulA = Builder->CreateZExt(A, MulType); 02283 if (WidthB < MulWidth) 02284 MulB = Builder->CreateZExt(B, MulType); 02285 Value *F = 02286 Intrinsic::getDeclaration(M, Intrinsic::umul_with_overflow, MulType); 02287 CallInst *Call = Builder->CreateCall2(F, MulA, MulB, "umul"); 02288 IC.Worklist.Add(MulInstr); 02289 02290 // If there are uses of mul result other than the comparison, we know that 02291 // they are truncation or binary AND. Change them to use result of 02292 // mul.with.overflow and adjust properly mask/size. 02293 if (MulVal->hasNUsesOrMore(2)) { 02294 Value *Mul = Builder->CreateExtractValue(Call, 0, "umul.value"); 02295 for (User *U : MulVal->users()) { 02296 if (U == &I || U == OtherVal) 02297 continue; 02298 if (TruncInst *TI = dyn_cast<TruncInst>(U)) { 02299 if (TI->getType()->getPrimitiveSizeInBits() == MulWidth) 02300 IC.ReplaceInstUsesWith(*TI, Mul); 02301 else 02302 TI->setOperand(0, Mul); 02303 } else if (BinaryOperator *BO = dyn_cast<BinaryOperator>(U)) { 02304 assert(BO->getOpcode() == Instruction::And); 02305 // Replace (mul & mask) --> zext (mul.with.overflow & short_mask) 02306 ConstantInt *CI = cast<ConstantInt>(BO->getOperand(1)); 02307 APInt ShortMask = CI->getValue().trunc(MulWidth); 02308 Value *ShortAnd = Builder->CreateAnd(Mul, ShortMask); 02309 Instruction *Zext = 02310 cast<Instruction>(Builder->CreateZExt(ShortAnd, BO->getType())); 02311 IC.Worklist.Add(Zext); 02312 IC.ReplaceInstUsesWith(*BO, Zext); 02313 } else { 02314 llvm_unreachable("Unexpected Binary operation"); 02315 } 02316 IC.Worklist.Add(cast<Instruction>(U)); 02317 } 02318 } 02319 if (isa<Instruction>(OtherVal)) 02320 IC.Worklist.Add(cast<Instruction>(OtherVal)); 02321 02322 // The original icmp gets replaced with the overflow value, maybe inverted 02323 // depending on predicate. 02324 bool Inverse = false; 02325 switch (I.getPredicate()) { 02326 case ICmpInst::ICMP_NE: 02327 break; 02328 case ICmpInst::ICMP_EQ: 02329 Inverse = true; 02330 break; 02331 case ICmpInst::ICMP_UGT: 02332 case ICmpInst::ICMP_UGE: 02333 if (I.getOperand(0) == MulVal) 02334 break; 02335 Inverse = true; 02336 break; 02337 case ICmpInst::ICMP_ULT: 02338 case ICmpInst::ICMP_ULE: 02339 if (I.getOperand(1) == MulVal) 02340 break; 02341 Inverse = true; 02342 break; 02343 default: 02344 llvm_unreachable("Unexpected predicate"); 02345 } 02346 if (Inverse) { 02347 Value *Res = Builder->CreateExtractValue(Call, 1); 02348 return BinaryOperator::CreateNot(Res); 02349 } 02350 02351 return ExtractValueInst::Create(Call, 1); 02352 } 02353 02354 // DemandedBitsLHSMask - When performing a comparison against a constant, 02355 // it is possible that not all the bits in the LHS are demanded. This helper 02356 // method computes the mask that IS demanded. 02357 static APInt DemandedBitsLHSMask(ICmpInst &I, 02358 unsigned BitWidth, bool isSignCheck) { 02359 if (isSignCheck) 02360 return APInt::getSignBit(BitWidth); 02361 02362 ConstantInt *CI = dyn_cast<ConstantInt>(I.getOperand(1)); 02363 if (!CI) return APInt::getAllOnesValue(BitWidth); 02364 const APInt &RHS = CI->getValue(); 02365 02366 switch (I.getPredicate()) { 02367 // For a UGT comparison, we don't care about any bits that 02368 // correspond to the trailing ones of the comparand. The value of these 02369 // bits doesn't impact the outcome of the comparison, because any value 02370 // greater than the RHS must differ in a bit higher than these due to carry. 02371 case ICmpInst::ICMP_UGT: { 02372 unsigned trailingOnes = RHS.countTrailingOnes(); 02373 APInt lowBitsSet = APInt::getLowBitsSet(BitWidth, trailingOnes); 02374 return ~lowBitsSet; 02375 } 02376 02377 // Similarly, for a ULT comparison, we don't care about the trailing zeros. 02378 // Any value less than the RHS must differ in a higher bit because of carries. 02379 case ICmpInst::ICMP_ULT: { 02380 unsigned trailingZeros = RHS.countTrailingZeros(); 02381 APInt lowBitsSet = APInt::getLowBitsSet(BitWidth, trailingZeros); 02382 return ~lowBitsSet; 02383 } 02384 02385 default: 02386 return APInt::getAllOnesValue(BitWidth); 02387 } 02388 02389 } 02390 02391 /// \brief Check if the order of \p Op0 and \p Op1 as operand in an ICmpInst 02392 /// should be swapped. 02393 /// The decision is based on how many times these two operands are reused 02394 /// as subtract operands and their positions in those instructions. 02395 /// The rational is that several architectures use the same instruction for 02396 /// both subtract and cmp, thus it is better if the order of those operands 02397 /// match. 02398 /// \return true if Op0 and Op1 should be swapped. 02399 static bool swapMayExposeCSEOpportunities(const Value * Op0, 02400 const Value * Op1) { 02401 // Filter out pointer value as those cannot appears directly in subtract. 02402 // FIXME: we may want to go through inttoptrs or bitcasts. 02403 if (Op0->getType()->isPointerTy()) 02404 return false; 02405 // Count every uses of both Op0 and Op1 in a subtract. 02406 // Each time Op0 is the first operand, count -1: swapping is bad, the 02407 // subtract has already the same layout as the compare. 02408 // Each time Op0 is the second operand, count +1: swapping is good, the 02409 // subtract has a different layout as the compare. 02410 // At the end, if the benefit is greater than 0, Op0 should come second to 02411 // expose more CSE opportunities. 02412 int GlobalSwapBenefits = 0; 02413 for (const User *U : Op0->users()) { 02414 const BinaryOperator *BinOp = dyn_cast<BinaryOperator>(U); 02415 if (!BinOp || BinOp->getOpcode() != Instruction::Sub) 02416 continue; 02417 // If Op0 is the first argument, this is not beneficial to swap the 02418 // arguments. 02419 int LocalSwapBenefits = -1; 02420 unsigned Op1Idx = 1; 02421 if (BinOp->getOperand(Op1Idx) == Op0) { 02422 Op1Idx = 0; 02423 LocalSwapBenefits = 1; 02424 } 02425 if (BinOp->getOperand(Op1Idx) != Op1) 02426 continue; 02427 GlobalSwapBenefits += LocalSwapBenefits; 02428 } 02429 return GlobalSwapBenefits > 0; 02430 } 02431 02432 Instruction *InstCombiner::visitICmpInst(ICmpInst &I) { 02433 bool Changed = false; 02434 Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1); 02435 unsigned Op0Cplxity = getComplexity(Op0); 02436 unsigned Op1Cplxity = getComplexity(Op1); 02437 02438 /// Orders the operands of the compare so that they are listed from most 02439 /// complex to least complex. This puts constants before unary operators, 02440 /// before binary operators. 02441 if (Op0Cplxity < Op1Cplxity || 02442 (Op0Cplxity == Op1Cplxity && 02443 swapMayExposeCSEOpportunities(Op0, Op1))) { 02444 I.swapOperands(); 02445 std::swap(Op0, Op1); 02446 Changed = true; 02447 } 02448 02449 if (Value *V = SimplifyICmpInst(I.getPredicate(), Op0, Op1, DL, TLI, DT, AT)) 02450 return ReplaceInstUsesWith(I, V); 02451 02452 // comparing -val or val with non-zero is the same as just comparing val 02453 // ie, abs(val) != 0 -> val != 0 02454 if (I.getPredicate() == ICmpInst::ICMP_NE && match(Op1, m_Zero())) 02455 { 02456 Value *Cond, *SelectTrue, *SelectFalse; 02457 if (match(Op0, m_Select(m_Value(Cond), m_Value(SelectTrue), 02458 m_Value(SelectFalse)))) { 02459 if (Value *V = dyn_castNegVal(SelectTrue)) { 02460 if (V == SelectFalse) 02461 return CmpInst::Create(Instruction::ICmp, I.getPredicate(), V, Op1); 02462 } 02463 else if (Value *V = dyn_castNegVal(SelectFalse)) { 02464 if (V == SelectTrue) 02465 return CmpInst::Create(Instruction::ICmp, I.getPredicate(), V, Op1); 02466 } 02467 } 02468 } 02469 02470 Type *Ty = Op0->getType(); 02471 02472 // icmp's with boolean values can always be turned into bitwise operations 02473 if (Ty->isIntegerTy(1)) { 02474 switch (I.getPredicate()) { 02475 default: llvm_unreachable("Invalid icmp instruction!"); 02476 case ICmpInst::ICMP_EQ: { // icmp eq i1 A, B -> ~(A^B) 02477 Value *Xor = Builder->CreateXor(Op0, Op1, I.getName()+"tmp"); 02478 return BinaryOperator::CreateNot(Xor); 02479 } 02480 case ICmpInst::ICMP_NE: // icmp eq i1 A, B -> A^B 02481 return BinaryOperator::CreateXor(Op0, Op1); 02482 02483 case ICmpInst::ICMP_UGT: 02484 std::swap(Op0, Op1); // Change icmp ugt -> icmp ult 02485 // FALL THROUGH 02486 case ICmpInst::ICMP_ULT:{ // icmp ult i1 A, B -> ~A & B 02487 Value *Not = Builder->CreateNot(Op0, I.getName()+"tmp"); 02488 return BinaryOperator::CreateAnd(Not, Op1); 02489 } 02490 case ICmpInst::ICMP_SGT: 02491 std::swap(Op0, Op1); // Change icmp sgt -> icmp slt 02492 // FALL THROUGH 02493 case ICmpInst::ICMP_SLT: { // icmp slt i1 A, B -> A & ~B 02494 Value *Not = Builder->CreateNot(Op1, I.getName()+"tmp"); 02495 return BinaryOperator::CreateAnd(Not, Op0); 02496 } 02497 case ICmpInst::ICMP_UGE: 02498 std::swap(Op0, Op1); // Change icmp uge -> icmp ule 02499 // FALL THROUGH 02500 case ICmpInst::ICMP_ULE: { // icmp ule i1 A, B -> ~A | B 02501 Value *Not = Builder->CreateNot(Op0, I.getName()+"tmp"); 02502 return BinaryOperator::CreateOr(Not, Op1); 02503 } 02504 case ICmpInst::ICMP_SGE: 02505 std::swap(Op0, Op1); // Change icmp sge -> icmp sle 02506 // FALL THROUGH 02507 case ICmpInst::ICMP_SLE: { // icmp sle i1 A, B -> A | ~B 02508 Value *Not = Builder->CreateNot(Op1, I.getName()+"tmp"); 02509 return BinaryOperator::CreateOr(Not, Op0); 02510 } 02511 } 02512 } 02513 02514 unsigned BitWidth = 0; 02515 if (Ty->isIntOrIntVectorTy()) 02516 BitWidth = Ty->getScalarSizeInBits(); 02517 else if (DL) // Pointers require DL info to get their size. 02518 BitWidth = DL->getTypeSizeInBits(Ty->getScalarType()); 02519 02520 bool isSignBit = false; 02521 02522 // See if we are doing a comparison with a constant. 02523 if (ConstantInt *CI = dyn_cast<ConstantInt>(Op1)) { 02524 Value *A = nullptr, *B = nullptr; 02525 02526 // Match the following pattern, which is a common idiom when writing 02527 // overflow-safe integer arithmetic function. The source performs an 02528 // addition in wider type, and explicitly checks for overflow using 02529 // comparisons against INT_MIN and INT_MAX. Simplify this by using the 02530 // sadd_with_overflow intrinsic. 02531 // 02532 // TODO: This could probably be generalized to handle other overflow-safe 02533 // operations if we worked out the formulas to compute the appropriate 02534 // magic constants. 02535 // 02536 // sum = a + b 02537 // if (sum+128 >u 255) ... -> llvm.sadd.with.overflow.i8 02538 { 02539 ConstantInt *CI2; // I = icmp ugt (add (add A, B), CI2), CI 02540 if (I.getPredicate() == ICmpInst::ICMP_UGT && 02541 match(Op0, m_Add(m_Add(m_Value(A), m_Value(B)), m_ConstantInt(CI2)))) 02542 if (Instruction *Res = ProcessUGT_ADDCST_ADD(I, A, B, CI2, CI, *this)) 02543 return Res; 02544 } 02545 02546 // (icmp ne/eq (sub A B) 0) -> (icmp ne/eq A, B) 02547 if (I.isEquality() && CI->isZero() && 02548 match(Op0, m_Sub(m_Value(A), m_Value(B)))) { 02549 // (icmp cond A B) if cond is equality 02550 return new ICmpInst(I.getPredicate(), A, B); 02551 } 02552 02553 // If we have an icmp le or icmp ge instruction, turn it into the 02554 // appropriate icmp lt or icmp gt instruction. This allows us to rely on 02555 // them being folded in the code below. The SimplifyICmpInst code has 02556 // already handled the edge cases for us, so we just assert on them. 02557 switch (I.getPredicate()) { 02558 default: break; 02559 case ICmpInst::ICMP_ULE: 02560 assert(!CI->isMaxValue(false)); // A <=u MAX -> TRUE 02561 return new ICmpInst(ICmpInst::ICMP_ULT, Op0, 02562 Builder->getInt(CI->getValue()+1)); 02563 case ICmpInst::ICMP_SLE: 02564 assert(!CI->isMaxValue(true)); // A <=s MAX -> TRUE 02565 return new ICmpInst(ICmpInst::ICMP_SLT, Op0, 02566 Builder->getInt(CI->getValue()+1)); 02567 case ICmpInst::ICMP_UGE: 02568 assert(!CI->isMinValue(false)); // A >=u MIN -> TRUE 02569 return new ICmpInst(ICmpInst::ICMP_UGT, Op0, 02570 Builder->getInt(CI->getValue()-1)); 02571 case ICmpInst::ICMP_SGE: 02572 assert(!CI->isMinValue(true)); // A >=s MIN -> TRUE 02573 return new ICmpInst(ICmpInst::ICMP_SGT, Op0, 02574 Builder->getInt(CI->getValue()-1)); 02575 } 02576 02577 // (icmp eq/ne (ashr/lshr const2, A), const1) 02578 if (I.isEquality()) { 02579 ConstantInt *CI2; 02580 if (match(Op0, m_AShr(m_ConstantInt(CI2), m_Value(A))) || 02581 match(Op0, m_LShr(m_ConstantInt(CI2), m_Value(A)))) { 02582 return FoldICmpCstShrCst(I, Op0, A, CI, CI2); 02583 } 02584 } 02585 02586 // If this comparison is a normal comparison, it demands all 02587 // bits, if it is a sign bit comparison, it only demands the sign bit. 02588 bool UnusedBit; 02589 isSignBit = isSignBitCheck(I.getPredicate(), CI, UnusedBit); 02590 } 02591 02592 // See if we can fold the comparison based on range information we can get 02593 // by checking whether bits are known to be zero or one in the input. 02594 if (BitWidth != 0) { 02595 APInt Op0KnownZero(BitWidth, 0), Op0KnownOne(BitWidth, 0); 02596 APInt Op1KnownZero(BitWidth, 0), Op1KnownOne(BitWidth, 0); 02597 02598 if (SimplifyDemandedBits(I.getOperandUse(0), 02599 DemandedBitsLHSMask(I, BitWidth, isSignBit), 02600 Op0KnownZero, Op0KnownOne, 0)) 02601 return &I; 02602 if (SimplifyDemandedBits(I.getOperandUse(1), 02603 APInt::getAllOnesValue(BitWidth), 02604 Op1KnownZero, Op1KnownOne, 0)) 02605 return &I; 02606 02607 // Given the known and unknown bits, compute a range that the LHS could be 02608 // in. Compute the Min, Max and RHS values based on the known bits. For the 02609 // EQ and NE we use unsigned values. 02610 APInt Op0Min(BitWidth, 0), Op0Max(BitWidth, 0); 02611 APInt Op1Min(BitWidth, 0), Op1Max(BitWidth, 0); 02612 if (I.isSigned()) { 02613 ComputeSignedMinMaxValuesFromKnownBits(Op0KnownZero, Op0KnownOne, 02614 Op0Min, Op0Max); 02615 ComputeSignedMinMaxValuesFromKnownBits(Op1KnownZero, Op1KnownOne, 02616 Op1Min, Op1Max); 02617 } else { 02618 ComputeUnsignedMinMaxValuesFromKnownBits(Op0KnownZero, Op0KnownOne, 02619 Op0Min, Op0Max); 02620 ComputeUnsignedMinMaxValuesFromKnownBits(Op1KnownZero, Op1KnownOne, 02621 Op1Min, Op1Max); 02622 } 02623 02624 // If Min and Max are known to be the same, then SimplifyDemandedBits 02625 // figured out that the LHS is a constant. Just constant fold this now so 02626 // that code below can assume that Min != Max. 02627 if (!isa<Constant>(Op0) && Op0Min == Op0Max) 02628 return new ICmpInst(I.getPredicate(), 02629 ConstantInt::get(Op0->getType(), Op0Min), Op1); 02630 if (!isa<Constant>(Op1) && Op1Min == Op1Max) 02631 return new ICmpInst(I.getPredicate(), Op0, 02632 ConstantInt::get(Op1->getType(), Op1Min)); 02633 02634 // Based on the range information we know about the LHS, see if we can 02635 // simplify this comparison. For example, (x&4) < 8 is always true. 02636 switch (I.getPredicate()) { 02637 default: llvm_unreachable("Unknown icmp opcode!"); 02638 case ICmpInst::ICMP_EQ: { 02639 if (Op0Max.ult(Op1Min) || Op0Min.ugt(Op1Max)) 02640 return ReplaceInstUsesWith(I, ConstantInt::getFalse(I.getType())); 02641 02642 // If all bits are known zero except for one, then we know at most one 02643 // bit is set. If the comparison is against zero, then this is a check 02644 // to see if *that* bit is set. 02645 APInt Op0KnownZeroInverted = ~Op0KnownZero; 02646 if (~Op1KnownZero == 0) { 02647 // If the LHS is an AND with the same constant, look through it. 02648 Value *LHS = nullptr; 02649 ConstantInt *LHSC = nullptr; 02650 if (!match(Op0, m_And(m_Value(LHS), m_ConstantInt(LHSC))) || 02651 LHSC->getValue() != Op0KnownZeroInverted) 02652 LHS = Op0; 02653 02654 // If the LHS is 1 << x, and we know the result is a power of 2 like 8, 02655 // then turn "((1 << x)&8) == 0" into "x != 3". 02656 // or turn "((1 << x)&7) == 0" into "x > 2". 02657 Value *X = nullptr; 02658 if (match(LHS, m_Shl(m_One(), m_Value(X)))) { 02659 APInt ValToCheck = Op0KnownZeroInverted; 02660 if (ValToCheck.isPowerOf2()) { 02661 unsigned CmpVal = ValToCheck.countTrailingZeros(); 02662 return new ICmpInst(ICmpInst::ICMP_NE, X, 02663 ConstantInt::get(X->getType(), CmpVal)); 02664 } else if ((++ValToCheck).isPowerOf2()) { 02665 unsigned CmpVal = ValToCheck.countTrailingZeros() - 1; 02666 return new ICmpInst(ICmpInst::ICMP_UGT, X, 02667 ConstantInt::get(X->getType(), CmpVal)); 02668 } 02669 } 02670 02671 // If the LHS is 8 >>u x, and we know the result is a power of 2 like 1, 02672 // then turn "((8 >>u x)&1) == 0" into "x != 3". 02673 const APInt *CI; 02674 if (Op0KnownZeroInverted == 1 && 02675 match(LHS, m_LShr(m_Power2(CI), m_Value(X)))) 02676 return new ICmpInst(ICmpInst::ICMP_NE, X, 02677 ConstantInt::get(X->getType(), 02678 CI->countTrailingZeros())); 02679 } 02680 02681 break; 02682 } 02683 case ICmpInst::ICMP_NE: { 02684 if (Op0Max.ult(Op1Min) || Op0Min.ugt(Op1Max)) 02685 return ReplaceInstUsesWith(I, ConstantInt::getTrue(I.getType())); 02686 02687 // If all bits are known zero except for one, then we know at most one 02688 // bit is set. If the comparison is against zero, then this is a check 02689 // to see if *that* bit is set. 02690 APInt Op0KnownZeroInverted = ~Op0KnownZero; 02691 if (~Op1KnownZero == 0) { 02692 // If the LHS is an AND with the same constant, look through it. 02693 Value *LHS = nullptr; 02694 ConstantInt *LHSC = nullptr; 02695 if (!match(Op0, m_And(m_Value(LHS), m_ConstantInt(LHSC))) || 02696 LHSC->getValue() != Op0KnownZeroInverted) 02697 LHS = Op0; 02698 02699 // If the LHS is 1 << x, and we know the result is a power of 2 like 8, 02700 // then turn "((1 << x)&8) != 0" into "x == 3". 02701 // or turn "((1 << x)&7) != 0" into "x < 3". 02702 Value *X = nullptr; 02703 if (match(LHS, m_Shl(m_One(), m_Value(X)))) { 02704 APInt ValToCheck = Op0KnownZeroInverted; 02705 if (ValToCheck.isPowerOf2()) { 02706 unsigned CmpVal = ValToCheck.countTrailingZeros(); 02707 return new ICmpInst(ICmpInst::ICMP_EQ, X, 02708 ConstantInt::get(X->getType(), CmpVal)); 02709 } else if ((++ValToCheck).isPowerOf2()) { 02710 unsigned CmpVal = ValToCheck.countTrailingZeros(); 02711 return new ICmpInst(ICmpInst::ICMP_ULT, X, 02712 ConstantInt::get(X->getType(), CmpVal)); 02713 } 02714 } 02715 02716 // If the LHS is 8 >>u x, and we know the result is a power of 2 like 1, 02717 // then turn "((8 >>u x)&1) != 0" into "x == 3". 02718 const APInt *CI; 02719 if (Op0KnownZeroInverted == 1 && 02720 match(LHS, m_LShr(m_Power2(CI), m_Value(X)))) 02721 return new ICmpInst(ICmpInst::ICMP_EQ, X, 02722 ConstantInt::get(X->getType(), 02723 CI->countTrailingZeros())); 02724 } 02725 02726 break; 02727 } 02728 case ICmpInst::ICMP_ULT: 02729 if (Op0Max.ult(Op1Min)) // A <u B -> true if max(A) < min(B) 02730 return ReplaceInstUsesWith(I, ConstantInt::getTrue(I.getType())); 02731 if (Op0Min.uge(Op1Max)) // A <u B -> false if min(A) >= max(B) 02732 return ReplaceInstUsesWith(I, ConstantInt::getFalse(I.getType())); 02733 if (Op1Min == Op0Max) // A <u B -> A != B if max(A) == min(B) 02734 return new ICmpInst(ICmpInst::ICMP_NE, Op0, Op1); 02735 if (ConstantInt *CI = dyn_cast<ConstantInt>(Op1)) { 02736 if (Op1Max == Op0Min+1) // A <u C -> A == C-1 if min(A)+1 == C 02737 return new ICmpInst(ICmpInst::ICMP_EQ, Op0, 02738 Builder->getInt(CI->getValue()-1)); 02739 02740 // (x <u 2147483648) -> (x >s -1) -> true if sign bit clear 02741 if (CI->isMinValue(true)) 02742 return new ICmpInst(ICmpInst::ICMP_SGT, Op0, 02743 Constant::getAllOnesValue(Op0->getType())); 02744 } 02745 break; 02746 case ICmpInst::ICMP_UGT: 02747 if (Op0Min.ugt(Op1Max)) // A >u B -> true if min(A) > max(B) 02748 return ReplaceInstUsesWith(I, ConstantInt::getTrue(I.getType())); 02749 if (Op0Max.ule(Op1Min)) // A >u B -> false if max(A) <= max(B) 02750 return ReplaceInstUsesWith(I, ConstantInt::getFalse(I.getType())); 02751 02752 if (Op1Max == Op0Min) // A >u B -> A != B if min(A) == max(B) 02753 return new ICmpInst(ICmpInst::ICMP_NE, Op0, Op1); 02754 if (ConstantInt *CI = dyn_cast<ConstantInt>(Op1)) { 02755 if (Op1Min == Op0Max-1) // A >u C -> A == C+1 if max(a)-1 == C 02756 return new ICmpInst(ICmpInst::ICMP_EQ, Op0, 02757 Builder->getInt(CI->getValue()+1)); 02758 02759 // (x >u 2147483647) -> (x <s 0) -> true if sign bit set 02760 if (CI->isMaxValue(true)) 02761 return new ICmpInst(ICmpInst::ICMP_SLT, Op0, 02762 Constant::getNullValue(Op0->getType())); 02763 } 02764 break; 02765 case ICmpInst::ICMP_SLT: 02766 if (Op0Max.slt(Op1Min)) // A <s B -> true if max(A) < min(C) 02767 return ReplaceInstUsesWith(I, ConstantInt::getTrue(I.getType())); 02768 if (Op0Min.sge(Op1Max)) // A <s B -> false if min(A) >= max(C) 02769 return ReplaceInstUsesWith(I, ConstantInt::getFalse(I.getType())); 02770 if (Op1Min == Op0Max) // A <s B -> A != B if max(A) == min(B) 02771 return new ICmpInst(ICmpInst::ICMP_NE, Op0, Op1); 02772 if (ConstantInt *CI = dyn_cast<ConstantInt>(Op1)) { 02773 if (Op1Max == Op0Min+1) // A <s C -> A == C-1 if min(A)+1 == C 02774 return new ICmpInst(ICmpInst::ICMP_EQ, Op0, 02775 Builder->getInt(CI->getValue()-1)); 02776 } 02777 break; 02778 case ICmpInst::ICMP_SGT: 02779 if (Op0Min.sgt(Op1Max)) // A >s B -> true if min(A) > max(B) 02780 return ReplaceInstUsesWith(I, ConstantInt::getTrue(I.getType())); 02781 if (Op0Max.sle(Op1Min)) // A >s B -> false if max(A) <= min(B) 02782 return ReplaceInstUsesWith(I, ConstantInt::getFalse(I.getType())); 02783 02784 if (Op1Max == Op0Min) // A >s B -> A != B if min(A) == max(B) 02785 return new ICmpInst(ICmpInst::ICMP_NE, Op0, Op1); 02786 if (ConstantInt *CI = dyn_cast<ConstantInt>(Op1)) { 02787 if (Op1Min == Op0Max-1) // A >s C -> A == C+1 if max(A)-1 == C 02788 return new ICmpInst(ICmpInst::ICMP_EQ, Op0, 02789 Builder->getInt(CI->getValue()+1)); 02790 } 02791 break; 02792 case ICmpInst::ICMP_SGE: 02793 assert(!isa<ConstantInt>(Op1) && "ICMP_SGE with ConstantInt not folded!"); 02794 if (Op0Min.sge(Op1Max)) // A >=s B -> true if min(A) >= max(B) 02795 return ReplaceInstUsesWith(I, ConstantInt::getTrue(I.getType())); 02796 if (Op0Max.slt(Op1Min)) // A >=s B -> false if max(A) < min(B) 02797 return ReplaceInstUsesWith(I, ConstantInt::getFalse(I.getType())); 02798 break; 02799 case ICmpInst::ICMP_SLE: 02800 assert(!isa<ConstantInt>(Op1) && "ICMP_SLE with ConstantInt not folded!"); 02801 if (Op0Max.sle(Op1Min)) // A <=s B -> true if max(A) <= min(B) 02802 return ReplaceInstUsesWith(I, ConstantInt::getTrue(I.getType())); 02803 if (Op0Min.sgt(Op1Max)) // A <=s B -> false if min(A) > max(B) 02804 return ReplaceInstUsesWith(I, ConstantInt::getFalse(I.getType())); 02805 break; 02806 case ICmpInst::ICMP_UGE: 02807 assert(!isa<ConstantInt>(Op1) && "ICMP_UGE with ConstantInt not folded!"); 02808 if (Op0Min.uge(Op1Max)) // A >=u B -> true if min(A) >= max(B) 02809 return ReplaceInstUsesWith(I, ConstantInt::getTrue(I.getType())); 02810 if (Op0Max.ult(Op1Min)) // A >=u B -> false if max(A) < min(B) 02811 return ReplaceInstUsesWith(I, ConstantInt::getFalse(I.getType())); 02812 break; 02813 case ICmpInst::ICMP_ULE: 02814 assert(!isa<ConstantInt>(Op1) && "ICMP_ULE with ConstantInt not folded!"); 02815 if (Op0Max.ule(Op1Min)) // A <=u B -> true if max(A) <= min(B) 02816 return ReplaceInstUsesWith(I, ConstantInt::getTrue(I.getType())); 02817 if (Op0Min.ugt(Op1Max)) // A <=u B -> false if min(A) > max(B) 02818 return ReplaceInstUsesWith(I, ConstantInt::getFalse(I.getType())); 02819 break; 02820 } 02821 02822 // Turn a signed comparison into an unsigned one if both operands 02823 // are known to have the same sign. 02824 if (I.isSigned() && 02825 ((Op0KnownZero.isNegative() && Op1KnownZero.isNegative()) || 02826 (Op0KnownOne.isNegative() && Op1KnownOne.isNegative()))) 02827 return new ICmpInst(I.getUnsignedPredicate(), Op0, Op1); 02828 } 02829 02830 // Test if the ICmpInst instruction is used exclusively by a select as 02831 // part of a minimum or maximum operation. If so, refrain from doing 02832 // any other folding. This helps out other analyses which understand 02833 // non-obfuscated minimum and maximum idioms, such as ScalarEvolution 02834 // and CodeGen. And in this case, at least one of the comparison 02835 // operands has at least one user besides the compare (the select), 02836 // which would often largely negate the benefit of folding anyway. 02837 if (I.hasOneUse()) 02838 if (SelectInst *SI = dyn_cast<SelectInst>(*I.user_begin())) 02839 if ((SI->getOperand(1) == Op0 && SI->getOperand(2) == Op1) || 02840 (SI->getOperand(2) == Op0 && SI->getOperand(1) == Op1)) 02841 return nullptr; 02842 02843 // See if we are doing a comparison between a constant and an instruction that 02844 // can be folded into the comparison. 02845 if (ConstantInt *CI = dyn_cast<ConstantInt>(Op1)) { 02846 // Since the RHS is a ConstantInt (CI), if the left hand side is an 02847 // instruction, see if that instruction also has constants so that the 02848 // instruction can be folded into the icmp 02849 if (Instruction *LHSI = dyn_cast<Instruction>(Op0)) 02850 if (Instruction *Res = visitICmpInstWithInstAndIntCst(I, LHSI, CI)) 02851 return Res; 02852 } 02853 02854 // Handle icmp with constant (but not simple integer constant) RHS 02855 if (Constant *RHSC = dyn_cast<Constant>(Op1)) { 02856 if (Instruction *LHSI = dyn_cast<Instruction>(Op0)) 02857 switch (LHSI->getOpcode()) { 02858 case Instruction::GetElementPtr: 02859 // icmp pred GEP (P, int 0, int 0, int 0), null -> icmp pred P, null 02860 if (RHSC->isNullValue() && 02861 cast<GetElementPtrInst>(LHSI)->hasAllZeroIndices()) 02862 return new ICmpInst(I.getPredicate(), LHSI->getOperand(0), 02863 Constant::getNullValue(LHSI->getOperand(0)->getType())); 02864 break; 02865 case Instruction::PHI: 02866 // Only fold icmp into the PHI if the phi and icmp are in the same 02867 // block. If in the same block, we're encouraging jump threading. If 02868 // not, we are just pessimizing the code by making an i1 phi. 02869 if (LHSI->getParent() == I.getParent()) 02870 if (Instruction *NV = FoldOpIntoPhi(I)) 02871 return NV; 02872 break; 02873 case Instruction::Select: { 02874 // If either operand of the select is a constant, we can fold the 02875 // comparison into the select arms, which will cause one to be 02876 // constant folded and the select turned into a bitwise or. 02877 Value *Op1 = nullptr, *Op2 = nullptr; 02878 if (Constant *C = dyn_cast<Constant>(LHSI->getOperand(1))) 02879 Op1 = ConstantExpr::getICmp(I.getPredicate(), C, RHSC); 02880 if (Constant *C = dyn_cast<Constant>(LHSI->getOperand(2))) 02881 Op2 = ConstantExpr::getICmp(I.getPredicate(), C, RHSC); 02882 02883 // We only want to perform this transformation if it will not lead to 02884 // additional code. This is true if either both sides of the select 02885 // fold to a constant (in which case the icmp is replaced with a select 02886 // which will usually simplify) or this is the only user of the 02887 // select (in which case we are trading a select+icmp for a simpler 02888 // select+icmp). 02889 if ((Op1 && Op2) || (LHSI->hasOneUse() && (Op1 || Op2))) { 02890 if (!Op1) 02891 Op1 = Builder->CreateICmp(I.getPredicate(), LHSI->getOperand(1), 02892 RHSC, I.getName()); 02893 if (!Op2) 02894 Op2 = Builder->CreateICmp(I.getPredicate(), LHSI->getOperand(2), 02895 RHSC, I.getName()); 02896 return SelectInst::Create(LHSI->getOperand(0), Op1, Op2); 02897 } 02898 break; 02899 } 02900 case Instruction::IntToPtr: 02901 // icmp pred inttoptr(X), null -> icmp pred X, 0 02902 if (RHSC->isNullValue() && DL && 02903 DL->getIntPtrType(RHSC->getType()) == 02904 LHSI->getOperand(0)->getType()) 02905 return new ICmpInst(I.getPredicate(), LHSI->getOperand(0), 02906 Constant::getNullValue(LHSI->getOperand(0)->getType())); 02907 break; 02908 02909 case Instruction::Load: 02910 // Try to optimize things like "A[i] > 4" to index computations. 02911 if (GetElementPtrInst *GEP = 02912 dyn_cast<GetElementPtrInst>(LHSI->getOperand(0))) { 02913 if (GlobalVariable *GV = dyn_cast<GlobalVariable>(GEP->getOperand(0))) 02914 if (GV->isConstant() && GV->hasDefinitiveInitializer() && 02915 !cast<LoadInst>(LHSI)->isVolatile()) 02916 if (Instruction *Res = FoldCmpLoadFromIndexedGlobal(GEP, GV, I)) 02917 return Res; 02918 } 02919 break; 02920 } 02921 } 02922 02923 // If we can optimize a 'icmp GEP, P' or 'icmp P, GEP', do so now. 02924 if (GEPOperator *GEP = dyn_cast<GEPOperator>(Op0)) 02925 if (Instruction *NI = FoldGEPICmp(GEP, Op1, I.getPredicate(), I)) 02926 return NI; 02927 if (GEPOperator *GEP = dyn_cast<GEPOperator>(Op1)) 02928 if (Instruction *NI = FoldGEPICmp(GEP, Op0, 02929 ICmpInst::getSwappedPredicate(I.getPredicate()), I)) 02930 return NI; 02931 02932 // Test to see if the operands of the icmp are casted versions of other 02933 // values. If the ptr->ptr cast can be stripped off both arguments, we do so 02934 // now. 02935 if (BitCastInst *CI = dyn_cast<BitCastInst>(Op0)) { 02936 if (Op0->getType()->isPointerTy() && 02937 (isa<Constant>(Op1) || isa<BitCastInst>(Op1))) { 02938 // We keep moving the cast from the left operand over to the right 02939 // operand, where it can often be eliminated completely. 02940 Op0 = CI->getOperand(0); 02941 02942 // If operand #1 is a bitcast instruction, it must also be a ptr->ptr cast 02943 // so eliminate it as well. 02944 if (BitCastInst *CI2 = dyn_cast<BitCastInst>(Op1)) 02945 Op1 = CI2->getOperand(0); 02946 02947 // If Op1 is a constant, we can fold the cast into the constant. 02948 if (Op0->getType() != Op1->getType()) { 02949 if (Constant *Op1C = dyn_cast<Constant>(Op1)) { 02950 Op1 = ConstantExpr::getBitCast(Op1C, Op0->getType()); 02951 } else { 02952 // Otherwise, cast the RHS right before the icmp 02953 Op1 = Builder->CreateBitCast(Op1, Op0->getType()); 02954 } 02955 } 02956 return new ICmpInst(I.getPredicate(), Op0, Op1); 02957 } 02958 } 02959 02960 if (isa<CastInst>(Op0)) { 02961 // Handle the special case of: icmp (cast bool to X), <cst> 02962 // This comes up when you have code like 02963 // int X = A < B; 02964 // if (X) ... 02965 // For generality, we handle any zero-extension of any operand comparison 02966 // with a constant or another cast from the same type. 02967 if (isa<Constant>(Op1) || isa<CastInst>(Op1)) 02968 if (Instruction *R = visitICmpInstWithCastAndCast(I)) 02969 return R; 02970 } 02971 02972 // Special logic for binary operators. 02973 BinaryOperator *BO0 = dyn_cast<BinaryOperator>(Op0); 02974 BinaryOperator *BO1 = dyn_cast<BinaryOperator>(Op1); 02975 if (BO0 || BO1) { 02976 CmpInst::Predicate Pred = I.getPredicate(); 02977 bool NoOp0WrapProblem = false, NoOp1WrapProblem = false; 02978 if (BO0 && isa<OverflowingBinaryOperator>(BO0)) 02979 NoOp0WrapProblem = ICmpInst::isEquality(Pred) || 02980 (CmpInst::isUnsigned(Pred) && BO0->hasNoUnsignedWrap()) || 02981 (CmpInst::isSigned(Pred) && BO0->hasNoSignedWrap()); 02982 if (BO1 && isa<OverflowingBinaryOperator>(BO1)) 02983 NoOp1WrapProblem = ICmpInst::isEquality(Pred) || 02984 (CmpInst::isUnsigned(Pred) && BO1->hasNoUnsignedWrap()) || 02985 (CmpInst::isSigned(Pred) && BO1->hasNoSignedWrap()); 02986 02987 // Analyze the case when either Op0 or Op1 is an add instruction. 02988 // Op0 = A + B (or A and B are null); Op1 = C + D (or C and D are null). 02989 Value *A = nullptr, *B = nullptr, *C = nullptr, *D = nullptr; 02990 if (BO0 && BO0->getOpcode() == Instruction::Add) 02991 A = BO0->getOperand(0), B = BO0->getOperand(1); 02992 if (BO1 && BO1->getOpcode() == Instruction::Add) 02993 C = BO1->getOperand(0), D = BO1->getOperand(1); 02994 02995 // icmp (X+Y), X -> icmp Y, 0 for equalities or if there is no overflow. 02996 if ((A == Op1 || B == Op1) && NoOp0WrapProblem) 02997 return new ICmpInst(Pred, A == Op1 ? B : A, 02998 Constant::getNullValue(Op1->getType())); 02999 03000 // icmp X, (X+Y) -> icmp 0, Y for equalities or if there is no overflow. 03001 if ((C == Op0 || D == Op0) && NoOp1WrapProblem) 03002 return new ICmpInst(Pred, Constant::getNullValue(Op0->getType()), 03003 C == Op0 ? D : C); 03004 03005 // icmp (X+Y), (X+Z) -> icmp Y, Z for equalities or if there is no overflow. 03006 if (A && C && (A == C || A == D || B == C || B == D) && 03007 NoOp0WrapProblem && NoOp1WrapProblem && 03008 // Try not to increase register pressure. 03009 BO0->hasOneUse() && BO1->hasOneUse()) { 03010 // Determine Y and Z in the form icmp (X+Y), (X+Z). 03011 Value *Y, *Z; 03012 if (A == C) { 03013 // C + B == C + D -> B == D 03014 Y = B; 03015 Z = D; 03016 } else if (A == D) { 03017 // D + B == C + D -> B == C 03018 Y = B; 03019 Z = C; 03020 } else if (B == C) { 03021 // A + C == C + D -> A == D 03022 Y = A; 03023 Z = D; 03024 } else { 03025 assert(B == D); 03026 // A + D == C + D -> A == C 03027 Y = A; 03028 Z = C; 03029 } 03030 return new ICmpInst(Pred, Y, Z); 03031 } 03032 03033 // icmp slt (X + -1), Y -> icmp sle X, Y 03034 if (A && NoOp0WrapProblem && Pred == CmpInst::ICMP_SLT && 03035 match(B, m_AllOnes())) 03036 return new ICmpInst(CmpInst::ICMP_SLE, A, Op1); 03037 03038 // icmp sge (X + -1), Y -> icmp sgt X, Y 03039 if (A && NoOp0WrapProblem && Pred == CmpInst::ICMP_SGE && 03040 match(B, m_AllOnes())) 03041 return new ICmpInst(CmpInst::ICMP_SGT, A, Op1); 03042 03043 // icmp sle (X + 1), Y -> icmp slt X, Y 03044 if (A && NoOp0WrapProblem && Pred == CmpInst::ICMP_SLE && 03045 match(B, m_One())) 03046 return new ICmpInst(CmpInst::ICMP_SLT, A, Op1); 03047 03048 // icmp sgt (X + 1), Y -> icmp sge X, Y 03049 if (A && NoOp0WrapProblem && Pred == CmpInst::ICMP_SGT && 03050 match(B, m_One())) 03051 return new ICmpInst(CmpInst::ICMP_SGE, A, Op1); 03052 03053 // if C1 has greater magnitude than C2: 03054 // icmp (X + C1), (Y + C2) -> icmp (X + C3), Y 03055 // s.t. C3 = C1 - C2 03056 // 03057 // if C2 has greater magnitude than C1: 03058 // icmp (X + C1), (Y + C2) -> icmp X, (Y + C3) 03059 // s.t. C3 = C2 - C1 03060 if (A && C && NoOp0WrapProblem && NoOp1WrapProblem && 03061 (BO0->hasOneUse() || BO1->hasOneUse()) && !I.isUnsigned()) 03062 if (ConstantInt *C1 = dyn_cast<ConstantInt>(B)) 03063 if (ConstantInt *C2 = dyn_cast<ConstantInt>(D)) { 03064 const APInt &AP1 = C1->getValue(); 03065 const APInt &AP2 = C2->getValue(); 03066 if (AP1.isNegative() == AP2.isNegative()) { 03067 APInt AP1Abs = C1->getValue().abs(); 03068 APInt AP2Abs = C2->getValue().abs(); 03069 if (AP1Abs.uge(AP2Abs)) { 03070 ConstantInt *C3 = Builder->getInt(AP1 - AP2); 03071 Value *NewAdd = Builder->CreateNSWAdd(A, C3); 03072 return new ICmpInst(Pred, NewAdd, C); 03073 } else { 03074 ConstantInt *C3 = Builder->getInt(AP2 - AP1); 03075 Value *NewAdd = Builder->CreateNSWAdd(C, C3); 03076 return new ICmpInst(Pred, A, NewAdd); 03077 } 03078 } 03079 } 03080 03081 03082 // Analyze the case when either Op0 or Op1 is a sub instruction. 03083 // Op0 = A - B (or A and B are null); Op1 = C - D (or C and D are null). 03084 A = nullptr; B = nullptr; C = nullptr; D = nullptr; 03085 if (BO0 && BO0->getOpcode() == Instruction::Sub) 03086 A = BO0->getOperand(0), B = BO0->getOperand(1); 03087 if (BO1 && BO1->getOpcode() == Instruction::Sub) 03088 C = BO1->getOperand(0), D = BO1->getOperand(1); 03089 03090 // icmp (X-Y), X -> icmp 0, Y for equalities or if there is no overflow. 03091 if (A == Op1 && NoOp0WrapProblem) 03092 return new ICmpInst(Pred, Constant::getNullValue(Op1->getType()), B); 03093 03094 // icmp X, (X-Y) -> icmp Y, 0 for equalities or if there is no overflow. 03095 if (C == Op0 && NoOp1WrapProblem) 03096 return new ICmpInst(Pred, D, Constant::getNullValue(Op0->getType())); 03097 03098 // icmp (Y-X), (Z-X) -> icmp Y, Z for equalities or if there is no overflow. 03099 if (B && D && B == D && NoOp0WrapProblem && NoOp1WrapProblem && 03100 // Try not to increase register pressure. 03101 BO0->hasOneUse() && BO1->hasOneUse()) 03102 return new ICmpInst(Pred, A, C); 03103 03104 // icmp (X-Y), (X-Z) -> icmp Z, Y for equalities or if there is no overflow. 03105 if (A && C && A == C && NoOp0WrapProblem && NoOp1WrapProblem && 03106 // Try not to increase register pressure. 03107 BO0->hasOneUse() && BO1->hasOneUse()) 03108 return new ICmpInst(Pred, D, B); 03109 03110 // icmp (0-X) < cst --> x > -cst 03111 if (NoOp0WrapProblem && ICmpInst::isSigned(Pred)) { 03112 Value *X; 03113 if (match(BO0, m_Neg(m_Value(X)))) 03114 if (ConstantInt *RHSC = dyn_cast<ConstantInt>(Op1)) 03115 if (!RHSC->isMinValue(/*isSigned=*/true)) 03116 return new ICmpInst(I.getSwappedPredicate(), X, 03117 ConstantExpr::getNeg(RHSC)); 03118 } 03119 03120 BinaryOperator *SRem = nullptr; 03121 // icmp (srem X, Y), Y 03122 if (BO0 && BO0->getOpcode() == Instruction::SRem && 03123 Op1 == BO0->getOperand(1)) 03124 SRem = BO0; 03125 // icmp Y, (srem X, Y) 03126 else if (BO1 && BO1->getOpcode() == Instruction::SRem && 03127 Op0 == BO1->getOperand(1)) 03128 SRem = BO1; 03129 if (SRem) { 03130 // We don't check hasOneUse to avoid increasing register pressure because 03131 // the value we use is the same value this instruction was already using. 03132 switch (SRem == BO0 ? ICmpInst::getSwappedPredicate(Pred) : Pred) { 03133 default: break; 03134 case ICmpInst::ICMP_EQ: 03135 return ReplaceInstUsesWith(I, ConstantInt::getFalse(I.getType())); 03136 case ICmpInst::ICMP_NE: 03137 return ReplaceInstUsesWith(I, ConstantInt::getTrue(I.getType())); 03138 case ICmpInst::ICMP_SGT: 03139 case ICmpInst::ICMP_SGE: 03140 return new ICmpInst(ICmpInst::ICMP_SGT, SRem->getOperand(1), 03141 Constant::getAllOnesValue(SRem->getType())); 03142 case ICmpInst::ICMP_SLT: 03143 case ICmpInst::ICMP_SLE: 03144 return new ICmpInst(ICmpInst::ICMP_SLT, SRem->getOperand(1), 03145 Constant::getNullValue(SRem->getType())); 03146 } 03147 } 03148 03149 if (BO0 && BO1 && BO0->getOpcode() == BO1->getOpcode() && 03150 BO0->hasOneUse() && BO1->hasOneUse() && 03151 BO0->getOperand(1) == BO1->getOperand(1)) { 03152 switch (BO0->getOpcode()) { 03153 default: break; 03154 case Instruction::Add: 03155 case Instruction::Sub: 03156 case Instruction::Xor: 03157 if (I.isEquality()) // a+x icmp eq/ne b+x --> a icmp b 03158 return new ICmpInst(I.getPredicate(), BO0->getOperand(0), 03159 BO1->getOperand(0)); 03160 // icmp u/s (a ^ signbit), (b ^ signbit) --> icmp s/u a, b 03161 if (ConstantInt *CI = dyn_cast<ConstantInt>(BO0->getOperand(1))) { 03162 if (CI->getValue().isSignBit()) { 03163 ICmpInst::Predicate Pred = I.isSigned() 03164 ? I.getUnsignedPredicate() 03165 : I.getSignedPredicate(); 03166 return new ICmpInst(Pred, BO0->getOperand(0), 03167 BO1->getOperand(0)); 03168 } 03169 03170 if (CI->isMaxValue(true)) { 03171 ICmpInst::Predicate Pred = I.isSigned() 03172 ? I.getUnsignedPredicate() 03173 : I.getSignedPredicate(); 03174 Pred = I.getSwappedPredicate(Pred); 03175 return new ICmpInst(Pred, BO0->getOperand(0), 03176 BO1->getOperand(0)); 03177 } 03178 } 03179 break; 03180 case Instruction::Mul: 03181 if (!I.isEquality()) 03182 break; 03183 03184 if (ConstantInt *CI = dyn_cast<ConstantInt>(BO0->getOperand(1))) { 03185 // a * Cst icmp eq/ne b * Cst --> a & Mask icmp b & Mask 03186 // Mask = -1 >> count-trailing-zeros(Cst). 03187 if (!CI->isZero() && !CI->isOne()) { 03188 const APInt &AP = CI->getValue(); 03189 ConstantInt *Mask = ConstantInt::get(I.getContext(), 03190 APInt::getLowBitsSet(AP.getBitWidth(), 03191 AP.getBitWidth() - 03192 AP.countTrailingZeros())); 03193 Value *And1 = Builder->CreateAnd(BO0->getOperand(0), Mask); 03194 Value *And2 = Builder->CreateAnd(BO1->getOperand(0), Mask); 03195 return new ICmpInst(I.getPredicate(), And1, And2); 03196 } 03197 } 03198 break; 03199 case Instruction::UDiv: 03200 case Instruction::LShr: 03201 if (I.isSigned()) 03202 break; 03203 // fall-through 03204 case Instruction::SDiv: 03205 case Instruction::AShr: 03206 if (!BO0->isExact() || !BO1->isExact()) 03207 break; 03208 return new ICmpInst(I.getPredicate(), BO0->getOperand(0), 03209 BO1->getOperand(0)); 03210 case Instruction::Shl: { 03211 bool NUW = BO0->hasNoUnsignedWrap() && BO1->hasNoUnsignedWrap(); 03212 bool NSW = BO0->hasNoSignedWrap() && BO1->hasNoSignedWrap(); 03213 if (!NUW && !NSW) 03214 break; 03215 if (!NSW && I.isSigned()) 03216 break; 03217 return new ICmpInst(I.getPredicate(), BO0->getOperand(0), 03218 BO1->getOperand(0)); 03219 } 03220 } 03221 } 03222 } 03223 03224 { Value *A, *B; 03225 // Transform (A & ~B) == 0 --> (A & B) != 0 03226 // and (A & ~B) != 0 --> (A & B) == 0 03227 // if A is a power of 2. 03228 if (match(Op0, m_And(m_Value(A), m_Not(m_Value(B)))) && 03229 match(Op1, m_Zero()) && isKnownToBeAPowerOfTwo(A, false, 03230 0, AT, &I, DT) && 03231 I.isEquality()) 03232 return new ICmpInst(I.getInversePredicate(), 03233 Builder->CreateAnd(A, B), 03234 Op1); 03235 03236 // ~x < ~y --> y < x 03237 // ~x < cst --> ~cst < x 03238 if (match(Op0, m_Not(m_Value(A)))) { 03239 if (match(Op1, m_Not(m_Value(B)))) 03240 return new ICmpInst(I.getPredicate(), B, A); 03241 if (ConstantInt *RHSC = dyn_cast<ConstantInt>(Op1)) 03242 return new ICmpInst(I.getPredicate(), ConstantExpr::getNot(RHSC), A); 03243 } 03244 03245 // (a+b) <u a --> llvm.uadd.with.overflow. 03246 // (a+b) <u b --> llvm.uadd.with.overflow. 03247 if (I.getPredicate() == ICmpInst::ICMP_ULT && 03248 match(Op0, m_Add(m_Value(A), m_Value(B))) && 03249 (Op1 == A || Op1 == B)) 03250 if (Instruction *R = ProcessUAddIdiom(I, Op0, *this)) 03251 return R; 03252 03253 // a >u (a+b) --> llvm.uadd.with.overflow. 03254 // b >u (a+b) --> llvm.uadd.with.overflow. 03255 if (I.getPredicate() == ICmpInst::ICMP_UGT && 03256 match(Op1, m_Add(m_Value(A), m_Value(B))) && 03257 (Op0 == A || Op0 == B)) 03258 if (Instruction *R = ProcessUAddIdiom(I, Op1, *this)) 03259 return R; 03260 03261 // (zext a) * (zext b) --> llvm.umul.with.overflow. 03262 if (match(Op0, m_Mul(m_ZExt(m_Value(A)), m_ZExt(m_Value(B))))) { 03263 if (Instruction *R = ProcessUMulZExtIdiom(I, Op0, Op1, *this)) 03264 return R; 03265 } 03266 if (match(Op1, m_Mul(m_ZExt(m_Value(A)), m_ZExt(m_Value(B))))) { 03267 if (Instruction *R = ProcessUMulZExtIdiom(I, Op1, Op0, *this)) 03268 return R; 03269 } 03270 } 03271 03272 if (I.isEquality()) { 03273 Value *A, *B, *C, *D; 03274 03275 if (match(Op0, m_Xor(m_Value(A), m_Value(B)))) { 03276 if (A == Op1 || B == Op1) { // (A^B) == A -> B == 0 03277 Value *OtherVal = A == Op1 ? B : A; 03278 return new ICmpInst(I.getPredicate(), OtherVal, 03279 Constant::getNullValue(A->getType())); 03280 } 03281 03282 if (match(Op1, m_Xor(m_Value(C), m_Value(D)))) { 03283 // A^c1 == C^c2 --> A == C^(c1^c2) 03284 ConstantInt *C1, *C2; 03285 if (match(B, m_ConstantInt(C1)) && 03286 match(D, m_ConstantInt(C2)) && Op1->hasOneUse()) { 03287 Constant *NC = Builder->getInt(C1->getValue() ^ C2->getValue()); 03288 Value *Xor = Builder->CreateXor(C, NC); 03289 return new ICmpInst(I.getPredicate(), A, Xor); 03290 } 03291 03292 // A^B == A^D -> B == D 03293 if (A == C) return new ICmpInst(I.getPredicate(), B, D); 03294 if (A == D) return new ICmpInst(I.getPredicate(), B, C); 03295 if (B == C) return new ICmpInst(I.getPredicate(), A, D); 03296 if (B == D) return new ICmpInst(I.getPredicate(), A, C); 03297 } 03298 } 03299 03300 if (match(Op1, m_Xor(m_Value(A), m_Value(B))) && 03301 (A == Op0 || B == Op0)) { 03302 // A == (A^B) -> B == 0 03303 Value *OtherVal = A == Op0 ? B : A; 03304 return new ICmpInst(I.getPredicate(), OtherVal, 03305 Constant::getNullValue(A->getType())); 03306 } 03307 03308 // (X&Z) == (Y&Z) -> (X^Y) & Z == 0 03309 if (match(Op0, m_OneUse(m_And(m_Value(A), m_Value(B)))) && 03310 match(Op1, m_OneUse(m_And(m_Value(C), m_Value(D))))) { 03311 Value *X = nullptr, *Y = nullptr, *Z = nullptr; 03312 03313 if (A == C) { 03314 X = B; Y = D; Z = A; 03315 } else if (A == D) { 03316 X = B; Y = C; Z = A; 03317 } else if (B == C) { 03318 X = A; Y = D; Z = B; 03319 } else if (B == D) { 03320 X = A; Y = C; Z = B; 03321 } 03322 03323 if (X) { // Build (X^Y) & Z 03324 Op1 = Builder->CreateXor(X, Y); 03325 Op1 = Builder->CreateAnd(Op1, Z); 03326 I.setOperand(0, Op1); 03327 I.setOperand(1, Constant::getNullValue(Op1->getType())); 03328 return &I; 03329 } 03330 } 03331 03332 // Transform (zext A) == (B & (1<<X)-1) --> A == (trunc B) 03333 // and (B & (1<<X)-1) == (zext A) --> A == (trunc B) 03334 ConstantInt *Cst1; 03335 if ((Op0->hasOneUse() && 03336 match(Op0, m_ZExt(m_Value(A))) && 03337 match(Op1, m_And(m_Value(B), m_ConstantInt(Cst1)))) || 03338 (Op1->hasOneUse() && 03339 match(Op0, m_And(m_Value(B), m_ConstantInt(Cst1))) && 03340 match(Op1, m_ZExt(m_Value(A))))) { 03341 APInt Pow2 = Cst1->getValue() + 1; 03342 if (Pow2.isPowerOf2() && isa<IntegerType>(A->getType()) && 03343 Pow2.logBase2() == cast<IntegerType>(A->getType())->getBitWidth()) 03344 return new ICmpInst(I.getPredicate(), A, 03345 Builder->CreateTrunc(B, A->getType())); 03346 } 03347 03348 // (A >> C) == (B >> C) --> (A^B) u< (1 << C) 03349 // For lshr and ashr pairs. 03350 if ((match(Op0, m_OneUse(m_LShr(m_Value(A), m_ConstantInt(Cst1)))) && 03351 match(Op1, m_OneUse(m_LShr(m_Value(B), m_Specific(Cst1))))) || 03352 (match(Op0, m_OneUse(m_AShr(m_Value(A), m_ConstantInt(Cst1)))) && 03353 match(Op1, m_OneUse(m_AShr(m_Value(B), m_Specific(Cst1)))))) { 03354 unsigned TypeBits = Cst1->getBitWidth(); 03355 unsigned ShAmt = (unsigned)Cst1->getLimitedValue(TypeBits); 03356 if (ShAmt < TypeBits && ShAmt != 0) { 03357 ICmpInst::Predicate Pred = I.getPredicate() == ICmpInst::ICMP_NE 03358 ? ICmpInst::ICMP_UGE 03359 : ICmpInst::ICMP_ULT; 03360 Value *Xor = Builder->CreateXor(A, B, I.getName() + ".unshifted"); 03361 APInt CmpVal = APInt::getOneBitSet(TypeBits, ShAmt); 03362 return new ICmpInst(Pred, Xor, Builder->getInt(CmpVal)); 03363 } 03364 } 03365 03366 // Transform "icmp eq (trunc (lshr(X, cst1)), cst" to 03367 // "icmp (and X, mask), cst" 03368 uint64_t ShAmt = 0; 03369 if (Op0->hasOneUse() && 03370 match(Op0, m_Trunc(m_OneUse(m_LShr(m_Value(A), 03371 m_ConstantInt(ShAmt))))) && 03372 match(Op1, m_ConstantInt(Cst1)) && 03373 // Only do this when A has multiple uses. This is most important to do 03374 // when it exposes other optimizations. 03375 !A->hasOneUse()) { 03376 unsigned ASize =cast<IntegerType>(A->getType())->getPrimitiveSizeInBits(); 03377 03378 if (ShAmt < ASize) { 03379 APInt MaskV = 03380 APInt::getLowBitsSet(ASize, Op0->getType()->getPrimitiveSizeInBits()); 03381 MaskV <<= ShAmt; 03382 03383 APInt CmpV = Cst1->getValue().zext(ASize); 03384 CmpV <<= ShAmt; 03385 03386 Value *Mask = Builder->CreateAnd(A, Builder->getInt(MaskV)); 03387 return new ICmpInst(I.getPredicate(), Mask, Builder->getInt(CmpV)); 03388 } 03389 } 03390 } 03391 03392 { 03393 Value *X; ConstantInt *Cst; 03394 // icmp X+Cst, X 03395 if (match(Op0, m_Add(m_Value(X), m_ConstantInt(Cst))) && Op1 == X) 03396 return FoldICmpAddOpCst(I, X, Cst, I.getPredicate()); 03397 03398 // icmp X, X+Cst 03399 if (match(Op1, m_Add(m_Value(X), m_ConstantInt(Cst))) && Op0 == X) 03400 return FoldICmpAddOpCst(I, X, Cst, I.getSwappedPredicate()); 03401 } 03402 return Changed ? &I : nullptr; 03403 } 03404 03405 /// FoldFCmp_IntToFP_Cst - Fold fcmp ([us]itofp x, cst) if possible. 03406 /// 03407 Instruction *InstCombiner::FoldFCmp_IntToFP_Cst(FCmpInst &I, 03408 Instruction *LHSI, 03409 Constant *RHSC) { 03410 if (!isa<ConstantFP>(RHSC)) return nullptr; 03411 const APFloat &RHS = cast<ConstantFP>(RHSC)->getValueAPF(); 03412 03413 // Get the width of the mantissa. We don't want to hack on conversions that 03414 // might lose information from the integer, e.g. "i64 -> float" 03415 int MantissaWidth = LHSI->getType()->getFPMantissaWidth(); 03416 if (MantissaWidth == -1) return nullptr; // Unknown. 03417 03418 // Check to see that the input is converted from an integer type that is small 03419 // enough that preserves all bits. TODO: check here for "known" sign bits. 03420 // This would allow us to handle (fptosi (x >>s 62) to float) if x is i64 f.e. 03421 unsigned InputSize = LHSI->getOperand(0)->getType()->getScalarSizeInBits(); 03422 03423 // If this is a uitofp instruction, we need an extra bit to hold the sign. 03424 bool LHSUnsigned = isa<UIToFPInst>(LHSI); 03425 if (LHSUnsigned) 03426 ++InputSize; 03427 03428 // If the conversion would lose info, don't hack on this. 03429 if ((int)InputSize > MantissaWidth) 03430 return nullptr; 03431 03432 // Otherwise, we can potentially simplify the comparison. We know that it 03433 // will always come through as an integer value and we know the constant is 03434 // not a NAN (it would have been previously simplified). 03435 assert(!RHS.isNaN() && "NaN comparison not already folded!"); 03436 03437 ICmpInst::Predicate Pred; 03438 switch (I.getPredicate()) { 03439 default: llvm_unreachable("Unexpected predicate!"); 03440 case FCmpInst::FCMP_UEQ: 03441 case FCmpInst::FCMP_OEQ: 03442 Pred = ICmpInst::ICMP_EQ; 03443 break; 03444 case FCmpInst::FCMP_UGT: 03445 case FCmpInst::FCMP_OGT: 03446 Pred = LHSUnsigned ? ICmpInst::ICMP_UGT : ICmpInst::ICMP_SGT; 03447 break; 03448 case FCmpInst::FCMP_UGE: 03449 case FCmpInst::FCMP_OGE: 03450 Pred = LHSUnsigned ? ICmpInst::ICMP_UGE : ICmpInst::ICMP_SGE; 03451 break; 03452 case FCmpInst::FCMP_ULT: 03453 case FCmpInst::FCMP_OLT: 03454 Pred = LHSUnsigned ? ICmpInst::ICMP_ULT : ICmpInst::ICMP_SLT; 03455 break; 03456 case FCmpInst::FCMP_ULE: 03457 case FCmpInst::FCMP_OLE: 03458 Pred = LHSUnsigned ? ICmpInst::ICMP_ULE : ICmpInst::ICMP_SLE; 03459 break; 03460 case FCmpInst::FCMP_UNE: 03461 case FCmpInst::FCMP_ONE: 03462 Pred = ICmpInst::ICMP_NE; 03463 break; 03464 case FCmpInst::FCMP_ORD: 03465 return ReplaceInstUsesWith(I, Builder->getTrue()); 03466 case FCmpInst::FCMP_UNO: 03467 return ReplaceInstUsesWith(I, Builder->getFalse()); 03468 } 03469 03470 IntegerType *IntTy = cast<IntegerType>(LHSI->getOperand(0)->getType()); 03471 03472 // Now we know that the APFloat is a normal number, zero or inf. 03473 03474 // See if the FP constant is too large for the integer. For example, 03475 // comparing an i8 to 300.0. 03476 unsigned IntWidth = IntTy->getScalarSizeInBits(); 03477 03478 if (!LHSUnsigned) { 03479 // If the RHS value is > SignedMax, fold the comparison. This handles +INF 03480 // and large values. 03481 APFloat SMax(RHS.getSemantics()); 03482 SMax.convertFromAPInt(APInt::getSignedMaxValue(IntWidth), true, 03483 APFloat::rmNearestTiesToEven); 03484 if (SMax.compare(RHS) == APFloat::cmpLessThan) { // smax < 13123.0 03485 if (Pred == ICmpInst::ICMP_NE || Pred == ICmpInst::ICMP_SLT || 03486 Pred == ICmpInst::ICMP_SLE) 03487 return ReplaceInstUsesWith(I, Builder->getTrue()); 03488 return ReplaceInstUsesWith(I, Builder->getFalse()); 03489 } 03490 } else { 03491 // If the RHS value is > UnsignedMax, fold the comparison. This handles 03492 // +INF and large values. 03493 APFloat UMax(RHS.getSemantics()); 03494 UMax.convertFromAPInt(APInt::getMaxValue(IntWidth), false, 03495 APFloat::rmNearestTiesToEven); 03496 if (UMax.compare(RHS) == APFloat::cmpLessThan) { // umax < 13123.0 03497 if (Pred == ICmpInst::ICMP_NE || Pred == ICmpInst::ICMP_ULT || 03498 Pred == ICmpInst::ICMP_ULE) 03499 return ReplaceInstUsesWith(I, Builder->getTrue()); 03500 return ReplaceInstUsesWith(I, Builder->getFalse()); 03501 } 03502 } 03503 03504 if (!LHSUnsigned) { 03505 // See if the RHS value is < SignedMin. 03506 APFloat SMin(RHS.getSemantics()); 03507 SMin.convertFromAPInt(APInt::getSignedMinValue(IntWidth), true, 03508 APFloat::rmNearestTiesToEven); 03509 if (SMin.compare(RHS) == APFloat::cmpGreaterThan) { // smin > 12312.0 03510 if (Pred == ICmpInst::ICMP_NE || Pred == ICmpInst::ICMP_SGT || 03511 Pred == ICmpInst::ICMP_SGE) 03512 return ReplaceInstUsesWith(I, Builder->getTrue()); 03513 return ReplaceInstUsesWith(I, Builder->getFalse()); 03514 } 03515 } else { 03516 // See if the RHS value is < UnsignedMin. 03517 APFloat SMin(RHS.getSemantics()); 03518 SMin.convertFromAPInt(APInt::getMinValue(IntWidth), true, 03519 APFloat::rmNearestTiesToEven); 03520 if (SMin.compare(RHS) == APFloat::cmpGreaterThan) { // umin > 12312.0 03521 if (Pred == ICmpInst::ICMP_NE || Pred == ICmpInst::ICMP_UGT || 03522 Pred == ICmpInst::ICMP_UGE) 03523 return ReplaceInstUsesWith(I, Builder->getTrue()); 03524 return ReplaceInstUsesWith(I, Builder->getFalse()); 03525 } 03526 } 03527 03528 // Okay, now we know that the FP constant fits in the range [SMIN, SMAX] or 03529 // [0, UMAX], but it may still be fractional. See if it is fractional by 03530 // casting the FP value to the integer value and back, checking for equality. 03531 // Don't do this for zero, because -0.0 is not fractional. 03532 Constant *RHSInt = LHSUnsigned 03533 ? ConstantExpr::getFPToUI(RHSC, IntTy) 03534 : ConstantExpr::getFPToSI(RHSC, IntTy); 03535 if (!RHS.isZero()) { 03536 bool Equal = LHSUnsigned 03537 ? ConstantExpr::getUIToFP(RHSInt, RHSC->getType()) == RHSC 03538 : ConstantExpr::getSIToFP(RHSInt, RHSC->getType()) == RHSC; 03539 if (!Equal) { 03540 // If we had a comparison against a fractional value, we have to adjust 03541 // the compare predicate and sometimes the value. RHSC is rounded towards 03542 // zero at this point. 03543 switch (Pred) { 03544 default: llvm_unreachable("Unexpected integer comparison!"); 03545 case ICmpInst::ICMP_NE: // (float)int != 4.4 --> true 03546 return ReplaceInstUsesWith(I, Builder->getTrue()); 03547 case ICmpInst::ICMP_EQ: // (float)int == 4.4 --> false 03548 return ReplaceInstUsesWith(I, Builder->getFalse()); 03549 case ICmpInst::ICMP_ULE: 03550 // (float)int <= 4.4 --> int <= 4 03551 // (float)int <= -4.4 --> false 03552 if (RHS.isNegative()) 03553 return ReplaceInstUsesWith(I, Builder->getFalse()); 03554 break; 03555 case ICmpInst::ICMP_SLE: 03556 // (float)int <= 4.4 --> int <= 4 03557 // (float)int <= -4.4 --> int < -4 03558 if (RHS.isNegative()) 03559 Pred = ICmpInst::ICMP_SLT; 03560 break; 03561 case ICmpInst::ICMP_ULT: 03562 // (float)int < -4.4 --> false 03563 // (float)int < 4.4 --> int <= 4 03564 if (RHS.isNegative()) 03565 return ReplaceInstUsesWith(I, Builder->getFalse()); 03566 Pred = ICmpInst::ICMP_ULE; 03567 break; 03568 case ICmpInst::ICMP_SLT: 03569 // (float)int < -4.4 --> int < -4 03570 // (float)int < 4.4 --> int <= 4 03571 if (!RHS.isNegative()) 03572 Pred = ICmpInst::ICMP_SLE; 03573 break; 03574 case ICmpInst::ICMP_UGT: 03575 // (float)int > 4.4 --> int > 4 03576 // (float)int > -4.4 --> true 03577 if (RHS.isNegative()) 03578 return ReplaceInstUsesWith(I, Builder->getTrue()); 03579 break; 03580 case ICmpInst::ICMP_SGT: 03581 // (float)int > 4.4 --> int > 4 03582 // (float)int > -4.4 --> int >= -4 03583 if (RHS.isNegative()) 03584 Pred = ICmpInst::ICMP_SGE; 03585 break; 03586 case ICmpInst::ICMP_UGE: 03587 // (float)int >= -4.4 --> true 03588 // (float)int >= 4.4 --> int > 4 03589 if (RHS.isNegative()) 03590 return ReplaceInstUsesWith(I, Builder->getTrue()); 03591 Pred = ICmpInst::ICMP_UGT; 03592 break; 03593 case ICmpInst::ICMP_SGE: 03594 // (float)int >= -4.4 --> int >= -4 03595 // (float)int >= 4.4 --> int > 4 03596 if (!RHS.isNegative()) 03597 Pred = ICmpInst::ICMP_SGT; 03598 break; 03599 } 03600 } 03601 } 03602 03603 // Lower this FP comparison into an appropriate integer version of the 03604 // comparison. 03605 return new ICmpInst(Pred, LHSI->getOperand(0), RHSInt); 03606 } 03607 03608 Instruction *InstCombiner::visitFCmpInst(FCmpInst &I) { 03609 bool Changed = false; 03610 03611 /// Orders the operands of the compare so that they are listed from most 03612 /// complex to least complex. This puts constants before unary operators, 03613 /// before binary operators. 03614 if (getComplexity(I.getOperand(0)) < getComplexity(I.getOperand(1))) { 03615 I.swapOperands(); 03616 Changed = true; 03617 } 03618 03619 Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1); 03620 03621 if (Value *V = SimplifyFCmpInst(I.getPredicate(), Op0, Op1, DL, TLI, DT, AT)) 03622 return ReplaceInstUsesWith(I, V); 03623 03624 // Simplify 'fcmp pred X, X' 03625 if (Op0 == Op1) { 03626 switch (I.getPredicate()) { 03627 default: llvm_unreachable("Unknown predicate!"); 03628 case FCmpInst::FCMP_UNO: // True if unordered: isnan(X) | isnan(Y) 03629 case FCmpInst::FCMP_ULT: // True if unordered or less than 03630 case FCmpInst::FCMP_UGT: // True if unordered or greater than 03631 case FCmpInst::FCMP_UNE: // True if unordered or not equal 03632 // Canonicalize these to be 'fcmp uno %X, 0.0'. 03633 I.setPredicate(FCmpInst::FCMP_UNO); 03634 I.setOperand(1, Constant::getNullValue(Op0->getType())); 03635 return &I; 03636 03637 case FCmpInst::FCMP_ORD: // True if ordered (no nans) 03638 case FCmpInst::FCMP_OEQ: // True if ordered and equal 03639 case FCmpInst::FCMP_OGE: // True if ordered and greater than or equal 03640 case FCmpInst::FCMP_OLE: // True if ordered and less than or equal 03641 // Canonicalize these to be 'fcmp ord %X, 0.0'. 03642 I.setPredicate(FCmpInst::FCMP_ORD); 03643 I.setOperand(1, Constant::getNullValue(Op0->getType())); 03644 return &I; 03645 } 03646 } 03647 03648 // Handle fcmp with constant RHS 03649 if (Constant *RHSC = dyn_cast<Constant>(Op1)) { 03650 if (Instruction *LHSI = dyn_cast<Instruction>(Op0)) 03651 switch (LHSI->getOpcode()) { 03652 case Instruction::FPExt: { 03653 // fcmp (fpext x), C -> fcmp x, (fptrunc C) if fptrunc is lossless 03654 FPExtInst *LHSExt = cast<FPExtInst>(LHSI); 03655 ConstantFP *RHSF = dyn_cast<ConstantFP>(RHSC); 03656 if (!RHSF) 03657 break; 03658 03659 const fltSemantics *Sem; 03660 // FIXME: This shouldn't be here. 03661 if (LHSExt->getSrcTy()->isHalfTy()) 03662 Sem = &APFloat::IEEEhalf; 03663 else if (LHSExt->getSrcTy()->isFloatTy()) 03664 Sem = &APFloat::IEEEsingle; 03665 else if (LHSExt->getSrcTy()->isDoubleTy()) 03666 Sem = &APFloat::IEEEdouble; 03667 else if (LHSExt->getSrcTy()->isFP128Ty()) 03668 Sem = &APFloat::IEEEquad; 03669 else if (LHSExt->getSrcTy()->isX86_FP80Ty()) 03670 Sem = &APFloat::x87DoubleExtended; 03671 else if (LHSExt->getSrcTy()->isPPC_FP128Ty()) 03672 Sem = &APFloat::PPCDoubleDouble; 03673 else 03674 break; 03675 03676 bool Lossy; 03677 APFloat F = RHSF->getValueAPF(); 03678 F.convert(*Sem, APFloat::rmNearestTiesToEven, &Lossy); 03679 03680 // Avoid lossy conversions and denormals. Zero is a special case 03681 // that's OK to convert. 03682 APFloat Fabs = F; 03683 Fabs.clearSign(); 03684 if (!Lossy && 03685 ((Fabs.compare(APFloat::getSmallestNormalized(*Sem)) != 03686 APFloat::cmpLessThan) || Fabs.isZero())) 03687 03688 return new FCmpInst(I.getPredicate(), LHSExt->getOperand(0), 03689 ConstantFP::get(RHSC->getContext(), F)); 03690 break; 03691 } 03692 case Instruction::PHI: 03693 // Only fold fcmp into the PHI if the phi and fcmp are in the same 03694 // block. If in the same block, we're encouraging jump threading. If 03695 // not, we are just pessimizing the code by making an i1 phi. 03696 if (LHSI->getParent() == I.getParent()) 03697 if (Instruction *NV = FoldOpIntoPhi(I)) 03698 return NV; 03699 break; 03700 case Instruction::SIToFP: 03701 case Instruction::UIToFP: 03702 if (Instruction *NV = FoldFCmp_IntToFP_Cst(I, LHSI, RHSC)) 03703 return NV; 03704 break; 03705 case Instruction::FSub: { 03706 // fcmp pred (fneg x), C -> fcmp swap(pred) x, -C 03707 Value *Op; 03708 if (match(LHSI, m_FNeg(m_Value(Op)))) 03709 return new FCmpInst(I.getSwappedPredicate(), Op, 03710 ConstantExpr::getFNeg(RHSC)); 03711 break; 03712 } 03713 case Instruction::Load: 03714 if (GetElementPtrInst *GEP = 03715 dyn_cast<GetElementPtrInst>(LHSI->getOperand(0))) { 03716 if (GlobalVariable *GV = dyn_cast<GlobalVariable>(GEP->getOperand(0))) 03717 if (GV->isConstant() && GV->hasDefinitiveInitializer() && 03718 !cast<LoadInst>(LHSI)->isVolatile()) 03719 if (Instruction *Res = FoldCmpLoadFromIndexedGlobal(GEP, GV, I)) 03720 return Res; 03721 } 03722 break; 03723 case Instruction::Call: { 03724 CallInst *CI = cast<CallInst>(LHSI); 03725 LibFunc::Func Func; 03726 // Various optimization for fabs compared with zero. 03727 if (RHSC->isNullValue() && CI->getCalledFunction() && 03728 TLI->getLibFunc(CI->getCalledFunction()->getName(), Func) && 03729 TLI->has(Func)) { 03730 if (Func == LibFunc::fabs || Func == LibFunc::fabsf || 03731 Func == LibFunc::fabsl) { 03732 switch (I.getPredicate()) { 03733 default: break; 03734 // fabs(x) < 0 --> false 03735 case FCmpInst::FCMP_OLT: 03736 return ReplaceInstUsesWith(I, Builder->getFalse()); 03737 // fabs(x) > 0 --> x != 0 03738 case FCmpInst::FCMP_OGT: 03739 return new FCmpInst(FCmpInst::FCMP_ONE, CI->getArgOperand(0), 03740 RHSC); 03741 // fabs(x) <= 0 --> x == 0 03742 case FCmpInst::FCMP_OLE: 03743 return new FCmpInst(FCmpInst::FCMP_OEQ, CI->getArgOperand(0), 03744 RHSC); 03745 // fabs(x) >= 0 --> !isnan(x) 03746 case FCmpInst::FCMP_OGE: 03747 return new FCmpInst(FCmpInst::FCMP_ORD, CI->getArgOperand(0), 03748 RHSC); 03749 // fabs(x) == 0 --> x == 0 03750 // fabs(x) != 0 --> x != 0 03751 case FCmpInst::FCMP_OEQ: 03752 case FCmpInst::FCMP_UEQ: 03753 case FCmpInst::FCMP_ONE: 03754 case FCmpInst::FCMP_UNE: 03755 return new FCmpInst(I.getPredicate(), CI->getArgOperand(0), 03756 RHSC); 03757 } 03758 } 03759 } 03760 } 03761 } 03762 } 03763 03764 // fcmp pred (fneg x), (fneg y) -> fcmp swap(pred) x, y 03765 Value *X, *Y; 03766 if (match(Op0, m_FNeg(m_Value(X))) && match(Op1, m_FNeg(m_Value(Y)))) 03767 return new FCmpInst(I.getSwappedPredicate(), X, Y); 03768 03769 // fcmp (fpext x), (fpext y) -> fcmp x, y 03770 if (FPExtInst *LHSExt = dyn_cast<FPExtInst>(Op0)) 03771 if (FPExtInst *RHSExt = dyn_cast<FPExtInst>(Op1)) 03772 if (LHSExt->getSrcTy() == RHSExt->getSrcTy()) 03773 return new FCmpInst(I.getPredicate(), LHSExt->getOperand(0), 03774 RHSExt->getOperand(0)); 03775 03776 return Changed ? &I : nullptr; 03777 }