1 //===- InstructionSimplify.cpp - Fold instruction operands ----------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file implements routines for folding instructions into simpler forms 11 // that do not require creating new instructions. This does constant folding 12 // ("add i32 1, 1" -> "2") but can also handle non-constant operands, either 13 // returning a constant ("and i32 %x, 0" -> "0") or an already existing value 14 // ("and i32 %x, %x" -> "%x"). All operands are assumed to have already been 15 // simplified: This is usually true and assuming it simplifies the logic (if 16 // they have not been simplified then results are correct but maybe suboptimal). 17 // 18 //===----------------------------------------------------------------------===// 19 20 #include "llvm/Analysis/InstructionSimplify.h" 21 #include "llvm/ADT/SetVector.h" 22 #include "llvm/ADT/Statistic.h" 23 #include "llvm/Analysis/ConstantFolding.h" 24 #include "llvm/Analysis/MemoryBuiltins.h" 25 #include "llvm/Analysis/ValueTracking.h" 26 #include "llvm/IR/ConstantRange.h" 27 #include "llvm/IR/DataLayout.h" 28 #include "llvm/IR/Dominators.h" 29 #include "llvm/IR/GetElementPtrTypeIterator.h" 30 #include "llvm/IR/GlobalAlias.h" 31 #include "llvm/IR/Operator.h" 32 #include "llvm/IR/PatternMatch.h" 33 #include "llvm/IR/ValueHandle.h" 34 using namespace llvm; 35 using namespace llvm::PatternMatch; 36 37 #define DEBUG_TYPE "instsimplify" 38 39 enum { RecursionLimit = 3 }; 40 41 STATISTIC(NumExpand, "Number of expansions"); 42 STATISTIC(NumReassoc, "Number of reassociations"); 43 44 namespace { 45 struct Query { 46 const DataLayout *DL; 47 const TargetLibraryInfo *TLI; 48 const DominatorTree *DT; 49 AssumptionTracker *AT; 50 const Instruction *CxtI; 51 52 Query(const DataLayout *DL, const TargetLibraryInfo *tli, 53 const DominatorTree *dt, AssumptionTracker *at = nullptr, 54 const Instruction *cxti = nullptr) 55 : DL(DL), TLI(tli), DT(dt), AT(at), CxtI(cxti) {} 56 }; 57 } // end anonymous namespace 58 59 static Value *SimplifyAndInst(Value *, Value *, const Query &, unsigned); 60 static Value *SimplifyBinOp(unsigned, Value *, Value *, const Query &, 61 unsigned); 62 static Value *SimplifyCmpInst(unsigned, Value *, Value *, const Query &, 63 unsigned); 64 static Value *SimplifyOrInst(Value *, Value *, const Query &, unsigned); 65 static Value *SimplifyXorInst(Value *, Value *, const Query &, unsigned); 66 static Value *SimplifyTruncInst(Value *, Type *, const Query &, unsigned); 67 68 /// getFalse - For a boolean type, or a vector of boolean type, return false, or 69 /// a vector with every element false, as appropriate for the type. 70 static Constant *getFalse(Type *Ty) { 71 assert(Ty->getScalarType()->isIntegerTy(1) && 72 "Expected i1 type or a vector of i1!"); 73 return Constant::getNullValue(Ty); 74 } 75 76 /// getTrue - For a boolean type, or a vector of boolean type, return true, or 77 /// a vector with every element true, as appropriate for the type. 78 static Constant *getTrue(Type *Ty) { 79 assert(Ty->getScalarType()->isIntegerTy(1) && 80 "Expected i1 type or a vector of i1!"); 81 return Constant::getAllOnesValue(Ty); 82 } 83 84 /// isSameCompare - Is V equivalent to the comparison "LHS Pred RHS"? 85 static bool isSameCompare(Value *V, CmpInst::Predicate Pred, Value *LHS, 86 Value *RHS) { 87 CmpInst *Cmp = dyn_cast<CmpInst>(V); 88 if (!Cmp) 89 return false; 90 CmpInst::Predicate CPred = Cmp->getPredicate(); 91 Value *CLHS = Cmp->getOperand(0), *CRHS = Cmp->getOperand(1); 92 if (CPred == Pred && CLHS == LHS && CRHS == RHS) 93 return true; 94 return CPred == CmpInst::getSwappedPredicate(Pred) && CLHS == RHS && 95 CRHS == LHS; 96 } 97 98 /// ValueDominatesPHI - Does the given value dominate the specified phi node? 99 static bool ValueDominatesPHI(Value *V, PHINode *P, const DominatorTree *DT) { 100 Instruction *I = dyn_cast<Instruction>(V); 101 if (!I) 102 // Arguments and constants dominate all instructions. 103 return true; 104 105 // If we are processing instructions (and/or basic blocks) that have not been 106 // fully added to a function, the parent nodes may still be null. Simply 107 // return the conservative answer in these cases. 108 if (!I->getParent() || !P->getParent() || !I->getParent()->getParent()) 109 return false; 110 111 // If we have a DominatorTree then do a precise test. 112 if (DT) { 113 if (!DT->isReachableFromEntry(P->getParent())) 114 return true; 115 if (!DT->isReachableFromEntry(I->getParent())) 116 return false; 117 return DT->dominates(I, P); 118 } 119 120 // Otherwise, if the instruction is in the entry block, and is not an invoke, 121 // then it obviously dominates all phi nodes. 122 if (I->getParent() == &I->getParent()->getParent()->getEntryBlock() && 123 !isa<InvokeInst>(I)) 124 return true; 125 126 return false; 127 } 128 129 /// ExpandBinOp - Simplify "A op (B op' C)" by distributing op over op', turning 130 /// it into "(A op B) op' (A op C)". Here "op" is given by Opcode and "op'" is 131 /// given by OpcodeToExpand, while "A" corresponds to LHS and "B op' C" to RHS. 132 /// Also performs the transform "(A op' B) op C" -> "(A op C) op' (B op C)". 133 /// Returns the simplified value, or null if no simplification was performed. 134 static Value *ExpandBinOp(unsigned Opcode, Value *LHS, Value *RHS, 135 unsigned OpcToExpand, const Query &Q, 136 unsigned MaxRecurse) { 137 Instruction::BinaryOps OpcodeToExpand = (Instruction::BinaryOps)OpcToExpand; 138 // Recursion is always used, so bail out at once if we already hit the limit. 139 if (!MaxRecurse--) 140 return nullptr; 141 142 // Check whether the expression has the form "(A op' B) op C". 143 if (BinaryOperator *Op0 = dyn_cast<BinaryOperator>(LHS)) 144 if (Op0->getOpcode() == OpcodeToExpand) { 145 // It does! Try turning it into "(A op C) op' (B op C)". 146 Value *A = Op0->getOperand(0), *B = Op0->getOperand(1), *C = RHS; 147 // Do "A op C" and "B op C" both simplify? 148 if (Value *L = SimplifyBinOp(Opcode, A, C, Q, MaxRecurse)) 149 if (Value *R = SimplifyBinOp(Opcode, B, C, Q, MaxRecurse)) { 150 // They do! Return "L op' R" if it simplifies or is already available. 151 // If "L op' R" equals "A op' B" then "L op' R" is just the LHS. 152 if ((L == A && R == B) || (Instruction::isCommutative(OpcodeToExpand) 153 && L == B && R == A)) { 154 ++NumExpand; 155 return LHS; 156 } 157 // Otherwise return "L op' R" if it simplifies. 158 if (Value *V = SimplifyBinOp(OpcodeToExpand, L, R, Q, MaxRecurse)) { 159 ++NumExpand; 160 return V; 161 } 162 } 163 } 164 165 // Check whether the expression has the form "A op (B op' C)". 166 if (BinaryOperator *Op1 = dyn_cast<BinaryOperator>(RHS)) 167 if (Op1->getOpcode() == OpcodeToExpand) { 168 // It does! Try turning it into "(A op B) op' (A op C)". 169 Value *A = LHS, *B = Op1->getOperand(0), *C = Op1->getOperand(1); 170 // Do "A op B" and "A op C" both simplify? 171 if (Value *L = SimplifyBinOp(Opcode, A, B, Q, MaxRecurse)) 172 if (Value *R = SimplifyBinOp(Opcode, A, C, Q, MaxRecurse)) { 173 // They do! Return "L op' R" if it simplifies or is already available. 174 // If "L op' R" equals "B op' C" then "L op' R" is just the RHS. 175 if ((L == B && R == C) || (Instruction::isCommutative(OpcodeToExpand) 176 && L == C && R == B)) { 177 ++NumExpand; 178 return RHS; 179 } 180 // Otherwise return "L op' R" if it simplifies. 181 if (Value *V = SimplifyBinOp(OpcodeToExpand, L, R, Q, MaxRecurse)) { 182 ++NumExpand; 183 return V; 184 } 185 } 186 } 187 188 return nullptr; 189 } 190 191 /// SimplifyAssociativeBinOp - Generic simplifications for associative binary 192 /// operations. Returns the simpler value, or null if none was found. 193 static Value *SimplifyAssociativeBinOp(unsigned Opc, Value *LHS, Value *RHS, 194 const Query &Q, unsigned MaxRecurse) { 195 Instruction::BinaryOps Opcode = (Instruction::BinaryOps)Opc; 196 assert(Instruction::isAssociative(Opcode) && "Not an associative operation!"); 197 198 // Recursion is always used, so bail out at once if we already hit the limit. 199 if (!MaxRecurse--) 200 return nullptr; 201 202 BinaryOperator *Op0 = dyn_cast<BinaryOperator>(LHS); 203 BinaryOperator *Op1 = dyn_cast<BinaryOperator>(RHS); 204 205 // Transform: "(A op B) op C" ==> "A op (B op C)" if it simplifies completely. 206 if (Op0 && Op0->getOpcode() == Opcode) { 207 Value *A = Op0->getOperand(0); 208 Value *B = Op0->getOperand(1); 209 Value *C = RHS; 210 211 // Does "B op C" simplify? 212 if (Value *V = SimplifyBinOp(Opcode, B, C, Q, MaxRecurse)) { 213 // It does! Return "A op V" if it simplifies or is already available. 214 // If V equals B then "A op V" is just the LHS. 215 if (V == B) return LHS; 216 // Otherwise return "A op V" if it simplifies. 217 if (Value *W = SimplifyBinOp(Opcode, A, V, Q, MaxRecurse)) { 218 ++NumReassoc; 219 return W; 220 } 221 } 222 } 223 224 // Transform: "A op (B op C)" ==> "(A op B) op C" if it simplifies completely. 225 if (Op1 && Op1->getOpcode() == Opcode) { 226 Value *A = LHS; 227 Value *B = Op1->getOperand(0); 228 Value *C = Op1->getOperand(1); 229 230 // Does "A op B" simplify? 231 if (Value *V = SimplifyBinOp(Opcode, A, B, Q, MaxRecurse)) { 232 // It does! Return "V op C" if it simplifies or is already available. 233 // If V equals B then "V op C" is just the RHS. 234 if (V == B) return RHS; 235 // Otherwise return "V op C" if it simplifies. 236 if (Value *W = SimplifyBinOp(Opcode, V, C, Q, MaxRecurse)) { 237 ++NumReassoc; 238 return W; 239 } 240 } 241 } 242 243 // The remaining transforms require commutativity as well as associativity. 244 if (!Instruction::isCommutative(Opcode)) 245 return nullptr; 246 247 // Transform: "(A op B) op C" ==> "(C op A) op B" if it simplifies completely. 248 if (Op0 && Op0->getOpcode() == Opcode) { 249 Value *A = Op0->getOperand(0); 250 Value *B = Op0->getOperand(1); 251 Value *C = RHS; 252 253 // Does "C op A" simplify? 254 if (Value *V = SimplifyBinOp(Opcode, C, A, Q, MaxRecurse)) { 255 // It does! Return "V op B" if it simplifies or is already available. 256 // If V equals A then "V op B" is just the LHS. 257 if (V == A) return LHS; 258 // Otherwise return "V op B" if it simplifies. 259 if (Value *W = SimplifyBinOp(Opcode, V, B, Q, MaxRecurse)) { 260 ++NumReassoc; 261 return W; 262 } 263 } 264 } 265 266 // Transform: "A op (B op C)" ==> "B op (C op A)" if it simplifies completely. 267 if (Op1 && Op1->getOpcode() == Opcode) { 268 Value *A = LHS; 269 Value *B = Op1->getOperand(0); 270 Value *C = Op1->getOperand(1); 271 272 // Does "C op A" simplify? 273 if (Value *V = SimplifyBinOp(Opcode, C, A, Q, MaxRecurse)) { 274 // It does! Return "B op V" if it simplifies or is already available. 275 // If V equals C then "B op V" is just the RHS. 276 if (V == C) return RHS; 277 // Otherwise return "B op V" if it simplifies. 278 if (Value *W = SimplifyBinOp(Opcode, B, V, Q, MaxRecurse)) { 279 ++NumReassoc; 280 return W; 281 } 282 } 283 } 284 285 return nullptr; 286 } 287 288 /// ThreadBinOpOverSelect - In the case of a binary operation with a select 289 /// instruction as an operand, try to simplify the binop by seeing whether 290 /// evaluating it on both branches of the select results in the same value. 291 /// Returns the common value if so, otherwise returns null. 292 static Value *ThreadBinOpOverSelect(unsigned Opcode, Value *LHS, Value *RHS, 293 const Query &Q, unsigned MaxRecurse) { 294 // Recursion is always used, so bail out at once if we already hit the limit. 295 if (!MaxRecurse--) 296 return nullptr; 297 298 SelectInst *SI; 299 if (isa<SelectInst>(LHS)) { 300 SI = cast<SelectInst>(LHS); 301 } else { 302 assert(isa<SelectInst>(RHS) && "No select instruction operand!"); 303 SI = cast<SelectInst>(RHS); 304 } 305 306 // Evaluate the BinOp on the true and false branches of the select. 307 Value *TV; 308 Value *FV; 309 if (SI == LHS) { 310 TV = SimplifyBinOp(Opcode, SI->getTrueValue(), RHS, Q, MaxRecurse); 311 FV = SimplifyBinOp(Opcode, SI->getFalseValue(), RHS, Q, MaxRecurse); 312 } else { 313 TV = SimplifyBinOp(Opcode, LHS, SI->getTrueValue(), Q, MaxRecurse); 314 FV = SimplifyBinOp(Opcode, LHS, SI->getFalseValue(), Q, MaxRecurse); 315 } 316 317 // If they simplified to the same value, then return the common value. 318 // If they both failed to simplify then return null. 319 if (TV == FV) 320 return TV; 321 322 // If one branch simplified to undef, return the other one. 323 if (TV && isa<UndefValue>(TV)) 324 return FV; 325 if (FV && isa<UndefValue>(FV)) 326 return TV; 327 328 // If applying the operation did not change the true and false select values, 329 // then the result of the binop is the select itself. 330 if (TV == SI->getTrueValue() && FV == SI->getFalseValue()) 331 return SI; 332 333 // If one branch simplified and the other did not, and the simplified 334 // value is equal to the unsimplified one, return the simplified value. 335 // For example, select (cond, X, X & Z) & Z -> X & Z. 336 if ((FV && !TV) || (TV && !FV)) { 337 // Check that the simplified value has the form "X op Y" where "op" is the 338 // same as the original operation. 339 Instruction *Simplified = dyn_cast<Instruction>(FV ? FV : TV); 340 if (Simplified && Simplified->getOpcode() == Opcode) { 341 // The value that didn't simplify is "UnsimplifiedLHS op UnsimplifiedRHS". 342 // We already know that "op" is the same as for the simplified value. See 343 // if the operands match too. If so, return the simplified value. 344 Value *UnsimplifiedBranch = FV ? SI->getTrueValue() : SI->getFalseValue(); 345 Value *UnsimplifiedLHS = SI == LHS ? UnsimplifiedBranch : LHS; 346 Value *UnsimplifiedRHS = SI == LHS ? RHS : UnsimplifiedBranch; 347 if (Simplified->getOperand(0) == UnsimplifiedLHS && 348 Simplified->getOperand(1) == UnsimplifiedRHS) 349 return Simplified; 350 if (Simplified->isCommutative() && 351 Simplified->getOperand(1) == UnsimplifiedLHS && 352 Simplified->getOperand(0) == UnsimplifiedRHS) 353 return Simplified; 354 } 355 } 356 357 return nullptr; 358 } 359 360 /// ThreadCmpOverSelect - In the case of a comparison with a select instruction, 361 /// try to simplify the comparison by seeing whether both branches of the select 362 /// result in the same value. Returns the common value if so, otherwise returns 363 /// null. 364 static Value *ThreadCmpOverSelect(CmpInst::Predicate Pred, Value *LHS, 365 Value *RHS, const Query &Q, 366 unsigned MaxRecurse) { 367 // Recursion is always used, so bail out at once if we already hit the limit. 368 if (!MaxRecurse--) 369 return nullptr; 370 371 // Make sure the select is on the LHS. 372 if (!isa<SelectInst>(LHS)) { 373 std::swap(LHS, RHS); 374 Pred = CmpInst::getSwappedPredicate(Pred); 375 } 376 assert(isa<SelectInst>(LHS) && "Not comparing with a select instruction!"); 377 SelectInst *SI = cast<SelectInst>(LHS); 378 Value *Cond = SI->getCondition(); 379 Value *TV = SI->getTrueValue(); 380 Value *FV = SI->getFalseValue(); 381 382 // Now that we have "cmp select(Cond, TV, FV), RHS", analyse it. 383 // Does "cmp TV, RHS" simplify? 384 Value *TCmp = SimplifyCmpInst(Pred, TV, RHS, Q, MaxRecurse); 385 if (TCmp == Cond) { 386 // It not only simplified, it simplified to the select condition. Replace 387 // it with 'true'. 388 TCmp = getTrue(Cond->getType()); 389 } else if (!TCmp) { 390 // It didn't simplify. However if "cmp TV, RHS" is equal to the select 391 // condition then we can replace it with 'true'. Otherwise give up. 392 if (!isSameCompare(Cond, Pred, TV, RHS)) 393 return nullptr; 394 TCmp = getTrue(Cond->getType()); 395 } 396 397 // Does "cmp FV, RHS" simplify? 398 Value *FCmp = SimplifyCmpInst(Pred, FV, RHS, Q, MaxRecurse); 399 if (FCmp == Cond) { 400 // It not only simplified, it simplified to the select condition. Replace 401 // it with 'false'. 402 FCmp = getFalse(Cond->getType()); 403 } else if (!FCmp) { 404 // It didn't simplify. However if "cmp FV, RHS" is equal to the select 405 // condition then we can replace it with 'false'. Otherwise give up. 406 if (!isSameCompare(Cond, Pred, FV, RHS)) 407 return nullptr; 408 FCmp = getFalse(Cond->getType()); 409 } 410 411 // If both sides simplified to the same value, then use it as the result of 412 // the original comparison. 413 if (TCmp == FCmp) 414 return TCmp; 415 416 // The remaining cases only make sense if the select condition has the same 417 // type as the result of the comparison, so bail out if this is not so. 418 if (Cond->getType()->isVectorTy() != RHS->getType()->isVectorTy()) 419 return nullptr; 420 // If the false value simplified to false, then the result of the compare 421 // is equal to "Cond && TCmp". This also catches the case when the false 422 // value simplified to false and the true value to true, returning "Cond". 423 if (match(FCmp, m_Zero())) 424 if (Value *V = SimplifyAndInst(Cond, TCmp, Q, MaxRecurse)) 425 return V; 426 // If the true value simplified to true, then the result of the compare 427 // is equal to "Cond || FCmp". 428 if (match(TCmp, m_One())) 429 if (Value *V = SimplifyOrInst(Cond, FCmp, Q, MaxRecurse)) 430 return V; 431 // Finally, if the false value simplified to true and the true value to 432 // false, then the result of the compare is equal to "!Cond". 433 if (match(FCmp, m_One()) && match(TCmp, m_Zero())) 434 if (Value *V = 435 SimplifyXorInst(Cond, Constant::getAllOnesValue(Cond->getType()), 436 Q, MaxRecurse)) 437 return V; 438 439 return nullptr; 440 } 441 442 /// ThreadBinOpOverPHI - In the case of a binary operation with an operand that 443 /// is a PHI instruction, try to simplify the binop by seeing whether evaluating 444 /// it on the incoming phi values yields the same result for every value. If so 445 /// returns the common value, otherwise returns null. 446 static Value *ThreadBinOpOverPHI(unsigned Opcode, Value *LHS, Value *RHS, 447 const Query &Q, unsigned MaxRecurse) { 448 // Recursion is always used, so bail out at once if we already hit the limit. 449 if (!MaxRecurse--) 450 return nullptr; 451 452 PHINode *PI; 453 if (isa<PHINode>(LHS)) { 454 PI = cast<PHINode>(LHS); 455 // Bail out if RHS and the phi may be mutually interdependent due to a loop. 456 if (!ValueDominatesPHI(RHS, PI, Q.DT)) 457 return nullptr; 458 } else { 459 assert(isa<PHINode>(RHS) && "No PHI instruction operand!"); 460 PI = cast<PHINode>(RHS); 461 // Bail out if LHS and the phi may be mutually interdependent due to a loop. 462 if (!ValueDominatesPHI(LHS, PI, Q.DT)) 463 return nullptr; 464 } 465 466 // Evaluate the BinOp on the incoming phi values. 467 Value *CommonValue = nullptr; 468 for (unsigned i = 0, e = PI->getNumIncomingValues(); i != e; ++i) { 469 Value *Incoming = PI->getIncomingValue(i); 470 // If the incoming value is the phi node itself, it can safely be skipped. 471 if (Incoming == PI) continue; 472 Value *V = PI == LHS ? 473 SimplifyBinOp(Opcode, Incoming, RHS, Q, MaxRecurse) : 474 SimplifyBinOp(Opcode, LHS, Incoming, Q, MaxRecurse); 475 // If the operation failed to simplify, or simplified to a different value 476 // to previously, then give up. 477 if (!V || (CommonValue && V != CommonValue)) 478 return nullptr; 479 CommonValue = V; 480 } 481 482 return CommonValue; 483 } 484 485 /// ThreadCmpOverPHI - In the case of a comparison with a PHI instruction, try 486 /// try to simplify the comparison by seeing whether comparing with all of the 487 /// incoming phi values yields the same result every time. If so returns the 488 /// common result, otherwise returns null. 489 static Value *ThreadCmpOverPHI(CmpInst::Predicate Pred, Value *LHS, Value *RHS, 490 const Query &Q, unsigned MaxRecurse) { 491 // Recursion is always used, so bail out at once if we already hit the limit. 492 if (!MaxRecurse--) 493 return nullptr; 494 495 // Make sure the phi is on the LHS. 496 if (!isa<PHINode>(LHS)) { 497 std::swap(LHS, RHS); 498 Pred = CmpInst::getSwappedPredicate(Pred); 499 } 500 assert(isa<PHINode>(LHS) && "Not comparing with a phi instruction!"); 501 PHINode *PI = cast<PHINode>(LHS); 502 503 // Bail out if RHS and the phi may be mutually interdependent due to a loop. 504 if (!ValueDominatesPHI(RHS, PI, Q.DT)) 505 return nullptr; 506 507 // Evaluate the BinOp on the incoming phi values. 508 Value *CommonValue = nullptr; 509 for (unsigned i = 0, e = PI->getNumIncomingValues(); i != e; ++i) { 510 Value *Incoming = PI->getIncomingValue(i); 511 // If the incoming value is the phi node itself, it can safely be skipped. 512 if (Incoming == PI) continue; 513 Value *V = SimplifyCmpInst(Pred, Incoming, RHS, Q, MaxRecurse); 514 // If the operation failed to simplify, or simplified to a different value 515 // to previously, then give up. 516 if (!V || (CommonValue && V != CommonValue)) 517 return nullptr; 518 CommonValue = V; 519 } 520 521 return CommonValue; 522 } 523 524 /// SimplifyAddInst - Given operands for an Add, see if we can 525 /// fold the result. If not, this returns null. 526 static Value *SimplifyAddInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW, 527 const Query &Q, unsigned MaxRecurse) { 528 if (Constant *CLHS = dyn_cast<Constant>(Op0)) { 529 if (Constant *CRHS = dyn_cast<Constant>(Op1)) { 530 Constant *Ops[] = { CLHS, CRHS }; 531 return ConstantFoldInstOperands(Instruction::Add, CLHS->getType(), Ops, 532 Q.DL, Q.TLI); 533 } 534 535 // Canonicalize the constant to the RHS. 536 std::swap(Op0, Op1); 537 } 538 539 // X + undef -> undef 540 if (match(Op1, m_Undef())) 541 return Op1; 542 543 // X + 0 -> X 544 if (match(Op1, m_Zero())) 545 return Op0; 546 547 // X + (Y - X) -> Y 548 // (Y - X) + X -> Y 549 // Eg: X + -X -> 0 550 Value *Y = nullptr; 551 if (match(Op1, m_Sub(m_Value(Y), m_Specific(Op0))) || 552 match(Op0, m_Sub(m_Value(Y), m_Specific(Op1)))) 553 return Y; 554 555 // X + ~X -> -1 since ~X = -X-1 556 if (match(Op0, m_Not(m_Specific(Op1))) || 557 match(Op1, m_Not(m_Specific(Op0)))) 558 return Constant::getAllOnesValue(Op0->getType()); 559 560 /// i1 add -> xor. 561 if (MaxRecurse && Op0->getType()->isIntegerTy(1)) 562 if (Value *V = SimplifyXorInst(Op0, Op1, Q, MaxRecurse-1)) 563 return V; 564 565 // Try some generic simplifications for associative operations. 566 if (Value *V = SimplifyAssociativeBinOp(Instruction::Add, Op0, Op1, Q, 567 MaxRecurse)) 568 return V; 569 570 // Threading Add over selects and phi nodes is pointless, so don't bother. 571 // Threading over the select in "A + select(cond, B, C)" means evaluating 572 // "A+B" and "A+C" and seeing if they are equal; but they are equal if and 573 // only if B and C are equal. If B and C are equal then (since we assume 574 // that operands have already been simplified) "select(cond, B, C)" should 575 // have been simplified to the common value of B and C already. Analysing 576 // "A+B" and "A+C" thus gains nothing, but costs compile time. Similarly 577 // for threading over phi nodes. 578 579 return nullptr; 580 } 581 582 Value *llvm::SimplifyAddInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW, 583 const DataLayout *DL, const TargetLibraryInfo *TLI, 584 const DominatorTree *DT, AssumptionTracker *AT, 585 const Instruction *CxtI) { 586 return ::SimplifyAddInst(Op0, Op1, isNSW, isNUW, 587 Query (DL, TLI, DT, AT, CxtI), RecursionLimit); 588 } 589 590 /// \brief Compute the base pointer and cumulative constant offsets for V. 591 /// 592 /// This strips all constant offsets off of V, leaving it the base pointer, and 593 /// accumulates the total constant offset applied in the returned constant. It 594 /// returns 0 if V is not a pointer, and returns the constant '0' if there are 595 /// no constant offsets applied. 596 /// 597 /// This is very similar to GetPointerBaseWithConstantOffset except it doesn't 598 /// follow non-inbounds geps. This allows it to remain usable for icmp ult/etc. 599 /// folding. 600 static Constant *stripAndComputeConstantOffsets(const DataLayout *DL, 601 Value *&V, 602 bool AllowNonInbounds = false) { 603 assert(V->getType()->getScalarType()->isPointerTy()); 604 605 // Without DataLayout, just be conservative for now. Theoretically, more could 606 // be done in this case. 607 if (!DL) 608 return ConstantInt::get(IntegerType::get(V->getContext(), 64), 0); 609 610 Type *IntPtrTy = DL->getIntPtrType(V->getType())->getScalarType(); 611 APInt Offset = APInt::getNullValue(IntPtrTy->getIntegerBitWidth()); 612 613 // Even though we don't look through PHI nodes, we could be called on an 614 // instruction in an unreachable block, which may be on a cycle. 615 SmallPtrSet<Value *, 4> Visited; 616 Visited.insert(V); 617 do { 618 if (GEPOperator *GEP = dyn_cast<GEPOperator>(V)) { 619 if ((!AllowNonInbounds && !GEP->isInBounds()) || 620 !GEP->accumulateConstantOffset(*DL, Offset)) 621 break; 622 V = GEP->getPointerOperand(); 623 } else if (Operator::getOpcode(V) == Instruction::BitCast) { 624 V = cast<Operator>(V)->getOperand(0); 625 } else if (GlobalAlias *GA = dyn_cast<GlobalAlias>(V)) { 626 if (GA->mayBeOverridden()) 627 break; 628 V = GA->getAliasee(); 629 } else { 630 break; 631 } 632 assert(V->getType()->getScalarType()->isPointerTy() && 633 "Unexpected operand type!"); 634 } while (Visited.insert(V)); 635 636 Constant *OffsetIntPtr = ConstantInt::get(IntPtrTy, Offset); 637 if (V->getType()->isVectorTy()) 638 return ConstantVector::getSplat(V->getType()->getVectorNumElements(), 639 OffsetIntPtr); 640 return OffsetIntPtr; 641 } 642 643 /// \brief Compute the constant difference between two pointer values. 644 /// If the difference is not a constant, returns zero. 645 static Constant *computePointerDifference(const DataLayout *DL, 646 Value *LHS, Value *RHS) { 647 Constant *LHSOffset = stripAndComputeConstantOffsets(DL, LHS); 648 Constant *RHSOffset = stripAndComputeConstantOffsets(DL, RHS); 649 650 // If LHS and RHS are not related via constant offsets to the same base 651 // value, there is nothing we can do here. 652 if (LHS != RHS) 653 return nullptr; 654 655 // Otherwise, the difference of LHS - RHS can be computed as: 656 // LHS - RHS 657 // = (LHSOffset + Base) - (RHSOffset + Base) 658 // = LHSOffset - RHSOffset 659 return ConstantExpr::getSub(LHSOffset, RHSOffset); 660 } 661 662 /// SimplifySubInst - Given operands for a Sub, see if we can 663 /// fold the result. If not, this returns null. 664 static Value *SimplifySubInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW, 665 const Query &Q, unsigned MaxRecurse) { 666 if (Constant *CLHS = dyn_cast<Constant>(Op0)) 667 if (Constant *CRHS = dyn_cast<Constant>(Op1)) { 668 Constant *Ops[] = { CLHS, CRHS }; 669 return ConstantFoldInstOperands(Instruction::Sub, CLHS->getType(), 670 Ops, Q.DL, Q.TLI); 671 } 672 673 // X - undef -> undef 674 // undef - X -> undef 675 if (match(Op0, m_Undef()) || match(Op1, m_Undef())) 676 return UndefValue::get(Op0->getType()); 677 678 // X - 0 -> X 679 if (match(Op1, m_Zero())) 680 return Op0; 681 682 // X - X -> 0 683 if (Op0 == Op1) 684 return Constant::getNullValue(Op0->getType()); 685 686 // X - (0 - Y) -> X if the second sub is NUW. 687 // If Y != 0, 0 - Y is a poison value. 688 // If Y == 0, 0 - Y simplifies to 0. 689 if (BinaryOperator::isNeg(Op1)) { 690 if (const auto *BO = dyn_cast<BinaryOperator>(Op1)) { 691 assert(BO->getOpcode() == Instruction::Sub && 692 "Expected a subtraction operator!"); 693 if (BO->hasNoUnsignedWrap()) 694 return Op0; 695 } 696 } 697 698 // (X + Y) - Z -> X + (Y - Z) or Y + (X - Z) if everything simplifies. 699 // For example, (X + Y) - Y -> X; (Y + X) - Y -> X 700 Value *X = nullptr, *Y = nullptr, *Z = Op1; 701 if (MaxRecurse && match(Op0, m_Add(m_Value(X), m_Value(Y)))) { // (X + Y) - Z 702 // See if "V === Y - Z" simplifies. 703 if (Value *V = SimplifyBinOp(Instruction::Sub, Y, Z, Q, MaxRecurse-1)) 704 // It does! Now see if "X + V" simplifies. 705 if (Value *W = SimplifyBinOp(Instruction::Add, X, V, Q, MaxRecurse-1)) { 706 // It does, we successfully reassociated! 707 ++NumReassoc; 708 return W; 709 } 710 // See if "V === X - Z" simplifies. 711 if (Value *V = SimplifyBinOp(Instruction::Sub, X, Z, Q, MaxRecurse-1)) 712 // It does! Now see if "Y + V" simplifies. 713 if (Value *W = SimplifyBinOp(Instruction::Add, Y, V, Q, MaxRecurse-1)) { 714 // It does, we successfully reassociated! 715 ++NumReassoc; 716 return W; 717 } 718 } 719 720 // X - (Y + Z) -> (X - Y) - Z or (X - Z) - Y if everything simplifies. 721 // For example, X - (X + 1) -> -1 722 X = Op0; 723 if (MaxRecurse && match(Op1, m_Add(m_Value(Y), m_Value(Z)))) { // X - (Y + Z) 724 // See if "V === X - Y" simplifies. 725 if (Value *V = SimplifyBinOp(Instruction::Sub, X, Y, Q, MaxRecurse-1)) 726 // It does! Now see if "V - Z" simplifies. 727 if (Value *W = SimplifyBinOp(Instruction::Sub, V, Z, Q, MaxRecurse-1)) { 728 // It does, we successfully reassociated! 729 ++NumReassoc; 730 return W; 731 } 732 // See if "V === X - Z" simplifies. 733 if (Value *V = SimplifyBinOp(Instruction::Sub, X, Z, Q, MaxRecurse-1)) 734 // It does! Now see if "V - Y" simplifies. 735 if (Value *W = SimplifyBinOp(Instruction::Sub, V, Y, Q, MaxRecurse-1)) { 736 // It does, we successfully reassociated! 737 ++NumReassoc; 738 return W; 739 } 740 } 741 742 // Z - (X - Y) -> (Z - X) + Y if everything simplifies. 743 // For example, X - (X - Y) -> Y. 744 Z = Op0; 745 if (MaxRecurse && match(Op1, m_Sub(m_Value(X), m_Value(Y)))) // Z - (X - Y) 746 // See if "V === Z - X" simplifies. 747 if (Value *V = SimplifyBinOp(Instruction::Sub, Z, X, Q, MaxRecurse-1)) 748 // It does! Now see if "V + Y" simplifies. 749 if (Value *W = SimplifyBinOp(Instruction::Add, V, Y, Q, MaxRecurse-1)) { 750 // It does, we successfully reassociated! 751 ++NumReassoc; 752 return W; 753 } 754 755 // trunc(X) - trunc(Y) -> trunc(X - Y) if everything simplifies. 756 if (MaxRecurse && match(Op0, m_Trunc(m_Value(X))) && 757 match(Op1, m_Trunc(m_Value(Y)))) 758 if (X->getType() == Y->getType()) 759 // See if "V === X - Y" simplifies. 760 if (Value *V = SimplifyBinOp(Instruction::Sub, X, Y, Q, MaxRecurse-1)) 761 // It does! Now see if "trunc V" simplifies. 762 if (Value *W = SimplifyTruncInst(V, Op0->getType(), Q, MaxRecurse-1)) 763 // It does, return the simplified "trunc V". 764 return W; 765 766 // Variations on GEP(base, I, ...) - GEP(base, i, ...) -> GEP(null, I-i, ...). 767 if (match(Op0, m_PtrToInt(m_Value(X))) && 768 match(Op1, m_PtrToInt(m_Value(Y)))) 769 if (Constant *Result = computePointerDifference(Q.DL, X, Y)) 770 return ConstantExpr::getIntegerCast(Result, Op0->getType(), true); 771 772 // i1 sub -> xor. 773 if (MaxRecurse && Op0->getType()->isIntegerTy(1)) 774 if (Value *V = SimplifyXorInst(Op0, Op1, Q, MaxRecurse-1)) 775 return V; 776 777 // Threading Sub over selects and phi nodes is pointless, so don't bother. 778 // Threading over the select in "A - select(cond, B, C)" means evaluating 779 // "A-B" and "A-C" and seeing if they are equal; but they are equal if and 780 // only if B and C are equal. If B and C are equal then (since we assume 781 // that operands have already been simplified) "select(cond, B, C)" should 782 // have been simplified to the common value of B and C already. Analysing 783 // "A-B" and "A-C" thus gains nothing, but costs compile time. Similarly 784 // for threading over phi nodes. 785 786 return nullptr; 787 } 788 789 Value *llvm::SimplifySubInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW, 790 const DataLayout *DL, const TargetLibraryInfo *TLI, 791 const DominatorTree *DT, AssumptionTracker *AT, 792 const Instruction *CxtI) { 793 return ::SimplifySubInst(Op0, Op1, isNSW, isNUW, 794 Query (DL, TLI, DT, AT, CxtI), RecursionLimit); 795 } 796 797 /// Given operands for an FAdd, see if we can fold the result. If not, this 798 /// returns null. 799 static Value *SimplifyFAddInst(Value *Op0, Value *Op1, FastMathFlags FMF, 800 const Query &Q, unsigned MaxRecurse) { 801 if (Constant *CLHS = dyn_cast<Constant>(Op0)) { 802 if (Constant *CRHS = dyn_cast<Constant>(Op1)) { 803 Constant *Ops[] = { CLHS, CRHS }; 804 return ConstantFoldInstOperands(Instruction::FAdd, CLHS->getType(), 805 Ops, Q.DL, Q.TLI); 806 } 807 808 // Canonicalize the constant to the RHS. 809 std::swap(Op0, Op1); 810 } 811 812 // fadd X, -0 ==> X 813 if (match(Op1, m_NegZero())) 814 return Op0; 815 816 // fadd X, 0 ==> X, when we know X is not -0 817 if (match(Op1, m_Zero()) && 818 (FMF.noSignedZeros() || CannotBeNegativeZero(Op0))) 819 return Op0; 820 821 // fadd [nnan ninf] X, (fsub [nnan ninf] 0, X) ==> 0 822 // where nnan and ninf have to occur at least once somewhere in this 823 // expression 824 Value *SubOp = nullptr; 825 if (match(Op1, m_FSub(m_AnyZero(), m_Specific(Op0)))) 826 SubOp = Op1; 827 else if (match(Op0, m_FSub(m_AnyZero(), m_Specific(Op1)))) 828 SubOp = Op0; 829 if (SubOp) { 830 Instruction *FSub = cast<Instruction>(SubOp); 831 if ((FMF.noNaNs() || FSub->hasNoNaNs()) && 832 (FMF.noInfs() || FSub->hasNoInfs())) 833 return Constant::getNullValue(Op0->getType()); 834 } 835 836 return nullptr; 837 } 838 839 /// Given operands for an FSub, see if we can fold the result. If not, this 840 /// returns null. 841 static Value *SimplifyFSubInst(Value *Op0, Value *Op1, FastMathFlags FMF, 842 const Query &Q, unsigned MaxRecurse) { 843 if (Constant *CLHS = dyn_cast<Constant>(Op0)) { 844 if (Constant *CRHS = dyn_cast<Constant>(Op1)) { 845 Constant *Ops[] = { CLHS, CRHS }; 846 return ConstantFoldInstOperands(Instruction::FSub, CLHS->getType(), 847 Ops, Q.DL, Q.TLI); 848 } 849 } 850 851 // fsub X, 0 ==> X 852 if (match(Op1, m_Zero())) 853 return Op0; 854 855 // fsub X, -0 ==> X, when we know X is not -0 856 if (match(Op1, m_NegZero()) && 857 (FMF.noSignedZeros() || CannotBeNegativeZero(Op0))) 858 return Op0; 859 860 // fsub 0, (fsub -0.0, X) ==> X 861 Value *X; 862 if (match(Op0, m_AnyZero())) { 863 if (match(Op1, m_FSub(m_NegZero(), m_Value(X)))) 864 return X; 865 if (FMF.noSignedZeros() && match(Op1, m_FSub(m_AnyZero(), m_Value(X)))) 866 return X; 867 } 868 869 // fsub nnan ninf x, x ==> 0.0 870 if (FMF.noNaNs() && FMF.noInfs() && Op0 == Op1) 871 return Constant::getNullValue(Op0->getType()); 872 873 return nullptr; 874 } 875 876 /// Given the operands for an FMul, see if we can fold the result 877 static Value *SimplifyFMulInst(Value *Op0, Value *Op1, 878 FastMathFlags FMF, 879 const Query &Q, 880 unsigned MaxRecurse) { 881 if (Constant *CLHS = dyn_cast<Constant>(Op0)) { 882 if (Constant *CRHS = dyn_cast<Constant>(Op1)) { 883 Constant *Ops[] = { CLHS, CRHS }; 884 return ConstantFoldInstOperands(Instruction::FMul, CLHS->getType(), 885 Ops, Q.DL, Q.TLI); 886 } 887 888 // Canonicalize the constant to the RHS. 889 std::swap(Op0, Op1); 890 } 891 892 // fmul X, 1.0 ==> X 893 if (match(Op1, m_FPOne())) 894 return Op0; 895 896 // fmul nnan nsz X, 0 ==> 0 897 if (FMF.noNaNs() && FMF.noSignedZeros() && match(Op1, m_AnyZero())) 898 return Op1; 899 900 return nullptr; 901 } 902 903 /// SimplifyMulInst - Given operands for a Mul, see if we can 904 /// fold the result. If not, this returns null. 905 static Value *SimplifyMulInst(Value *Op0, Value *Op1, const Query &Q, 906 unsigned MaxRecurse) { 907 if (Constant *CLHS = dyn_cast<Constant>(Op0)) { 908 if (Constant *CRHS = dyn_cast<Constant>(Op1)) { 909 Constant *Ops[] = { CLHS, CRHS }; 910 return ConstantFoldInstOperands(Instruction::Mul, CLHS->getType(), 911 Ops, Q.DL, Q.TLI); 912 } 913 914 // Canonicalize the constant to the RHS. 915 std::swap(Op0, Op1); 916 } 917 918 // X * undef -> 0 919 if (match(Op1, m_Undef())) 920 return Constant::getNullValue(Op0->getType()); 921 922 // X * 0 -> 0 923 if (match(Op1, m_Zero())) 924 return Op1; 925 926 // X * 1 -> X 927 if (match(Op1, m_One())) 928 return Op0; 929 930 // (X / Y) * Y -> X if the division is exact. 931 Value *X = nullptr; 932 if (match(Op0, m_Exact(m_IDiv(m_Value(X), m_Specific(Op1)))) || // (X / Y) * Y 933 match(Op1, m_Exact(m_IDiv(m_Value(X), m_Specific(Op0))))) // Y * (X / Y) 934 return X; 935 936 // i1 mul -> and. 937 if (MaxRecurse && Op0->getType()->isIntegerTy(1)) 938 if (Value *V = SimplifyAndInst(Op0, Op1, Q, MaxRecurse-1)) 939 return V; 940 941 // Try some generic simplifications for associative operations. 942 if (Value *V = SimplifyAssociativeBinOp(Instruction::Mul, Op0, Op1, Q, 943 MaxRecurse)) 944 return V; 945 946 // Mul distributes over Add. Try some generic simplifications based on this. 947 if (Value *V = ExpandBinOp(Instruction::Mul, Op0, Op1, Instruction::Add, 948 Q, MaxRecurse)) 949 return V; 950 951 // If the operation is with the result of a select instruction, check whether 952 // operating on either branch of the select always yields the same value. 953 if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1)) 954 if (Value *V = ThreadBinOpOverSelect(Instruction::Mul, Op0, Op1, Q, 955 MaxRecurse)) 956 return V; 957 958 // If the operation is with the result of a phi instruction, check whether 959 // operating on all incoming values of the phi always yields the same value. 960 if (isa<PHINode>(Op0) || isa<PHINode>(Op1)) 961 if (Value *V = ThreadBinOpOverPHI(Instruction::Mul, Op0, Op1, Q, 962 MaxRecurse)) 963 return V; 964 965 return nullptr; 966 } 967 968 Value *llvm::SimplifyFAddInst(Value *Op0, Value *Op1, FastMathFlags FMF, 969 const DataLayout *DL, const TargetLibraryInfo *TLI, 970 const DominatorTree *DT, AssumptionTracker *AT, 971 const Instruction *CxtI) { 972 return ::SimplifyFAddInst(Op0, Op1, FMF, Query (DL, TLI, DT, AT, CxtI), 973 RecursionLimit); 974 } 975 976 Value *llvm::SimplifyFSubInst(Value *Op0, Value *Op1, FastMathFlags FMF, 977 const DataLayout *DL, const TargetLibraryInfo *TLI, 978 const DominatorTree *DT, AssumptionTracker *AT, 979 const Instruction *CxtI) { 980 return ::SimplifyFSubInst(Op0, Op1, FMF, Query (DL, TLI, DT, AT, CxtI), 981 RecursionLimit); 982 } 983 984 Value *llvm::SimplifyFMulInst(Value *Op0, Value *Op1, 985 FastMathFlags FMF, 986 const DataLayout *DL, 987 const TargetLibraryInfo *TLI, 988 const DominatorTree *DT, 989 AssumptionTracker *AT, 990 const Instruction *CxtI) { 991 return ::SimplifyFMulInst(Op0, Op1, FMF, Query (DL, TLI, DT, AT, CxtI), 992 RecursionLimit); 993 } 994 995 Value *llvm::SimplifyMulInst(Value *Op0, Value *Op1, const DataLayout *DL, 996 const TargetLibraryInfo *TLI, 997 const DominatorTree *DT, AssumptionTracker *AT, 998 const Instruction *CxtI) { 999 return ::SimplifyMulInst(Op0, Op1, Query (DL, TLI, DT, AT, CxtI), 1000 RecursionLimit); 1001 } 1002 1003 /// SimplifyDiv - Given operands for an SDiv or UDiv, see if we can 1004 /// fold the result. If not, this returns null. 1005 static Value *SimplifyDiv(Instruction::BinaryOps Opcode, Value *Op0, Value *Op1, 1006 const Query &Q, unsigned MaxRecurse) { 1007 if (Constant *C0 = dyn_cast<Constant>(Op0)) { 1008 if (Constant *C1 = dyn_cast<Constant>(Op1)) { 1009 Constant *Ops[] = { C0, C1 }; 1010 return ConstantFoldInstOperands(Opcode, C0->getType(), Ops, Q.DL, Q.TLI); 1011 } 1012 } 1013 1014 bool isSigned = Opcode == Instruction::SDiv; 1015 1016 // X / undef -> undef 1017 if (match(Op1, m_Undef())) 1018 return Op1; 1019 1020 // undef / X -> 0 1021 if (match(Op0, m_Undef())) 1022 return Constant::getNullValue(Op0->getType()); 1023 1024 // 0 / X -> 0, we don't need to preserve faults! 1025 if (match(Op0, m_Zero())) 1026 return Op0; 1027 1028 // X / 1 -> X 1029 if (match(Op1, m_One())) 1030 return Op0; 1031 1032 if (Op0->getType()->isIntegerTy(1)) 1033 // It can't be division by zero, hence it must be division by one. 1034 return Op0; 1035 1036 // X / X -> 1 1037 if (Op0 == Op1) 1038 return ConstantInt::get(Op0->getType(), 1); 1039 1040 // (X * Y) / Y -> X if the multiplication does not overflow. 1041 Value *X = nullptr, *Y = nullptr; 1042 if (match(Op0, m_Mul(m_Value(X), m_Value(Y))) && (X == Op1 || Y == Op1)) { 1043 if (Y != Op1) std::swap(X, Y); // Ensure expression is (X * Y) / Y, Y = Op1 1044 OverflowingBinaryOperator *Mul = cast<OverflowingBinaryOperator>(Op0); 1045 // If the Mul knows it does not overflow, then we are good to go. 1046 if ((isSigned && Mul->hasNoSignedWrap()) || 1047 (!isSigned && Mul->hasNoUnsignedWrap())) 1048 return X; 1049 // If X has the form X = A / Y then X * Y cannot overflow. 1050 if (BinaryOperator *Div = dyn_cast<BinaryOperator>(X)) 1051 if (Div->getOpcode() == Opcode && Div->getOperand(1) == Y) 1052 return X; 1053 } 1054 1055 // (X rem Y) / Y -> 0 1056 if ((isSigned && match(Op0, m_SRem(m_Value(), m_Specific(Op1)))) || 1057 (!isSigned && match(Op0, m_URem(m_Value(), m_Specific(Op1))))) 1058 return Constant::getNullValue(Op0->getType()); 1059 1060 // If the operation is with the result of a select instruction, check whether 1061 // operating on either branch of the select always yields the same value. 1062 if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1)) 1063 if (Value *V = ThreadBinOpOverSelect(Opcode, Op0, Op1, Q, MaxRecurse)) 1064 return V; 1065 1066 // If the operation is with the result of a phi instruction, check whether 1067 // operating on all incoming values of the phi always yields the same value. 1068 if (isa<PHINode>(Op0) || isa<PHINode>(Op1)) 1069 if (Value *V = ThreadBinOpOverPHI(Opcode, Op0, Op1, Q, MaxRecurse)) 1070 return V; 1071 1072 return nullptr; 1073 } 1074 1075 /// SimplifySDivInst - Given operands for an SDiv, see if we can 1076 /// fold the result. If not, this returns null. 1077 static Value *SimplifySDivInst(Value *Op0, Value *Op1, const Query &Q, 1078 unsigned MaxRecurse) { 1079 if (Value *V = SimplifyDiv(Instruction::SDiv, Op0, Op1, Q, MaxRecurse)) 1080 return V; 1081 1082 return nullptr; 1083 } 1084 1085 Value *llvm::SimplifySDivInst(Value *Op0, Value *Op1, const DataLayout *DL, 1086 const TargetLibraryInfo *TLI, 1087 const DominatorTree *DT, 1088 AssumptionTracker *AT, 1089 const Instruction *CxtI) { 1090 return ::SimplifySDivInst(Op0, Op1, Query (DL, TLI, DT, AT, CxtI), 1091 RecursionLimit); 1092 } 1093 1094 /// SimplifyUDivInst - Given operands for a UDiv, see if we can 1095 /// fold the result. If not, this returns null. 1096 static Value *SimplifyUDivInst(Value *Op0, Value *Op1, const Query &Q, 1097 unsigned MaxRecurse) { 1098 if (Value *V = SimplifyDiv(Instruction::UDiv, Op0, Op1, Q, MaxRecurse)) 1099 return V; 1100 1101 return nullptr; 1102 } 1103 1104 Value *llvm::SimplifyUDivInst(Value *Op0, Value *Op1, const DataLayout *DL, 1105 const TargetLibraryInfo *TLI, 1106 const DominatorTree *DT, 1107 AssumptionTracker *AT, 1108 const Instruction *CxtI) { 1109 return ::SimplifyUDivInst(Op0, Op1, Query (DL, TLI, DT, AT, CxtI), 1110 RecursionLimit); 1111 } 1112 1113 static Value *SimplifyFDivInst(Value *Op0, Value *Op1, const Query &Q, 1114 unsigned) { 1115 // undef / X -> undef (the undef could be a snan). 1116 if (match(Op0, m_Undef())) 1117 return Op0; 1118 1119 // X / undef -> undef 1120 if (match(Op1, m_Undef())) 1121 return Op1; 1122 1123 return nullptr; 1124 } 1125 1126 Value *llvm::SimplifyFDivInst(Value *Op0, Value *Op1, const DataLayout *DL, 1127 const TargetLibraryInfo *TLI, 1128 const DominatorTree *DT, 1129 AssumptionTracker *AT, 1130 const Instruction *CxtI) { 1131 return ::SimplifyFDivInst(Op0, Op1, Query (DL, TLI, DT, AT, CxtI), 1132 RecursionLimit); 1133 } 1134 1135 /// SimplifyRem - Given operands for an SRem or URem, see if we can 1136 /// fold the result. If not, this returns null. 1137 static Value *SimplifyRem(Instruction::BinaryOps Opcode, Value *Op0, Value *Op1, 1138 const Query &Q, unsigned MaxRecurse) { 1139 if (Constant *C0 = dyn_cast<Constant>(Op0)) { 1140 if (Constant *C1 = dyn_cast<Constant>(Op1)) { 1141 Constant *Ops[] = { C0, C1 }; 1142 return ConstantFoldInstOperands(Opcode, C0->getType(), Ops, Q.DL, Q.TLI); 1143 } 1144 } 1145 1146 // X % undef -> undef 1147 if (match(Op1, m_Undef())) 1148 return Op1; 1149 1150 // undef % X -> 0 1151 if (match(Op0, m_Undef())) 1152 return Constant::getNullValue(Op0->getType()); 1153 1154 // 0 % X -> 0, we don't need to preserve faults! 1155 if (match(Op0, m_Zero())) 1156 return Op0; 1157 1158 // X % 0 -> undef, we don't need to preserve faults! 1159 if (match(Op1, m_Zero())) 1160 return UndefValue::get(Op0->getType()); 1161 1162 // X % 1 -> 0 1163 if (match(Op1, m_One())) 1164 return Constant::getNullValue(Op0->getType()); 1165 1166 if (Op0->getType()->isIntegerTy(1)) 1167 // It can't be remainder by zero, hence it must be remainder by one. 1168 return Constant::getNullValue(Op0->getType()); 1169 1170 // X % X -> 0 1171 if (Op0 == Op1) 1172 return Constant::getNullValue(Op0->getType()); 1173 1174 // (X % Y) % Y -> X % Y 1175 if ((Opcode == Instruction::SRem && 1176 match(Op0, m_SRem(m_Value(), m_Specific(Op1)))) || 1177 (Opcode == Instruction::URem && 1178 match(Op0, m_URem(m_Value(), m_Specific(Op1))))) 1179 return Op0; 1180 1181 // If the operation is with the result of a select instruction, check whether 1182 // operating on either branch of the select always yields the same value. 1183 if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1)) 1184 if (Value *V = ThreadBinOpOverSelect(Opcode, Op0, Op1, Q, MaxRecurse)) 1185 return V; 1186 1187 // If the operation is with the result of a phi instruction, check whether 1188 // operating on all incoming values of the phi always yields the same value. 1189 if (isa<PHINode>(Op0) || isa<PHINode>(Op1)) 1190 if (Value *V = ThreadBinOpOverPHI(Opcode, Op0, Op1, Q, MaxRecurse)) 1191 return V; 1192 1193 return nullptr; 1194 } 1195 1196 /// SimplifySRemInst - Given operands for an SRem, see if we can 1197 /// fold the result. If not, this returns null. 1198 static Value *SimplifySRemInst(Value *Op0, Value *Op1, const Query &Q, 1199 unsigned MaxRecurse) { 1200 if (Value *V = SimplifyRem(Instruction::SRem, Op0, Op1, Q, MaxRecurse)) 1201 return V; 1202 1203 return nullptr; 1204 } 1205 1206 Value *llvm::SimplifySRemInst(Value *Op0, Value *Op1, const DataLayout *DL, 1207 const TargetLibraryInfo *TLI, 1208 const DominatorTree *DT, 1209 AssumptionTracker *AT, 1210 const Instruction *CxtI) { 1211 return ::SimplifySRemInst(Op0, Op1, Query (DL, TLI, DT, AT, CxtI), 1212 RecursionLimit); 1213 } 1214 1215 /// SimplifyURemInst - Given operands for a URem, see if we can 1216 /// fold the result. If not, this returns null. 1217 static Value *SimplifyURemInst(Value *Op0, Value *Op1, const Query &Q, 1218 unsigned MaxRecurse) { 1219 if (Value *V = SimplifyRem(Instruction::URem, Op0, Op1, Q, MaxRecurse)) 1220 return V; 1221 1222 return nullptr; 1223 } 1224 1225 Value *llvm::SimplifyURemInst(Value *Op0, Value *Op1, const DataLayout *DL, 1226 const TargetLibraryInfo *TLI, 1227 const DominatorTree *DT, 1228 AssumptionTracker *AT, 1229 const Instruction *CxtI) { 1230 return ::SimplifyURemInst(Op0, Op1, Query (DL, TLI, DT, AT, CxtI), 1231 RecursionLimit); 1232 } 1233 1234 static Value *SimplifyFRemInst(Value *Op0, Value *Op1, const Query &, 1235 unsigned) { 1236 // undef % X -> undef (the undef could be a snan). 1237 if (match(Op0, m_Undef())) 1238 return Op0; 1239 1240 // X % undef -> undef 1241 if (match(Op1, m_Undef())) 1242 return Op1; 1243 1244 return nullptr; 1245 } 1246 1247 Value *llvm::SimplifyFRemInst(Value *Op0, Value *Op1, const DataLayout *DL, 1248 const TargetLibraryInfo *TLI, 1249 const DominatorTree *DT, 1250 AssumptionTracker *AT, 1251 const Instruction *CxtI) { 1252 return ::SimplifyFRemInst(Op0, Op1, Query (DL, TLI, DT, AT, CxtI), 1253 RecursionLimit); 1254 } 1255 1256 /// isUndefShift - Returns true if a shift by \c Amount always yields undef. 1257 static bool isUndefShift(Value *Amount) { 1258 Constant *C = dyn_cast<Constant>(Amount); 1259 if (!C) 1260 return false; 1261 1262 // X shift by undef -> undef because it may shift by the bitwidth. 1263 if (isa<UndefValue>(C)) 1264 return true; 1265 1266 // Shifting by the bitwidth or more is undefined. 1267 if (ConstantInt *CI = dyn_cast<ConstantInt>(C)) 1268 if (CI->getValue().getLimitedValue() >= 1269 CI->getType()->getScalarSizeInBits()) 1270 return true; 1271 1272 // If all lanes of a vector shift are undefined the whole shift is. 1273 if (isa<ConstantVector>(C) || isa<ConstantDataVector>(C)) { 1274 for (unsigned I = 0, E = C->getType()->getVectorNumElements(); I != E; ++I) 1275 if (!isUndefShift(C->getAggregateElement(I))) 1276 return false; 1277 return true; 1278 } 1279 1280 return false; 1281 } 1282 1283 /// SimplifyShift - Given operands for an Shl, LShr or AShr, see if we can 1284 /// fold the result. If not, this returns null. 1285 static Value *SimplifyShift(unsigned Opcode, Value *Op0, Value *Op1, 1286 const Query &Q, unsigned MaxRecurse) { 1287 if (Constant *C0 = dyn_cast<Constant>(Op0)) { 1288 if (Constant *C1 = dyn_cast<Constant>(Op1)) { 1289 Constant *Ops[] = { C0, C1 }; 1290 return ConstantFoldInstOperands(Opcode, C0->getType(), Ops, Q.DL, Q.TLI); 1291 } 1292 } 1293 1294 // 0 shift by X -> 0 1295 if (match(Op0, m_Zero())) 1296 return Op0; 1297 1298 // X shift by 0 -> X 1299 if (match(Op1, m_Zero())) 1300 return Op0; 1301 1302 // Fold undefined shifts. 1303 if (isUndefShift(Op1)) 1304 return UndefValue::get(Op0->getType()); 1305 1306 // If the operation is with the result of a select instruction, check whether 1307 // operating on either branch of the select always yields the same value. 1308 if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1)) 1309 if (Value *V = ThreadBinOpOverSelect(Opcode, Op0, Op1, Q, MaxRecurse)) 1310 return V; 1311 1312 // If the operation is with the result of a phi instruction, check whether 1313 // operating on all incoming values of the phi always yields the same value. 1314 if (isa<PHINode>(Op0) || isa<PHINode>(Op1)) 1315 if (Value *V = ThreadBinOpOverPHI(Opcode, Op0, Op1, Q, MaxRecurse)) 1316 return V; 1317 1318 return nullptr; 1319 } 1320 1321 /// SimplifyShlInst - Given operands for an Shl, see if we can 1322 /// fold the result. If not, this returns null. 1323 static Value *SimplifyShlInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW, 1324 const Query &Q, unsigned MaxRecurse) { 1325 if (Value *V = SimplifyShift(Instruction::Shl, Op0, Op1, Q, MaxRecurse)) 1326 return V; 1327 1328 // undef << X -> 0 1329 if (match(Op0, m_Undef())) 1330 return Constant::getNullValue(Op0->getType()); 1331 1332 // (X >> A) << A -> X 1333 Value *X; 1334 if (match(Op0, m_Exact(m_Shr(m_Value(X), m_Specific(Op1))))) 1335 return X; 1336 return nullptr; 1337 } 1338 1339 Value *llvm::SimplifyShlInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW, 1340 const DataLayout *DL, const TargetLibraryInfo *TLI, 1341 const DominatorTree *DT, AssumptionTracker *AT, 1342 const Instruction *CxtI) { 1343 return ::SimplifyShlInst(Op0, Op1, isNSW, isNUW, Query (DL, TLI, DT, AT, CxtI), 1344 RecursionLimit); 1345 } 1346 1347 /// SimplifyLShrInst - Given operands for an LShr, see if we can 1348 /// fold the result. If not, this returns null. 1349 static Value *SimplifyLShrInst(Value *Op0, Value *Op1, bool isExact, 1350 const Query &Q, unsigned MaxRecurse) { 1351 if (Value *V = SimplifyShift(Instruction::LShr, Op0, Op1, Q, MaxRecurse)) 1352 return V; 1353 1354 // X >> X -> 0 1355 if (Op0 == Op1) 1356 return Constant::getNullValue(Op0->getType()); 1357 1358 // undef >>l X -> 0 1359 if (match(Op0, m_Undef())) 1360 return Constant::getNullValue(Op0->getType()); 1361 1362 // (X << A) >> A -> X 1363 Value *X; 1364 if (match(Op0, m_Shl(m_Value(X), m_Specific(Op1))) && 1365 cast<OverflowingBinaryOperator>(Op0)->hasNoUnsignedWrap()) 1366 return X; 1367 1368 return nullptr; 1369 } 1370 1371 Value *llvm::SimplifyLShrInst(Value *Op0, Value *Op1, bool isExact, 1372 const DataLayout *DL, 1373 const TargetLibraryInfo *TLI, 1374 const DominatorTree *DT, 1375 AssumptionTracker *AT, 1376 const Instruction *CxtI) { 1377 return ::SimplifyLShrInst(Op0, Op1, isExact, Query (DL, TLI, DT, AT, CxtI), 1378 RecursionLimit); 1379 } 1380 1381 /// SimplifyAShrInst - Given operands for an AShr, see if we can 1382 /// fold the result. If not, this returns null. 1383 static Value *SimplifyAShrInst(Value *Op0, Value *Op1, bool isExact, 1384 const Query &Q, unsigned MaxRecurse) { 1385 if (Value *V = SimplifyShift(Instruction::AShr, Op0, Op1, Q, MaxRecurse)) 1386 return V; 1387 1388 // X >> X -> 0 1389 if (Op0 == Op1) 1390 return Constant::getNullValue(Op0->getType()); 1391 1392 // all ones >>a X -> all ones 1393 if (match(Op0, m_AllOnes())) 1394 return Op0; 1395 1396 // undef >>a X -> all ones 1397 if (match(Op0, m_Undef())) 1398 return Constant::getAllOnesValue(Op0->getType()); 1399 1400 // (X << A) >> A -> X 1401 Value *X; 1402 if (match(Op0, m_Shl(m_Value(X), m_Specific(Op1))) && 1403 cast<OverflowingBinaryOperator>(Op0)->hasNoSignedWrap()) 1404 return X; 1405 1406 // Arithmetic shifting an all-sign-bit value is a no-op. 1407 unsigned NumSignBits = ComputeNumSignBits(Op0, Q.DL, 0, Q.AT, Q.CxtI, Q.DT); 1408 if (NumSignBits == Op0->getType()->getScalarSizeInBits()) 1409 return Op0; 1410 1411 return nullptr; 1412 } 1413 1414 Value *llvm::SimplifyAShrInst(Value *Op0, Value *Op1, bool isExact, 1415 const DataLayout *DL, 1416 const TargetLibraryInfo *TLI, 1417 const DominatorTree *DT, 1418 AssumptionTracker *AT, 1419 const Instruction *CxtI) { 1420 return ::SimplifyAShrInst(Op0, Op1, isExact, Query (DL, TLI, DT, AT, CxtI), 1421 RecursionLimit); 1422 } 1423 1424 // Simplify (and (icmp ...) (icmp ...)) to true when we can tell that the range 1425 // of possible values cannot be satisfied. 1426 static Value *SimplifyAndOfICmps(ICmpInst *Op0, ICmpInst *Op1) { 1427 ICmpInst::Predicate Pred0, Pred1; 1428 ConstantInt *CI1, *CI2; 1429 Value *V; 1430 if (!match(Op0, m_ICmp(Pred0, m_Add(m_Value(V), m_ConstantInt(CI1)), 1431 m_ConstantInt(CI2)))) 1432 return nullptr; 1433 1434 if (!match(Op1, m_ICmp(Pred1, m_Specific(V), m_Specific(CI1)))) 1435 return nullptr; 1436 1437 Type *ITy = Op0->getType(); 1438 1439 auto *AddInst = cast<BinaryOperator>(Op0->getOperand(0)); 1440 bool isNSW = AddInst->hasNoSignedWrap(); 1441 bool isNUW = AddInst->hasNoUnsignedWrap(); 1442 1443 const APInt &CI1V = CI1->getValue(); 1444 const APInt &CI2V = CI2->getValue(); 1445 const APInt Delta = CI2V - CI1V; 1446 if (CI1V.isStrictlyPositive()) { 1447 if (Delta == 2) { 1448 if (Pred0 == ICmpInst::ICMP_ULT && Pred1 == ICmpInst::ICMP_SGT) 1449 return getFalse(ITy); 1450 if (Pred0 == ICmpInst::ICMP_SLT && Pred1 == ICmpInst::ICMP_SGT && isNSW) 1451 return getFalse(ITy); 1452 } 1453 if (Delta == 1) { 1454 if (Pred0 == ICmpInst::ICMP_ULE && Pred1 == ICmpInst::ICMP_SGT) 1455 return getFalse(ITy); 1456 if (Pred0 == ICmpInst::ICMP_SLE && Pred1 == ICmpInst::ICMP_SGT && isNSW) 1457 return getFalse(ITy); 1458 } 1459 } 1460 if (CI1V.getBoolValue() && isNUW) { 1461 if (Delta == 2) 1462 if (Pred0 == ICmpInst::ICMP_ULT && Pred1 == ICmpInst::ICMP_UGT) 1463 return getFalse(ITy); 1464 if (Delta == 1) 1465 if (Pred0 == ICmpInst::ICMP_ULE && Pred1 == ICmpInst::ICMP_UGT) 1466 return getFalse(ITy); 1467 } 1468 1469 return nullptr; 1470 } 1471 1472 /// SimplifyAndInst - Given operands for an And, see if we can 1473 /// fold the result. If not, this returns null. 1474 static Value *SimplifyAndInst(Value *Op0, Value *Op1, const Query &Q, 1475 unsigned MaxRecurse) { 1476 if (Constant *CLHS = dyn_cast<Constant>(Op0)) { 1477 if (Constant *CRHS = dyn_cast<Constant>(Op1)) { 1478 Constant *Ops[] = { CLHS, CRHS }; 1479 return ConstantFoldInstOperands(Instruction::And, CLHS->getType(), 1480 Ops, Q.DL, Q.TLI); 1481 } 1482 1483 // Canonicalize the constant to the RHS. 1484 std::swap(Op0, Op1); 1485 } 1486 1487 // X & undef -> 0 1488 if (match(Op1, m_Undef())) 1489 return Constant::getNullValue(Op0->getType()); 1490 1491 // X & X = X 1492 if (Op0 == Op1) 1493 return Op0; 1494 1495 // X & 0 = 0 1496 if (match(Op1, m_Zero())) 1497 return Op1; 1498 1499 // X & -1 = X 1500 if (match(Op1, m_AllOnes())) 1501 return Op0; 1502 1503 // A & ~A = ~A & A = 0 1504 if (match(Op0, m_Not(m_Specific(Op1))) || 1505 match(Op1, m_Not(m_Specific(Op0)))) 1506 return Constant::getNullValue(Op0->getType()); 1507 1508 // (A | ?) & A = A 1509 Value *A = nullptr, *B = nullptr; 1510 if (match(Op0, m_Or(m_Value(A), m_Value(B))) && 1511 (A == Op1 || B == Op1)) 1512 return Op1; 1513 1514 // A & (A | ?) = A 1515 if (match(Op1, m_Or(m_Value(A), m_Value(B))) && 1516 (A == Op0 || B == Op0)) 1517 return Op0; 1518 1519 // A & (-A) = A if A is a power of two or zero. 1520 if (match(Op0, m_Neg(m_Specific(Op1))) || 1521 match(Op1, m_Neg(m_Specific(Op0)))) { 1522 if (isKnownToBeAPowerOfTwo(Op0, /*OrZero*/true, 0, Q.AT, Q.CxtI, Q.DT)) 1523 return Op0; 1524 if (isKnownToBeAPowerOfTwo(Op1, /*OrZero*/true, 0, Q.AT, Q.CxtI, Q.DT)) 1525 return Op1; 1526 } 1527 1528 if (auto *ICILHS = dyn_cast<ICmpInst>(Op0)) { 1529 if (auto *ICIRHS = dyn_cast<ICmpInst>(Op1)) { 1530 if (Value *V = SimplifyAndOfICmps(ICILHS, ICIRHS)) 1531 return V; 1532 if (Value *V = SimplifyAndOfICmps(ICIRHS, ICILHS)) 1533 return V; 1534 } 1535 } 1536 1537 // Try some generic simplifications for associative operations. 1538 if (Value *V = SimplifyAssociativeBinOp(Instruction::And, Op0, Op1, Q, 1539 MaxRecurse)) 1540 return V; 1541 1542 // And distributes over Or. Try some generic simplifications based on this. 1543 if (Value *V = ExpandBinOp(Instruction::And, Op0, Op1, Instruction::Or, 1544 Q, MaxRecurse)) 1545 return V; 1546 1547 // And distributes over Xor. Try some generic simplifications based on this. 1548 if (Value *V = ExpandBinOp(Instruction::And, Op0, Op1, Instruction::Xor, 1549 Q, MaxRecurse)) 1550 return V; 1551 1552 // If the operation is with the result of a select instruction, check whether 1553 // operating on either branch of the select always yields the same value. 1554 if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1)) 1555 if (Value *V = ThreadBinOpOverSelect(Instruction::And, Op0, Op1, Q, 1556 MaxRecurse)) 1557 return V; 1558 1559 // If the operation is with the result of a phi instruction, check whether 1560 // operating on all incoming values of the phi always yields the same value. 1561 if (isa<PHINode>(Op0) || isa<PHINode>(Op1)) 1562 if (Value *V = ThreadBinOpOverPHI(Instruction::And, Op0, Op1, Q, 1563 MaxRecurse)) 1564 return V; 1565 1566 return nullptr; 1567 } 1568 1569 Value *llvm::SimplifyAndInst(Value *Op0, Value *Op1, const DataLayout *DL, 1570 const TargetLibraryInfo *TLI, 1571 const DominatorTree *DT, AssumptionTracker *AT, 1572 const Instruction *CxtI) { 1573 return ::SimplifyAndInst(Op0, Op1, Query (DL, TLI, DT, AT, CxtI), 1574 RecursionLimit); 1575 } 1576 1577 // Simplify (or (icmp ...) (icmp ...)) to true when we can tell that the union 1578 // contains all possible values. 1579 static Value *SimplifyOrOfICmps(ICmpInst *Op0, ICmpInst *Op1) { 1580 ICmpInst::Predicate Pred0, Pred1; 1581 ConstantInt *CI1, *CI2; 1582 Value *V; 1583 if (!match(Op0, m_ICmp(Pred0, m_Add(m_Value(V), m_ConstantInt(CI1)), 1584 m_ConstantInt(CI2)))) 1585 return nullptr; 1586 1587 if (!match(Op1, m_ICmp(Pred1, m_Specific(V), m_Specific(CI1)))) 1588 return nullptr; 1589 1590 Type *ITy = Op0->getType(); 1591 1592 auto *AddInst = cast<BinaryOperator>(Op0->getOperand(0)); 1593 bool isNSW = AddInst->hasNoSignedWrap(); 1594 bool isNUW = AddInst->hasNoUnsignedWrap(); 1595 1596 const APInt &CI1V = CI1->getValue(); 1597 const APInt &CI2V = CI2->getValue(); 1598 const APInt Delta = CI2V - CI1V; 1599 if (CI1V.isStrictlyPositive()) { 1600 if (Delta == 2) { 1601 if (Pred0 == ICmpInst::ICMP_UGE && Pred1 == ICmpInst::ICMP_SLE) 1602 return getTrue(ITy); 1603 if (Pred0 == ICmpInst::ICMP_SGE && Pred1 == ICmpInst::ICMP_SLE && isNSW) 1604 return getTrue(ITy); 1605 } 1606 if (Delta == 1) { 1607 if (Pred0 == ICmpInst::ICMP_UGT && Pred1 == ICmpInst::ICMP_SLE) 1608 return getTrue(ITy); 1609 if (Pred0 == ICmpInst::ICMP_SGT && Pred1 == ICmpInst::ICMP_SLE && isNSW) 1610 return getTrue(ITy); 1611 } 1612 } 1613 if (CI1V.getBoolValue() && isNUW) { 1614 if (Delta == 2) 1615 if (Pred0 == ICmpInst::ICMP_UGE && Pred1 == ICmpInst::ICMP_ULE) 1616 return getTrue(ITy); 1617 if (Delta == 1) 1618 if (Pred0 == ICmpInst::ICMP_UGT && Pred1 == ICmpInst::ICMP_ULE) 1619 return getTrue(ITy); 1620 } 1621 1622 return nullptr; 1623 } 1624 1625 /// SimplifyOrInst - Given operands for an Or, see if we can 1626 /// fold the result. If not, this returns null. 1627 static Value *SimplifyOrInst(Value *Op0, Value *Op1, const Query &Q, 1628 unsigned MaxRecurse) { 1629 if (Constant *CLHS = dyn_cast<Constant>(Op0)) { 1630 if (Constant *CRHS = dyn_cast<Constant>(Op1)) { 1631 Constant *Ops[] = { CLHS, CRHS }; 1632 return ConstantFoldInstOperands(Instruction::Or, CLHS->getType(), 1633 Ops, Q.DL, Q.TLI); 1634 } 1635 1636 // Canonicalize the constant to the RHS. 1637 std::swap(Op0, Op1); 1638 } 1639 1640 // X | undef -> -1 1641 if (match(Op1, m_Undef())) 1642 return Constant::getAllOnesValue(Op0->getType()); 1643 1644 // X | X = X 1645 if (Op0 == Op1) 1646 return Op0; 1647 1648 // X | 0 = X 1649 if (match(Op1, m_Zero())) 1650 return Op0; 1651 1652 // X | -1 = -1 1653 if (match(Op1, m_AllOnes())) 1654 return Op1; 1655 1656 // A | ~A = ~A | A = -1 1657 if (match(Op0, m_Not(m_Specific(Op1))) || 1658 match(Op1, m_Not(m_Specific(Op0)))) 1659 return Constant::getAllOnesValue(Op0->getType()); 1660 1661 // (A & ?) | A = A 1662 Value *A = nullptr, *B = nullptr; 1663 if (match(Op0, m_And(m_Value(A), m_Value(B))) && 1664 (A == Op1 || B == Op1)) 1665 return Op1; 1666 1667 // A | (A & ?) = A 1668 if (match(Op1, m_And(m_Value(A), m_Value(B))) && 1669 (A == Op0 || B == Op0)) 1670 return Op0; 1671 1672 // ~(A & ?) | A = -1 1673 if (match(Op0, m_Not(m_And(m_Value(A), m_Value(B)))) && 1674 (A == Op1 || B == Op1)) 1675 return Constant::getAllOnesValue(Op1->getType()); 1676 1677 // A | ~(A & ?) = -1 1678 if (match(Op1, m_Not(m_And(m_Value(A), m_Value(B)))) && 1679 (A == Op0 || B == Op0)) 1680 return Constant::getAllOnesValue(Op0->getType()); 1681 1682 if (auto *ICILHS = dyn_cast<ICmpInst>(Op0)) { 1683 if (auto *ICIRHS = dyn_cast<ICmpInst>(Op1)) { 1684 if (Value *V = SimplifyOrOfICmps(ICILHS, ICIRHS)) 1685 return V; 1686 if (Value *V = SimplifyOrOfICmps(ICIRHS, ICILHS)) 1687 return V; 1688 } 1689 } 1690 1691 // Try some generic simplifications for associative operations. 1692 if (Value *V = SimplifyAssociativeBinOp(Instruction::Or, Op0, Op1, Q, 1693 MaxRecurse)) 1694 return V; 1695 1696 // Or distributes over And. Try some generic simplifications based on this. 1697 if (Value *V = ExpandBinOp(Instruction::Or, Op0, Op1, Instruction::And, Q, 1698 MaxRecurse)) 1699 return V; 1700 1701 // If the operation is with the result of a select instruction, check whether 1702 // operating on either branch of the select always yields the same value. 1703 if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1)) 1704 if (Value *V = ThreadBinOpOverSelect(Instruction::Or, Op0, Op1, Q, 1705 MaxRecurse)) 1706 return V; 1707 1708 // (A & C)|(B & D) 1709 Value *C = nullptr, *D = nullptr; 1710 if (match(Op0, m_And(m_Value(A), m_Value(C))) && 1711 match(Op1, m_And(m_Value(B), m_Value(D)))) { 1712 ConstantInt *C1 = dyn_cast<ConstantInt>(C); 1713 ConstantInt *C2 = dyn_cast<ConstantInt>(D); 1714 if (C1 && C2 && (C1->getValue() == ~C2->getValue())) { 1715 // (A & C1)|(B & C2) 1716 // If we have: ((V + N) & C1) | (V & C2) 1717 // .. and C2 = ~C1 and C2 is 0+1+ and (N & C2) == 0 1718 // replace with V+N. 1719 Value *V1, *V2; 1720 if ((C2->getValue() & (C2->getValue() + 1)) == 0 && // C2 == 0+1+ 1721 match(A, m_Add(m_Value(V1), m_Value(V2)))) { 1722 // Add commutes, try both ways. 1723 if (V1 == B && MaskedValueIsZero(V2, C2->getValue(), Q.DL, 1724 0, Q.AT, Q.CxtI, Q.DT)) 1725 return A; 1726 if (V2 == B && MaskedValueIsZero(V1, C2->getValue(), Q.DL, 1727 0, Q.AT, Q.CxtI, Q.DT)) 1728 return A; 1729 } 1730 // Or commutes, try both ways. 1731 if ((C1->getValue() & (C1->getValue() + 1)) == 0 && 1732 match(B, m_Add(m_Value(V1), m_Value(V2)))) { 1733 // Add commutes, try both ways. 1734 if (V1 == A && MaskedValueIsZero(V2, C1->getValue(), Q.DL, 1735 0, Q.AT, Q.CxtI, Q.DT)) 1736 return B; 1737 if (V2 == A && MaskedValueIsZero(V1, C1->getValue(), Q.DL, 1738 0, Q.AT, Q.CxtI, Q.DT)) 1739 return B; 1740 } 1741 } 1742 } 1743 1744 // If the operation is with the result of a phi instruction, check whether 1745 // operating on all incoming values of the phi always yields the same value. 1746 if (isa<PHINode>(Op0) || isa<PHINode>(Op1)) 1747 if (Value *V = ThreadBinOpOverPHI(Instruction::Or, Op0, Op1, Q, MaxRecurse)) 1748 return V; 1749 1750 return nullptr; 1751 } 1752 1753 Value *llvm::SimplifyOrInst(Value *Op0, Value *Op1, const DataLayout *DL, 1754 const TargetLibraryInfo *TLI, 1755 const DominatorTree *DT, AssumptionTracker *AT, 1756 const Instruction *CxtI) { 1757 return ::SimplifyOrInst(Op0, Op1, Query (DL, TLI, DT, AT, CxtI), 1758 RecursionLimit); 1759 } 1760 1761 /// SimplifyXorInst - Given operands for a Xor, see if we can 1762 /// fold the result. If not, this returns null. 1763 static Value *SimplifyXorInst(Value *Op0, Value *Op1, const Query &Q, 1764 unsigned MaxRecurse) { 1765 if (Constant *CLHS = dyn_cast<Constant>(Op0)) { 1766 if (Constant *CRHS = dyn_cast<Constant>(Op1)) { 1767 Constant *Ops[] = { CLHS, CRHS }; 1768 return ConstantFoldInstOperands(Instruction::Xor, CLHS->getType(), 1769 Ops, Q.DL, Q.TLI); 1770 } 1771 1772 // Canonicalize the constant to the RHS. 1773 std::swap(Op0, Op1); 1774 } 1775 1776 // A ^ undef -> undef 1777 if (match(Op1, m_Undef())) 1778 return Op1; 1779 1780 // A ^ 0 = A 1781 if (match(Op1, m_Zero())) 1782 return Op0; 1783 1784 // A ^ A = 0 1785 if (Op0 == Op1) 1786 return Constant::getNullValue(Op0->getType()); 1787 1788 // A ^ ~A = ~A ^ A = -1 1789 if (match(Op0, m_Not(m_Specific(Op1))) || 1790 match(Op1, m_Not(m_Specific(Op0)))) 1791 return Constant::getAllOnesValue(Op0->getType()); 1792 1793 // Try some generic simplifications for associative operations. 1794 if (Value *V = SimplifyAssociativeBinOp(Instruction::Xor, Op0, Op1, Q, 1795 MaxRecurse)) 1796 return V; 1797 1798 // Threading Xor over selects and phi nodes is pointless, so don't bother. 1799 // Threading over the select in "A ^ select(cond, B, C)" means evaluating 1800 // "A^B" and "A^C" and seeing if they are equal; but they are equal if and 1801 // only if B and C are equal. If B and C are equal then (since we assume 1802 // that operands have already been simplified) "select(cond, B, C)" should 1803 // have been simplified to the common value of B and C already. Analysing 1804 // "A^B" and "A^C" thus gains nothing, but costs compile time. Similarly 1805 // for threading over phi nodes. 1806 1807 return nullptr; 1808 } 1809 1810 Value *llvm::SimplifyXorInst(Value *Op0, Value *Op1, const DataLayout *DL, 1811 const TargetLibraryInfo *TLI, 1812 const DominatorTree *DT, AssumptionTracker *AT, 1813 const Instruction *CxtI) { 1814 return ::SimplifyXorInst(Op0, Op1, Query (DL, TLI, DT, AT, CxtI), 1815 RecursionLimit); 1816 } 1817 1818 static Type *GetCompareTy(Value *Op) { 1819 return CmpInst::makeCmpResultType(Op->getType()); 1820 } 1821 1822 /// ExtractEquivalentCondition - Rummage around inside V looking for something 1823 /// equivalent to the comparison "LHS Pred RHS". Return such a value if found, 1824 /// otherwise return null. Helper function for analyzing max/min idioms. 1825 static Value *ExtractEquivalentCondition(Value *V, CmpInst::Predicate Pred, 1826 Value *LHS, Value *RHS) { 1827 SelectInst *SI = dyn_cast<SelectInst>(V); 1828 if (!SI) 1829 return nullptr; 1830 CmpInst *Cmp = dyn_cast<CmpInst>(SI->getCondition()); 1831 if (!Cmp) 1832 return nullptr; 1833 Value *CmpLHS = Cmp->getOperand(0), *CmpRHS = Cmp->getOperand(1); 1834 if (Pred == Cmp->getPredicate() && LHS == CmpLHS && RHS == CmpRHS) 1835 return Cmp; 1836 if (Pred == CmpInst::getSwappedPredicate(Cmp->getPredicate()) && 1837 LHS == CmpRHS && RHS == CmpLHS) 1838 return Cmp; 1839 return nullptr; 1840 } 1841 1842 // A significant optimization not implemented here is assuming that alloca 1843 // addresses are not equal to incoming argument values. They don't *alias*, 1844 // as we say, but that doesn't mean they aren't equal, so we take a 1845 // conservative approach. 1846 // 1847 // This is inspired in part by C++11 5.10p1: 1848 // "Two pointers of the same type compare equal if and only if they are both 1849 // null, both point to the same function, or both represent the same 1850 // address." 1851 // 1852 // This is pretty permissive. 1853 // 1854 // It's also partly due to C11 6.5.9p6: 1855 // "Two pointers compare equal if and only if both are null pointers, both are 1856 // pointers to the same object (including a pointer to an object and a 1857 // subobject at its beginning) or function, both are pointers to one past the 1858 // last element of the same array object, or one is a pointer to one past the 1859 // end of one array object and the other is a pointer to the start of a 1860 // different array object that happens to immediately follow the first array 1861 // object in the address space.) 1862 // 1863 // C11's version is more restrictive, however there's no reason why an argument 1864 // couldn't be a one-past-the-end value for a stack object in the caller and be 1865 // equal to the beginning of a stack object in the callee. 1866 // 1867 // If the C and C++ standards are ever made sufficiently restrictive in this 1868 // area, it may be possible to update LLVM's semantics accordingly and reinstate 1869 // this optimization. 1870 static Constant *computePointerICmp(const DataLayout *DL, 1871 const TargetLibraryInfo *TLI, 1872 CmpInst::Predicate Pred, 1873 Value *LHS, Value *RHS) { 1874 // First, skip past any trivial no-ops. 1875 LHS = LHS->stripPointerCasts(); 1876 RHS = RHS->stripPointerCasts(); 1877 1878 // A non-null pointer is not equal to a null pointer. 1879 if (llvm::isKnownNonNull(LHS, TLI) && isa<ConstantPointerNull>(RHS) && 1880 (Pred == CmpInst::ICMP_EQ || Pred == CmpInst::ICMP_NE)) 1881 return ConstantInt::get(GetCompareTy(LHS), 1882 !CmpInst::isTrueWhenEqual(Pred)); 1883 1884 // We can only fold certain predicates on pointer comparisons. 1885 switch (Pred) { 1886 default: 1887 return nullptr; 1888 1889 // Equality comaprisons are easy to fold. 1890 case CmpInst::ICMP_EQ: 1891 case CmpInst::ICMP_NE: 1892 break; 1893 1894 // We can only handle unsigned relational comparisons because 'inbounds' on 1895 // a GEP only protects against unsigned wrapping. 1896 case CmpInst::ICMP_UGT: 1897 case CmpInst::ICMP_UGE: 1898 case CmpInst::ICMP_ULT: 1899 case CmpInst::ICMP_ULE: 1900 // However, we have to switch them to their signed variants to handle 1901 // negative indices from the base pointer. 1902 Pred = ICmpInst::getSignedPredicate(Pred); 1903 break; 1904 } 1905 1906 // Strip off any constant offsets so that we can reason about them. 1907 // It's tempting to use getUnderlyingObject or even just stripInBoundsOffsets 1908 // here and compare base addresses like AliasAnalysis does, however there are 1909 // numerous hazards. AliasAnalysis and its utilities rely on special rules 1910 // governing loads and stores which don't apply to icmps. Also, AliasAnalysis 1911 // doesn't need to guarantee pointer inequality when it says NoAlias. 1912 Constant *LHSOffset = stripAndComputeConstantOffsets(DL, LHS); 1913 Constant *RHSOffset = stripAndComputeConstantOffsets(DL, RHS); 1914 1915 // If LHS and RHS are related via constant offsets to the same base 1916 // value, we can replace it with an icmp which just compares the offsets. 1917 if (LHS == RHS) 1918 return ConstantExpr::getICmp(Pred, LHSOffset, RHSOffset); 1919 1920 // Various optimizations for (in)equality comparisons. 1921 if (Pred == CmpInst::ICMP_EQ || Pred == CmpInst::ICMP_NE) { 1922 // Different non-empty allocations that exist at the same time have 1923 // different addresses (if the program can tell). Global variables always 1924 // exist, so they always exist during the lifetime of each other and all 1925 // allocas. Two different allocas usually have different addresses... 1926 // 1927 // However, if there's an @llvm.stackrestore dynamically in between two 1928 // allocas, they may have the same address. It's tempting to reduce the 1929 // scope of the problem by only looking at *static* allocas here. That would 1930 // cover the majority of allocas while significantly reducing the likelihood 1931 // of having an @llvm.stackrestore pop up in the middle. However, it's not 1932 // actually impossible for an @llvm.stackrestore to pop up in the middle of 1933 // an entry block. Also, if we have a block that's not attached to a 1934 // function, we can't tell if it's "static" under the current definition. 1935 // Theoretically, this problem could be fixed by creating a new kind of 1936 // instruction kind specifically for static allocas. Such a new instruction 1937 // could be required to be at the top of the entry block, thus preventing it 1938 // from being subject to a @llvm.stackrestore. Instcombine could even 1939 // convert regular allocas into these special allocas. It'd be nifty. 1940 // However, until then, this problem remains open. 1941 // 1942 // So, we'll assume that two non-empty allocas have different addresses 1943 // for now. 1944 // 1945 // With all that, if the offsets are within the bounds of their allocations 1946 // (and not one-past-the-end! so we can't use inbounds!), and their 1947 // allocations aren't the same, the pointers are not equal. 1948 // 1949 // Note that it's not necessary to check for LHS being a global variable 1950 // address, due to canonicalization and constant folding. 1951 if (isa<AllocaInst>(LHS) && 1952 (isa<AllocaInst>(RHS) || isa<GlobalVariable>(RHS))) { 1953 ConstantInt *LHSOffsetCI = dyn_cast<ConstantInt>(LHSOffset); 1954 ConstantInt *RHSOffsetCI = dyn_cast<ConstantInt>(RHSOffset); 1955 uint64_t LHSSize, RHSSize; 1956 if (LHSOffsetCI && RHSOffsetCI && 1957 getObjectSize(LHS, LHSSize, DL, TLI) && 1958 getObjectSize(RHS, RHSSize, DL, TLI)) { 1959 const APInt &LHSOffsetValue = LHSOffsetCI->getValue(); 1960 const APInt &RHSOffsetValue = RHSOffsetCI->getValue(); 1961 if (!LHSOffsetValue.isNegative() && 1962 !RHSOffsetValue.isNegative() && 1963 LHSOffsetValue.ult(LHSSize) && 1964 RHSOffsetValue.ult(RHSSize)) { 1965 return ConstantInt::get(GetCompareTy(LHS), 1966 !CmpInst::isTrueWhenEqual(Pred)); 1967 } 1968 } 1969 1970 // Repeat the above check but this time without depending on DataLayout 1971 // or being able to compute a precise size. 1972 if (!cast<PointerType>(LHS->getType())->isEmptyTy() && 1973 !cast<PointerType>(RHS->getType())->isEmptyTy() && 1974 LHSOffset->isNullValue() && 1975 RHSOffset->isNullValue()) 1976 return ConstantInt::get(GetCompareTy(LHS), 1977 !CmpInst::isTrueWhenEqual(Pred)); 1978 } 1979 1980 // Even if an non-inbounds GEP occurs along the path we can still optimize 1981 // equality comparisons concerning the result. We avoid walking the whole 1982 // chain again by starting where the last calls to 1983 // stripAndComputeConstantOffsets left off and accumulate the offsets. 1984 Constant *LHSNoBound = stripAndComputeConstantOffsets(DL, LHS, true); 1985 Constant *RHSNoBound = stripAndComputeConstantOffsets(DL, RHS, true); 1986 if (LHS == RHS) 1987 return ConstantExpr::getICmp(Pred, 1988 ConstantExpr::getAdd(LHSOffset, LHSNoBound), 1989 ConstantExpr::getAdd(RHSOffset, RHSNoBound)); 1990 } 1991 1992 // Otherwise, fail. 1993 return nullptr; 1994 } 1995 1996 /// SimplifyICmpInst - Given operands for an ICmpInst, see if we can 1997 /// fold the result. If not, this returns null. 1998 static Value *SimplifyICmpInst(unsigned Predicate, Value *LHS, Value *RHS, 1999 const Query &Q, unsigned MaxRecurse) { 2000 CmpInst::Predicate Pred = (CmpInst::Predicate)Predicate; 2001 assert(CmpInst::isIntPredicate(Pred) && "Not an integer compare!"); 2002 2003 if (Constant *CLHS = dyn_cast<Constant>(LHS)) { 2004 if (Constant *CRHS = dyn_cast<Constant>(RHS)) 2005 return ConstantFoldCompareInstOperands(Pred, CLHS, CRHS, Q.DL, Q.TLI); 2006 2007 // If we have a constant, make sure it is on the RHS. 2008 std::swap(LHS, RHS); 2009 Pred = CmpInst::getSwappedPredicate(Pred); 2010 } 2011 2012 Type *ITy = GetCompareTy(LHS); // The return type. 2013 Type *OpTy = LHS->getType(); // The operand type. 2014 2015 // icmp X, X -> true/false 2016 // X icmp undef -> true/false. For example, icmp ugt %X, undef -> false 2017 // because X could be 0. 2018 if (LHS == RHS || isa<UndefValue>(RHS)) 2019 return ConstantInt::get(ITy, CmpInst::isTrueWhenEqual(Pred)); 2020 2021 // Special case logic when the operands have i1 type. 2022 if (OpTy->getScalarType()->isIntegerTy(1)) { 2023 switch (Pred) { 2024 default: break; 2025 case ICmpInst::ICMP_EQ: 2026 // X == 1 -> X 2027 if (match(RHS, m_One())) 2028 return LHS; 2029 break; 2030 case ICmpInst::ICMP_NE: 2031 // X != 0 -> X 2032 if (match(RHS, m_Zero())) 2033 return LHS; 2034 break; 2035 case ICmpInst::ICMP_UGT: 2036 // X >u 0 -> X 2037 if (match(RHS, m_Zero())) 2038 return LHS; 2039 break; 2040 case ICmpInst::ICMP_UGE: 2041 // X >=u 1 -> X 2042 if (match(RHS, m_One())) 2043 return LHS; 2044 break; 2045 case ICmpInst::ICMP_SLT: 2046 // X <s 0 -> X 2047 if (match(RHS, m_Zero())) 2048 return LHS; 2049 break; 2050 case ICmpInst::ICMP_SLE: 2051 // X <=s -1 -> X 2052 if (match(RHS, m_One())) 2053 return LHS; 2054 break; 2055 } 2056 } 2057 2058 // If we are comparing with zero then try hard since this is a common case. 2059 if (match(RHS, m_Zero())) { 2060 bool LHSKnownNonNegative, LHSKnownNegative; 2061 switch (Pred) { 2062 default: llvm_unreachable("Unknown ICmp predicate!"); 2063 case ICmpInst::ICMP_ULT: 2064 return getFalse(ITy); 2065 case ICmpInst::ICMP_UGE: 2066 return getTrue(ITy); 2067 case ICmpInst::ICMP_EQ: 2068 case ICmpInst::ICMP_ULE: 2069 if (isKnownNonZero(LHS, Q.DL, 0, Q.AT, Q.CxtI, Q.DT)) 2070 return getFalse(ITy); 2071 break; 2072 case ICmpInst::ICMP_NE: 2073 case ICmpInst::ICMP_UGT: 2074 if (isKnownNonZero(LHS, Q.DL, 0, Q.AT, Q.CxtI, Q.DT)) 2075 return getTrue(ITy); 2076 break; 2077 case ICmpInst::ICMP_SLT: 2078 ComputeSignBit(LHS, LHSKnownNonNegative, LHSKnownNegative, Q.DL, 2079 0, Q.AT, Q.CxtI, Q.DT); 2080 if (LHSKnownNegative) 2081 return getTrue(ITy); 2082 if (LHSKnownNonNegative) 2083 return getFalse(ITy); 2084 break; 2085 case ICmpInst::ICMP_SLE: 2086 ComputeSignBit(LHS, LHSKnownNonNegative, LHSKnownNegative, Q.DL, 2087 0, Q.AT, Q.CxtI, Q.DT); 2088 if (LHSKnownNegative) 2089 return getTrue(ITy); 2090 if (LHSKnownNonNegative && isKnownNonZero(LHS, Q.DL, 2091 0, Q.AT, Q.CxtI, Q.DT)) 2092 return getFalse(ITy); 2093 break; 2094 case ICmpInst::ICMP_SGE: 2095 ComputeSignBit(LHS, LHSKnownNonNegative, LHSKnownNegative, Q.DL, 2096 0, Q.AT, Q.CxtI, Q.DT); 2097 if (LHSKnownNegative) 2098 return getFalse(ITy); 2099 if (LHSKnownNonNegative) 2100 return getTrue(ITy); 2101 break; 2102 case ICmpInst::ICMP_SGT: 2103 ComputeSignBit(LHS, LHSKnownNonNegative, LHSKnownNegative, Q.DL, 2104 0, Q.AT, Q.CxtI, Q.DT); 2105 if (LHSKnownNegative) 2106 return getFalse(ITy); 2107 if (LHSKnownNonNegative && isKnownNonZero(LHS, Q.DL, 2108 0, Q.AT, Q.CxtI, Q.DT)) 2109 return getTrue(ITy); 2110 break; 2111 } 2112 } 2113 2114 // See if we are doing a comparison with a constant integer. 2115 if (ConstantInt *CI = dyn_cast<ConstantInt>(RHS)) { 2116 // Rule out tautological comparisons (eg., ult 0 or uge 0). 2117 ConstantRange RHS_CR = ICmpInst::makeConstantRange(Pred, CI->getValue()); 2118 if (RHS_CR.isEmptySet()) 2119 return ConstantInt::getFalse(CI->getContext()); 2120 if (RHS_CR.isFullSet()) 2121 return ConstantInt::getTrue(CI->getContext()); 2122 2123 // Many binary operators with constant RHS have easy to compute constant 2124 // range. Use them to check whether the comparison is a tautology. 2125 unsigned Width = CI->getBitWidth(); 2126 APInt Lower = APInt(Width, 0); 2127 APInt Upper = APInt(Width, 0); 2128 ConstantInt *CI2; 2129 if (match(LHS, m_URem(m_Value(), m_ConstantInt(CI2)))) { 2130 // 'urem x, CI2' produces [0, CI2). 2131 Upper = CI2->getValue(); 2132 } else if (match(LHS, m_SRem(m_Value(), m_ConstantInt(CI2)))) { 2133 // 'srem x, CI2' produces (-|CI2|, |CI2|). 2134 Upper = CI2->getValue().abs(); 2135 Lower = (-Upper) + 1; 2136 } else if (match(LHS, m_UDiv(m_ConstantInt(CI2), m_Value()))) { 2137 // 'udiv CI2, x' produces [0, CI2]. 2138 Upper = CI2->getValue() + 1; 2139 } else if (match(LHS, m_UDiv(m_Value(), m_ConstantInt(CI2)))) { 2140 // 'udiv x, CI2' produces [0, UINT_MAX / CI2]. 2141 APInt NegOne = APInt::getAllOnesValue(Width); 2142 if (!CI2->isZero()) 2143 Upper = NegOne.udiv(CI2->getValue()) + 1; 2144 } else if (match(LHS, m_SDiv(m_ConstantInt(CI2), m_Value()))) { 2145 if (CI2->isMinSignedValue()) { 2146 // 'sdiv INT_MIN, x' produces [INT_MIN, INT_MIN / -2]. 2147 Lower = CI2->getValue(); 2148 Upper = Lower.lshr(1) + 1; 2149 } else { 2150 // 'sdiv CI2, x' produces [-|CI2|, |CI2|]. 2151 Upper = CI2->getValue().abs() + 1; 2152 Lower = (-Upper) + 1; 2153 } 2154 } else if (match(LHS, m_SDiv(m_Value(), m_ConstantInt(CI2)))) { 2155 APInt IntMin = APInt::getSignedMinValue(Width); 2156 APInt IntMax = APInt::getSignedMaxValue(Width); 2157 APInt Val = CI2->getValue(); 2158 if (Val.isAllOnesValue()) { 2159 // 'sdiv x, -1' produces [INT_MIN + 1, INT_MAX] 2160 // where CI2 != -1 and CI2 != 0 and CI2 != 1 2161 Lower = IntMin + 1; 2162 Upper = IntMax + 1; 2163 } else if (Val.countLeadingZeros() < Width - 1) { 2164 // 'sdiv x, CI2' produces [INT_MIN / CI2, INT_MAX / CI2] 2165 // where CI2 != -1 and CI2 != 0 and CI2 != 1 2166 Lower = IntMin.sdiv(Val); 2167 Upper = IntMax.sdiv(Val); 2168 if (Lower.sgt(Upper)) 2169 std::swap(Lower, Upper); 2170 Upper = Upper + 1; 2171 assert(Upper != Lower && "Upper part of range has wrapped!"); 2172 } 2173 } else if (match(LHS, m_NUWShl(m_ConstantInt(CI2), m_Value()))) { 2174 // 'shl nuw CI2, x' produces [CI2, CI2 << CLZ(CI2)] 2175 Lower = CI2->getValue(); 2176 Upper = Lower.shl(Lower.countLeadingZeros()) + 1; 2177 } else if (match(LHS, m_NSWShl(m_ConstantInt(CI2), m_Value()))) { 2178 if (CI2->isNegative()) { 2179 // 'shl nsw CI2, x' produces [CI2 << CLO(CI2)-1, CI2] 2180 unsigned ShiftAmount = CI2->getValue().countLeadingOnes() - 1; 2181 Lower = CI2->getValue().shl(ShiftAmount); 2182 Upper = CI2->getValue() + 1; 2183 } else { 2184 // 'shl nsw CI2, x' produces [CI2, CI2 << CLZ(CI2)-1] 2185 unsigned ShiftAmount = CI2->getValue().countLeadingZeros() - 1; 2186 Lower = CI2->getValue(); 2187 Upper = CI2->getValue().shl(ShiftAmount) + 1; 2188 } 2189 } else if (match(LHS, m_LShr(m_Value(), m_ConstantInt(CI2)))) { 2190 // 'lshr x, CI2' produces [0, UINT_MAX >> CI2]. 2191 APInt NegOne = APInt::getAllOnesValue(Width); 2192 if (CI2->getValue().ult(Width)) 2193 Upper = NegOne.lshr(CI2->getValue()) + 1; 2194 } else if (match(LHS, m_LShr(m_ConstantInt(CI2), m_Value()))) { 2195 // 'lshr CI2, x' produces [CI2 >> (Width-1), CI2]. 2196 unsigned ShiftAmount = Width - 1; 2197 if (!CI2->isZero() && cast<BinaryOperator>(LHS)->isExact()) 2198 ShiftAmount = CI2->getValue().countTrailingZeros(); 2199 Lower = CI2->getValue().lshr(ShiftAmount); 2200 Upper = CI2->getValue() + 1; 2201 } else if (match(LHS, m_AShr(m_Value(), m_ConstantInt(CI2)))) { 2202 // 'ashr x, CI2' produces [INT_MIN >> CI2, INT_MAX >> CI2]. 2203 APInt IntMin = APInt::getSignedMinValue(Width); 2204 APInt IntMax = APInt::getSignedMaxValue(Width); 2205 if (CI2->getValue().ult(Width)) { 2206 Lower = IntMin.ashr(CI2->getValue()); 2207 Upper = IntMax.ashr(CI2->getValue()) + 1; 2208 } 2209 } else if (match(LHS, m_AShr(m_ConstantInt(CI2), m_Value()))) { 2210 unsigned ShiftAmount = Width - 1; 2211 if (!CI2->isZero() && cast<BinaryOperator>(LHS)->isExact()) 2212 ShiftAmount = CI2->getValue().countTrailingZeros(); 2213 if (CI2->isNegative()) { 2214 // 'ashr CI2, x' produces [CI2, CI2 >> (Width-1)] 2215 Lower = CI2->getValue(); 2216 Upper = CI2->getValue().ashr(ShiftAmount) + 1; 2217 } else { 2218 // 'ashr CI2, x' produces [CI2 >> (Width-1), CI2] 2219 Lower = CI2->getValue().ashr(ShiftAmount); 2220 Upper = CI2->getValue() + 1; 2221 } 2222 } else if (match(LHS, m_Or(m_Value(), m_ConstantInt(CI2)))) { 2223 // 'or x, CI2' produces [CI2, UINT_MAX]. 2224 Lower = CI2->getValue(); 2225 } else if (match(LHS, m_And(m_Value(), m_ConstantInt(CI2)))) { 2226 // 'and x, CI2' produces [0, CI2]. 2227 Upper = CI2->getValue() + 1; 2228 } 2229 if (Lower != Upper) { 2230 ConstantRange LHS_CR = ConstantRange(Lower, Upper); 2231 if (RHS_CR.contains(LHS_CR)) 2232 return ConstantInt::getTrue(RHS->getContext()); 2233 if (RHS_CR.inverse().contains(LHS_CR)) 2234 return ConstantInt::getFalse(RHS->getContext()); 2235 } 2236 } 2237 2238 // Compare of cast, for example (zext X) != 0 -> X != 0 2239 if (isa<CastInst>(LHS) && (isa<Constant>(RHS) || isa<CastInst>(RHS))) { 2240 Instruction *LI = cast<CastInst>(LHS); 2241 Value *SrcOp = LI->getOperand(0); 2242 Type *SrcTy = SrcOp->getType(); 2243 Type *DstTy = LI->getType(); 2244 2245 // Turn icmp (ptrtoint x), (ptrtoint/constant) into a compare of the input 2246 // if the integer type is the same size as the pointer type. 2247 if (MaxRecurse && Q.DL && isa<PtrToIntInst>(LI) && 2248 Q.DL->getTypeSizeInBits(SrcTy) == DstTy->getPrimitiveSizeInBits()) { 2249 if (Constant *RHSC = dyn_cast<Constant>(RHS)) { 2250 // Transfer the cast to the constant. 2251 if (Value *V = SimplifyICmpInst(Pred, SrcOp, 2252 ConstantExpr::getIntToPtr(RHSC, SrcTy), 2253 Q, MaxRecurse-1)) 2254 return V; 2255 } else if (PtrToIntInst *RI = dyn_cast<PtrToIntInst>(RHS)) { 2256 if (RI->getOperand(0)->getType() == SrcTy) 2257 // Compare without the cast. 2258 if (Value *V = SimplifyICmpInst(Pred, SrcOp, RI->getOperand(0), 2259 Q, MaxRecurse-1)) 2260 return V; 2261 } 2262 } 2263 2264 if (isa<ZExtInst>(LHS)) { 2265 // Turn icmp (zext X), (zext Y) into a compare of X and Y if they have the 2266 // same type. 2267 if (ZExtInst *RI = dyn_cast<ZExtInst>(RHS)) { 2268 if (MaxRecurse && SrcTy == RI->getOperand(0)->getType()) 2269 // Compare X and Y. Note that signed predicates become unsigned. 2270 if (Value *V = SimplifyICmpInst(ICmpInst::getUnsignedPredicate(Pred), 2271 SrcOp, RI->getOperand(0), Q, 2272 MaxRecurse-1)) 2273 return V; 2274 } 2275 // Turn icmp (zext X), Cst into a compare of X and Cst if Cst is extended 2276 // too. If not, then try to deduce the result of the comparison. 2277 else if (ConstantInt *CI = dyn_cast<ConstantInt>(RHS)) { 2278 // Compute the constant that would happen if we truncated to SrcTy then 2279 // reextended to DstTy. 2280 Constant *Trunc = ConstantExpr::getTrunc(CI, SrcTy); 2281 Constant *RExt = ConstantExpr::getCast(CastInst::ZExt, Trunc, DstTy); 2282 2283 // If the re-extended constant didn't change then this is effectively 2284 // also a case of comparing two zero-extended values. 2285 if (RExt == CI && MaxRecurse) 2286 if (Value *V = SimplifyICmpInst(ICmpInst::getUnsignedPredicate(Pred), 2287 SrcOp, Trunc, Q, MaxRecurse-1)) 2288 return V; 2289 2290 // Otherwise the upper bits of LHS are zero while RHS has a non-zero bit 2291 // there. Use this to work out the result of the comparison. 2292 if (RExt != CI) { 2293 switch (Pred) { 2294 default: llvm_unreachable("Unknown ICmp predicate!"); 2295 // LHS <u RHS. 2296 case ICmpInst::ICMP_EQ: 2297 case ICmpInst::ICMP_UGT: 2298 case ICmpInst::ICMP_UGE: 2299 return ConstantInt::getFalse(CI->getContext()); 2300 2301 case ICmpInst::ICMP_NE: 2302 case ICmpInst::ICMP_ULT: 2303 case ICmpInst::ICMP_ULE: 2304 return ConstantInt::getTrue(CI->getContext()); 2305 2306 // LHS is non-negative. If RHS is negative then LHS >s LHS. If RHS 2307 // is non-negative then LHS <s RHS. 2308 case ICmpInst::ICMP_SGT: 2309 case ICmpInst::ICMP_SGE: 2310 return CI->getValue().isNegative() ? 2311 ConstantInt::getTrue(CI->getContext()) : 2312 ConstantInt::getFalse(CI->getContext()); 2313 2314 case ICmpInst::ICMP_SLT: 2315 case ICmpInst::ICMP_SLE: 2316 return CI->getValue().isNegative() ? 2317 ConstantInt::getFalse(CI->getContext()) : 2318 ConstantInt::getTrue(CI->getContext()); 2319 } 2320 } 2321 } 2322 } 2323 2324 if (isa<SExtInst>(LHS)) { 2325 // Turn icmp (sext X), (sext Y) into a compare of X and Y if they have the 2326 // same type. 2327 if (SExtInst *RI = dyn_cast<SExtInst>(RHS)) { 2328 if (MaxRecurse && SrcTy == RI->getOperand(0)->getType()) 2329 // Compare X and Y. Note that the predicate does not change. 2330 if (Value *V = SimplifyICmpInst(Pred, SrcOp, RI->getOperand(0), 2331 Q, MaxRecurse-1)) 2332 return V; 2333 } 2334 // Turn icmp (sext X), Cst into a compare of X and Cst if Cst is extended 2335 // too. If not, then try to deduce the result of the comparison. 2336 else if (ConstantInt *CI = dyn_cast<ConstantInt>(RHS)) { 2337 // Compute the constant that would happen if we truncated to SrcTy then 2338 // reextended to DstTy. 2339 Constant *Trunc = ConstantExpr::getTrunc(CI, SrcTy); 2340 Constant *RExt = ConstantExpr::getCast(CastInst::SExt, Trunc, DstTy); 2341 2342 // If the re-extended constant didn't change then this is effectively 2343 // also a case of comparing two sign-extended values. 2344 if (RExt == CI && MaxRecurse) 2345 if (Value *V = SimplifyICmpInst(Pred, SrcOp, Trunc, Q, MaxRecurse-1)) 2346 return V; 2347 2348 // Otherwise the upper bits of LHS are all equal, while RHS has varying 2349 // bits there. Use this to work out the result of the comparison. 2350 if (RExt != CI) { 2351 switch (Pred) { 2352 default: llvm_unreachable("Unknown ICmp predicate!"); 2353 case ICmpInst::ICMP_EQ: 2354 return ConstantInt::getFalse(CI->getContext()); 2355 case ICmpInst::ICMP_NE: 2356 return ConstantInt::getTrue(CI->getContext()); 2357 2358 // If RHS is non-negative then LHS <s RHS. If RHS is negative then 2359 // LHS >s RHS. 2360 case ICmpInst::ICMP_SGT: 2361 case ICmpInst::ICMP_SGE: 2362 return CI->getValue().isNegative() ? 2363 ConstantInt::getTrue(CI->getContext()) : 2364 ConstantInt::getFalse(CI->getContext()); 2365 case ICmpInst::ICMP_SLT: 2366 case ICmpInst::ICMP_SLE: 2367 return CI->getValue().isNegative() ? 2368 ConstantInt::getFalse(CI->getContext()) : 2369 ConstantInt::getTrue(CI->getContext()); 2370 2371 // If LHS is non-negative then LHS <u RHS. If LHS is negative then 2372 // LHS >u RHS. 2373 case ICmpInst::ICMP_UGT: 2374 case ICmpInst::ICMP_UGE: 2375 // Comparison is true iff the LHS <s 0. 2376 if (MaxRecurse) 2377 if (Value *V = SimplifyICmpInst(ICmpInst::ICMP_SLT, SrcOp, 2378 Constant::getNullValue(SrcTy), 2379 Q, MaxRecurse-1)) 2380 return V; 2381 break; 2382 case ICmpInst::ICMP_ULT: 2383 case ICmpInst::ICMP_ULE: 2384 // Comparison is true iff the LHS >=s 0. 2385 if (MaxRecurse) 2386 if (Value *V = SimplifyICmpInst(ICmpInst::ICMP_SGE, SrcOp, 2387 Constant::getNullValue(SrcTy), 2388 Q, MaxRecurse-1)) 2389 return V; 2390 break; 2391 } 2392 } 2393 } 2394 } 2395 } 2396 2397 // If a bit is known to be zero for A and known to be one for B, 2398 // then A and B cannot be equal. 2399 if (ICmpInst::isEquality(Pred)) { 2400 if (ConstantInt *CI = dyn_cast<ConstantInt>(RHS)) { 2401 uint32_t BitWidth = CI->getBitWidth(); 2402 APInt LHSKnownZero(BitWidth, 0); 2403 APInt LHSKnownOne(BitWidth, 0); 2404 computeKnownBits(LHS, LHSKnownZero, LHSKnownOne, Q.DL, 2405 0, Q.AT, Q.CxtI, Q.DT); 2406 APInt RHSKnownZero(BitWidth, 0); 2407 APInt RHSKnownOne(BitWidth, 0); 2408 computeKnownBits(RHS, RHSKnownZero, RHSKnownOne, Q.DL, 2409 0, Q.AT, Q.CxtI, Q.DT); 2410 if (((LHSKnownOne & RHSKnownZero) != 0) || 2411 ((LHSKnownZero & RHSKnownOne) != 0)) 2412 return (Pred == ICmpInst::ICMP_EQ) 2413 ? ConstantInt::getFalse(CI->getContext()) 2414 : ConstantInt::getTrue(CI->getContext()); 2415 } 2416 } 2417 2418 // Special logic for binary operators. 2419 BinaryOperator *LBO = dyn_cast<BinaryOperator>(LHS); 2420 BinaryOperator *RBO = dyn_cast<BinaryOperator>(RHS); 2421 if (MaxRecurse && (LBO || RBO)) { 2422 // Analyze the case when either LHS or RHS is an add instruction. 2423 Value *A = nullptr, *B = nullptr, *C = nullptr, *D = nullptr; 2424 // LHS = A + B (or A and B are null); RHS = C + D (or C and D are null). 2425 bool NoLHSWrapProblem = false, NoRHSWrapProblem = false; 2426 if (LBO && LBO->getOpcode() == Instruction::Add) { 2427 A = LBO->getOperand(0); B = LBO->getOperand(1); 2428 NoLHSWrapProblem = ICmpInst::isEquality(Pred) || 2429 (CmpInst::isUnsigned(Pred) && LBO->hasNoUnsignedWrap()) || 2430 (CmpInst::isSigned(Pred) && LBO->hasNoSignedWrap()); 2431 } 2432 if (RBO && RBO->getOpcode() == Instruction::Add) { 2433 C = RBO->getOperand(0); D = RBO->getOperand(1); 2434 NoRHSWrapProblem = ICmpInst::isEquality(Pred) || 2435 (CmpInst::isUnsigned(Pred) && RBO->hasNoUnsignedWrap()) || 2436 (CmpInst::isSigned(Pred) && RBO->hasNoSignedWrap()); 2437 } 2438 2439 // icmp (X+Y), X -> icmp Y, 0 for equalities or if there is no overflow. 2440 if ((A == RHS || B == RHS) && NoLHSWrapProblem) 2441 if (Value *V = SimplifyICmpInst(Pred, A == RHS ? B : A, 2442 Constant::getNullValue(RHS->getType()), 2443 Q, MaxRecurse-1)) 2444 return V; 2445 2446 // icmp X, (X+Y) -> icmp 0, Y for equalities or if there is no overflow. 2447 if ((C == LHS || D == LHS) && NoRHSWrapProblem) 2448 if (Value *V = SimplifyICmpInst(Pred, 2449 Constant::getNullValue(LHS->getType()), 2450 C == LHS ? D : C, Q, MaxRecurse-1)) 2451 return V; 2452 2453 // icmp (X+Y), (X+Z) -> icmp Y,Z for equalities or if there is no overflow. 2454 if (A && C && (A == C || A == D || B == C || B == D) && 2455 NoLHSWrapProblem && NoRHSWrapProblem) { 2456 // Determine Y and Z in the form icmp (X+Y), (X+Z). 2457 Value *Y, *Z; 2458 if (A == C) { 2459 // C + B == C + D -> B == D 2460 Y = B; 2461 Z = D; 2462 } else if (A == D) { 2463 // D + B == C + D -> B == C 2464 Y = B; 2465 Z = C; 2466 } else if (B == C) { 2467 // A + C == C + D -> A == D 2468 Y = A; 2469 Z = D; 2470 } else { 2471 assert(B == D); 2472 // A + D == C + D -> A == C 2473 Y = A; 2474 Z = C; 2475 } 2476 if (Value *V = SimplifyICmpInst(Pred, Y, Z, Q, MaxRecurse-1)) 2477 return V; 2478 } 2479 } 2480 2481 // 0 - (zext X) pred C 2482 if (!CmpInst::isUnsigned(Pred) && match(LHS, m_Neg(m_ZExt(m_Value())))) { 2483 if (ConstantInt *RHSC = dyn_cast<ConstantInt>(RHS)) { 2484 if (RHSC->getValue().isStrictlyPositive()) { 2485 if (Pred == ICmpInst::ICMP_SLT) 2486 return ConstantInt::getTrue(RHSC->getContext()); 2487 if (Pred == ICmpInst::ICMP_SGE) 2488 return ConstantInt::getFalse(RHSC->getContext()); 2489 if (Pred == ICmpInst::ICMP_EQ) 2490 return ConstantInt::getFalse(RHSC->getContext()); 2491 if (Pred == ICmpInst::ICMP_NE) 2492 return ConstantInt::getTrue(RHSC->getContext()); 2493 } 2494 if (RHSC->getValue().isNonNegative()) { 2495 if (Pred == ICmpInst::ICMP_SLE) 2496 return ConstantInt::getTrue(RHSC->getContext()); 2497 if (Pred == ICmpInst::ICMP_SGT) 2498 return ConstantInt::getFalse(RHSC->getContext()); 2499 } 2500 } 2501 } 2502 2503 // icmp pred (urem X, Y), Y 2504 if (LBO && match(LBO, m_URem(m_Value(), m_Specific(RHS)))) { 2505 bool KnownNonNegative, KnownNegative; 2506 switch (Pred) { 2507 default: 2508 break; 2509 case ICmpInst::ICMP_SGT: 2510 case ICmpInst::ICMP_SGE: 2511 ComputeSignBit(RHS, KnownNonNegative, KnownNegative, Q.DL, 2512 0, Q.AT, Q.CxtI, Q.DT); 2513 if (!KnownNonNegative) 2514 break; 2515 // fall-through 2516 case ICmpInst::ICMP_EQ: 2517 case ICmpInst::ICMP_UGT: 2518 case ICmpInst::ICMP_UGE: 2519 return getFalse(ITy); 2520 case ICmpInst::ICMP_SLT: 2521 case ICmpInst::ICMP_SLE: 2522 ComputeSignBit(RHS, KnownNonNegative, KnownNegative, Q.DL, 2523 0, Q.AT, Q.CxtI, Q.DT); 2524 if (!KnownNonNegative) 2525 break; 2526 // fall-through 2527 case ICmpInst::ICMP_NE: 2528 case ICmpInst::ICMP_ULT: 2529 case ICmpInst::ICMP_ULE: 2530 return getTrue(ITy); 2531 } 2532 } 2533 2534 // icmp pred X, (urem Y, X) 2535 if (RBO && match(RBO, m_URem(m_Value(), m_Specific(LHS)))) { 2536 bool KnownNonNegative, KnownNegative; 2537 switch (Pred) { 2538 default: 2539 break; 2540 case ICmpInst::ICMP_SGT: 2541 case ICmpInst::ICMP_SGE: 2542 ComputeSignBit(LHS, KnownNonNegative, KnownNegative, Q.DL, 2543 0, Q.AT, Q.CxtI, Q.DT); 2544 if (!KnownNonNegative) 2545 break; 2546 // fall-through 2547 case ICmpInst::ICMP_NE: 2548 case ICmpInst::ICMP_UGT: 2549 case ICmpInst::ICMP_UGE: 2550 return getTrue(ITy); 2551 case ICmpInst::ICMP_SLT: 2552 case ICmpInst::ICMP_SLE: 2553 ComputeSignBit(LHS, KnownNonNegative, KnownNegative, Q.DL, 2554 0, Q.AT, Q.CxtI, Q.DT); 2555 if (!KnownNonNegative) 2556 break; 2557 // fall-through 2558 case ICmpInst::ICMP_EQ: 2559 case ICmpInst::ICMP_ULT: 2560 case ICmpInst::ICMP_ULE: 2561 return getFalse(ITy); 2562 } 2563 } 2564 2565 // x udiv y <=u x. 2566 if (LBO && match(LBO, m_UDiv(m_Specific(RHS), m_Value()))) { 2567 // icmp pred (X /u Y), X 2568 if (Pred == ICmpInst::ICMP_UGT) 2569 return getFalse(ITy); 2570 if (Pred == ICmpInst::ICMP_ULE) 2571 return getTrue(ITy); 2572 } 2573 2574 // handle: 2575 // CI2 << X == CI 2576 // CI2 << X != CI 2577 // 2578 // where CI2 is a power of 2 and CI isn't 2579 if (auto *CI = dyn_cast<ConstantInt>(RHS)) { 2580 const APInt *CI2Val, *CIVal = &CI->getValue(); 2581 if (LBO && match(LBO, m_Shl(m_APInt(CI2Val), m_Value())) && 2582 CI2Val->isPowerOf2()) { 2583 if (!CIVal->isPowerOf2()) { 2584 // CI2 << X can equal zero in some circumstances, 2585 // this simplification is unsafe if CI is zero. 2586 // 2587 // We know it is safe if: 2588 // - The shift is nsw, we can't shift out the one bit. 2589 // - The shift is nuw, we can't shift out the one bit. 2590 // - CI2 is one 2591 // - CI isn't zero 2592 if (LBO->hasNoSignedWrap() || LBO->hasNoUnsignedWrap() || 2593 *CI2Val == 1 || !CI->isZero()) { 2594 if (Pred == ICmpInst::ICMP_EQ) 2595 return ConstantInt::getFalse(RHS->getContext()); 2596 if (Pred == ICmpInst::ICMP_NE) 2597 return ConstantInt::getTrue(RHS->getContext()); 2598 } 2599 } 2600 if (CIVal->isSignBit() && *CI2Val == 1) { 2601 if (Pred == ICmpInst::ICMP_UGT) 2602 return ConstantInt::getFalse(RHS->getContext()); 2603 if (Pred == ICmpInst::ICMP_ULE) 2604 return ConstantInt::getTrue(RHS->getContext()); 2605 } 2606 } 2607 } 2608 2609 if (MaxRecurse && LBO && RBO && LBO->getOpcode() == RBO->getOpcode() && 2610 LBO->getOperand(1) == RBO->getOperand(1)) { 2611 switch (LBO->getOpcode()) { 2612 default: break; 2613 case Instruction::UDiv: 2614 case Instruction::LShr: 2615 if (ICmpInst::isSigned(Pred)) 2616 break; 2617 // fall-through 2618 case Instruction::SDiv: 2619 case Instruction::AShr: 2620 if (!LBO->isExact() || !RBO->isExact()) 2621 break; 2622 if (Value *V = SimplifyICmpInst(Pred, LBO->getOperand(0), 2623 RBO->getOperand(0), Q, MaxRecurse-1)) 2624 return V; 2625 break; 2626 case Instruction::Shl: { 2627 bool NUW = LBO->hasNoUnsignedWrap() && RBO->hasNoUnsignedWrap(); 2628 bool NSW = LBO->hasNoSignedWrap() && RBO->hasNoSignedWrap(); 2629 if (!NUW && !NSW) 2630 break; 2631 if (!NSW && ICmpInst::isSigned(Pred)) 2632 break; 2633 if (Value *V = SimplifyICmpInst(Pred, LBO->getOperand(0), 2634 RBO->getOperand(0), Q, MaxRecurse-1)) 2635 return V; 2636 break; 2637 } 2638 } 2639 } 2640 2641 // Simplify comparisons involving max/min. 2642 Value *A, *B; 2643 CmpInst::Predicate P = CmpInst::BAD_ICMP_PREDICATE; 2644 CmpInst::Predicate EqP; // Chosen so that "A == max/min(A,B)" iff "A EqP B". 2645 2646 // Signed variants on "max(a,b)>=a -> true". 2647 if (match(LHS, m_SMax(m_Value(A), m_Value(B))) && (A == RHS || B == RHS)) { 2648 if (A != RHS) std::swap(A, B); // smax(A, B) pred A. 2649 EqP = CmpInst::ICMP_SGE; // "A == smax(A, B)" iff "A sge B". 2650 // We analyze this as smax(A, B) pred A. 2651 P = Pred; 2652 } else if (match(RHS, m_SMax(m_Value(A), m_Value(B))) && 2653 (A == LHS || B == LHS)) { 2654 if (A != LHS) std::swap(A, B); // A pred smax(A, B). 2655 EqP = CmpInst::ICMP_SGE; // "A == smax(A, B)" iff "A sge B". 2656 // We analyze this as smax(A, B) swapped-pred A. 2657 P = CmpInst::getSwappedPredicate(Pred); 2658 } else if (match(LHS, m_SMin(m_Value(A), m_Value(B))) && 2659 (A == RHS || B == RHS)) { 2660 if (A != RHS) std::swap(A, B); // smin(A, B) pred A. 2661 EqP = CmpInst::ICMP_SLE; // "A == smin(A, B)" iff "A sle B". 2662 // We analyze this as smax(-A, -B) swapped-pred -A. 2663 // Note that we do not need to actually form -A or -B thanks to EqP. 2664 P = CmpInst::getSwappedPredicate(Pred); 2665 } else if (match(RHS, m_SMin(m_Value(A), m_Value(B))) && 2666 (A == LHS || B == LHS)) { 2667 if (A != LHS) std::swap(A, B); // A pred smin(A, B). 2668 EqP = CmpInst::ICMP_SLE; // "A == smin(A, B)" iff "A sle B". 2669 // We analyze this as smax(-A, -B) pred -A. 2670 // Note that we do not need to actually form -A or -B thanks to EqP. 2671 P = Pred; 2672 } 2673 if (P != CmpInst::BAD_ICMP_PREDICATE) { 2674 // Cases correspond to "max(A, B) p A". 2675 switch (P) { 2676 default: 2677 break; 2678 case CmpInst::ICMP_EQ: 2679 case CmpInst::ICMP_SLE: 2680 // Equivalent to "A EqP B". This may be the same as the condition tested 2681 // in the max/min; if so, we can just return that. 2682 if (Value *V = ExtractEquivalentCondition(LHS, EqP, A, B)) 2683 return V; 2684 if (Value *V = ExtractEquivalentCondition(RHS, EqP, A, B)) 2685 return V; 2686 // Otherwise, see if "A EqP B" simplifies. 2687 if (MaxRecurse) 2688 if (Value *V = SimplifyICmpInst(EqP, A, B, Q, MaxRecurse-1)) 2689 return V; 2690 break; 2691 case CmpInst::ICMP_NE: 2692 case CmpInst::ICMP_SGT: { 2693 CmpInst::Predicate InvEqP = CmpInst::getInversePredicate(EqP); 2694 // Equivalent to "A InvEqP B". This may be the same as the condition 2695 // tested in the max/min; if so, we can just return that. 2696 if (Value *V = ExtractEquivalentCondition(LHS, InvEqP, A, B)) 2697 return V; 2698 if (Value *V = ExtractEquivalentCondition(RHS, InvEqP, A, B)) 2699 return V; 2700 // Otherwise, see if "A InvEqP B" simplifies. 2701 if (MaxRecurse) 2702 if (Value *V = SimplifyICmpInst(InvEqP, A, B, Q, MaxRecurse-1)) 2703 return V; 2704 break; 2705 } 2706 case CmpInst::ICMP_SGE: 2707 // Always true. 2708 return getTrue(ITy); 2709 case CmpInst::ICMP_SLT: 2710 // Always false. 2711 return getFalse(ITy); 2712 } 2713 } 2714 2715 // Unsigned variants on "max(a,b)>=a -> true". 2716 P = CmpInst::BAD_ICMP_PREDICATE; 2717 if (match(LHS, m_UMax(m_Value(A), m_Value(B))) && (A == RHS || B == RHS)) { 2718 if (A != RHS) std::swap(A, B); // umax(A, B) pred A. 2719 EqP = CmpInst::ICMP_UGE; // "A == umax(A, B)" iff "A uge B". 2720 // We analyze this as umax(A, B) pred A. 2721 P = Pred; 2722 } else if (match(RHS, m_UMax(m_Value(A), m_Value(B))) && 2723 (A == LHS || B == LHS)) { 2724 if (A != LHS) std::swap(A, B); // A pred umax(A, B). 2725 EqP = CmpInst::ICMP_UGE; // "A == umax(A, B)" iff "A uge B". 2726 // We analyze this as umax(A, B) swapped-pred A. 2727 P = CmpInst::getSwappedPredicate(Pred); 2728 } else if (match(LHS, m_UMin(m_Value(A), m_Value(B))) && 2729 (A == RHS || B == RHS)) { 2730 if (A != RHS) std::swap(A, B); // umin(A, B) pred A. 2731 EqP = CmpInst::ICMP_ULE; // "A == umin(A, B)" iff "A ule B". 2732 // We analyze this as umax(-A, -B) swapped-pred -A. 2733 // Note that we do not need to actually form -A or -B thanks to EqP. 2734 P = CmpInst::getSwappedPredicate(Pred); 2735 } else if (match(RHS, m_UMin(m_Value(A), m_Value(B))) && 2736 (A == LHS || B == LHS)) { 2737 if (A != LHS) std::swap(A, B); // A pred umin(A, B). 2738 EqP = CmpInst::ICMP_ULE; // "A == umin(A, B)" iff "A ule B". 2739 // We analyze this as umax(-A, -B) pred -A. 2740 // Note that we do not need to actually form -A or -B thanks to EqP. 2741 P = Pred; 2742 } 2743 if (P != CmpInst::BAD_ICMP_PREDICATE) { 2744 // Cases correspond to "max(A, B) p A". 2745 switch (P) { 2746 default: 2747 break; 2748 case CmpInst::ICMP_EQ: 2749 case CmpInst::ICMP_ULE: 2750 // Equivalent to "A EqP B". This may be the same as the condition tested 2751 // in the max/min; if so, we can just return that. 2752 if (Value *V = ExtractEquivalentCondition(LHS, EqP, A, B)) 2753 return V; 2754 if (Value *V = ExtractEquivalentCondition(RHS, EqP, A, B)) 2755 return V; 2756 // Otherwise, see if "A EqP B" simplifies. 2757 if (MaxRecurse) 2758 if (Value *V = SimplifyICmpInst(EqP, A, B, Q, MaxRecurse-1)) 2759 return V; 2760 break; 2761 case CmpInst::ICMP_NE: 2762 case CmpInst::ICMP_UGT: { 2763 CmpInst::Predicate InvEqP = CmpInst::getInversePredicate(EqP); 2764 // Equivalent to "A InvEqP B". This may be the same as the condition 2765 // tested in the max/min; if so, we can just return that. 2766 if (Value *V = ExtractEquivalentCondition(LHS, InvEqP, A, B)) 2767 return V; 2768 if (Value *V = ExtractEquivalentCondition(RHS, InvEqP, A, B)) 2769 return V; 2770 // Otherwise, see if "A InvEqP B" simplifies. 2771 if (MaxRecurse) 2772 if (Value *V = SimplifyICmpInst(InvEqP, A, B, Q, MaxRecurse-1)) 2773 return V; 2774 break; 2775 } 2776 case CmpInst::ICMP_UGE: 2777 // Always true. 2778 return getTrue(ITy); 2779 case CmpInst::ICMP_ULT: 2780 // Always false. 2781 return getFalse(ITy); 2782 } 2783 } 2784 2785 // Variants on "max(x,y) >= min(x,z)". 2786 Value *C, *D; 2787 if (match(LHS, m_SMax(m_Value(A), m_Value(B))) && 2788 match(RHS, m_SMin(m_Value(C), m_Value(D))) && 2789 (A == C || A == D || B == C || B == D)) { 2790 // max(x, ?) pred min(x, ?). 2791 if (Pred == CmpInst::ICMP_SGE) 2792 // Always true. 2793 return getTrue(ITy); 2794 if (Pred == CmpInst::ICMP_SLT) 2795 // Always false. 2796 return getFalse(ITy); 2797 } else if (match(LHS, m_SMin(m_Value(A), m_Value(B))) && 2798 match(RHS, m_SMax(m_Value(C), m_Value(D))) && 2799 (A == C || A == D || B == C || B == D)) { 2800 // min(x, ?) pred max(x, ?). 2801 if (Pred == CmpInst::ICMP_SLE) 2802 // Always true. 2803 return getTrue(ITy); 2804 if (Pred == CmpInst::ICMP_SGT) 2805 // Always false. 2806 return getFalse(ITy); 2807 } else if (match(LHS, m_UMax(m_Value(A), m_Value(B))) && 2808 match(RHS, m_UMin(m_Value(C), m_Value(D))) && 2809 (A == C || A == D || B == C || B == D)) { 2810 // max(x, ?) pred min(x, ?). 2811 if (Pred == CmpInst::ICMP_UGE) 2812 // Always true. 2813 return getTrue(ITy); 2814 if (Pred == CmpInst::ICMP_ULT) 2815 // Always false. 2816 return getFalse(ITy); 2817 } else if (match(LHS, m_UMin(m_Value(A), m_Value(B))) && 2818 match(RHS, m_UMax(m_Value(C), m_Value(D))) && 2819 (A == C || A == D || B == C || B == D)) { 2820 // min(x, ?) pred max(x, ?). 2821 if (Pred == CmpInst::ICMP_ULE) 2822 // Always true. 2823 return getTrue(ITy); 2824 if (Pred == CmpInst::ICMP_UGT) 2825 // Always false. 2826 return getFalse(ITy); 2827 } 2828 2829 // Simplify comparisons of related pointers using a powerful, recursive 2830 // GEP-walk when we have target data available.. 2831 if (LHS->getType()->isPointerTy()) 2832 if (Constant *C = computePointerICmp(Q.DL, Q.TLI, Pred, LHS, RHS)) 2833 return C; 2834 2835 if (GetElementPtrInst *GLHS = dyn_cast<GetElementPtrInst>(LHS)) { 2836 if (GEPOperator *GRHS = dyn_cast<GEPOperator>(RHS)) { 2837 if (GLHS->getPointerOperand() == GRHS->getPointerOperand() && 2838 GLHS->hasAllConstantIndices() && GRHS->hasAllConstantIndices() && 2839 (ICmpInst::isEquality(Pred) || 2840 (GLHS->isInBounds() && GRHS->isInBounds() && 2841 Pred == ICmpInst::getSignedPredicate(Pred)))) { 2842 // The bases are equal and the indices are constant. Build a constant 2843 // expression GEP with the same indices and a null base pointer to see 2844 // what constant folding can make out of it. 2845 Constant *Null = Constant::getNullValue(GLHS->getPointerOperandType()); 2846 SmallVector<Value *, 4> IndicesLHS(GLHS->idx_begin(), GLHS->idx_end()); 2847 Constant *NewLHS = ConstantExpr::getGetElementPtr(Null, IndicesLHS); 2848 2849 SmallVector<Value *, 4> IndicesRHS(GRHS->idx_begin(), GRHS->idx_end()); 2850 Constant *NewRHS = ConstantExpr::getGetElementPtr(Null, IndicesRHS); 2851 return ConstantExpr::getICmp(Pred, NewLHS, NewRHS); 2852 } 2853 } 2854 } 2855 2856 // If the comparison is with the result of a select instruction, check whether 2857 // comparing with either branch of the select always yields the same value. 2858 if (isa<SelectInst>(LHS) || isa<SelectInst>(RHS)) 2859 if (Value *V = ThreadCmpOverSelect(Pred, LHS, RHS, Q, MaxRecurse)) 2860 return V; 2861 2862 // If the comparison is with the result of a phi instruction, check whether 2863 // doing the compare with each incoming phi value yields a common result. 2864 if (isa<PHINode>(LHS) || isa<PHINode>(RHS)) 2865 if (Value *V = ThreadCmpOverPHI(Pred, LHS, RHS, Q, MaxRecurse)) 2866 return V; 2867 2868 return nullptr; 2869 } 2870 2871 Value *llvm::SimplifyICmpInst(unsigned Predicate, Value *LHS, Value *RHS, 2872 const DataLayout *DL, 2873 const TargetLibraryInfo *TLI, 2874 const DominatorTree *DT, 2875 AssumptionTracker *AT, 2876 Instruction *CxtI) { 2877 return ::SimplifyICmpInst(Predicate, LHS, RHS, Query (DL, TLI, DT, AT, CxtI), 2878 RecursionLimit); 2879 } 2880 2881 /// SimplifyFCmpInst - Given operands for an FCmpInst, see if we can 2882 /// fold the result. If not, this returns null. 2883 static Value *SimplifyFCmpInst(unsigned Predicate, Value *LHS, Value *RHS, 2884 const Query &Q, unsigned MaxRecurse) { 2885 CmpInst::Predicate Pred = (CmpInst::Predicate)Predicate; 2886 assert(CmpInst::isFPPredicate(Pred) && "Not an FP compare!"); 2887 2888 if (Constant *CLHS = dyn_cast<Constant>(LHS)) { 2889 if (Constant *CRHS = dyn_cast<Constant>(RHS)) 2890 return ConstantFoldCompareInstOperands(Pred, CLHS, CRHS, Q.DL, Q.TLI); 2891 2892 // If we have a constant, make sure it is on the RHS. 2893 std::swap(LHS, RHS); 2894 Pred = CmpInst::getSwappedPredicate(Pred); 2895 } 2896 2897 // Fold trivial predicates. 2898 if (Pred == FCmpInst::FCMP_FALSE) 2899 return ConstantInt::get(GetCompareTy(LHS), 0); 2900 if (Pred == FCmpInst::FCMP_TRUE) 2901 return ConstantInt::get(GetCompareTy(LHS), 1); 2902 2903 if (isa<UndefValue>(RHS)) // fcmp pred X, undef -> undef 2904 return UndefValue::get(GetCompareTy(LHS)); 2905 2906 // fcmp x,x -> true/false. Not all compares are foldable. 2907 if (LHS == RHS) { 2908 if (CmpInst::isTrueWhenEqual(Pred)) 2909 return ConstantInt::get(GetCompareTy(LHS), 1); 2910 if (CmpInst::isFalseWhenEqual(Pred)) 2911 return ConstantInt::get(GetCompareTy(LHS), 0); 2912 } 2913 2914 // Handle fcmp with constant RHS 2915 if (Constant *RHSC = dyn_cast<Constant>(RHS)) { 2916 // If the constant is a nan, see if we can fold the comparison based on it. 2917 if (ConstantFP *CFP = dyn_cast<ConstantFP>(RHSC)) { 2918 if (CFP->getValueAPF().isNaN()) { 2919 if (FCmpInst::isOrdered(Pred)) // True "if ordered and foo" 2920 return ConstantInt::getFalse(CFP->getContext()); 2921 assert(FCmpInst::isUnordered(Pred) && 2922 "Comparison must be either ordered or unordered!"); 2923 // True if unordered. 2924 return ConstantInt::getTrue(CFP->getContext()); 2925 } 2926 // Check whether the constant is an infinity. 2927 if (CFP->getValueAPF().isInfinity()) { 2928 if (CFP->getValueAPF().isNegative()) { 2929 switch (Pred) { 2930 case FCmpInst::FCMP_OLT: 2931 // No value is ordered and less than negative infinity. 2932 return ConstantInt::getFalse(CFP->getContext()); 2933 case FCmpInst::FCMP_UGE: 2934 // All values are unordered with or at least negative infinity. 2935 return ConstantInt::getTrue(CFP->getContext()); 2936 default: 2937 break; 2938 } 2939 } else { 2940 switch (Pred) { 2941 case FCmpInst::FCMP_OGT: 2942 // No value is ordered and greater than infinity. 2943 return ConstantInt::getFalse(CFP->getContext()); 2944 case FCmpInst::FCMP_ULE: 2945 // All values are unordered with and at most infinity. 2946 return ConstantInt::getTrue(CFP->getContext()); 2947 default: 2948 break; 2949 } 2950 } 2951 } 2952 } 2953 } 2954 2955 // If the comparison is with the result of a select instruction, check whether 2956 // comparing with either branch of the select always yields the same value. 2957 if (isa<SelectInst>(LHS) || isa<SelectInst>(RHS)) 2958 if (Value *V = ThreadCmpOverSelect(Pred, LHS, RHS, Q, MaxRecurse)) 2959 return V; 2960 2961 // If the comparison is with the result of a phi instruction, check whether 2962 // doing the compare with each incoming phi value yields a common result. 2963 if (isa<PHINode>(LHS) || isa<PHINode>(RHS)) 2964 if (Value *V = ThreadCmpOverPHI(Pred, LHS, RHS, Q, MaxRecurse)) 2965 return V; 2966 2967 return nullptr; 2968 } 2969 2970 Value *llvm::SimplifyFCmpInst(unsigned Predicate, Value *LHS, Value *RHS, 2971 const DataLayout *DL, 2972 const TargetLibraryInfo *TLI, 2973 const DominatorTree *DT, 2974 AssumptionTracker *AT, 2975 const Instruction *CxtI) { 2976 return ::SimplifyFCmpInst(Predicate, LHS, RHS, Query (DL, TLI, DT, AT, CxtI), 2977 RecursionLimit); 2978 } 2979 2980 /// SimplifySelectInst - Given operands for a SelectInst, see if we can fold 2981 /// the result. If not, this returns null. 2982 static Value *SimplifySelectInst(Value *CondVal, Value *TrueVal, 2983 Value *FalseVal, const Query &Q, 2984 unsigned MaxRecurse) { 2985 // select true, X, Y -> X 2986 // select false, X, Y -> Y 2987 if (Constant *CB = dyn_cast<Constant>(CondVal)) { 2988 if (CB->isAllOnesValue()) 2989 return TrueVal; 2990 if (CB->isNullValue()) 2991 return FalseVal; 2992 } 2993 2994 // select C, X, X -> X 2995 if (TrueVal == FalseVal) 2996 return TrueVal; 2997 2998 if (isa<UndefValue>(CondVal)) { // select undef, X, Y -> X or Y 2999 if (isa<Constant>(TrueVal)) 3000 return TrueVal; 3001 return FalseVal; 3002 } 3003 if (isa<UndefValue>(TrueVal)) // select C, undef, X -> X 3004 return FalseVal; 3005 if (isa<UndefValue>(FalseVal)) // select C, X, undef -> X 3006 return TrueVal; 3007 3008 return nullptr; 3009 } 3010 3011 Value *llvm::SimplifySelectInst(Value *Cond, Value *TrueVal, Value *FalseVal, 3012 const DataLayout *DL, 3013 const TargetLibraryInfo *TLI, 3014 const DominatorTree *DT, 3015 AssumptionTracker *AT, 3016 const Instruction *CxtI) { 3017 return ::SimplifySelectInst(Cond, TrueVal, FalseVal, 3018 Query (DL, TLI, DT, AT, CxtI), RecursionLimit); 3019 } 3020 3021 /// SimplifyGEPInst - Given operands for an GetElementPtrInst, see if we can 3022 /// fold the result. If not, this returns null. 3023 static Value *SimplifyGEPInst(ArrayRef<Value *> Ops, const Query &Q, unsigned) { 3024 // The type of the GEP pointer operand. 3025 PointerType *PtrTy = cast<PointerType>(Ops[0]->getType()->getScalarType()); 3026 unsigned AS = PtrTy->getAddressSpace(); 3027 3028 // getelementptr P -> P. 3029 if (Ops.size() == 1) 3030 return Ops[0]; 3031 3032 // Compute the (pointer) type returned by the GEP instruction. 3033 Type *LastType = GetElementPtrInst::getIndexedType(PtrTy, Ops.slice(1)); 3034 Type *GEPTy = PointerType::get(LastType, AS); 3035 if (VectorType *VT = dyn_cast<VectorType>(Ops[0]->getType())) 3036 GEPTy = VectorType::get(GEPTy, VT->getNumElements()); 3037 3038 if (isa<UndefValue>(Ops[0])) 3039 return UndefValue::get(GEPTy); 3040 3041 if (Ops.size() == 2) { 3042 // getelementptr P, 0 -> P. 3043 if (match(Ops[1], m_Zero())) 3044 return Ops[0]; 3045 3046 Type *Ty = PtrTy->getElementType(); 3047 if (Q.DL && Ty->isSized()) { 3048 Value *P; 3049 uint64_t C; 3050 uint64_t TyAllocSize = Q.DL->getTypeAllocSize(Ty); 3051 // getelementptr P, N -> P if P points to a type of zero size. 3052 if (TyAllocSize == 0) 3053 return Ops[0]; 3054 3055 // The following transforms are only safe if the ptrtoint cast 3056 // doesn't truncate the pointers. 3057 if (Ops[1]->getType()->getScalarSizeInBits() == 3058 Q.DL->getPointerSizeInBits(AS)) { 3059 auto PtrToIntOrZero = [GEPTy](Value *P) -> Value * { 3060 if (match(P, m_Zero())) 3061 return Constant::getNullValue(GEPTy); 3062 Value *Temp; 3063 if (match(P, m_PtrToInt(m_Value(Temp)))) 3064 if (Temp->getType() == GEPTy) 3065 return Temp; 3066 return nullptr; 3067 }; 3068 3069 // getelementptr V, (sub P, V) -> P if P points to a type of size 1. 3070 if (TyAllocSize == 1 && 3071 match(Ops[1], m_Sub(m_Value(P), m_PtrToInt(m_Specific(Ops[0]))))) 3072 if (Value *R = PtrToIntOrZero(P)) 3073 return R; 3074 3075 // getelementptr V, (ashr (sub P, V), C) -> Q 3076 // if P points to a type of size 1 << C. 3077 if (match(Ops[1], 3078 m_AShr(m_Sub(m_Value(P), m_PtrToInt(m_Specific(Ops[0]))), 3079 m_ConstantInt(C))) && 3080 TyAllocSize == 1ULL << C) 3081 if (Value *R = PtrToIntOrZero(P)) 3082 return R; 3083 3084 // getelementptr V, (sdiv (sub P, V), C) -> Q 3085 // if P points to a type of size C. 3086 if (match(Ops[1], 3087 m_SDiv(m_Sub(m_Value(P), m_PtrToInt(m_Specific(Ops[0]))), 3088 m_SpecificInt(TyAllocSize)))) 3089 if (Value *R = PtrToIntOrZero(P)) 3090 return R; 3091 } 3092 } 3093 } 3094 3095 // Check to see if this is constant foldable. 3096 for (unsigned i = 0, e = Ops.size(); i != e; ++i) 3097 if (!isa<Constant>(Ops[i])) 3098 return nullptr; 3099 3100 return ConstantExpr::getGetElementPtr(cast<Constant>(Ops[0]), Ops.slice(1)); 3101 } 3102 3103 Value *llvm::SimplifyGEPInst(ArrayRef<Value *> Ops, const DataLayout *DL, 3104 const TargetLibraryInfo *TLI, 3105 const DominatorTree *DT, AssumptionTracker *AT, 3106 const Instruction *CxtI) { 3107 return ::SimplifyGEPInst(Ops, Query (DL, TLI, DT, AT, CxtI), RecursionLimit); 3108 } 3109 3110 /// SimplifyInsertValueInst - Given operands for an InsertValueInst, see if we 3111 /// can fold the result. If not, this returns null. 3112 static Value *SimplifyInsertValueInst(Value *Agg, Value *Val, 3113 ArrayRef<unsigned> Idxs, const Query &Q, 3114 unsigned) { 3115 if (Constant *CAgg = dyn_cast<Constant>(Agg)) 3116 if (Constant *CVal = dyn_cast<Constant>(Val)) 3117 return ConstantFoldInsertValueInstruction(CAgg, CVal, Idxs); 3118 3119 // insertvalue x, undef, n -> x 3120 if (match(Val, m_Undef())) 3121 return Agg; 3122 3123 // insertvalue x, (extractvalue y, n), n 3124 if (ExtractValueInst *EV = dyn_cast<ExtractValueInst>(Val)) 3125 if (EV->getAggregateOperand()->getType() == Agg->getType() && 3126 EV->getIndices() == Idxs) { 3127 // insertvalue undef, (extractvalue y, n), n -> y 3128 if (match(Agg, m_Undef())) 3129 return EV->getAggregateOperand(); 3130 3131 // insertvalue y, (extractvalue y, n), n -> y 3132 if (Agg == EV->getAggregateOperand()) 3133 return Agg; 3134 } 3135 3136 return nullptr; 3137 } 3138 3139 Value *llvm::SimplifyInsertValueInst(Value *Agg, Value *Val, 3140 ArrayRef<unsigned> Idxs, 3141 const DataLayout *DL, 3142 const TargetLibraryInfo *TLI, 3143 const DominatorTree *DT, 3144 AssumptionTracker *AT, 3145 const Instruction *CxtI) { 3146 return ::SimplifyInsertValueInst(Agg, Val, Idxs, 3147 Query (DL, TLI, DT, AT, CxtI), 3148 RecursionLimit); 3149 } 3150 3151 /// SimplifyPHINode - See if we can fold the given phi. If not, returns null. 3152 static Value *SimplifyPHINode(PHINode *PN, const Query &Q) { 3153 // If all of the PHI's incoming values are the same then replace the PHI node 3154 // with the common value. 3155 Value *CommonValue = nullptr; 3156 bool HasUndefInput = false; 3157 for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) { 3158 Value *Incoming = PN->getIncomingValue(i); 3159 // If the incoming value is the phi node itself, it can safely be skipped. 3160 if (Incoming == PN) continue; 3161 if (isa<UndefValue>(Incoming)) { 3162 // Remember that we saw an undef value, but otherwise ignore them. 3163 HasUndefInput = true; 3164 continue; 3165 } 3166 if (CommonValue && Incoming != CommonValue) 3167 return nullptr; // Not the same, bail out. 3168 CommonValue = Incoming; 3169 } 3170 3171 // If CommonValue is null then all of the incoming values were either undef or 3172 // equal to the phi node itself. 3173 if (!CommonValue) 3174 return UndefValue::get(PN->getType()); 3175 3176 // If we have a PHI node like phi(X, undef, X), where X is defined by some 3177 // instruction, we cannot return X as the result of the PHI node unless it 3178 // dominates the PHI block. 3179 if (HasUndefInput) 3180 return ValueDominatesPHI(CommonValue, PN, Q.DT) ? CommonValue : nullptr; 3181 3182 return CommonValue; 3183 } 3184 3185 static Value *SimplifyTruncInst(Value *Op, Type *Ty, const Query &Q, unsigned) { 3186 if (Constant *C = dyn_cast<Constant>(Op)) 3187 return ConstantFoldInstOperands(Instruction::Trunc, Ty, C, Q.DL, Q.TLI); 3188 3189 return nullptr; 3190 } 3191 3192 Value *llvm::SimplifyTruncInst(Value *Op, Type *Ty, const DataLayout *DL, 3193 const TargetLibraryInfo *TLI, 3194 const DominatorTree *DT, 3195 AssumptionTracker *AT, 3196 const Instruction *CxtI) { 3197 return ::SimplifyTruncInst(Op, Ty, Query (DL, TLI, DT, AT, CxtI), 3198 RecursionLimit); 3199 } 3200 3201 //=== Helper functions for higher up the class hierarchy. 3202 3203 /// SimplifyBinOp - Given operands for a BinaryOperator, see if we can 3204 /// fold the result. If not, this returns null. 3205 static Value *SimplifyBinOp(unsigned Opcode, Value *LHS, Value *RHS, 3206 const Query &Q, unsigned MaxRecurse) { 3207 switch (Opcode) { 3208 case Instruction::Add: 3209 return SimplifyAddInst(LHS, RHS, /*isNSW*/false, /*isNUW*/false, 3210 Q, MaxRecurse); 3211 case Instruction::FAdd: 3212 return SimplifyFAddInst(LHS, RHS, FastMathFlags(), Q, MaxRecurse); 3213 3214 case Instruction::Sub: 3215 return SimplifySubInst(LHS, RHS, /*isNSW*/false, /*isNUW*/false, 3216 Q, MaxRecurse); 3217 case Instruction::FSub: 3218 return SimplifyFSubInst(LHS, RHS, FastMathFlags(), Q, MaxRecurse); 3219 3220 case Instruction::Mul: return SimplifyMulInst (LHS, RHS, Q, MaxRecurse); 3221 case Instruction::FMul: 3222 return SimplifyFMulInst (LHS, RHS, FastMathFlags(), Q, MaxRecurse); 3223 case Instruction::SDiv: return SimplifySDivInst(LHS, RHS, Q, MaxRecurse); 3224 case Instruction::UDiv: return SimplifyUDivInst(LHS, RHS, Q, MaxRecurse); 3225 case Instruction::FDiv: return SimplifyFDivInst(LHS, RHS, Q, MaxRecurse); 3226 case Instruction::SRem: return SimplifySRemInst(LHS, RHS, Q, MaxRecurse); 3227 case Instruction::URem: return SimplifyURemInst(LHS, RHS, Q, MaxRecurse); 3228 case Instruction::FRem: return SimplifyFRemInst(LHS, RHS, Q, MaxRecurse); 3229 case Instruction::Shl: 3230 return SimplifyShlInst(LHS, RHS, /*isNSW*/false, /*isNUW*/false, 3231 Q, MaxRecurse); 3232 case Instruction::LShr: 3233 return SimplifyLShrInst(LHS, RHS, /*isExact*/false, Q, MaxRecurse); 3234 case Instruction::AShr: 3235 return SimplifyAShrInst(LHS, RHS, /*isExact*/false, Q, MaxRecurse); 3236 case Instruction::And: return SimplifyAndInst(LHS, RHS, Q, MaxRecurse); 3237 case Instruction::Or: return SimplifyOrInst (LHS, RHS, Q, MaxRecurse); 3238 case Instruction::Xor: return SimplifyXorInst(LHS, RHS, Q, MaxRecurse); 3239 default: 3240 if (Constant *CLHS = dyn_cast<Constant>(LHS)) 3241 if (Constant *CRHS = dyn_cast<Constant>(RHS)) { 3242 Constant *COps[] = {CLHS, CRHS}; 3243 return ConstantFoldInstOperands(Opcode, LHS->getType(), COps, Q.DL, 3244 Q.TLI); 3245 } 3246 3247 // If the operation is associative, try some generic simplifications. 3248 if (Instruction::isAssociative(Opcode)) 3249 if (Value *V = SimplifyAssociativeBinOp(Opcode, LHS, RHS, Q, MaxRecurse)) 3250 return V; 3251 3252 // If the operation is with the result of a select instruction check whether 3253 // operating on either branch of the select always yields the same value. 3254 if (isa<SelectInst>(LHS) || isa<SelectInst>(RHS)) 3255 if (Value *V = ThreadBinOpOverSelect(Opcode, LHS, RHS, Q, MaxRecurse)) 3256 return V; 3257 3258 // If the operation is with the result of a phi instruction, check whether 3259 // operating on all incoming values of the phi always yields the same value. 3260 if (isa<PHINode>(LHS) || isa<PHINode>(RHS)) 3261 if (Value *V = ThreadBinOpOverPHI(Opcode, LHS, RHS, Q, MaxRecurse)) 3262 return V; 3263 3264 return nullptr; 3265 } 3266 } 3267 3268 Value *llvm::SimplifyBinOp(unsigned Opcode, Value *LHS, Value *RHS, 3269 const DataLayout *DL, const TargetLibraryInfo *TLI, 3270 const DominatorTree *DT, AssumptionTracker *AT, 3271 const Instruction *CxtI) { 3272 return ::SimplifyBinOp(Opcode, LHS, RHS, Query (DL, TLI, DT, AT, CxtI), 3273 RecursionLimit); 3274 } 3275 3276 /// SimplifyCmpInst - Given operands for a CmpInst, see if we can 3277 /// fold the result. 3278 static Value *SimplifyCmpInst(unsigned Predicate, Value *LHS, Value *RHS, 3279 const Query &Q, unsigned MaxRecurse) { 3280 if (CmpInst::isIntPredicate((CmpInst::Predicate)Predicate)) 3281 return SimplifyICmpInst(Predicate, LHS, RHS, Q, MaxRecurse); 3282 return SimplifyFCmpInst(Predicate, LHS, RHS, Q, MaxRecurse); 3283 } 3284 3285 Value *llvm::SimplifyCmpInst(unsigned Predicate, Value *LHS, Value *RHS, 3286 const DataLayout *DL, const TargetLibraryInfo *TLI, 3287 const DominatorTree *DT, AssumptionTracker *AT, 3288 const Instruction *CxtI) { 3289 return ::SimplifyCmpInst(Predicate, LHS, RHS, Query (DL, TLI, DT, AT, CxtI), 3290 RecursionLimit); 3291 } 3292 3293 static bool IsIdempotent(Intrinsic::ID ID) { 3294 switch (ID) { 3295 default: return false; 3296 3297 // Unary idempotent: f(f(x)) = f(x) 3298 case Intrinsic::fabs: 3299 case Intrinsic::floor: 3300 case Intrinsic::ceil: 3301 case Intrinsic::trunc: 3302 case Intrinsic::rint: 3303 case Intrinsic::nearbyint: 3304 case Intrinsic::round: 3305 return true; 3306 } 3307 } 3308 3309 template <typename IterTy> 3310 static Value *SimplifyIntrinsic(Intrinsic::ID IID, IterTy ArgBegin, IterTy ArgEnd, 3311 const Query &Q, unsigned MaxRecurse) { 3312 // Perform idempotent optimizations 3313 if (!IsIdempotent(IID)) 3314 return nullptr; 3315 3316 // Unary Ops 3317 if (std::distance(ArgBegin, ArgEnd) == 1) 3318 if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(*ArgBegin)) 3319 if (II->getIntrinsicID() == IID) 3320 return II; 3321 3322 return nullptr; 3323 } 3324 3325 template <typename IterTy> 3326 static Value *SimplifyCall(Value *V, IterTy ArgBegin, IterTy ArgEnd, 3327 const Query &Q, unsigned MaxRecurse) { 3328 Type *Ty = V->getType(); 3329 if (PointerType *PTy = dyn_cast<PointerType>(Ty)) 3330 Ty = PTy->getElementType(); 3331 FunctionType *FTy = cast<FunctionType>(Ty); 3332 3333 // call undef -> undef 3334 if (isa<UndefValue>(V)) 3335 return UndefValue::get(FTy->getReturnType()); 3336 3337 Function *F = dyn_cast<Function>(V); 3338 if (!F) 3339 return nullptr; 3340 3341 if (unsigned IID = F->getIntrinsicID()) 3342 if (Value *Ret = 3343 SimplifyIntrinsic((Intrinsic::ID) IID, ArgBegin, ArgEnd, Q, MaxRecurse)) 3344 return Ret; 3345 3346 if (!canConstantFoldCallTo(F)) 3347 return nullptr; 3348 3349 SmallVector<Constant *, 4> ConstantArgs; 3350 ConstantArgs.reserve(ArgEnd - ArgBegin); 3351 for (IterTy I = ArgBegin, E = ArgEnd; I != E; ++I) { 3352 Constant *C = dyn_cast<Constant>(*I); 3353 if (!C) 3354 return nullptr; 3355 ConstantArgs.push_back(C); 3356 } 3357 3358 return ConstantFoldCall(F, ConstantArgs, Q.TLI); 3359 } 3360 3361 Value *llvm::SimplifyCall(Value *V, User::op_iterator ArgBegin, 3362 User::op_iterator ArgEnd, const DataLayout *DL, 3363 const TargetLibraryInfo *TLI, 3364 const DominatorTree *DT, AssumptionTracker *AT, 3365 const Instruction *CxtI) { 3366 return ::SimplifyCall(V, ArgBegin, ArgEnd, Query(DL, TLI, DT, AT, CxtI), 3367 RecursionLimit); 3368 } 3369 3370 Value *llvm::SimplifyCall(Value *V, ArrayRef<Value *> Args, 3371 const DataLayout *DL, const TargetLibraryInfo *TLI, 3372 const DominatorTree *DT, AssumptionTracker *AT, 3373 const Instruction *CxtI) { 3374 return ::SimplifyCall(V, Args.begin(), Args.end(), 3375 Query(DL, TLI, DT, AT, CxtI), RecursionLimit); 3376 } 3377 3378 /// SimplifyInstruction - See if we can compute a simplified version of this 3379 /// instruction. If not, this returns null. 3380 Value *llvm::SimplifyInstruction(Instruction *I, const DataLayout *DL, 3381 const TargetLibraryInfo *TLI, 3382 const DominatorTree *DT, 3383 AssumptionTracker *AT) { 3384 Value *Result; 3385 3386 switch (I->getOpcode()) { 3387 default: 3388 Result = ConstantFoldInstruction(I, DL, TLI); 3389 break; 3390 case Instruction::FAdd: 3391 Result = SimplifyFAddInst(I->getOperand(0), I->getOperand(1), 3392 I->getFastMathFlags(), DL, TLI, DT, AT, I); 3393 break; 3394 case Instruction::Add: 3395 Result = SimplifyAddInst(I->getOperand(0), I->getOperand(1), 3396 cast<BinaryOperator>(I)->hasNoSignedWrap(), 3397 cast<BinaryOperator>(I)->hasNoUnsignedWrap(), 3398 DL, TLI, DT, AT, I); 3399 break; 3400 case Instruction::FSub: 3401 Result = SimplifyFSubInst(I->getOperand(0), I->getOperand(1), 3402 I->getFastMathFlags(), DL, TLI, DT, AT, I); 3403 break; 3404 case Instruction::Sub: 3405 Result = SimplifySubInst(I->getOperand(0), I->getOperand(1), 3406 cast<BinaryOperator>(I)->hasNoSignedWrap(), 3407 cast<BinaryOperator>(I)->hasNoUnsignedWrap(), 3408 DL, TLI, DT, AT, I); 3409 break; 3410 case Instruction::FMul: 3411 Result = SimplifyFMulInst(I->getOperand(0), I->getOperand(1), 3412 I->getFastMathFlags(), DL, TLI, DT, AT, I); 3413 break; 3414 case Instruction::Mul: 3415 Result = SimplifyMulInst(I->getOperand(0), I->getOperand(1), 3416 DL, TLI, DT, AT, I); 3417 break; 3418 case Instruction::SDiv: 3419 Result = SimplifySDivInst(I->getOperand(0), I->getOperand(1), 3420 DL, TLI, DT, AT, I); 3421 break; 3422 case Instruction::UDiv: 3423 Result = SimplifyUDivInst(I->getOperand(0), I->getOperand(1), 3424 DL, TLI, DT, AT, I); 3425 break; 3426 case Instruction::FDiv: 3427 Result = SimplifyFDivInst(I->getOperand(0), I->getOperand(1), 3428 DL, TLI, DT, AT, I); 3429 break; 3430 case Instruction::SRem: 3431 Result = SimplifySRemInst(I->getOperand(0), I->getOperand(1), 3432 DL, TLI, DT, AT, I); 3433 break; 3434 case Instruction::URem: 3435 Result = SimplifyURemInst(I->getOperand(0), I->getOperand(1), 3436 DL, TLI, DT, AT, I); 3437 break; 3438 case Instruction::FRem: 3439 Result = SimplifyFRemInst(I->getOperand(0), I->getOperand(1), 3440 DL, TLI, DT, AT, I); 3441 break; 3442 case Instruction::Shl: 3443 Result = SimplifyShlInst(I->getOperand(0), I->getOperand(1), 3444 cast<BinaryOperator>(I)->hasNoSignedWrap(), 3445 cast<BinaryOperator>(I)->hasNoUnsignedWrap(), 3446 DL, TLI, DT, AT, I); 3447 break; 3448 case Instruction::LShr: 3449 Result = SimplifyLShrInst(I->getOperand(0), I->getOperand(1), 3450 cast<BinaryOperator>(I)->isExact(), 3451 DL, TLI, DT, AT, I); 3452 break; 3453 case Instruction::AShr: 3454 Result = SimplifyAShrInst(I->getOperand(0), I->getOperand(1), 3455 cast<BinaryOperator>(I)->isExact(), 3456 DL, TLI, DT, AT, I); 3457 break; 3458 case Instruction::And: 3459 Result = SimplifyAndInst(I->getOperand(0), I->getOperand(1), 3460 DL, TLI, DT, AT, I); 3461 break; 3462 case Instruction::Or: 3463 Result = SimplifyOrInst(I->getOperand(0), I->getOperand(1), DL, TLI, DT, 3464 AT, I); 3465 break; 3466 case Instruction::Xor: 3467 Result = SimplifyXorInst(I->getOperand(0), I->getOperand(1), 3468 DL, TLI, DT, AT, I); 3469 break; 3470 case Instruction::ICmp: 3471 Result = SimplifyICmpInst(cast<ICmpInst>(I)->getPredicate(), 3472 I->getOperand(0), I->getOperand(1), 3473 DL, TLI, DT, AT, I); 3474 break; 3475 case Instruction::FCmp: 3476 Result = SimplifyFCmpInst(cast<FCmpInst>(I)->getPredicate(), 3477 I->getOperand(0), I->getOperand(1), 3478 DL, TLI, DT, AT, I); 3479 break; 3480 case Instruction::Select: 3481 Result = SimplifySelectInst(I->getOperand(0), I->getOperand(1), 3482 I->getOperand(2), DL, TLI, DT, AT, I); 3483 break; 3484 case Instruction::GetElementPtr: { 3485 SmallVector<Value*, 8> Ops(I->op_begin(), I->op_end()); 3486 Result = SimplifyGEPInst(Ops, DL, TLI, DT, AT, I); 3487 break; 3488 } 3489 case Instruction::InsertValue: { 3490 InsertValueInst *IV = cast<InsertValueInst>(I); 3491 Result = SimplifyInsertValueInst(IV->getAggregateOperand(), 3492 IV->getInsertedValueOperand(), 3493 IV->getIndices(), DL, TLI, DT, AT, I); 3494 break; 3495 } 3496 case Instruction::PHI: 3497 Result = SimplifyPHINode(cast<PHINode>(I), Query (DL, TLI, DT, AT, I)); 3498 break; 3499 case Instruction::Call: { 3500 CallSite CS(cast<CallInst>(I)); 3501 Result = SimplifyCall(CS.getCalledValue(), CS.arg_begin(), CS.arg_end(), 3502 DL, TLI, DT, AT, I); 3503 break; 3504 } 3505 case Instruction::Trunc: 3506 Result = SimplifyTruncInst(I->getOperand(0), I->getType(), DL, TLI, DT, 3507 AT, I); 3508 break; 3509 } 3510 3511 /// If called on unreachable code, the above logic may report that the 3512 /// instruction simplified to itself. Make life easier for users by 3513 /// detecting that case here, returning a safe value instead. 3514 return Result == I ? UndefValue::get(I->getType()) : Result; 3515 } 3516 3517 /// \brief Implementation of recursive simplification through an instructions 3518 /// uses. 3519 /// 3520 /// This is the common implementation of the recursive simplification routines. 3521 /// If we have a pre-simplified value in 'SimpleV', that is forcibly used to 3522 /// replace the instruction 'I'. Otherwise, we simply add 'I' to the list of 3523 /// instructions to process and attempt to simplify it using 3524 /// InstructionSimplify. 3525 /// 3526 /// This routine returns 'true' only when *it* simplifies something. The passed 3527 /// in simplified value does not count toward this. 3528 static bool replaceAndRecursivelySimplifyImpl(Instruction *I, Value *SimpleV, 3529 const DataLayout *DL, 3530 const TargetLibraryInfo *TLI, 3531 const DominatorTree *DT, 3532 AssumptionTracker *AT) { 3533 bool Simplified = false; 3534 SmallSetVector<Instruction *, 8> Worklist; 3535 3536 // If we have an explicit value to collapse to, do that round of the 3537 // simplification loop by hand initially. 3538 if (SimpleV) { 3539 for (User *U : I->users()) 3540 if (U != I) 3541 Worklist.insert(cast<Instruction>(U)); 3542 3543 // Replace the instruction with its simplified value. 3544 I->replaceAllUsesWith(SimpleV); 3545 3546 // Gracefully handle edge cases where the instruction is not wired into any 3547 // parent block. 3548 if (I->getParent()) 3549 I->eraseFromParent(); 3550 } else { 3551 Worklist.insert(I); 3552 } 3553 3554 // Note that we must test the size on each iteration, the worklist can grow. 3555 for (unsigned Idx = 0; Idx != Worklist.size(); ++Idx) { 3556 I = Worklist[Idx]; 3557 3558 // See if this instruction simplifies. 3559 SimpleV = SimplifyInstruction(I, DL, TLI, DT, AT); 3560 if (!SimpleV) 3561 continue; 3562 3563 Simplified = true; 3564 3565 // Stash away all the uses of the old instruction so we can check them for 3566 // recursive simplifications after a RAUW. This is cheaper than checking all 3567 // uses of To on the recursive step in most cases. 3568 for (User *U : I->users()) 3569 Worklist.insert(cast<Instruction>(U)); 3570 3571 // Replace the instruction with its simplified value. 3572 I->replaceAllUsesWith(SimpleV); 3573 3574 // Gracefully handle edge cases where the instruction is not wired into any 3575 // parent block. 3576 if (I->getParent()) 3577 I->eraseFromParent(); 3578 } 3579 return Simplified; 3580 } 3581 3582 bool llvm::recursivelySimplifyInstruction(Instruction *I, 3583 const DataLayout *DL, 3584 const TargetLibraryInfo *TLI, 3585 const DominatorTree *DT, 3586 AssumptionTracker *AT) { 3587 return replaceAndRecursivelySimplifyImpl(I, nullptr, DL, TLI, DT, AT); 3588 } 3589 3590 bool llvm::replaceAndRecursivelySimplify(Instruction *I, Value *SimpleV, 3591 const DataLayout *DL, 3592 const TargetLibraryInfo *TLI, 3593 const DominatorTree *DT, 3594 AssumptionTracker *AT) { 3595 assert(I != SimpleV && "replaceAndRecursivelySimplify(X,X) is not valid!"); 3596 assert(SimpleV && "Must provide a simplified value."); 3597 return replaceAndRecursivelySimplifyImpl(I, SimpleV, DL, TLI, DT, AT); 3598 } 3599