Home | History | Annotate | Download | only in Analysis
      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 #define DEBUG_TYPE "instsimplify"
     21 #include "llvm/Operator.h"
     22 #include "llvm/ADT/Statistic.h"
     23 #include "llvm/Analysis/InstructionSimplify.h"
     24 #include "llvm/Analysis/ConstantFolding.h"
     25 #include "llvm/Analysis/Dominators.h"
     26 #include "llvm/Analysis/ValueTracking.h"
     27 #include "llvm/Support/ConstantRange.h"
     28 #include "llvm/Support/PatternMatch.h"
     29 #include "llvm/Support/ValueHandle.h"
     30 #include "llvm/Target/TargetData.h"
     31 using namespace llvm;
     32 using namespace llvm::PatternMatch;
     33 
     34 enum { RecursionLimit = 3 };
     35 
     36 STATISTIC(NumExpand,  "Number of expansions");
     37 STATISTIC(NumFactor , "Number of factorizations");
     38 STATISTIC(NumReassoc, "Number of reassociations");
     39 
     40 static Value *SimplifyAndInst(Value *, Value *, const TargetData *,
     41                               const DominatorTree *, unsigned);
     42 static Value *SimplifyBinOp(unsigned, Value *, Value *, const TargetData *,
     43                             const DominatorTree *, unsigned);
     44 static Value *SimplifyCmpInst(unsigned, Value *, Value *, const TargetData *,
     45                               const DominatorTree *, unsigned);
     46 static Value *SimplifyOrInst(Value *, Value *, const TargetData *,
     47                              const DominatorTree *, unsigned);
     48 static Value *SimplifyXorInst(Value *, Value *, const TargetData *,
     49                               const DominatorTree *, unsigned);
     50 
     51 /// ValueDominatesPHI - Does the given value dominate the specified phi node?
     52 static bool ValueDominatesPHI(Value *V, PHINode *P, const DominatorTree *DT) {
     53   Instruction *I = dyn_cast<Instruction>(V);
     54   if (!I)
     55     // Arguments and constants dominate all instructions.
     56     return true;
     57 
     58   // If we have a DominatorTree then do a precise test.
     59   if (DT)
     60     return DT->dominates(I, P);
     61 
     62   // Otherwise, if the instruction is in the entry block, and is not an invoke,
     63   // then it obviously dominates all phi nodes.
     64   if (I->getParent() == &I->getParent()->getParent()->getEntryBlock() &&
     65       !isa<InvokeInst>(I))
     66     return true;
     67 
     68   return false;
     69 }
     70 
     71 /// ExpandBinOp - Simplify "A op (B op' C)" by distributing op over op', turning
     72 /// it into "(A op B) op' (A op C)".  Here "op" is given by Opcode and "op'" is
     73 /// given by OpcodeToExpand, while "A" corresponds to LHS and "B op' C" to RHS.
     74 /// Also performs the transform "(A op' B) op C" -> "(A op C) op' (B op C)".
     75 /// Returns the simplified value, or null if no simplification was performed.
     76 static Value *ExpandBinOp(unsigned Opcode, Value *LHS, Value *RHS,
     77                           unsigned OpcToExpand, const TargetData *TD,
     78                           const DominatorTree *DT, unsigned MaxRecurse) {
     79   Instruction::BinaryOps OpcodeToExpand = (Instruction::BinaryOps)OpcToExpand;
     80   // Recursion is always used, so bail out at once if we already hit the limit.
     81   if (!MaxRecurse--)
     82     return 0;
     83 
     84   // Check whether the expression has the form "(A op' B) op C".
     85   if (BinaryOperator *Op0 = dyn_cast<BinaryOperator>(LHS))
     86     if (Op0->getOpcode() == OpcodeToExpand) {
     87       // It does!  Try turning it into "(A op C) op' (B op C)".
     88       Value *A = Op0->getOperand(0), *B = Op0->getOperand(1), *C = RHS;
     89       // Do "A op C" and "B op C" both simplify?
     90       if (Value *L = SimplifyBinOp(Opcode, A, C, TD, DT, MaxRecurse))
     91         if (Value *R = SimplifyBinOp(Opcode, B, C, TD, DT, MaxRecurse)) {
     92           // They do! Return "L op' R" if it simplifies or is already available.
     93           // If "L op' R" equals "A op' B" then "L op' R" is just the LHS.
     94           if ((L == A && R == B) || (Instruction::isCommutative(OpcodeToExpand)
     95                                      && L == B && R == A)) {
     96             ++NumExpand;
     97             return LHS;
     98           }
     99           // Otherwise return "L op' R" if it simplifies.
    100           if (Value *V = SimplifyBinOp(OpcodeToExpand, L, R, TD, DT,
    101                                        MaxRecurse)) {
    102             ++NumExpand;
    103             return V;
    104           }
    105         }
    106     }
    107 
    108   // Check whether the expression has the form "A op (B op' C)".
    109   if (BinaryOperator *Op1 = dyn_cast<BinaryOperator>(RHS))
    110     if (Op1->getOpcode() == OpcodeToExpand) {
    111       // It does!  Try turning it into "(A op B) op' (A op C)".
    112       Value *A = LHS, *B = Op1->getOperand(0), *C = Op1->getOperand(1);
    113       // Do "A op B" and "A op C" both simplify?
    114       if (Value *L = SimplifyBinOp(Opcode, A, B, TD, DT, MaxRecurse))
    115         if (Value *R = SimplifyBinOp(Opcode, A, C, TD, DT, MaxRecurse)) {
    116           // They do! Return "L op' R" if it simplifies or is already available.
    117           // If "L op' R" equals "B op' C" then "L op' R" is just the RHS.
    118           if ((L == B && R == C) || (Instruction::isCommutative(OpcodeToExpand)
    119                                      && L == C && R == B)) {
    120             ++NumExpand;
    121             return RHS;
    122           }
    123           // Otherwise return "L op' R" if it simplifies.
    124           if (Value *V = SimplifyBinOp(OpcodeToExpand, L, R, TD, DT,
    125                                        MaxRecurse)) {
    126             ++NumExpand;
    127             return V;
    128           }
    129         }
    130     }
    131 
    132   return 0;
    133 }
    134 
    135 /// FactorizeBinOp - Simplify "LHS Opcode RHS" by factorizing out a common term
    136 /// using the operation OpCodeToExtract.  For example, when Opcode is Add and
    137 /// OpCodeToExtract is Mul then this tries to turn "(A*B)+(A*C)" into "A*(B+C)".
    138 /// Returns the simplified value, or null if no simplification was performed.
    139 static Value *FactorizeBinOp(unsigned Opcode, Value *LHS, Value *RHS,
    140                              unsigned OpcToExtract, const TargetData *TD,
    141                              const DominatorTree *DT, unsigned MaxRecurse) {
    142   Instruction::BinaryOps OpcodeToExtract = (Instruction::BinaryOps)OpcToExtract;
    143   // Recursion is always used, so bail out at once if we already hit the limit.
    144   if (!MaxRecurse--)
    145     return 0;
    146 
    147   BinaryOperator *Op0 = dyn_cast<BinaryOperator>(LHS);
    148   BinaryOperator *Op1 = dyn_cast<BinaryOperator>(RHS);
    149 
    150   if (!Op0 || Op0->getOpcode() != OpcodeToExtract ||
    151       !Op1 || Op1->getOpcode() != OpcodeToExtract)
    152     return 0;
    153 
    154   // The expression has the form "(A op' B) op (C op' D)".
    155   Value *A = Op0->getOperand(0), *B = Op0->getOperand(1);
    156   Value *C = Op1->getOperand(0), *D = Op1->getOperand(1);
    157 
    158   // Use left distributivity, i.e. "X op' (Y op Z) = (X op' Y) op (X op' Z)".
    159   // Does the instruction have the form "(A op' B) op (A op' D)" or, in the
    160   // commutative case, "(A op' B) op (C op' A)"?
    161   if (A == C || (Instruction::isCommutative(OpcodeToExtract) && A == D)) {
    162     Value *DD = A == C ? D : C;
    163     // Form "A op' (B op DD)" if it simplifies completely.
    164     // Does "B op DD" simplify?
    165     if (Value *V = SimplifyBinOp(Opcode, B, DD, TD, DT, MaxRecurse)) {
    166       // It does!  Return "A op' V" if it simplifies or is already available.
    167       // If V equals B then "A op' V" is just the LHS.  If V equals DD then
    168       // "A op' V" is just the RHS.
    169       if (V == B || V == DD) {
    170         ++NumFactor;
    171         return V == B ? LHS : RHS;
    172       }
    173       // Otherwise return "A op' V" if it simplifies.
    174       if (Value *W = SimplifyBinOp(OpcodeToExtract, A, V, TD, DT, MaxRecurse)) {
    175         ++NumFactor;
    176         return W;
    177       }
    178     }
    179   }
    180 
    181   // Use right distributivity, i.e. "(X op Y) op' Z = (X op' Z) op (Y op' Z)".
    182   // Does the instruction have the form "(A op' B) op (C op' B)" or, in the
    183   // commutative case, "(A op' B) op (B op' D)"?
    184   if (B == D || (Instruction::isCommutative(OpcodeToExtract) && B == C)) {
    185     Value *CC = B == D ? C : D;
    186     // Form "(A op CC) op' B" if it simplifies completely..
    187     // Does "A op CC" simplify?
    188     if (Value *V = SimplifyBinOp(Opcode, A, CC, TD, DT, MaxRecurse)) {
    189       // It does!  Return "V op' B" if it simplifies or is already available.
    190       // If V equals A then "V op' B" is just the LHS.  If V equals CC then
    191       // "V op' B" is just the RHS.
    192       if (V == A || V == CC) {
    193         ++NumFactor;
    194         return V == A ? LHS : RHS;
    195       }
    196       // Otherwise return "V op' B" if it simplifies.
    197       if (Value *W = SimplifyBinOp(OpcodeToExtract, V, B, TD, DT, MaxRecurse)) {
    198         ++NumFactor;
    199         return W;
    200       }
    201     }
    202   }
    203 
    204   return 0;
    205 }
    206 
    207 /// SimplifyAssociativeBinOp - Generic simplifications for associative binary
    208 /// operations.  Returns the simpler value, or null if none was found.
    209 static Value *SimplifyAssociativeBinOp(unsigned Opc, Value *LHS, Value *RHS,
    210                                        const TargetData *TD,
    211                                        const DominatorTree *DT,
    212                                        unsigned MaxRecurse) {
    213   Instruction::BinaryOps Opcode = (Instruction::BinaryOps)Opc;
    214   assert(Instruction::isAssociative(Opcode) && "Not an associative operation!");
    215 
    216   // Recursion is always used, so bail out at once if we already hit the limit.
    217   if (!MaxRecurse--)
    218     return 0;
    219 
    220   BinaryOperator *Op0 = dyn_cast<BinaryOperator>(LHS);
    221   BinaryOperator *Op1 = dyn_cast<BinaryOperator>(RHS);
    222 
    223   // Transform: "(A op B) op C" ==> "A op (B op C)" if it simplifies completely.
    224   if (Op0 && Op0->getOpcode() == Opcode) {
    225     Value *A = Op0->getOperand(0);
    226     Value *B = Op0->getOperand(1);
    227     Value *C = RHS;
    228 
    229     // Does "B op C" simplify?
    230     if (Value *V = SimplifyBinOp(Opcode, B, C, TD, DT, MaxRecurse)) {
    231       // It does!  Return "A op V" if it simplifies or is already available.
    232       // If V equals B then "A op V" is just the LHS.
    233       if (V == B) return LHS;
    234       // Otherwise return "A op V" if it simplifies.
    235       if (Value *W = SimplifyBinOp(Opcode, A, V, TD, DT, MaxRecurse)) {
    236         ++NumReassoc;
    237         return W;
    238       }
    239     }
    240   }
    241 
    242   // Transform: "A op (B op C)" ==> "(A op B) op C" if it simplifies completely.
    243   if (Op1 && Op1->getOpcode() == Opcode) {
    244     Value *A = LHS;
    245     Value *B = Op1->getOperand(0);
    246     Value *C = Op1->getOperand(1);
    247 
    248     // Does "A op B" simplify?
    249     if (Value *V = SimplifyBinOp(Opcode, A, B, TD, DT, MaxRecurse)) {
    250       // It does!  Return "V op C" if it simplifies or is already available.
    251       // If V equals B then "V op C" is just the RHS.
    252       if (V == B) return RHS;
    253       // Otherwise return "V op C" if it simplifies.
    254       if (Value *W = SimplifyBinOp(Opcode, V, C, TD, DT, MaxRecurse)) {
    255         ++NumReassoc;
    256         return W;
    257       }
    258     }
    259   }
    260 
    261   // The remaining transforms require commutativity as well as associativity.
    262   if (!Instruction::isCommutative(Opcode))
    263     return 0;
    264 
    265   // Transform: "(A op B) op C" ==> "(C op A) op B" if it simplifies completely.
    266   if (Op0 && Op0->getOpcode() == Opcode) {
    267     Value *A = Op0->getOperand(0);
    268     Value *B = Op0->getOperand(1);
    269     Value *C = RHS;
    270 
    271     // Does "C op A" simplify?
    272     if (Value *V = SimplifyBinOp(Opcode, C, A, TD, DT, MaxRecurse)) {
    273       // It does!  Return "V op B" if it simplifies or is already available.
    274       // If V equals A then "V op B" is just the LHS.
    275       if (V == A) return LHS;
    276       // Otherwise return "V op B" if it simplifies.
    277       if (Value *W = SimplifyBinOp(Opcode, V, B, TD, DT, MaxRecurse)) {
    278         ++NumReassoc;
    279         return W;
    280       }
    281     }
    282   }
    283 
    284   // Transform: "A op (B op C)" ==> "B op (C op A)" if it simplifies completely.
    285   if (Op1 && Op1->getOpcode() == Opcode) {
    286     Value *A = LHS;
    287     Value *B = Op1->getOperand(0);
    288     Value *C = Op1->getOperand(1);
    289 
    290     // Does "C op A" simplify?
    291     if (Value *V = SimplifyBinOp(Opcode, C, A, TD, DT, MaxRecurse)) {
    292       // It does!  Return "B op V" if it simplifies or is already available.
    293       // If V equals C then "B op V" is just the RHS.
    294       if (V == C) return RHS;
    295       // Otherwise return "B op V" if it simplifies.
    296       if (Value *W = SimplifyBinOp(Opcode, B, V, TD, DT, MaxRecurse)) {
    297         ++NumReassoc;
    298         return W;
    299       }
    300     }
    301   }
    302 
    303   return 0;
    304 }
    305 
    306 /// ThreadBinOpOverSelect - In the case of a binary operation with a select
    307 /// instruction as an operand, try to simplify the binop by seeing whether
    308 /// evaluating it on both branches of the select results in the same value.
    309 /// Returns the common value if so, otherwise returns null.
    310 static Value *ThreadBinOpOverSelect(unsigned Opcode, Value *LHS, Value *RHS,
    311                                     const TargetData *TD,
    312                                     const DominatorTree *DT,
    313                                     unsigned MaxRecurse) {
    314   // Recursion is always used, so bail out at once if we already hit the limit.
    315   if (!MaxRecurse--)
    316     return 0;
    317 
    318   SelectInst *SI;
    319   if (isa<SelectInst>(LHS)) {
    320     SI = cast<SelectInst>(LHS);
    321   } else {
    322     assert(isa<SelectInst>(RHS) && "No select instruction operand!");
    323     SI = cast<SelectInst>(RHS);
    324   }
    325 
    326   // Evaluate the BinOp on the true and false branches of the select.
    327   Value *TV;
    328   Value *FV;
    329   if (SI == LHS) {
    330     TV = SimplifyBinOp(Opcode, SI->getTrueValue(), RHS, TD, DT, MaxRecurse);
    331     FV = SimplifyBinOp(Opcode, SI->getFalseValue(), RHS, TD, DT, MaxRecurse);
    332   } else {
    333     TV = SimplifyBinOp(Opcode, LHS, SI->getTrueValue(), TD, DT, MaxRecurse);
    334     FV = SimplifyBinOp(Opcode, LHS, SI->getFalseValue(), TD, DT, MaxRecurse);
    335   }
    336 
    337   // If they simplified to the same value, then return the common value.
    338   // If they both failed to simplify then return null.
    339   if (TV == FV)
    340     return TV;
    341 
    342   // If one branch simplified to undef, return the other one.
    343   if (TV && isa<UndefValue>(TV))
    344     return FV;
    345   if (FV && isa<UndefValue>(FV))
    346     return TV;
    347 
    348   // If applying the operation did not change the true and false select values,
    349   // then the result of the binop is the select itself.
    350   if (TV == SI->getTrueValue() && FV == SI->getFalseValue())
    351     return SI;
    352 
    353   // If one branch simplified and the other did not, and the simplified
    354   // value is equal to the unsimplified one, return the simplified value.
    355   // For example, select (cond, X, X & Z) & Z -> X & Z.
    356   if ((FV && !TV) || (TV && !FV)) {
    357     // Check that the simplified value has the form "X op Y" where "op" is the
    358     // same as the original operation.
    359     Instruction *Simplified = dyn_cast<Instruction>(FV ? FV : TV);
    360     if (Simplified && Simplified->getOpcode() == Opcode) {
    361       // The value that didn't simplify is "UnsimplifiedLHS op UnsimplifiedRHS".
    362       // We already know that "op" is the same as for the simplified value.  See
    363       // if the operands match too.  If so, return the simplified value.
    364       Value *UnsimplifiedBranch = FV ? SI->getTrueValue() : SI->getFalseValue();
    365       Value *UnsimplifiedLHS = SI == LHS ? UnsimplifiedBranch : LHS;
    366       Value *UnsimplifiedRHS = SI == LHS ? RHS : UnsimplifiedBranch;
    367       if (Simplified->getOperand(0) == UnsimplifiedLHS &&
    368           Simplified->getOperand(1) == UnsimplifiedRHS)
    369         return Simplified;
    370       if (Simplified->isCommutative() &&
    371           Simplified->getOperand(1) == UnsimplifiedLHS &&
    372           Simplified->getOperand(0) == UnsimplifiedRHS)
    373         return Simplified;
    374     }
    375   }
    376 
    377   return 0;
    378 }
    379 
    380 /// ThreadCmpOverSelect - In the case of a comparison with a select instruction,
    381 /// try to simplify the comparison by seeing whether both branches of the select
    382 /// result in the same value.  Returns the common value if so, otherwise returns
    383 /// null.
    384 static Value *ThreadCmpOverSelect(CmpInst::Predicate Pred, Value *LHS,
    385                                   Value *RHS, const TargetData *TD,
    386                                   const DominatorTree *DT,
    387                                   unsigned MaxRecurse) {
    388   // Recursion is always used, so bail out at once if we already hit the limit.
    389   if (!MaxRecurse--)
    390     return 0;
    391 
    392   // Make sure the select is on the LHS.
    393   if (!isa<SelectInst>(LHS)) {
    394     std::swap(LHS, RHS);
    395     Pred = CmpInst::getSwappedPredicate(Pred);
    396   }
    397   assert(isa<SelectInst>(LHS) && "Not comparing with a select instruction!");
    398   SelectInst *SI = cast<SelectInst>(LHS);
    399 
    400   // Now that we have "cmp select(Cond, TV, FV), RHS", analyse it.
    401   // Does "cmp TV, RHS" simplify?
    402   if (Value *TCmp = SimplifyCmpInst(Pred, SI->getTrueValue(), RHS, TD, DT,
    403                                     MaxRecurse)) {
    404     // It does!  Does "cmp FV, RHS" simplify?
    405     if (Value *FCmp = SimplifyCmpInst(Pred, SI->getFalseValue(), RHS, TD, DT,
    406                                       MaxRecurse)) {
    407       // It does!  If they simplified to the same value, then use it as the
    408       // result of the original comparison.
    409       if (TCmp == FCmp)
    410         return TCmp;
    411       Value *Cond = SI->getCondition();
    412       // If the false value simplified to false, then the result of the compare
    413       // is equal to "Cond && TCmp".  This also catches the case when the false
    414       // value simplified to false and the true value to true, returning "Cond".
    415       if (match(FCmp, m_Zero()))
    416         if (Value *V = SimplifyAndInst(Cond, TCmp, TD, DT, MaxRecurse))
    417           return V;
    418       // If the true value simplified to true, then the result of the compare
    419       // is equal to "Cond || FCmp".
    420       if (match(TCmp, m_One()))
    421         if (Value *V = SimplifyOrInst(Cond, FCmp, TD, DT, MaxRecurse))
    422           return V;
    423       // Finally, if the false value simplified to true and the true value to
    424       // false, then the result of the compare is equal to "!Cond".
    425       if (match(FCmp, m_One()) && match(TCmp, m_Zero()))
    426         if (Value *V =
    427             SimplifyXorInst(Cond, Constant::getAllOnesValue(Cond->getType()),
    428                             TD, DT, MaxRecurse))
    429           return V;
    430     }
    431   }
    432 
    433   return 0;
    434 }
    435 
    436 /// ThreadBinOpOverPHI - In the case of a binary operation with an operand that
    437 /// is a PHI instruction, try to simplify the binop by seeing whether evaluating
    438 /// it on the incoming phi values yields the same result for every value.  If so
    439 /// returns the common value, otherwise returns null.
    440 static Value *ThreadBinOpOverPHI(unsigned Opcode, Value *LHS, Value *RHS,
    441                                  const TargetData *TD, const DominatorTree *DT,
    442                                  unsigned MaxRecurse) {
    443   // Recursion is always used, so bail out at once if we already hit the limit.
    444   if (!MaxRecurse--)
    445     return 0;
    446 
    447   PHINode *PI;
    448   if (isa<PHINode>(LHS)) {
    449     PI = cast<PHINode>(LHS);
    450     // Bail out if RHS and the phi may be mutually interdependent due to a loop.
    451     if (!ValueDominatesPHI(RHS, PI, DT))
    452       return 0;
    453   } else {
    454     assert(isa<PHINode>(RHS) && "No PHI instruction operand!");
    455     PI = cast<PHINode>(RHS);
    456     // Bail out if LHS and the phi may be mutually interdependent due to a loop.
    457     if (!ValueDominatesPHI(LHS, PI, DT))
    458       return 0;
    459   }
    460 
    461   // Evaluate the BinOp on the incoming phi values.
    462   Value *CommonValue = 0;
    463   for (unsigned i = 0, e = PI->getNumIncomingValues(); i != e; ++i) {
    464     Value *Incoming = PI->getIncomingValue(i);
    465     // If the incoming value is the phi node itself, it can safely be skipped.
    466     if (Incoming == PI) continue;
    467     Value *V = PI == LHS ?
    468       SimplifyBinOp(Opcode, Incoming, RHS, TD, DT, MaxRecurse) :
    469       SimplifyBinOp(Opcode, LHS, Incoming, TD, DT, MaxRecurse);
    470     // If the operation failed to simplify, or simplified to a different value
    471     // to previously, then give up.
    472     if (!V || (CommonValue && V != CommonValue))
    473       return 0;
    474     CommonValue = V;
    475   }
    476 
    477   return CommonValue;
    478 }
    479 
    480 /// ThreadCmpOverPHI - In the case of a comparison with a PHI instruction, try
    481 /// try to simplify the comparison by seeing whether comparing with all of the
    482 /// incoming phi values yields the same result every time.  If so returns the
    483 /// common result, otherwise returns null.
    484 static Value *ThreadCmpOverPHI(CmpInst::Predicate Pred, Value *LHS, Value *RHS,
    485                                const TargetData *TD, const DominatorTree *DT,
    486                                unsigned MaxRecurse) {
    487   // Recursion is always used, so bail out at once if we already hit the limit.
    488   if (!MaxRecurse--)
    489     return 0;
    490 
    491   // Make sure the phi is on the LHS.
    492   if (!isa<PHINode>(LHS)) {
    493     std::swap(LHS, RHS);
    494     Pred = CmpInst::getSwappedPredicate(Pred);
    495   }
    496   assert(isa<PHINode>(LHS) && "Not comparing with a phi instruction!");
    497   PHINode *PI = cast<PHINode>(LHS);
    498 
    499   // Bail out if RHS and the phi may be mutually interdependent due to a loop.
    500   if (!ValueDominatesPHI(RHS, PI, DT))
    501     return 0;
    502 
    503   // Evaluate the BinOp on the incoming phi values.
    504   Value *CommonValue = 0;
    505   for (unsigned i = 0, e = PI->getNumIncomingValues(); i != e; ++i) {
    506     Value *Incoming = PI->getIncomingValue(i);
    507     // If the incoming value is the phi node itself, it can safely be skipped.
    508     if (Incoming == PI) continue;
    509     Value *V = SimplifyCmpInst(Pred, Incoming, RHS, TD, DT, MaxRecurse);
    510     // If the operation failed to simplify, or simplified to a different value
    511     // to previously, then give up.
    512     if (!V || (CommonValue && V != CommonValue))
    513       return 0;
    514     CommonValue = V;
    515   }
    516 
    517   return CommonValue;
    518 }
    519 
    520 /// SimplifyAddInst - Given operands for an Add, see if we can
    521 /// fold the result.  If not, this returns null.
    522 static Value *SimplifyAddInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
    523                               const TargetData *TD, const DominatorTree *DT,
    524                               unsigned MaxRecurse) {
    525   if (Constant *CLHS = dyn_cast<Constant>(Op0)) {
    526     if (Constant *CRHS = dyn_cast<Constant>(Op1)) {
    527       Constant *Ops[] = { CLHS, CRHS };
    528       return ConstantFoldInstOperands(Instruction::Add, CLHS->getType(),
    529                                       Ops, TD);
    530     }
    531 
    532     // Canonicalize the constant to the RHS.
    533     std::swap(Op0, Op1);
    534   }
    535 
    536   // X + undef -> undef
    537   if (match(Op1, m_Undef()))
    538     return Op1;
    539 
    540   // X + 0 -> X
    541   if (match(Op1, m_Zero()))
    542     return Op0;
    543 
    544   // X + (Y - X) -> Y
    545   // (Y - X) + X -> Y
    546   // Eg: X + -X -> 0
    547   Value *Y = 0;
    548   if (match(Op1, m_Sub(m_Value(Y), m_Specific(Op0))) ||
    549       match(Op0, m_Sub(m_Value(Y), m_Specific(Op1))))
    550     return Y;
    551 
    552   // X + ~X -> -1   since   ~X = -X-1
    553   if (match(Op0, m_Not(m_Specific(Op1))) ||
    554       match(Op1, m_Not(m_Specific(Op0))))
    555     return Constant::getAllOnesValue(Op0->getType());
    556 
    557   /// i1 add -> xor.
    558   if (MaxRecurse && Op0->getType()->isIntegerTy(1))
    559     if (Value *V = SimplifyXorInst(Op0, Op1, TD, DT, MaxRecurse-1))
    560       return V;
    561 
    562   // Try some generic simplifications for associative operations.
    563   if (Value *V = SimplifyAssociativeBinOp(Instruction::Add, Op0, Op1, TD, DT,
    564                                           MaxRecurse))
    565     return V;
    566 
    567   // Mul distributes over Add.  Try some generic simplifications based on this.
    568   if (Value *V = FactorizeBinOp(Instruction::Add, Op0, Op1, Instruction::Mul,
    569                                 TD, DT, MaxRecurse))
    570     return V;
    571 
    572   // Threading Add over selects and phi nodes is pointless, so don't bother.
    573   // Threading over the select in "A + select(cond, B, C)" means evaluating
    574   // "A+B" and "A+C" and seeing if they are equal; but they are equal if and
    575   // only if B and C are equal.  If B and C are equal then (since we assume
    576   // that operands have already been simplified) "select(cond, B, C)" should
    577   // have been simplified to the common value of B and C already.  Analysing
    578   // "A+B" and "A+C" thus gains nothing, but costs compile time.  Similarly
    579   // for threading over phi nodes.
    580 
    581   return 0;
    582 }
    583 
    584 Value *llvm::SimplifyAddInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
    585                              const TargetData *TD, const DominatorTree *DT) {
    586   return ::SimplifyAddInst(Op0, Op1, isNSW, isNUW, TD, DT, RecursionLimit);
    587 }
    588 
    589 /// SimplifySubInst - Given operands for a Sub, see if we can
    590 /// fold the result.  If not, this returns null.
    591 static Value *SimplifySubInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
    592                               const TargetData *TD, const DominatorTree *DT,
    593                               unsigned MaxRecurse) {
    594   if (Constant *CLHS = dyn_cast<Constant>(Op0))
    595     if (Constant *CRHS = dyn_cast<Constant>(Op1)) {
    596       Constant *Ops[] = { CLHS, CRHS };
    597       return ConstantFoldInstOperands(Instruction::Sub, CLHS->getType(),
    598                                       Ops, TD);
    599     }
    600 
    601   // X - undef -> undef
    602   // undef - X -> undef
    603   if (match(Op0, m_Undef()) || match(Op1, m_Undef()))
    604     return UndefValue::get(Op0->getType());
    605 
    606   // X - 0 -> X
    607   if (match(Op1, m_Zero()))
    608     return Op0;
    609 
    610   // X - X -> 0
    611   if (Op0 == Op1)
    612     return Constant::getNullValue(Op0->getType());
    613 
    614   // (X*2) - X -> X
    615   // (X<<1) - X -> X
    616   Value *X = 0;
    617   if (match(Op0, m_Mul(m_Specific(Op1), m_ConstantInt<2>())) ||
    618       match(Op0, m_Shl(m_Specific(Op1), m_One())))
    619     return Op1;
    620 
    621   // (X + Y) - Z -> X + (Y - Z) or Y + (X - Z) if everything simplifies.
    622   // For example, (X + Y) - Y -> X; (Y + X) - Y -> X
    623   Value *Y = 0, *Z = Op1;
    624   if (MaxRecurse && match(Op0, m_Add(m_Value(X), m_Value(Y)))) { // (X + Y) - Z
    625     // See if "V === Y - Z" simplifies.
    626     if (Value *V = SimplifyBinOp(Instruction::Sub, Y, Z, TD, DT, MaxRecurse-1))
    627       // It does!  Now see if "X + V" simplifies.
    628       if (Value *W = SimplifyBinOp(Instruction::Add, X, V, TD, DT,
    629                                    MaxRecurse-1)) {
    630         // It does, we successfully reassociated!
    631         ++NumReassoc;
    632         return W;
    633       }
    634     // See if "V === X - Z" simplifies.
    635     if (Value *V = SimplifyBinOp(Instruction::Sub, X, Z, TD, DT, MaxRecurse-1))
    636       // It does!  Now see if "Y + V" simplifies.
    637       if (Value *W = SimplifyBinOp(Instruction::Add, Y, V, TD, DT,
    638                                    MaxRecurse-1)) {
    639         // It does, we successfully reassociated!
    640         ++NumReassoc;
    641         return W;
    642       }
    643   }
    644 
    645   // X - (Y + Z) -> (X - Y) - Z or (X - Z) - Y if everything simplifies.
    646   // For example, X - (X + 1) -> -1
    647   X = Op0;
    648   if (MaxRecurse && match(Op1, m_Add(m_Value(Y), m_Value(Z)))) { // X - (Y + Z)
    649     // See if "V === X - Y" simplifies.
    650     if (Value *V = SimplifyBinOp(Instruction::Sub, X, Y, TD, DT, MaxRecurse-1))
    651       // It does!  Now see if "V - Z" simplifies.
    652       if (Value *W = SimplifyBinOp(Instruction::Sub, V, Z, TD, DT,
    653                                    MaxRecurse-1)) {
    654         // It does, we successfully reassociated!
    655         ++NumReassoc;
    656         return W;
    657       }
    658     // See if "V === X - Z" simplifies.
    659     if (Value *V = SimplifyBinOp(Instruction::Sub, X, Z, TD, DT, MaxRecurse-1))
    660       // It does!  Now see if "V - Y" simplifies.
    661       if (Value *W = SimplifyBinOp(Instruction::Sub, V, Y, TD, DT,
    662                                    MaxRecurse-1)) {
    663         // It does, we successfully reassociated!
    664         ++NumReassoc;
    665         return W;
    666       }
    667   }
    668 
    669   // Z - (X - Y) -> (Z - X) + Y if everything simplifies.
    670   // For example, X - (X - Y) -> Y.
    671   Z = Op0;
    672   if (MaxRecurse && match(Op1, m_Sub(m_Value(X), m_Value(Y)))) // Z - (X - Y)
    673     // See if "V === Z - X" simplifies.
    674     if (Value *V = SimplifyBinOp(Instruction::Sub, Z, X, TD, DT, MaxRecurse-1))
    675       // It does!  Now see if "V + Y" simplifies.
    676       if (Value *W = SimplifyBinOp(Instruction::Add, V, Y, TD, DT,
    677                                    MaxRecurse-1)) {
    678         // It does, we successfully reassociated!
    679         ++NumReassoc;
    680         return W;
    681       }
    682 
    683   // Mul distributes over Sub.  Try some generic simplifications based on this.
    684   if (Value *V = FactorizeBinOp(Instruction::Sub, Op0, Op1, Instruction::Mul,
    685                                 TD, DT, MaxRecurse))
    686     return V;
    687 
    688   // i1 sub -> xor.
    689   if (MaxRecurse && Op0->getType()->isIntegerTy(1))
    690     if (Value *V = SimplifyXorInst(Op0, Op1, TD, DT, MaxRecurse-1))
    691       return V;
    692 
    693   // Threading Sub over selects and phi nodes is pointless, so don't bother.
    694   // Threading over the select in "A - select(cond, B, C)" means evaluating
    695   // "A-B" and "A-C" and seeing if they are equal; but they are equal if and
    696   // only if B and C are equal.  If B and C are equal then (since we assume
    697   // that operands have already been simplified) "select(cond, B, C)" should
    698   // have been simplified to the common value of B and C already.  Analysing
    699   // "A-B" and "A-C" thus gains nothing, but costs compile time.  Similarly
    700   // for threading over phi nodes.
    701 
    702   return 0;
    703 }
    704 
    705 Value *llvm::SimplifySubInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
    706                              const TargetData *TD, const DominatorTree *DT) {
    707   return ::SimplifySubInst(Op0, Op1, isNSW, isNUW, TD, DT, RecursionLimit);
    708 }
    709 
    710 /// SimplifyMulInst - Given operands for a Mul, see if we can
    711 /// fold the result.  If not, this returns null.
    712 static Value *SimplifyMulInst(Value *Op0, Value *Op1, const TargetData *TD,
    713                               const DominatorTree *DT, unsigned MaxRecurse) {
    714   if (Constant *CLHS = dyn_cast<Constant>(Op0)) {
    715     if (Constant *CRHS = dyn_cast<Constant>(Op1)) {
    716       Constant *Ops[] = { CLHS, CRHS };
    717       return ConstantFoldInstOperands(Instruction::Mul, CLHS->getType(),
    718                                       Ops, TD);
    719     }
    720 
    721     // Canonicalize the constant to the RHS.
    722     std::swap(Op0, Op1);
    723   }
    724 
    725   // X * undef -> 0
    726   if (match(Op1, m_Undef()))
    727     return Constant::getNullValue(Op0->getType());
    728 
    729   // X * 0 -> 0
    730   if (match(Op1, m_Zero()))
    731     return Op1;
    732 
    733   // X * 1 -> X
    734   if (match(Op1, m_One()))
    735     return Op0;
    736 
    737   // (X / Y) * Y -> X if the division is exact.
    738   Value *X = 0, *Y = 0;
    739   if ((match(Op0, m_IDiv(m_Value(X), m_Value(Y))) && Y == Op1) || // (X / Y) * Y
    740       (match(Op1, m_IDiv(m_Value(X), m_Value(Y))) && Y == Op0)) { // Y * (X / Y)
    741     BinaryOperator *Div = cast<BinaryOperator>(Y == Op1 ? Op0 : Op1);
    742     if (Div->isExact())
    743       return X;
    744   }
    745 
    746   // i1 mul -> and.
    747   if (MaxRecurse && Op0->getType()->isIntegerTy(1))
    748     if (Value *V = SimplifyAndInst(Op0, Op1, TD, DT, MaxRecurse-1))
    749       return V;
    750 
    751   // Try some generic simplifications for associative operations.
    752   if (Value *V = SimplifyAssociativeBinOp(Instruction::Mul, Op0, Op1, TD, DT,
    753                                           MaxRecurse))
    754     return V;
    755 
    756   // Mul distributes over Add.  Try some generic simplifications based on this.
    757   if (Value *V = ExpandBinOp(Instruction::Mul, Op0, Op1, Instruction::Add,
    758                              TD, DT, MaxRecurse))
    759     return V;
    760 
    761   // If the operation is with the result of a select instruction, check whether
    762   // operating on either branch of the select always yields the same value.
    763   if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
    764     if (Value *V = ThreadBinOpOverSelect(Instruction::Mul, Op0, Op1, TD, DT,
    765                                          MaxRecurse))
    766       return V;
    767 
    768   // If the operation is with the result of a phi instruction, check whether
    769   // operating on all incoming values of the phi always yields the same value.
    770   if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
    771     if (Value *V = ThreadBinOpOverPHI(Instruction::Mul, Op0, Op1, TD, DT,
    772                                       MaxRecurse))
    773       return V;
    774 
    775   return 0;
    776 }
    777 
    778 Value *llvm::SimplifyMulInst(Value *Op0, Value *Op1, const TargetData *TD,
    779                              const DominatorTree *DT) {
    780   return ::SimplifyMulInst(Op0, Op1, TD, DT, RecursionLimit);
    781 }
    782 
    783 /// SimplifyDiv - Given operands for an SDiv or UDiv, see if we can
    784 /// fold the result.  If not, this returns null.
    785 static Value *SimplifyDiv(Instruction::BinaryOps Opcode, Value *Op0, Value *Op1,
    786                           const TargetData *TD, const DominatorTree *DT,
    787                           unsigned MaxRecurse) {
    788   if (Constant *C0 = dyn_cast<Constant>(Op0)) {
    789     if (Constant *C1 = dyn_cast<Constant>(Op1)) {
    790       Constant *Ops[] = { C0, C1 };
    791       return ConstantFoldInstOperands(Opcode, C0->getType(), Ops, TD);
    792     }
    793   }
    794 
    795   bool isSigned = Opcode == Instruction::SDiv;
    796 
    797   // X / undef -> undef
    798   if (match(Op1, m_Undef()))
    799     return Op1;
    800 
    801   // undef / X -> 0
    802   if (match(Op0, m_Undef()))
    803     return Constant::getNullValue(Op0->getType());
    804 
    805   // 0 / X -> 0, we don't need to preserve faults!
    806   if (match(Op0, m_Zero()))
    807     return Op0;
    808 
    809   // X / 1 -> X
    810   if (match(Op1, m_One()))
    811     return Op0;
    812 
    813   if (Op0->getType()->isIntegerTy(1))
    814     // It can't be division by zero, hence it must be division by one.
    815     return Op0;
    816 
    817   // X / X -> 1
    818   if (Op0 == Op1)
    819     return ConstantInt::get(Op0->getType(), 1);
    820 
    821   // (X * Y) / Y -> X if the multiplication does not overflow.
    822   Value *X = 0, *Y = 0;
    823   if (match(Op0, m_Mul(m_Value(X), m_Value(Y))) && (X == Op1 || Y == Op1)) {
    824     if (Y != Op1) std::swap(X, Y); // Ensure expression is (X * Y) / Y, Y = Op1
    825     BinaryOperator *Mul = cast<BinaryOperator>(Op0);
    826     // If the Mul knows it does not overflow, then we are good to go.
    827     if ((isSigned && Mul->hasNoSignedWrap()) ||
    828         (!isSigned && Mul->hasNoUnsignedWrap()))
    829       return X;
    830     // If X has the form X = A / Y then X * Y cannot overflow.
    831     if (BinaryOperator *Div = dyn_cast<BinaryOperator>(X))
    832       if (Div->getOpcode() == Opcode && Div->getOperand(1) == Y)
    833         return X;
    834   }
    835 
    836   // (X rem Y) / Y -> 0
    837   if ((isSigned && match(Op0, m_SRem(m_Value(), m_Specific(Op1)))) ||
    838       (!isSigned && match(Op0, m_URem(m_Value(), m_Specific(Op1)))))
    839     return Constant::getNullValue(Op0->getType());
    840 
    841   // If the operation is with the result of a select instruction, check whether
    842   // operating on either branch of the select always yields the same value.
    843   if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
    844     if (Value *V = ThreadBinOpOverSelect(Opcode, Op0, Op1, TD, DT, MaxRecurse))
    845       return V;
    846 
    847   // If the operation is with the result of a phi instruction, check whether
    848   // operating on all incoming values of the phi always yields the same value.
    849   if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
    850     if (Value *V = ThreadBinOpOverPHI(Opcode, Op0, Op1, TD, DT, MaxRecurse))
    851       return V;
    852 
    853   return 0;
    854 }
    855 
    856 /// SimplifySDivInst - Given operands for an SDiv, see if we can
    857 /// fold the result.  If not, this returns null.
    858 static Value *SimplifySDivInst(Value *Op0, Value *Op1, const TargetData *TD,
    859                                const DominatorTree *DT, unsigned MaxRecurse) {
    860   if (Value *V = SimplifyDiv(Instruction::SDiv, Op0, Op1, TD, DT, MaxRecurse))
    861     return V;
    862 
    863   return 0;
    864 }
    865 
    866 Value *llvm::SimplifySDivInst(Value *Op0, Value *Op1, const TargetData *TD,
    867                               const DominatorTree *DT) {
    868   return ::SimplifySDivInst(Op0, Op1, TD, DT, RecursionLimit);
    869 }
    870 
    871 /// SimplifyUDivInst - Given operands for a UDiv, see if we can
    872 /// fold the result.  If not, this returns null.
    873 static Value *SimplifyUDivInst(Value *Op0, Value *Op1, const TargetData *TD,
    874                                const DominatorTree *DT, unsigned MaxRecurse) {
    875   if (Value *V = SimplifyDiv(Instruction::UDiv, Op0, Op1, TD, DT, MaxRecurse))
    876     return V;
    877 
    878   return 0;
    879 }
    880 
    881 Value *llvm::SimplifyUDivInst(Value *Op0, Value *Op1, const TargetData *TD,
    882                               const DominatorTree *DT) {
    883   return ::SimplifyUDivInst(Op0, Op1, TD, DT, RecursionLimit);
    884 }
    885 
    886 static Value *SimplifyFDivInst(Value *Op0, Value *Op1, const TargetData *,
    887                                const DominatorTree *, unsigned) {
    888   // undef / X -> undef    (the undef could be a snan).
    889   if (match(Op0, m_Undef()))
    890     return Op0;
    891 
    892   // X / undef -> undef
    893   if (match(Op1, m_Undef()))
    894     return Op1;
    895 
    896   return 0;
    897 }
    898 
    899 Value *llvm::SimplifyFDivInst(Value *Op0, Value *Op1, const TargetData *TD,
    900                               const DominatorTree *DT) {
    901   return ::SimplifyFDivInst(Op0, Op1, TD, DT, RecursionLimit);
    902 }
    903 
    904 /// SimplifyRem - Given operands for an SRem or URem, see if we can
    905 /// fold the result.  If not, this returns null.
    906 static Value *SimplifyRem(Instruction::BinaryOps Opcode, Value *Op0, Value *Op1,
    907                           const TargetData *TD, const DominatorTree *DT,
    908                           unsigned MaxRecurse) {
    909   if (Constant *C0 = dyn_cast<Constant>(Op0)) {
    910     if (Constant *C1 = dyn_cast<Constant>(Op1)) {
    911       Constant *Ops[] = { C0, C1 };
    912       return ConstantFoldInstOperands(Opcode, C0->getType(), Ops, TD);
    913     }
    914   }
    915 
    916   // X % undef -> undef
    917   if (match(Op1, m_Undef()))
    918     return Op1;
    919 
    920   // undef % X -> 0
    921   if (match(Op0, m_Undef()))
    922     return Constant::getNullValue(Op0->getType());
    923 
    924   // 0 % X -> 0, we don't need to preserve faults!
    925   if (match(Op0, m_Zero()))
    926     return Op0;
    927 
    928   // X % 0 -> undef, we don't need to preserve faults!
    929   if (match(Op1, m_Zero()))
    930     return UndefValue::get(Op0->getType());
    931 
    932   // X % 1 -> 0
    933   if (match(Op1, m_One()))
    934     return Constant::getNullValue(Op0->getType());
    935 
    936   if (Op0->getType()->isIntegerTy(1))
    937     // It can't be remainder by zero, hence it must be remainder by one.
    938     return Constant::getNullValue(Op0->getType());
    939 
    940   // X % X -> 0
    941   if (Op0 == Op1)
    942     return Constant::getNullValue(Op0->getType());
    943 
    944   // If the operation is with the result of a select instruction, check whether
    945   // operating on either branch of the select always yields the same value.
    946   if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
    947     if (Value *V = ThreadBinOpOverSelect(Opcode, Op0, Op1, TD, DT, MaxRecurse))
    948       return V;
    949 
    950   // If the operation is with the result of a phi instruction, check whether
    951   // operating on all incoming values of the phi always yields the same value.
    952   if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
    953     if (Value *V = ThreadBinOpOverPHI(Opcode, Op0, Op1, TD, DT, MaxRecurse))
    954       return V;
    955 
    956   return 0;
    957 }
    958 
    959 /// SimplifySRemInst - Given operands for an SRem, see if we can
    960 /// fold the result.  If not, this returns null.
    961 static Value *SimplifySRemInst(Value *Op0, Value *Op1, const TargetData *TD,
    962                                const DominatorTree *DT, unsigned MaxRecurse) {
    963   if (Value *V = SimplifyRem(Instruction::SRem, Op0, Op1, TD, DT, MaxRecurse))
    964     return V;
    965 
    966   return 0;
    967 }
    968 
    969 Value *llvm::SimplifySRemInst(Value *Op0, Value *Op1, const TargetData *TD,
    970                               const DominatorTree *DT) {
    971   return ::SimplifySRemInst(Op0, Op1, TD, DT, RecursionLimit);
    972 }
    973 
    974 /// SimplifyURemInst - Given operands for a URem, see if we can
    975 /// fold the result.  If not, this returns null.
    976 static Value *SimplifyURemInst(Value *Op0, Value *Op1, const TargetData *TD,
    977                                const DominatorTree *DT, unsigned MaxRecurse) {
    978   if (Value *V = SimplifyRem(Instruction::URem, Op0, Op1, TD, DT, MaxRecurse))
    979     return V;
    980 
    981   return 0;
    982 }
    983 
    984 Value *llvm::SimplifyURemInst(Value *Op0, Value *Op1, const TargetData *TD,
    985                               const DominatorTree *DT) {
    986   return ::SimplifyURemInst(Op0, Op1, TD, DT, RecursionLimit);
    987 }
    988 
    989 static Value *SimplifyFRemInst(Value *Op0, Value *Op1, const TargetData *,
    990                                const DominatorTree *, unsigned) {
    991   // undef % X -> undef    (the undef could be a snan).
    992   if (match(Op0, m_Undef()))
    993     return Op0;
    994 
    995   // X % undef -> undef
    996   if (match(Op1, m_Undef()))
    997     return Op1;
    998 
    999   return 0;
   1000 }
   1001 
   1002 Value *llvm::SimplifyFRemInst(Value *Op0, Value *Op1, const TargetData *TD,
   1003                               const DominatorTree *DT) {
   1004   return ::SimplifyFRemInst(Op0, Op1, TD, DT, RecursionLimit);
   1005 }
   1006 
   1007 /// SimplifyShift - Given operands for an Shl, LShr or AShr, see if we can
   1008 /// fold the result.  If not, this returns null.
   1009 static Value *SimplifyShift(unsigned Opcode, Value *Op0, Value *Op1,
   1010                             const TargetData *TD, const DominatorTree *DT,
   1011                             unsigned MaxRecurse) {
   1012   if (Constant *C0 = dyn_cast<Constant>(Op0)) {
   1013     if (Constant *C1 = dyn_cast<Constant>(Op1)) {
   1014       Constant *Ops[] = { C0, C1 };
   1015       return ConstantFoldInstOperands(Opcode, C0->getType(), Ops, TD);
   1016     }
   1017   }
   1018 
   1019   // 0 shift by X -> 0
   1020   if (match(Op0, m_Zero()))
   1021     return Op0;
   1022 
   1023   // X shift by 0 -> X
   1024   if (match(Op1, m_Zero()))
   1025     return Op0;
   1026 
   1027   // X shift by undef -> undef because it may shift by the bitwidth.
   1028   if (match(Op1, m_Undef()))
   1029     return Op1;
   1030 
   1031   // Shifting by the bitwidth or more is undefined.
   1032   if (ConstantInt *CI = dyn_cast<ConstantInt>(Op1))
   1033     if (CI->getValue().getLimitedValue() >=
   1034         Op0->getType()->getScalarSizeInBits())
   1035       return UndefValue::get(Op0->getType());
   1036 
   1037   // If the operation is with the result of a select instruction, check whether
   1038   // operating on either branch of the select always yields the same value.
   1039   if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
   1040     if (Value *V = ThreadBinOpOverSelect(Opcode, Op0, Op1, TD, DT, MaxRecurse))
   1041       return V;
   1042 
   1043   // If the operation is with the result of a phi instruction, check whether
   1044   // operating on all incoming values of the phi always yields the same value.
   1045   if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
   1046     if (Value *V = ThreadBinOpOverPHI(Opcode, Op0, Op1, TD, DT, MaxRecurse))
   1047       return V;
   1048 
   1049   return 0;
   1050 }
   1051 
   1052 /// SimplifyShlInst - Given operands for an Shl, see if we can
   1053 /// fold the result.  If not, this returns null.
   1054 static Value *SimplifyShlInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
   1055                               const TargetData *TD, const DominatorTree *DT,
   1056                               unsigned MaxRecurse) {
   1057   if (Value *V = SimplifyShift(Instruction::Shl, Op0, Op1, TD, DT, MaxRecurse))
   1058     return V;
   1059 
   1060   // undef << X -> 0
   1061   if (match(Op0, m_Undef()))
   1062     return Constant::getNullValue(Op0->getType());
   1063 
   1064   // (X >> A) << A -> X
   1065   Value *X;
   1066   if (match(Op0, m_Shr(m_Value(X), m_Specific(Op1))) &&
   1067       cast<PossiblyExactOperator>(Op0)->isExact())
   1068     return X;
   1069   return 0;
   1070 }
   1071 
   1072 Value *llvm::SimplifyShlInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
   1073                              const TargetData *TD, const DominatorTree *DT) {
   1074   return ::SimplifyShlInst(Op0, Op1, isNSW, isNUW, TD, DT, RecursionLimit);
   1075 }
   1076 
   1077 /// SimplifyLShrInst - Given operands for an LShr, see if we can
   1078 /// fold the result.  If not, this returns null.
   1079 static Value *SimplifyLShrInst(Value *Op0, Value *Op1, bool isExact,
   1080                                const TargetData *TD, const DominatorTree *DT,
   1081                                unsigned MaxRecurse) {
   1082   if (Value *V = SimplifyShift(Instruction::LShr, Op0, Op1, TD, DT, MaxRecurse))
   1083     return V;
   1084 
   1085   // undef >>l X -> 0
   1086   if (match(Op0, m_Undef()))
   1087     return Constant::getNullValue(Op0->getType());
   1088 
   1089   // (X << A) >> A -> X
   1090   Value *X;
   1091   if (match(Op0, m_Shl(m_Value(X), m_Specific(Op1))) &&
   1092       cast<OverflowingBinaryOperator>(Op0)->hasNoUnsignedWrap())
   1093     return X;
   1094 
   1095   return 0;
   1096 }
   1097 
   1098 Value *llvm::SimplifyLShrInst(Value *Op0, Value *Op1, bool isExact,
   1099                               const TargetData *TD, const DominatorTree *DT) {
   1100   return ::SimplifyLShrInst(Op0, Op1, isExact, TD, DT, RecursionLimit);
   1101 }
   1102 
   1103 /// SimplifyAShrInst - Given operands for an AShr, see if we can
   1104 /// fold the result.  If not, this returns null.
   1105 static Value *SimplifyAShrInst(Value *Op0, Value *Op1, bool isExact,
   1106                                const TargetData *TD, const DominatorTree *DT,
   1107                                unsigned MaxRecurse) {
   1108   if (Value *V = SimplifyShift(Instruction::AShr, Op0, Op1, TD, DT, MaxRecurse))
   1109     return V;
   1110 
   1111   // all ones >>a X -> all ones
   1112   if (match(Op0, m_AllOnes()))
   1113     return Op0;
   1114 
   1115   // undef >>a X -> all ones
   1116   if (match(Op0, m_Undef()))
   1117     return Constant::getAllOnesValue(Op0->getType());
   1118 
   1119   // (X << A) >> A -> X
   1120   Value *X;
   1121   if (match(Op0, m_Shl(m_Value(X), m_Specific(Op1))) &&
   1122       cast<OverflowingBinaryOperator>(Op0)->hasNoSignedWrap())
   1123     return X;
   1124 
   1125   return 0;
   1126 }
   1127 
   1128 Value *llvm::SimplifyAShrInst(Value *Op0, Value *Op1, bool isExact,
   1129                               const TargetData *TD, const DominatorTree *DT) {
   1130   return ::SimplifyAShrInst(Op0, Op1, isExact, TD, DT, RecursionLimit);
   1131 }
   1132 
   1133 /// SimplifyAndInst - Given operands for an And, see if we can
   1134 /// fold the result.  If not, this returns null.
   1135 static Value *SimplifyAndInst(Value *Op0, Value *Op1, const TargetData *TD,
   1136                               const DominatorTree *DT, unsigned MaxRecurse) {
   1137   if (Constant *CLHS = dyn_cast<Constant>(Op0)) {
   1138     if (Constant *CRHS = dyn_cast<Constant>(Op1)) {
   1139       Constant *Ops[] = { CLHS, CRHS };
   1140       return ConstantFoldInstOperands(Instruction::And, CLHS->getType(),
   1141                                       Ops, TD);
   1142     }
   1143 
   1144     // Canonicalize the constant to the RHS.
   1145     std::swap(Op0, Op1);
   1146   }
   1147 
   1148   // X & undef -> 0
   1149   if (match(Op1, m_Undef()))
   1150     return Constant::getNullValue(Op0->getType());
   1151 
   1152   // X & X = X
   1153   if (Op0 == Op1)
   1154     return Op0;
   1155 
   1156   // X & 0 = 0
   1157   if (match(Op1, m_Zero()))
   1158     return Op1;
   1159 
   1160   // X & -1 = X
   1161   if (match(Op1, m_AllOnes()))
   1162     return Op0;
   1163 
   1164   // A & ~A  =  ~A & A  =  0
   1165   if (match(Op0, m_Not(m_Specific(Op1))) ||
   1166       match(Op1, m_Not(m_Specific(Op0))))
   1167     return Constant::getNullValue(Op0->getType());
   1168 
   1169   // (A | ?) & A = A
   1170   Value *A = 0, *B = 0;
   1171   if (match(Op0, m_Or(m_Value(A), m_Value(B))) &&
   1172       (A == Op1 || B == Op1))
   1173     return Op1;
   1174 
   1175   // A & (A | ?) = A
   1176   if (match(Op1, m_Or(m_Value(A), m_Value(B))) &&
   1177       (A == Op0 || B == Op0))
   1178     return Op0;
   1179 
   1180   // Try some generic simplifications for associative operations.
   1181   if (Value *V = SimplifyAssociativeBinOp(Instruction::And, Op0, Op1, TD, DT,
   1182                                           MaxRecurse))
   1183     return V;
   1184 
   1185   // And distributes over Or.  Try some generic simplifications based on this.
   1186   if (Value *V = ExpandBinOp(Instruction::And, Op0, Op1, Instruction::Or,
   1187                              TD, DT, MaxRecurse))
   1188     return V;
   1189 
   1190   // And distributes over Xor.  Try some generic simplifications based on this.
   1191   if (Value *V = ExpandBinOp(Instruction::And, Op0, Op1, Instruction::Xor,
   1192                              TD, DT, MaxRecurse))
   1193     return V;
   1194 
   1195   // Or distributes over And.  Try some generic simplifications based on this.
   1196   if (Value *V = FactorizeBinOp(Instruction::And, Op0, Op1, Instruction::Or,
   1197                                 TD, DT, MaxRecurse))
   1198     return V;
   1199 
   1200   // If the operation is with the result of a select instruction, check whether
   1201   // operating on either branch of the select always yields the same value.
   1202   if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
   1203     if (Value *V = ThreadBinOpOverSelect(Instruction::And, Op0, Op1, TD, DT,
   1204                                          MaxRecurse))
   1205       return V;
   1206 
   1207   // If the operation is with the result of a phi instruction, check whether
   1208   // operating on all incoming values of the phi always yields the same value.
   1209   if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
   1210     if (Value *V = ThreadBinOpOverPHI(Instruction::And, Op0, Op1, TD, DT,
   1211                                       MaxRecurse))
   1212       return V;
   1213 
   1214   return 0;
   1215 }
   1216 
   1217 Value *llvm::SimplifyAndInst(Value *Op0, Value *Op1, const TargetData *TD,
   1218                              const DominatorTree *DT) {
   1219   return ::SimplifyAndInst(Op0, Op1, TD, DT, RecursionLimit);
   1220 }
   1221 
   1222 /// SimplifyOrInst - Given operands for an Or, see if we can
   1223 /// fold the result.  If not, this returns null.
   1224 static Value *SimplifyOrInst(Value *Op0, Value *Op1, const TargetData *TD,
   1225                              const DominatorTree *DT, unsigned MaxRecurse) {
   1226   if (Constant *CLHS = dyn_cast<Constant>(Op0)) {
   1227     if (Constant *CRHS = dyn_cast<Constant>(Op1)) {
   1228       Constant *Ops[] = { CLHS, CRHS };
   1229       return ConstantFoldInstOperands(Instruction::Or, CLHS->getType(),
   1230                                       Ops, TD);
   1231     }
   1232 
   1233     // Canonicalize the constant to the RHS.
   1234     std::swap(Op0, Op1);
   1235   }
   1236 
   1237   // X | undef -> -1
   1238   if (match(Op1, m_Undef()))
   1239     return Constant::getAllOnesValue(Op0->getType());
   1240 
   1241   // X | X = X
   1242   if (Op0 == Op1)
   1243     return Op0;
   1244 
   1245   // X | 0 = X
   1246   if (match(Op1, m_Zero()))
   1247     return Op0;
   1248 
   1249   // X | -1 = -1
   1250   if (match(Op1, m_AllOnes()))
   1251     return Op1;
   1252 
   1253   // A | ~A  =  ~A | A  =  -1
   1254   if (match(Op0, m_Not(m_Specific(Op1))) ||
   1255       match(Op1, m_Not(m_Specific(Op0))))
   1256     return Constant::getAllOnesValue(Op0->getType());
   1257 
   1258   // (A & ?) | A = A
   1259   Value *A = 0, *B = 0;
   1260   if (match(Op0, m_And(m_Value(A), m_Value(B))) &&
   1261       (A == Op1 || B == Op1))
   1262     return Op1;
   1263 
   1264   // A | (A & ?) = A
   1265   if (match(Op1, m_And(m_Value(A), m_Value(B))) &&
   1266       (A == Op0 || B == Op0))
   1267     return Op0;
   1268 
   1269   // ~(A & ?) | A = -1
   1270   if (match(Op0, m_Not(m_And(m_Value(A), m_Value(B)))) &&
   1271       (A == Op1 || B == Op1))
   1272     return Constant::getAllOnesValue(Op1->getType());
   1273 
   1274   // A | ~(A & ?) = -1
   1275   if (match(Op1, m_Not(m_And(m_Value(A), m_Value(B)))) &&
   1276       (A == Op0 || B == Op0))
   1277     return Constant::getAllOnesValue(Op0->getType());
   1278 
   1279   // Try some generic simplifications for associative operations.
   1280   if (Value *V = SimplifyAssociativeBinOp(Instruction::Or, Op0, Op1, TD, DT,
   1281                                           MaxRecurse))
   1282     return V;
   1283 
   1284   // Or distributes over And.  Try some generic simplifications based on this.
   1285   if (Value *V = ExpandBinOp(Instruction::Or, Op0, Op1, Instruction::And,
   1286                              TD, DT, MaxRecurse))
   1287     return V;
   1288 
   1289   // And distributes over Or.  Try some generic simplifications based on this.
   1290   if (Value *V = FactorizeBinOp(Instruction::Or, Op0, Op1, Instruction::And,
   1291                                 TD, DT, MaxRecurse))
   1292     return V;
   1293 
   1294   // If the operation is with the result of a select instruction, check whether
   1295   // operating on either branch of the select always yields the same value.
   1296   if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
   1297     if (Value *V = ThreadBinOpOverSelect(Instruction::Or, Op0, Op1, TD, DT,
   1298                                          MaxRecurse))
   1299       return V;
   1300 
   1301   // If the operation is with the result of a phi instruction, check whether
   1302   // operating on all incoming values of the phi always yields the same value.
   1303   if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
   1304     if (Value *V = ThreadBinOpOverPHI(Instruction::Or, Op0, Op1, TD, DT,
   1305                                       MaxRecurse))
   1306       return V;
   1307 
   1308   return 0;
   1309 }
   1310 
   1311 Value *llvm::SimplifyOrInst(Value *Op0, Value *Op1, const TargetData *TD,
   1312                             const DominatorTree *DT) {
   1313   return ::SimplifyOrInst(Op0, Op1, TD, DT, RecursionLimit);
   1314 }
   1315 
   1316 /// SimplifyXorInst - Given operands for a Xor, see if we can
   1317 /// fold the result.  If not, this returns null.
   1318 static Value *SimplifyXorInst(Value *Op0, Value *Op1, const TargetData *TD,
   1319                               const DominatorTree *DT, unsigned MaxRecurse) {
   1320   if (Constant *CLHS = dyn_cast<Constant>(Op0)) {
   1321     if (Constant *CRHS = dyn_cast<Constant>(Op1)) {
   1322       Constant *Ops[] = { CLHS, CRHS };
   1323       return ConstantFoldInstOperands(Instruction::Xor, CLHS->getType(),
   1324                                       Ops, TD);
   1325     }
   1326 
   1327     // Canonicalize the constant to the RHS.
   1328     std::swap(Op0, Op1);
   1329   }
   1330 
   1331   // A ^ undef -> undef
   1332   if (match(Op1, m_Undef()))
   1333     return Op1;
   1334 
   1335   // A ^ 0 = A
   1336   if (match(Op1, m_Zero()))
   1337     return Op0;
   1338 
   1339   // A ^ A = 0
   1340   if (Op0 == Op1)
   1341     return Constant::getNullValue(Op0->getType());
   1342 
   1343   // A ^ ~A  =  ~A ^ A  =  -1
   1344   if (match(Op0, m_Not(m_Specific(Op1))) ||
   1345       match(Op1, m_Not(m_Specific(Op0))))
   1346     return Constant::getAllOnesValue(Op0->getType());
   1347 
   1348   // Try some generic simplifications for associative operations.
   1349   if (Value *V = SimplifyAssociativeBinOp(Instruction::Xor, Op0, Op1, TD, DT,
   1350                                           MaxRecurse))
   1351     return V;
   1352 
   1353   // And distributes over Xor.  Try some generic simplifications based on this.
   1354   if (Value *V = FactorizeBinOp(Instruction::Xor, Op0, Op1, Instruction::And,
   1355                                 TD, DT, MaxRecurse))
   1356     return V;
   1357 
   1358   // Threading Xor over selects and phi nodes is pointless, so don't bother.
   1359   // Threading over the select in "A ^ select(cond, B, C)" means evaluating
   1360   // "A^B" and "A^C" and seeing if they are equal; but they are equal if and
   1361   // only if B and C are equal.  If B and C are equal then (since we assume
   1362   // that operands have already been simplified) "select(cond, B, C)" should
   1363   // have been simplified to the common value of B and C already.  Analysing
   1364   // "A^B" and "A^C" thus gains nothing, but costs compile time.  Similarly
   1365   // for threading over phi nodes.
   1366 
   1367   return 0;
   1368 }
   1369 
   1370 Value *llvm::SimplifyXorInst(Value *Op0, Value *Op1, const TargetData *TD,
   1371                              const DominatorTree *DT) {
   1372   return ::SimplifyXorInst(Op0, Op1, TD, DT, RecursionLimit);
   1373 }
   1374 
   1375 static Type *GetCompareTy(Value *Op) {
   1376   return CmpInst::makeCmpResultType(Op->getType());
   1377 }
   1378 
   1379 /// ExtractEquivalentCondition - Rummage around inside V looking for something
   1380 /// equivalent to the comparison "LHS Pred RHS".  Return such a value if found,
   1381 /// otherwise return null.  Helper function for analyzing max/min idioms.
   1382 static Value *ExtractEquivalentCondition(Value *V, CmpInst::Predicate Pred,
   1383                                          Value *LHS, Value *RHS) {
   1384   SelectInst *SI = dyn_cast<SelectInst>(V);
   1385   if (!SI)
   1386     return 0;
   1387   CmpInst *Cmp = dyn_cast<CmpInst>(SI->getCondition());
   1388   if (!Cmp)
   1389     return 0;
   1390   Value *CmpLHS = Cmp->getOperand(0), *CmpRHS = Cmp->getOperand(1);
   1391   if (Pred == Cmp->getPredicate() && LHS == CmpLHS && RHS == CmpRHS)
   1392     return Cmp;
   1393   if (Pred == CmpInst::getSwappedPredicate(Cmp->getPredicate()) &&
   1394       LHS == CmpRHS && RHS == CmpLHS)
   1395     return Cmp;
   1396   return 0;
   1397 }
   1398 
   1399 /// SimplifyICmpInst - Given operands for an ICmpInst, see if we can
   1400 /// fold the result.  If not, this returns null.
   1401 static Value *SimplifyICmpInst(unsigned Predicate, Value *LHS, Value *RHS,
   1402                                const TargetData *TD, const DominatorTree *DT,
   1403                                unsigned MaxRecurse) {
   1404   CmpInst::Predicate Pred = (CmpInst::Predicate)Predicate;
   1405   assert(CmpInst::isIntPredicate(Pred) && "Not an integer compare!");
   1406 
   1407   if (Constant *CLHS = dyn_cast<Constant>(LHS)) {
   1408     if (Constant *CRHS = dyn_cast<Constant>(RHS))
   1409       return ConstantFoldCompareInstOperands(Pred, CLHS, CRHS, TD);
   1410 
   1411     // If we have a constant, make sure it is on the RHS.
   1412     std::swap(LHS, RHS);
   1413     Pred = CmpInst::getSwappedPredicate(Pred);
   1414   }
   1415 
   1416   Type *ITy = GetCompareTy(LHS); // The return type.
   1417   Type *OpTy = LHS->getType();   // The operand type.
   1418 
   1419   // icmp X, X -> true/false
   1420   // X icmp undef -> true/false.  For example, icmp ugt %X, undef -> false
   1421   // because X could be 0.
   1422   if (LHS == RHS || isa<UndefValue>(RHS))
   1423     return ConstantInt::get(ITy, CmpInst::isTrueWhenEqual(Pred));
   1424 
   1425   // Special case logic when the operands have i1 type.
   1426   if (OpTy->isIntegerTy(1) || (OpTy->isVectorTy() &&
   1427        cast<VectorType>(OpTy)->getElementType()->isIntegerTy(1))) {
   1428     switch (Pred) {
   1429     default: break;
   1430     case ICmpInst::ICMP_EQ:
   1431       // X == 1 -> X
   1432       if (match(RHS, m_One()))
   1433         return LHS;
   1434       break;
   1435     case ICmpInst::ICMP_NE:
   1436       // X != 0 -> X
   1437       if (match(RHS, m_Zero()))
   1438         return LHS;
   1439       break;
   1440     case ICmpInst::ICMP_UGT:
   1441       // X >u 0 -> X
   1442       if (match(RHS, m_Zero()))
   1443         return LHS;
   1444       break;
   1445     case ICmpInst::ICMP_UGE:
   1446       // X >=u 1 -> X
   1447       if (match(RHS, m_One()))
   1448         return LHS;
   1449       break;
   1450     case ICmpInst::ICMP_SLT:
   1451       // X <s 0 -> X
   1452       if (match(RHS, m_Zero()))
   1453         return LHS;
   1454       break;
   1455     case ICmpInst::ICMP_SLE:
   1456       // X <=s -1 -> X
   1457       if (match(RHS, m_One()))
   1458         return LHS;
   1459       break;
   1460     }
   1461   }
   1462 
   1463   // icmp <alloca*>, <global/alloca*/null> - Different stack variables have
   1464   // different addresses, and what's more the address of a stack variable is
   1465   // never null or equal to the address of a global.  Note that generalizing
   1466   // to the case where LHS is a global variable address or null is pointless,
   1467   // since if both LHS and RHS are constants then we already constant folded
   1468   // the compare, and if only one of them is then we moved it to RHS already.
   1469   if (isa<AllocaInst>(LHS) && (isa<GlobalValue>(RHS) || isa<AllocaInst>(RHS) ||
   1470                                isa<ConstantPointerNull>(RHS)))
   1471     // We already know that LHS != RHS.
   1472     return ConstantInt::get(ITy, CmpInst::isFalseWhenEqual(Pred));
   1473 
   1474   // If we are comparing with zero then try hard since this is a common case.
   1475   if (match(RHS, m_Zero())) {
   1476     bool LHSKnownNonNegative, LHSKnownNegative;
   1477     switch (Pred) {
   1478     default:
   1479       assert(false && "Unknown ICmp predicate!");
   1480     case ICmpInst::ICMP_ULT:
   1481       // getNullValue also works for vectors, unlike getFalse.
   1482       return Constant::getNullValue(ITy);
   1483     case ICmpInst::ICMP_UGE:
   1484       // getAllOnesValue also works for vectors, unlike getTrue.
   1485       return ConstantInt::getAllOnesValue(ITy);
   1486     case ICmpInst::ICMP_EQ:
   1487     case ICmpInst::ICMP_ULE:
   1488       if (isKnownNonZero(LHS, TD))
   1489         return Constant::getNullValue(ITy);
   1490       break;
   1491     case ICmpInst::ICMP_NE:
   1492     case ICmpInst::ICMP_UGT:
   1493       if (isKnownNonZero(LHS, TD))
   1494         return ConstantInt::getAllOnesValue(ITy);
   1495       break;
   1496     case ICmpInst::ICMP_SLT:
   1497       ComputeSignBit(LHS, LHSKnownNonNegative, LHSKnownNegative, TD);
   1498       if (LHSKnownNegative)
   1499         return ConstantInt::getAllOnesValue(ITy);
   1500       if (LHSKnownNonNegative)
   1501         return Constant::getNullValue(ITy);
   1502       break;
   1503     case ICmpInst::ICMP_SLE:
   1504       ComputeSignBit(LHS, LHSKnownNonNegative, LHSKnownNegative, TD);
   1505       if (LHSKnownNegative)
   1506         return ConstantInt::getAllOnesValue(ITy);
   1507       if (LHSKnownNonNegative && isKnownNonZero(LHS, TD))
   1508         return Constant::getNullValue(ITy);
   1509       break;
   1510     case ICmpInst::ICMP_SGE:
   1511       ComputeSignBit(LHS, LHSKnownNonNegative, LHSKnownNegative, TD);
   1512       if (LHSKnownNegative)
   1513         return Constant::getNullValue(ITy);
   1514       if (LHSKnownNonNegative)
   1515         return ConstantInt::getAllOnesValue(ITy);
   1516       break;
   1517     case ICmpInst::ICMP_SGT:
   1518       ComputeSignBit(LHS, LHSKnownNonNegative, LHSKnownNegative, TD);
   1519       if (LHSKnownNegative)
   1520         return Constant::getNullValue(ITy);
   1521       if (LHSKnownNonNegative && isKnownNonZero(LHS, TD))
   1522         return ConstantInt::getAllOnesValue(ITy);
   1523       break;
   1524     }
   1525   }
   1526 
   1527   // See if we are doing a comparison with a constant integer.
   1528   if (ConstantInt *CI = dyn_cast<ConstantInt>(RHS)) {
   1529     // Rule out tautological comparisons (eg., ult 0 or uge 0).
   1530     ConstantRange RHS_CR = ICmpInst::makeConstantRange(Pred, CI->getValue());
   1531     if (RHS_CR.isEmptySet())
   1532       return ConstantInt::getFalse(CI->getContext());
   1533     if (RHS_CR.isFullSet())
   1534       return ConstantInt::getTrue(CI->getContext());
   1535 
   1536     // Many binary operators with constant RHS have easy to compute constant
   1537     // range.  Use them to check whether the comparison is a tautology.
   1538     uint32_t Width = CI->getBitWidth();
   1539     APInt Lower = APInt(Width, 0);
   1540     APInt Upper = APInt(Width, 0);
   1541     ConstantInt *CI2;
   1542     if (match(LHS, m_URem(m_Value(), m_ConstantInt(CI2)))) {
   1543       // 'urem x, CI2' produces [0, CI2).
   1544       Upper = CI2->getValue();
   1545     } else if (match(LHS, m_SRem(m_Value(), m_ConstantInt(CI2)))) {
   1546       // 'srem x, CI2' produces (-|CI2|, |CI2|).
   1547       Upper = CI2->getValue().abs();
   1548       Lower = (-Upper) + 1;
   1549     } else if (match(LHS, m_UDiv(m_Value(), m_ConstantInt(CI2)))) {
   1550       // 'udiv x, CI2' produces [0, UINT_MAX / CI2].
   1551       APInt NegOne = APInt::getAllOnesValue(Width);
   1552       if (!CI2->isZero())
   1553         Upper = NegOne.udiv(CI2->getValue()) + 1;
   1554     } else if (match(LHS, m_SDiv(m_Value(), m_ConstantInt(CI2)))) {
   1555       // 'sdiv x, CI2' produces [INT_MIN / CI2, INT_MAX / CI2].
   1556       APInt IntMin = APInt::getSignedMinValue(Width);
   1557       APInt IntMax = APInt::getSignedMaxValue(Width);
   1558       APInt Val = CI2->getValue().abs();
   1559       if (!Val.isMinValue()) {
   1560         Lower = IntMin.sdiv(Val);
   1561         Upper = IntMax.sdiv(Val) + 1;
   1562       }
   1563     } else if (match(LHS, m_LShr(m_Value(), m_ConstantInt(CI2)))) {
   1564       // 'lshr x, CI2' produces [0, UINT_MAX >> CI2].
   1565       APInt NegOne = APInt::getAllOnesValue(Width);
   1566       if (CI2->getValue().ult(Width))
   1567         Upper = NegOne.lshr(CI2->getValue()) + 1;
   1568     } else if (match(LHS, m_AShr(m_Value(), m_ConstantInt(CI2)))) {
   1569       // 'ashr x, CI2' produces [INT_MIN >> CI2, INT_MAX >> CI2].
   1570       APInt IntMin = APInt::getSignedMinValue(Width);
   1571       APInt IntMax = APInt::getSignedMaxValue(Width);
   1572       if (CI2->getValue().ult(Width)) {
   1573         Lower = IntMin.ashr(CI2->getValue());
   1574         Upper = IntMax.ashr(CI2->getValue()) + 1;
   1575       }
   1576     } else if (match(LHS, m_Or(m_Value(), m_ConstantInt(CI2)))) {
   1577       // 'or x, CI2' produces [CI2, UINT_MAX].
   1578       Lower = CI2->getValue();
   1579     } else if (match(LHS, m_And(m_Value(), m_ConstantInt(CI2)))) {
   1580       // 'and x, CI2' produces [0, CI2].
   1581       Upper = CI2->getValue() + 1;
   1582     }
   1583     if (Lower != Upper) {
   1584       ConstantRange LHS_CR = ConstantRange(Lower, Upper);
   1585       if (RHS_CR.contains(LHS_CR))
   1586         return ConstantInt::getTrue(RHS->getContext());
   1587       if (RHS_CR.inverse().contains(LHS_CR))
   1588         return ConstantInt::getFalse(RHS->getContext());
   1589     }
   1590   }
   1591 
   1592   // Compare of cast, for example (zext X) != 0 -> X != 0
   1593   if (isa<CastInst>(LHS) && (isa<Constant>(RHS) || isa<CastInst>(RHS))) {
   1594     Instruction *LI = cast<CastInst>(LHS);
   1595     Value *SrcOp = LI->getOperand(0);
   1596     Type *SrcTy = SrcOp->getType();
   1597     Type *DstTy = LI->getType();
   1598 
   1599     // Turn icmp (ptrtoint x), (ptrtoint/constant) into a compare of the input
   1600     // if the integer type is the same size as the pointer type.
   1601     if (MaxRecurse && TD && isa<PtrToIntInst>(LI) &&
   1602         TD->getPointerSizeInBits() == DstTy->getPrimitiveSizeInBits()) {
   1603       if (Constant *RHSC = dyn_cast<Constant>(RHS)) {
   1604         // Transfer the cast to the constant.
   1605         if (Value *V = SimplifyICmpInst(Pred, SrcOp,
   1606                                         ConstantExpr::getIntToPtr(RHSC, SrcTy),
   1607                                         TD, DT, MaxRecurse-1))
   1608           return V;
   1609       } else if (PtrToIntInst *RI = dyn_cast<PtrToIntInst>(RHS)) {
   1610         if (RI->getOperand(0)->getType() == SrcTy)
   1611           // Compare without the cast.
   1612           if (Value *V = SimplifyICmpInst(Pred, SrcOp, RI->getOperand(0),
   1613                                           TD, DT, MaxRecurse-1))
   1614             return V;
   1615       }
   1616     }
   1617 
   1618     if (isa<ZExtInst>(LHS)) {
   1619       // Turn icmp (zext X), (zext Y) into a compare of X and Y if they have the
   1620       // same type.
   1621       if (ZExtInst *RI = dyn_cast<ZExtInst>(RHS)) {
   1622         if (MaxRecurse && SrcTy == RI->getOperand(0)->getType())
   1623           // Compare X and Y.  Note that signed predicates become unsigned.
   1624           if (Value *V = SimplifyICmpInst(ICmpInst::getUnsignedPredicate(Pred),
   1625                                           SrcOp, RI->getOperand(0), TD, DT,
   1626                                           MaxRecurse-1))
   1627             return V;
   1628       }
   1629       // Turn icmp (zext X), Cst into a compare of X and Cst if Cst is extended
   1630       // too.  If not, then try to deduce the result of the comparison.
   1631       else if (ConstantInt *CI = dyn_cast<ConstantInt>(RHS)) {
   1632         // Compute the constant that would happen if we truncated to SrcTy then
   1633         // reextended to DstTy.
   1634         Constant *Trunc = ConstantExpr::getTrunc(CI, SrcTy);
   1635         Constant *RExt = ConstantExpr::getCast(CastInst::ZExt, Trunc, DstTy);
   1636 
   1637         // If the re-extended constant didn't change then this is effectively
   1638         // also a case of comparing two zero-extended values.
   1639         if (RExt == CI && MaxRecurse)
   1640           if (Value *V = SimplifyICmpInst(ICmpInst::getUnsignedPredicate(Pred),
   1641                                           SrcOp, Trunc, TD, DT, MaxRecurse-1))
   1642             return V;
   1643 
   1644         // Otherwise the upper bits of LHS are zero while RHS has a non-zero bit
   1645         // there.  Use this to work out the result of the comparison.
   1646         if (RExt != CI) {
   1647           switch (Pred) {
   1648           default:
   1649             assert(false && "Unknown ICmp predicate!");
   1650           // LHS <u RHS.
   1651           case ICmpInst::ICMP_EQ:
   1652           case ICmpInst::ICMP_UGT:
   1653           case ICmpInst::ICMP_UGE:
   1654             return ConstantInt::getFalse(CI->getContext());
   1655 
   1656           case ICmpInst::ICMP_NE:
   1657           case ICmpInst::ICMP_ULT:
   1658           case ICmpInst::ICMP_ULE:
   1659             return ConstantInt::getTrue(CI->getContext());
   1660 
   1661           // LHS is non-negative.  If RHS is negative then LHS >s LHS.  If RHS
   1662           // is non-negative then LHS <s RHS.
   1663           case ICmpInst::ICMP_SGT:
   1664           case ICmpInst::ICMP_SGE:
   1665             return CI->getValue().isNegative() ?
   1666               ConstantInt::getTrue(CI->getContext()) :
   1667               ConstantInt::getFalse(CI->getContext());
   1668 
   1669           case ICmpInst::ICMP_SLT:
   1670           case ICmpInst::ICMP_SLE:
   1671             return CI->getValue().isNegative() ?
   1672               ConstantInt::getFalse(CI->getContext()) :
   1673               ConstantInt::getTrue(CI->getContext());
   1674           }
   1675         }
   1676       }
   1677     }
   1678 
   1679     if (isa<SExtInst>(LHS)) {
   1680       // Turn icmp (sext X), (sext Y) into a compare of X and Y if they have the
   1681       // same type.
   1682       if (SExtInst *RI = dyn_cast<SExtInst>(RHS)) {
   1683         if (MaxRecurse && SrcTy == RI->getOperand(0)->getType())
   1684           // Compare X and Y.  Note that the predicate does not change.
   1685           if (Value *V = SimplifyICmpInst(Pred, SrcOp, RI->getOperand(0),
   1686                                           TD, DT, MaxRecurse-1))
   1687             return V;
   1688       }
   1689       // Turn icmp (sext X), Cst into a compare of X and Cst if Cst is extended
   1690       // too.  If not, then try to deduce the result of the comparison.
   1691       else if (ConstantInt *CI = dyn_cast<ConstantInt>(RHS)) {
   1692         // Compute the constant that would happen if we truncated to SrcTy then
   1693         // reextended to DstTy.
   1694         Constant *Trunc = ConstantExpr::getTrunc(CI, SrcTy);
   1695         Constant *RExt = ConstantExpr::getCast(CastInst::SExt, Trunc, DstTy);
   1696 
   1697         // If the re-extended constant didn't change then this is effectively
   1698         // also a case of comparing two sign-extended values.
   1699         if (RExt == CI && MaxRecurse)
   1700           if (Value *V = SimplifyICmpInst(Pred, SrcOp, Trunc, TD, DT,
   1701                                           MaxRecurse-1))
   1702             return V;
   1703 
   1704         // Otherwise the upper bits of LHS are all equal, while RHS has varying
   1705         // bits there.  Use this to work out the result of the comparison.
   1706         if (RExt != CI) {
   1707           switch (Pred) {
   1708           default:
   1709             assert(false && "Unknown ICmp predicate!");
   1710           case ICmpInst::ICMP_EQ:
   1711             return ConstantInt::getFalse(CI->getContext());
   1712           case ICmpInst::ICMP_NE:
   1713             return ConstantInt::getTrue(CI->getContext());
   1714 
   1715           // If RHS is non-negative then LHS <s RHS.  If RHS is negative then
   1716           // LHS >s RHS.
   1717           case ICmpInst::ICMP_SGT:
   1718           case ICmpInst::ICMP_SGE:
   1719             return CI->getValue().isNegative() ?
   1720               ConstantInt::getTrue(CI->getContext()) :
   1721               ConstantInt::getFalse(CI->getContext());
   1722           case ICmpInst::ICMP_SLT:
   1723           case ICmpInst::ICMP_SLE:
   1724             return CI->getValue().isNegative() ?
   1725               ConstantInt::getFalse(CI->getContext()) :
   1726               ConstantInt::getTrue(CI->getContext());
   1727 
   1728           // If LHS is non-negative then LHS <u RHS.  If LHS is negative then
   1729           // LHS >u RHS.
   1730           case ICmpInst::ICMP_UGT:
   1731           case ICmpInst::ICMP_UGE:
   1732             // Comparison is true iff the LHS <s 0.
   1733             if (MaxRecurse)
   1734               if (Value *V = SimplifyICmpInst(ICmpInst::ICMP_SLT, SrcOp,
   1735                                               Constant::getNullValue(SrcTy),
   1736                                               TD, DT, MaxRecurse-1))
   1737                 return V;
   1738             break;
   1739           case ICmpInst::ICMP_ULT:
   1740           case ICmpInst::ICMP_ULE:
   1741             // Comparison is true iff the LHS >=s 0.
   1742             if (MaxRecurse)
   1743               if (Value *V = SimplifyICmpInst(ICmpInst::ICMP_SGE, SrcOp,
   1744                                               Constant::getNullValue(SrcTy),
   1745                                               TD, DT, MaxRecurse-1))
   1746                 return V;
   1747             break;
   1748           }
   1749         }
   1750       }
   1751     }
   1752   }
   1753 
   1754   // Special logic for binary operators.
   1755   BinaryOperator *LBO = dyn_cast<BinaryOperator>(LHS);
   1756   BinaryOperator *RBO = dyn_cast<BinaryOperator>(RHS);
   1757   if (MaxRecurse && (LBO || RBO)) {
   1758     // Analyze the case when either LHS or RHS is an add instruction.
   1759     Value *A = 0, *B = 0, *C = 0, *D = 0;
   1760     // LHS = A + B (or A and B are null); RHS = C + D (or C and D are null).
   1761     bool NoLHSWrapProblem = false, NoRHSWrapProblem = false;
   1762     if (LBO && LBO->getOpcode() == Instruction::Add) {
   1763       A = LBO->getOperand(0); B = LBO->getOperand(1);
   1764       NoLHSWrapProblem = ICmpInst::isEquality(Pred) ||
   1765         (CmpInst::isUnsigned(Pred) && LBO->hasNoUnsignedWrap()) ||
   1766         (CmpInst::isSigned(Pred) && LBO->hasNoSignedWrap());
   1767     }
   1768     if (RBO && RBO->getOpcode() == Instruction::Add) {
   1769       C = RBO->getOperand(0); D = RBO->getOperand(1);
   1770       NoRHSWrapProblem = ICmpInst::isEquality(Pred) ||
   1771         (CmpInst::isUnsigned(Pred) && RBO->hasNoUnsignedWrap()) ||
   1772         (CmpInst::isSigned(Pred) && RBO->hasNoSignedWrap());
   1773     }
   1774 
   1775     // icmp (X+Y), X -> icmp Y, 0 for equalities or if there is no overflow.
   1776     if ((A == RHS || B == RHS) && NoLHSWrapProblem)
   1777       if (Value *V = SimplifyICmpInst(Pred, A == RHS ? B : A,
   1778                                       Constant::getNullValue(RHS->getType()),
   1779                                       TD, DT, MaxRecurse-1))
   1780         return V;
   1781 
   1782     // icmp X, (X+Y) -> icmp 0, Y for equalities or if there is no overflow.
   1783     if ((C == LHS || D == LHS) && NoRHSWrapProblem)
   1784       if (Value *V = SimplifyICmpInst(Pred,
   1785                                       Constant::getNullValue(LHS->getType()),
   1786                                       C == LHS ? D : C, TD, DT, MaxRecurse-1))
   1787         return V;
   1788 
   1789     // icmp (X+Y), (X+Z) -> icmp Y,Z for equalities or if there is no overflow.
   1790     if (A && C && (A == C || A == D || B == C || B == D) &&
   1791         NoLHSWrapProblem && NoRHSWrapProblem) {
   1792       // Determine Y and Z in the form icmp (X+Y), (X+Z).
   1793       Value *Y = (A == C || A == D) ? B : A;
   1794       Value *Z = (C == A || C == B) ? D : C;
   1795       if (Value *V = SimplifyICmpInst(Pred, Y, Z, TD, DT, MaxRecurse-1))
   1796         return V;
   1797     }
   1798   }
   1799 
   1800   if (LBO && match(LBO, m_URem(m_Value(), m_Specific(RHS)))) {
   1801     bool KnownNonNegative, KnownNegative;
   1802     switch (Pred) {
   1803     default:
   1804       break;
   1805     case ICmpInst::ICMP_SGT:
   1806     case ICmpInst::ICMP_SGE:
   1807       ComputeSignBit(LHS, KnownNonNegative, KnownNegative, TD);
   1808       if (!KnownNonNegative)
   1809         break;
   1810       // fall-through
   1811     case ICmpInst::ICMP_EQ:
   1812     case ICmpInst::ICMP_UGT:
   1813     case ICmpInst::ICMP_UGE:
   1814       // getNullValue also works for vectors, unlike getFalse.
   1815       return Constant::getNullValue(ITy);
   1816     case ICmpInst::ICMP_SLT:
   1817     case ICmpInst::ICMP_SLE:
   1818       ComputeSignBit(LHS, KnownNonNegative, KnownNegative, TD);
   1819       if (!KnownNonNegative)
   1820         break;
   1821       // fall-through
   1822     case ICmpInst::ICMP_NE:
   1823     case ICmpInst::ICMP_ULT:
   1824     case ICmpInst::ICMP_ULE:
   1825       // getAllOnesValue also works for vectors, unlike getTrue.
   1826       return Constant::getAllOnesValue(ITy);
   1827     }
   1828   }
   1829   if (RBO && match(RBO, m_URem(m_Value(), m_Specific(LHS)))) {
   1830     bool KnownNonNegative, KnownNegative;
   1831     switch (Pred) {
   1832     default:
   1833       break;
   1834     case ICmpInst::ICMP_SGT:
   1835     case ICmpInst::ICMP_SGE:
   1836       ComputeSignBit(RHS, KnownNonNegative, KnownNegative, TD);
   1837       if (!KnownNonNegative)
   1838         break;
   1839       // fall-through
   1840     case ICmpInst::ICMP_NE:
   1841     case ICmpInst::ICMP_UGT:
   1842     case ICmpInst::ICMP_UGE:
   1843       // getAllOnesValue also works for vectors, unlike getTrue.
   1844       return Constant::getAllOnesValue(ITy);
   1845     case ICmpInst::ICMP_SLT:
   1846     case ICmpInst::ICMP_SLE:
   1847       ComputeSignBit(RHS, KnownNonNegative, KnownNegative, TD);
   1848       if (!KnownNonNegative)
   1849         break;
   1850       // fall-through
   1851     case ICmpInst::ICMP_EQ:
   1852     case ICmpInst::ICMP_ULT:
   1853     case ICmpInst::ICMP_ULE:
   1854       // getNullValue also works for vectors, unlike getFalse.
   1855       return Constant::getNullValue(ITy);
   1856     }
   1857   }
   1858 
   1859   if (MaxRecurse && LBO && RBO && LBO->getOpcode() == RBO->getOpcode() &&
   1860       LBO->getOperand(1) == RBO->getOperand(1)) {
   1861     switch (LBO->getOpcode()) {
   1862     default: break;
   1863     case Instruction::UDiv:
   1864     case Instruction::LShr:
   1865       if (ICmpInst::isSigned(Pred))
   1866         break;
   1867       // fall-through
   1868     case Instruction::SDiv:
   1869     case Instruction::AShr:
   1870       if (!LBO->isExact() || !RBO->isExact())
   1871         break;
   1872       if (Value *V = SimplifyICmpInst(Pred, LBO->getOperand(0),
   1873                                       RBO->getOperand(0), TD, DT, MaxRecurse-1))
   1874         return V;
   1875       break;
   1876     case Instruction::Shl: {
   1877       bool NUW = LBO->hasNoUnsignedWrap() && LBO->hasNoUnsignedWrap();
   1878       bool NSW = LBO->hasNoSignedWrap() && RBO->hasNoSignedWrap();
   1879       if (!NUW && !NSW)
   1880         break;
   1881       if (!NSW && ICmpInst::isSigned(Pred))
   1882         break;
   1883       if (Value *V = SimplifyICmpInst(Pred, LBO->getOperand(0),
   1884                                       RBO->getOperand(0), TD, DT, MaxRecurse-1))
   1885         return V;
   1886       break;
   1887     }
   1888     }
   1889   }
   1890 
   1891   // Simplify comparisons involving max/min.
   1892   Value *A, *B;
   1893   CmpInst::Predicate P = CmpInst::BAD_ICMP_PREDICATE;
   1894   CmpInst::Predicate EqP; // Chosen so that "A == max/min(A,B)" iff "A EqP B".
   1895 
   1896   // Signed variants on "max(a,b)>=a -> true".
   1897   if (match(LHS, m_SMax(m_Value(A), m_Value(B))) && (A == RHS || B == RHS)) {
   1898     if (A != RHS) std::swap(A, B); // smax(A, B) pred A.
   1899     EqP = CmpInst::ICMP_SGE; // "A == smax(A, B)" iff "A sge B".
   1900     // We analyze this as smax(A, B) pred A.
   1901     P = Pred;
   1902   } else if (match(RHS, m_SMax(m_Value(A), m_Value(B))) &&
   1903              (A == LHS || B == LHS)) {
   1904     if (A != LHS) std::swap(A, B); // A pred smax(A, B).
   1905     EqP = CmpInst::ICMP_SGE; // "A == smax(A, B)" iff "A sge B".
   1906     // We analyze this as smax(A, B) swapped-pred A.
   1907     P = CmpInst::getSwappedPredicate(Pred);
   1908   } else if (match(LHS, m_SMin(m_Value(A), m_Value(B))) &&
   1909              (A == RHS || B == RHS)) {
   1910     if (A != RHS) std::swap(A, B); // smin(A, B) pred A.
   1911     EqP = CmpInst::ICMP_SLE; // "A == smin(A, B)" iff "A sle B".
   1912     // We analyze this as smax(-A, -B) swapped-pred -A.
   1913     // Note that we do not need to actually form -A or -B thanks to EqP.
   1914     P = CmpInst::getSwappedPredicate(Pred);
   1915   } else if (match(RHS, m_SMin(m_Value(A), m_Value(B))) &&
   1916              (A == LHS || B == LHS)) {
   1917     if (A != LHS) std::swap(A, B); // A pred smin(A, B).
   1918     EqP = CmpInst::ICMP_SLE; // "A == smin(A, B)" iff "A sle B".
   1919     // We analyze this as smax(-A, -B) pred -A.
   1920     // Note that we do not need to actually form -A or -B thanks to EqP.
   1921     P = Pred;
   1922   }
   1923   if (P != CmpInst::BAD_ICMP_PREDICATE) {
   1924     // Cases correspond to "max(A, B) p A".
   1925     switch (P) {
   1926     default:
   1927       break;
   1928     case CmpInst::ICMP_EQ:
   1929     case CmpInst::ICMP_SLE:
   1930       // Equivalent to "A EqP B".  This may be the same as the condition tested
   1931       // in the max/min; if so, we can just return that.
   1932       if (Value *V = ExtractEquivalentCondition(LHS, EqP, A, B))
   1933         return V;
   1934       if (Value *V = ExtractEquivalentCondition(RHS, EqP, A, B))
   1935         return V;
   1936       // Otherwise, see if "A EqP B" simplifies.
   1937       if (MaxRecurse)
   1938         if (Value *V = SimplifyICmpInst(EqP, A, B, TD, DT, MaxRecurse-1))
   1939           return V;
   1940       break;
   1941     case CmpInst::ICMP_NE:
   1942     case CmpInst::ICMP_SGT: {
   1943       CmpInst::Predicate InvEqP = CmpInst::getInversePredicate(EqP);
   1944       // Equivalent to "A InvEqP B".  This may be the same as the condition
   1945       // tested in the max/min; if so, we can just return that.
   1946       if (Value *V = ExtractEquivalentCondition(LHS, InvEqP, A, B))
   1947         return V;
   1948       if (Value *V = ExtractEquivalentCondition(RHS, InvEqP, A, B))
   1949         return V;
   1950       // Otherwise, see if "A InvEqP B" simplifies.
   1951       if (MaxRecurse)
   1952         if (Value *V = SimplifyICmpInst(InvEqP, A, B, TD, DT, MaxRecurse-1))
   1953           return V;
   1954       break;
   1955     }
   1956     case CmpInst::ICMP_SGE:
   1957       // Always true.
   1958       return Constant::getAllOnesValue(ITy);
   1959     case CmpInst::ICMP_SLT:
   1960       // Always false.
   1961       return Constant::getNullValue(ITy);
   1962     }
   1963   }
   1964 
   1965   // Unsigned variants on "max(a,b)>=a -> true".
   1966   P = CmpInst::BAD_ICMP_PREDICATE;
   1967   if (match(LHS, m_UMax(m_Value(A), m_Value(B))) && (A == RHS || B == RHS)) {
   1968     if (A != RHS) std::swap(A, B); // umax(A, B) pred A.
   1969     EqP = CmpInst::ICMP_UGE; // "A == umax(A, B)" iff "A uge B".
   1970     // We analyze this as umax(A, B) pred A.
   1971     P = Pred;
   1972   } else if (match(RHS, m_UMax(m_Value(A), m_Value(B))) &&
   1973              (A == LHS || B == LHS)) {
   1974     if (A != LHS) std::swap(A, B); // A pred umax(A, B).
   1975     EqP = CmpInst::ICMP_UGE; // "A == umax(A, B)" iff "A uge B".
   1976     // We analyze this as umax(A, B) swapped-pred A.
   1977     P = CmpInst::getSwappedPredicate(Pred);
   1978   } else if (match(LHS, m_UMin(m_Value(A), m_Value(B))) &&
   1979              (A == RHS || B == RHS)) {
   1980     if (A != RHS) std::swap(A, B); // umin(A, B) pred A.
   1981     EqP = CmpInst::ICMP_ULE; // "A == umin(A, B)" iff "A ule B".
   1982     // We analyze this as umax(-A, -B) swapped-pred -A.
   1983     // Note that we do not need to actually form -A or -B thanks to EqP.
   1984     P = CmpInst::getSwappedPredicate(Pred);
   1985   } else if (match(RHS, m_UMin(m_Value(A), m_Value(B))) &&
   1986              (A == LHS || B == LHS)) {
   1987     if (A != LHS) std::swap(A, B); // A pred umin(A, B).
   1988     EqP = CmpInst::ICMP_ULE; // "A == umin(A, B)" iff "A ule B".
   1989     // We analyze this as umax(-A, -B) pred -A.
   1990     // Note that we do not need to actually form -A or -B thanks to EqP.
   1991     P = Pred;
   1992   }
   1993   if (P != CmpInst::BAD_ICMP_PREDICATE) {
   1994     // Cases correspond to "max(A, B) p A".
   1995     switch (P) {
   1996     default:
   1997       break;
   1998     case CmpInst::ICMP_EQ:
   1999     case CmpInst::ICMP_ULE:
   2000       // Equivalent to "A EqP B".  This may be the same as the condition tested
   2001       // in the max/min; if so, we can just return that.
   2002       if (Value *V = ExtractEquivalentCondition(LHS, EqP, A, B))
   2003         return V;
   2004       if (Value *V = ExtractEquivalentCondition(RHS, EqP, A, B))
   2005         return V;
   2006       // Otherwise, see if "A EqP B" simplifies.
   2007       if (MaxRecurse)
   2008         if (Value *V = SimplifyICmpInst(EqP, A, B, TD, DT, MaxRecurse-1))
   2009           return V;
   2010       break;
   2011     case CmpInst::ICMP_NE:
   2012     case CmpInst::ICMP_UGT: {
   2013       CmpInst::Predicate InvEqP = CmpInst::getInversePredicate(EqP);
   2014       // Equivalent to "A InvEqP B".  This may be the same as the condition
   2015       // tested in the max/min; if so, we can just return that.
   2016       if (Value *V = ExtractEquivalentCondition(LHS, InvEqP, A, B))
   2017         return V;
   2018       if (Value *V = ExtractEquivalentCondition(RHS, InvEqP, A, B))
   2019         return V;
   2020       // Otherwise, see if "A InvEqP B" simplifies.
   2021       if (MaxRecurse)
   2022         if (Value *V = SimplifyICmpInst(InvEqP, A, B, TD, DT, MaxRecurse-1))
   2023           return V;
   2024       break;
   2025     }
   2026     case CmpInst::ICMP_UGE:
   2027       // Always true.
   2028       return Constant::getAllOnesValue(ITy);
   2029     case CmpInst::ICMP_ULT:
   2030       // Always false.
   2031       return Constant::getNullValue(ITy);
   2032     }
   2033   }
   2034 
   2035   // Variants on "max(x,y) >= min(x,z)".
   2036   Value *C, *D;
   2037   if (match(LHS, m_SMax(m_Value(A), m_Value(B))) &&
   2038       match(RHS, m_SMin(m_Value(C), m_Value(D))) &&
   2039       (A == C || A == D || B == C || B == D)) {
   2040     // max(x, ?) pred min(x, ?).
   2041     if (Pred == CmpInst::ICMP_SGE)
   2042       // Always true.
   2043       return Constant::getAllOnesValue(ITy);
   2044     if (Pred == CmpInst::ICMP_SLT)
   2045       // Always false.
   2046       return Constant::getNullValue(ITy);
   2047   } else if (match(LHS, m_SMin(m_Value(A), m_Value(B))) &&
   2048              match(RHS, m_SMax(m_Value(C), m_Value(D))) &&
   2049              (A == C || A == D || B == C || B == D)) {
   2050     // min(x, ?) pred max(x, ?).
   2051     if (Pred == CmpInst::ICMP_SLE)
   2052       // Always true.
   2053       return Constant::getAllOnesValue(ITy);
   2054     if (Pred == CmpInst::ICMP_SGT)
   2055       // Always false.
   2056       return Constant::getNullValue(ITy);
   2057   } else if (match(LHS, m_UMax(m_Value(A), m_Value(B))) &&
   2058              match(RHS, m_UMin(m_Value(C), m_Value(D))) &&
   2059              (A == C || A == D || B == C || B == D)) {
   2060     // max(x, ?) pred min(x, ?).
   2061     if (Pred == CmpInst::ICMP_UGE)
   2062       // Always true.
   2063       return Constant::getAllOnesValue(ITy);
   2064     if (Pred == CmpInst::ICMP_ULT)
   2065       // Always false.
   2066       return Constant::getNullValue(ITy);
   2067   } else if (match(LHS, m_UMin(m_Value(A), m_Value(B))) &&
   2068              match(RHS, m_UMax(m_Value(C), m_Value(D))) &&
   2069              (A == C || A == D || B == C || B == D)) {
   2070     // min(x, ?) pred max(x, ?).
   2071     if (Pred == CmpInst::ICMP_ULE)
   2072       // Always true.
   2073       return Constant::getAllOnesValue(ITy);
   2074     if (Pred == CmpInst::ICMP_UGT)
   2075       // Always false.
   2076       return Constant::getNullValue(ITy);
   2077   }
   2078 
   2079   // If the comparison is with the result of a select instruction, check whether
   2080   // comparing with either branch of the select always yields the same value.
   2081   if (isa<SelectInst>(LHS) || isa<SelectInst>(RHS))
   2082     if (Value *V = ThreadCmpOverSelect(Pred, LHS, RHS, TD, DT, MaxRecurse))
   2083       return V;
   2084 
   2085   // If the comparison is with the result of a phi instruction, check whether
   2086   // doing the compare with each incoming phi value yields a common result.
   2087   if (isa<PHINode>(LHS) || isa<PHINode>(RHS))
   2088     if (Value *V = ThreadCmpOverPHI(Pred, LHS, RHS, TD, DT, MaxRecurse))
   2089       return V;
   2090 
   2091   return 0;
   2092 }
   2093 
   2094 Value *llvm::SimplifyICmpInst(unsigned Predicate, Value *LHS, Value *RHS,
   2095                               const TargetData *TD, const DominatorTree *DT) {
   2096   return ::SimplifyICmpInst(Predicate, LHS, RHS, TD, DT, RecursionLimit);
   2097 }
   2098 
   2099 /// SimplifyFCmpInst - Given operands for an FCmpInst, see if we can
   2100 /// fold the result.  If not, this returns null.
   2101 static Value *SimplifyFCmpInst(unsigned Predicate, Value *LHS, Value *RHS,
   2102                                const TargetData *TD, const DominatorTree *DT,
   2103                                unsigned MaxRecurse) {
   2104   CmpInst::Predicate Pred = (CmpInst::Predicate)Predicate;
   2105   assert(CmpInst::isFPPredicate(Pred) && "Not an FP compare!");
   2106 
   2107   if (Constant *CLHS = dyn_cast<Constant>(LHS)) {
   2108     if (Constant *CRHS = dyn_cast<Constant>(RHS))
   2109       return ConstantFoldCompareInstOperands(Pred, CLHS, CRHS, TD);
   2110 
   2111     // If we have a constant, make sure it is on the RHS.
   2112     std::swap(LHS, RHS);
   2113     Pred = CmpInst::getSwappedPredicate(Pred);
   2114   }
   2115 
   2116   // Fold trivial predicates.
   2117   if (Pred == FCmpInst::FCMP_FALSE)
   2118     return ConstantInt::get(GetCompareTy(LHS), 0);
   2119   if (Pred == FCmpInst::FCMP_TRUE)
   2120     return ConstantInt::get(GetCompareTy(LHS), 1);
   2121 
   2122   if (isa<UndefValue>(RHS))                  // fcmp pred X, undef -> undef
   2123     return UndefValue::get(GetCompareTy(LHS));
   2124 
   2125   // fcmp x,x -> true/false.  Not all compares are foldable.
   2126   if (LHS == RHS) {
   2127     if (CmpInst::isTrueWhenEqual(Pred))
   2128       return ConstantInt::get(GetCompareTy(LHS), 1);
   2129     if (CmpInst::isFalseWhenEqual(Pred))
   2130       return ConstantInt::get(GetCompareTy(LHS), 0);
   2131   }
   2132 
   2133   // Handle fcmp with constant RHS
   2134   if (Constant *RHSC = dyn_cast<Constant>(RHS)) {
   2135     // If the constant is a nan, see if we can fold the comparison based on it.
   2136     if (ConstantFP *CFP = dyn_cast<ConstantFP>(RHSC)) {
   2137       if (CFP->getValueAPF().isNaN()) {
   2138         if (FCmpInst::isOrdered(Pred))   // True "if ordered and foo"
   2139           return ConstantInt::getFalse(CFP->getContext());
   2140         assert(FCmpInst::isUnordered(Pred) &&
   2141                "Comparison must be either ordered or unordered!");
   2142         // True if unordered.
   2143         return ConstantInt::getTrue(CFP->getContext());
   2144       }
   2145       // Check whether the constant is an infinity.
   2146       if (CFP->getValueAPF().isInfinity()) {
   2147         if (CFP->getValueAPF().isNegative()) {
   2148           switch (Pred) {
   2149           case FCmpInst::FCMP_OLT:
   2150             // No value is ordered and less than negative infinity.
   2151             return ConstantInt::getFalse(CFP->getContext());
   2152           case FCmpInst::FCMP_UGE:
   2153             // All values are unordered with or at least negative infinity.
   2154             return ConstantInt::getTrue(CFP->getContext());
   2155           default:
   2156             break;
   2157           }
   2158         } else {
   2159           switch (Pred) {
   2160           case FCmpInst::FCMP_OGT:
   2161             // No value is ordered and greater than infinity.
   2162             return ConstantInt::getFalse(CFP->getContext());
   2163           case FCmpInst::FCMP_ULE:
   2164             // All values are unordered with and at most infinity.
   2165             return ConstantInt::getTrue(CFP->getContext());
   2166           default:
   2167             break;
   2168           }
   2169         }
   2170       }
   2171     }
   2172   }
   2173 
   2174   // If the comparison is with the result of a select instruction, check whether
   2175   // comparing with either branch of the select always yields the same value.
   2176   if (isa<SelectInst>(LHS) || isa<SelectInst>(RHS))
   2177     if (Value *V = ThreadCmpOverSelect(Pred, LHS, RHS, TD, DT, MaxRecurse))
   2178       return V;
   2179 
   2180   // If the comparison is with the result of a phi instruction, check whether
   2181   // doing the compare with each incoming phi value yields a common result.
   2182   if (isa<PHINode>(LHS) || isa<PHINode>(RHS))
   2183     if (Value *V = ThreadCmpOverPHI(Pred, LHS, RHS, TD, DT, MaxRecurse))
   2184       return V;
   2185 
   2186   return 0;
   2187 }
   2188 
   2189 Value *llvm::SimplifyFCmpInst(unsigned Predicate, Value *LHS, Value *RHS,
   2190                               const TargetData *TD, const DominatorTree *DT) {
   2191   return ::SimplifyFCmpInst(Predicate, LHS, RHS, TD, DT, RecursionLimit);
   2192 }
   2193 
   2194 /// SimplifySelectInst - Given operands for a SelectInst, see if we can fold
   2195 /// the result.  If not, this returns null.
   2196 Value *llvm::SimplifySelectInst(Value *CondVal, Value *TrueVal, Value *FalseVal,
   2197                                 const TargetData *TD, const DominatorTree *) {
   2198   // select true, X, Y  -> X
   2199   // select false, X, Y -> Y
   2200   if (ConstantInt *CB = dyn_cast<ConstantInt>(CondVal))
   2201     return CB->getZExtValue() ? TrueVal : FalseVal;
   2202 
   2203   // select C, X, X -> X
   2204   if (TrueVal == FalseVal)
   2205     return TrueVal;
   2206 
   2207   if (isa<UndefValue>(CondVal)) {  // select undef, X, Y -> X or Y
   2208     if (isa<Constant>(TrueVal))
   2209       return TrueVal;
   2210     return FalseVal;
   2211   }
   2212   if (isa<UndefValue>(TrueVal))   // select C, undef, X -> X
   2213     return FalseVal;
   2214   if (isa<UndefValue>(FalseVal))   // select C, X, undef -> X
   2215     return TrueVal;
   2216 
   2217   return 0;
   2218 }
   2219 
   2220 /// SimplifyGEPInst - Given operands for an GetElementPtrInst, see if we can
   2221 /// fold the result.  If not, this returns null.
   2222 Value *llvm::SimplifyGEPInst(ArrayRef<Value *> Ops,
   2223                              const TargetData *TD, const DominatorTree *) {
   2224   // The type of the GEP pointer operand.
   2225   PointerType *PtrTy = cast<PointerType>(Ops[0]->getType());
   2226 
   2227   // getelementptr P -> P.
   2228   if (Ops.size() == 1)
   2229     return Ops[0];
   2230 
   2231   if (isa<UndefValue>(Ops[0])) {
   2232     // Compute the (pointer) type returned by the GEP instruction.
   2233     Type *LastType = GetElementPtrInst::getIndexedType(PtrTy, Ops.data() + 1,
   2234                                                        Ops.size() - 1);
   2235     Type *GEPTy = PointerType::get(LastType, PtrTy->getAddressSpace());
   2236     return UndefValue::get(GEPTy);
   2237   }
   2238 
   2239   if (Ops.size() == 2) {
   2240     // getelementptr P, 0 -> P.
   2241     if (ConstantInt *C = dyn_cast<ConstantInt>(Ops[1]))
   2242       if (C->isZero())
   2243         return Ops[0];
   2244     // getelementptr P, N -> P if P points to a type of zero size.
   2245     if (TD) {
   2246       Type *Ty = PtrTy->getElementType();
   2247       if (Ty->isSized() && TD->getTypeAllocSize(Ty) == 0)
   2248         return Ops[0];
   2249     }
   2250   }
   2251 
   2252   // Check to see if this is constant foldable.
   2253   for (unsigned i = 0, e = Ops.size(); i != e; ++i)
   2254     if (!isa<Constant>(Ops[i]))
   2255       return 0;
   2256 
   2257   return ConstantExpr::getGetElementPtr(cast<Constant>(Ops[0]),
   2258                                         (Constant *const*)Ops.data() + 1,
   2259                                         Ops.size() - 1);
   2260 }
   2261 
   2262 /// SimplifyPHINode - See if we can fold the given phi.  If not, returns null.
   2263 static Value *SimplifyPHINode(PHINode *PN, const DominatorTree *DT) {
   2264   // If all of the PHI's incoming values are the same then replace the PHI node
   2265   // with the common value.
   2266   Value *CommonValue = 0;
   2267   bool HasUndefInput = false;
   2268   for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
   2269     Value *Incoming = PN->getIncomingValue(i);
   2270     // If the incoming value is the phi node itself, it can safely be skipped.
   2271     if (Incoming == PN) continue;
   2272     if (isa<UndefValue>(Incoming)) {
   2273       // Remember that we saw an undef value, but otherwise ignore them.
   2274       HasUndefInput = true;
   2275       continue;
   2276     }
   2277     if (CommonValue && Incoming != CommonValue)
   2278       return 0;  // Not the same, bail out.
   2279     CommonValue = Incoming;
   2280   }
   2281 
   2282   // If CommonValue is null then all of the incoming values were either undef or
   2283   // equal to the phi node itself.
   2284   if (!CommonValue)
   2285     return UndefValue::get(PN->getType());
   2286 
   2287   // If we have a PHI node like phi(X, undef, X), where X is defined by some
   2288   // instruction, we cannot return X as the result of the PHI node unless it
   2289   // dominates the PHI block.
   2290   if (HasUndefInput)
   2291     return ValueDominatesPHI(CommonValue, PN, DT) ? CommonValue : 0;
   2292 
   2293   return CommonValue;
   2294 }
   2295 
   2296 
   2297 //=== Helper functions for higher up the class hierarchy.
   2298 
   2299 /// SimplifyBinOp - Given operands for a BinaryOperator, see if we can
   2300 /// fold the result.  If not, this returns null.
   2301 static Value *SimplifyBinOp(unsigned Opcode, Value *LHS, Value *RHS,
   2302                             const TargetData *TD, const DominatorTree *DT,
   2303                             unsigned MaxRecurse) {
   2304   switch (Opcode) {
   2305   case Instruction::Add:
   2306     return SimplifyAddInst(LHS, RHS, /*isNSW*/false, /*isNUW*/false,
   2307                            TD, DT, MaxRecurse);
   2308   case Instruction::Sub:
   2309     return SimplifySubInst(LHS, RHS, /*isNSW*/false, /*isNUW*/false,
   2310                            TD, DT, MaxRecurse);
   2311   case Instruction::Mul:  return SimplifyMulInst (LHS, RHS, TD, DT, MaxRecurse);
   2312   case Instruction::SDiv: return SimplifySDivInst(LHS, RHS, TD, DT, MaxRecurse);
   2313   case Instruction::UDiv: return SimplifyUDivInst(LHS, RHS, TD, DT, MaxRecurse);
   2314   case Instruction::FDiv: return SimplifyFDivInst(LHS, RHS, TD, DT, MaxRecurse);
   2315   case Instruction::SRem: return SimplifySRemInst(LHS, RHS, TD, DT, MaxRecurse);
   2316   case Instruction::URem: return SimplifyURemInst(LHS, RHS, TD, DT, MaxRecurse);
   2317   case Instruction::FRem: return SimplifyFRemInst(LHS, RHS, TD, DT, MaxRecurse);
   2318   case Instruction::Shl:
   2319     return SimplifyShlInst(LHS, RHS, /*isNSW*/false, /*isNUW*/false,
   2320                            TD, DT, MaxRecurse);
   2321   case Instruction::LShr:
   2322     return SimplifyLShrInst(LHS, RHS, /*isExact*/false, TD, DT, MaxRecurse);
   2323   case Instruction::AShr:
   2324     return SimplifyAShrInst(LHS, RHS, /*isExact*/false, TD, DT, MaxRecurse);
   2325   case Instruction::And: return SimplifyAndInst(LHS, RHS, TD, DT, MaxRecurse);
   2326   case Instruction::Or:  return SimplifyOrInst (LHS, RHS, TD, DT, MaxRecurse);
   2327   case Instruction::Xor: return SimplifyXorInst(LHS, RHS, TD, DT, MaxRecurse);
   2328   default:
   2329     if (Constant *CLHS = dyn_cast<Constant>(LHS))
   2330       if (Constant *CRHS = dyn_cast<Constant>(RHS)) {
   2331         Constant *COps[] = {CLHS, CRHS};
   2332         return ConstantFoldInstOperands(Opcode, LHS->getType(), COps, TD);
   2333       }
   2334 
   2335     // If the operation is associative, try some generic simplifications.
   2336     if (Instruction::isAssociative(Opcode))
   2337       if (Value *V = SimplifyAssociativeBinOp(Opcode, LHS, RHS, TD, DT,
   2338                                               MaxRecurse))
   2339         return V;
   2340 
   2341     // If the operation is with the result of a select instruction, check whether
   2342     // operating on either branch of the select always yields the same value.
   2343     if (isa<SelectInst>(LHS) || isa<SelectInst>(RHS))
   2344       if (Value *V = ThreadBinOpOverSelect(Opcode, LHS, RHS, TD, DT,
   2345                                            MaxRecurse))
   2346         return V;
   2347 
   2348     // If the operation is with the result of a phi instruction, check whether
   2349     // operating on all incoming values of the phi always yields the same value.
   2350     if (isa<PHINode>(LHS) || isa<PHINode>(RHS))
   2351       if (Value *V = ThreadBinOpOverPHI(Opcode, LHS, RHS, TD, DT, MaxRecurse))
   2352         return V;
   2353 
   2354     return 0;
   2355   }
   2356 }
   2357 
   2358 Value *llvm::SimplifyBinOp(unsigned Opcode, Value *LHS, Value *RHS,
   2359                            const TargetData *TD, const DominatorTree *DT) {
   2360   return ::SimplifyBinOp(Opcode, LHS, RHS, TD, DT, RecursionLimit);
   2361 }
   2362 
   2363 /// SimplifyCmpInst - Given operands for a CmpInst, see if we can
   2364 /// fold the result.
   2365 static Value *SimplifyCmpInst(unsigned Predicate, Value *LHS, Value *RHS,
   2366                               const TargetData *TD, const DominatorTree *DT,
   2367                               unsigned MaxRecurse) {
   2368   if (CmpInst::isIntPredicate((CmpInst::Predicate)Predicate))
   2369     return SimplifyICmpInst(Predicate, LHS, RHS, TD, DT, MaxRecurse);
   2370   return SimplifyFCmpInst(Predicate, LHS, RHS, TD, DT, MaxRecurse);
   2371 }
   2372 
   2373 Value *llvm::SimplifyCmpInst(unsigned Predicate, Value *LHS, Value *RHS,
   2374                              const TargetData *TD, const DominatorTree *DT) {
   2375   return ::SimplifyCmpInst(Predicate, LHS, RHS, TD, DT, RecursionLimit);
   2376 }
   2377 
   2378 /// SimplifyInstruction - See if we can compute a simplified version of this
   2379 /// instruction.  If not, this returns null.
   2380 Value *llvm::SimplifyInstruction(Instruction *I, const TargetData *TD,
   2381                                  const DominatorTree *DT) {
   2382   Value *Result;
   2383 
   2384   switch (I->getOpcode()) {
   2385   default:
   2386     Result = ConstantFoldInstruction(I, TD);
   2387     break;
   2388   case Instruction::Add:
   2389     Result = SimplifyAddInst(I->getOperand(0), I->getOperand(1),
   2390                              cast<BinaryOperator>(I)->hasNoSignedWrap(),
   2391                              cast<BinaryOperator>(I)->hasNoUnsignedWrap(),
   2392                              TD, DT);
   2393     break;
   2394   case Instruction::Sub:
   2395     Result = SimplifySubInst(I->getOperand(0), I->getOperand(1),
   2396                              cast<BinaryOperator>(I)->hasNoSignedWrap(),
   2397                              cast<BinaryOperator>(I)->hasNoUnsignedWrap(),
   2398                              TD, DT);
   2399     break;
   2400   case Instruction::Mul:
   2401     Result = SimplifyMulInst(I->getOperand(0), I->getOperand(1), TD, DT);
   2402     break;
   2403   case Instruction::SDiv:
   2404     Result = SimplifySDivInst(I->getOperand(0), I->getOperand(1), TD, DT);
   2405     break;
   2406   case Instruction::UDiv:
   2407     Result = SimplifyUDivInst(I->getOperand(0), I->getOperand(1), TD, DT);
   2408     break;
   2409   case Instruction::FDiv:
   2410     Result = SimplifyFDivInst(I->getOperand(0), I->getOperand(1), TD, DT);
   2411     break;
   2412   case Instruction::SRem:
   2413     Result = SimplifySRemInst(I->getOperand(0), I->getOperand(1), TD, DT);
   2414     break;
   2415   case Instruction::URem:
   2416     Result = SimplifyURemInst(I->getOperand(0), I->getOperand(1), TD, DT);
   2417     break;
   2418   case Instruction::FRem:
   2419     Result = SimplifyFRemInst(I->getOperand(0), I->getOperand(1), TD, DT);
   2420     break;
   2421   case Instruction::Shl:
   2422     Result = SimplifyShlInst(I->getOperand(0), I->getOperand(1),
   2423                              cast<BinaryOperator>(I)->hasNoSignedWrap(),
   2424                              cast<BinaryOperator>(I)->hasNoUnsignedWrap(),
   2425                              TD, DT);
   2426     break;
   2427   case Instruction::LShr:
   2428     Result = SimplifyLShrInst(I->getOperand(0), I->getOperand(1),
   2429                               cast<BinaryOperator>(I)->isExact(),
   2430                               TD, DT);
   2431     break;
   2432   case Instruction::AShr:
   2433     Result = SimplifyAShrInst(I->getOperand(0), I->getOperand(1),
   2434                               cast<BinaryOperator>(I)->isExact(),
   2435                               TD, DT);
   2436     break;
   2437   case Instruction::And:
   2438     Result = SimplifyAndInst(I->getOperand(0), I->getOperand(1), TD, DT);
   2439     break;
   2440   case Instruction::Or:
   2441     Result = SimplifyOrInst(I->getOperand(0), I->getOperand(1), TD, DT);
   2442     break;
   2443   case Instruction::Xor:
   2444     Result = SimplifyXorInst(I->getOperand(0), I->getOperand(1), TD, DT);
   2445     break;
   2446   case Instruction::ICmp:
   2447     Result = SimplifyICmpInst(cast<ICmpInst>(I)->getPredicate(),
   2448                               I->getOperand(0), I->getOperand(1), TD, DT);
   2449     break;
   2450   case Instruction::FCmp:
   2451     Result = SimplifyFCmpInst(cast<FCmpInst>(I)->getPredicate(),
   2452                               I->getOperand(0), I->getOperand(1), TD, DT);
   2453     break;
   2454   case Instruction::Select:
   2455     Result = SimplifySelectInst(I->getOperand(0), I->getOperand(1),
   2456                                 I->getOperand(2), TD, DT);
   2457     break;
   2458   case Instruction::GetElementPtr: {
   2459     SmallVector<Value*, 8> Ops(I->op_begin(), I->op_end());
   2460     Result = SimplifyGEPInst(Ops, TD, DT);
   2461     break;
   2462   }
   2463   case Instruction::PHI:
   2464     Result = SimplifyPHINode(cast<PHINode>(I), DT);
   2465     break;
   2466   }
   2467 
   2468   /// If called on unreachable code, the above logic may report that the
   2469   /// instruction simplified to itself.  Make life easier for users by
   2470   /// detecting that case here, returning a safe value instead.
   2471   return Result == I ? UndefValue::get(I->getType()) : Result;
   2472 }
   2473 
   2474 /// ReplaceAndSimplifyAllUses - Perform From->replaceAllUsesWith(To) and then
   2475 /// delete the From instruction.  In addition to a basic RAUW, this does a
   2476 /// recursive simplification of the newly formed instructions.  This catches
   2477 /// things where one simplification exposes other opportunities.  This only
   2478 /// simplifies and deletes scalar operations, it does not change the CFG.
   2479 ///
   2480 void llvm::ReplaceAndSimplifyAllUses(Instruction *From, Value *To,
   2481                                      const TargetData *TD,
   2482                                      const DominatorTree *DT) {
   2483   assert(From != To && "ReplaceAndSimplifyAllUses(X,X) is not valid!");
   2484 
   2485   // FromHandle/ToHandle - This keeps a WeakVH on the from/to values so that
   2486   // we can know if it gets deleted out from under us or replaced in a
   2487   // recursive simplification.
   2488   WeakVH FromHandle(From);
   2489   WeakVH ToHandle(To);
   2490 
   2491   while (!From->use_empty()) {
   2492     // Update the instruction to use the new value.
   2493     Use &TheUse = From->use_begin().getUse();
   2494     Instruction *User = cast<Instruction>(TheUse.getUser());
   2495     TheUse = To;
   2496 
   2497     // Check to see if the instruction can be folded due to the operand
   2498     // replacement.  For example changing (or X, Y) into (or X, -1) can replace
   2499     // the 'or' with -1.
   2500     Value *SimplifiedVal;
   2501     {
   2502       // Sanity check to make sure 'User' doesn't dangle across
   2503       // SimplifyInstruction.
   2504       AssertingVH<> UserHandle(User);
   2505 
   2506       SimplifiedVal = SimplifyInstruction(User, TD, DT);
   2507       if (SimplifiedVal == 0) continue;
   2508     }
   2509 
   2510     // Recursively simplify this user to the new value.
   2511     ReplaceAndSimplifyAllUses(User, SimplifiedVal, TD, DT);
   2512     From = dyn_cast_or_null<Instruction>((Value*)FromHandle);
   2513     To = ToHandle;
   2514 
   2515     assert(ToHandle && "To value deleted by recursive simplification?");
   2516 
   2517     // If the recursive simplification ended up revisiting and deleting
   2518     // 'From' then we're done.
   2519     if (From == 0)
   2520       return;
   2521   }
   2522 
   2523   // If 'From' has value handles referring to it, do a real RAUW to update them.
   2524   From->replaceAllUsesWith(To);
   2525 
   2526   From->eraseFromParent();
   2527 }
   2528