Home | History | Annotate | Download | only in InstCombine
      1 //===- InstCombineAndOrXor.cpp --------------------------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file implements the visitAnd, visitOr, and visitXor functions.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #include "InstCombine.h"
     15 #include "llvm/Analysis/InstructionSimplify.h"
     16 #include "llvm/IR/ConstantRange.h"
     17 #include "llvm/IR/Intrinsics.h"
     18 #include "llvm/IR/PatternMatch.h"
     19 #include "llvm/Transforms/Utils/CmpInstAnalysis.h"
     20 using namespace llvm;
     21 using namespace PatternMatch;
     22 
     23 #define DEBUG_TYPE "instcombine"
     24 
     25 /// isFreeToInvert - Return true if the specified value is free to invert (apply
     26 /// ~ to).  This happens in cases where the ~ can be eliminated.
     27 static inline bool isFreeToInvert(Value *V) {
     28   // ~(~(X)) -> X.
     29   if (BinaryOperator::isNot(V))
     30     return true;
     31 
     32   // Constants can be considered to be not'ed values.
     33   if (isa<ConstantInt>(V))
     34     return true;
     35 
     36   // Compares can be inverted if they have a single use.
     37   if (CmpInst *CI = dyn_cast<CmpInst>(V))
     38     return CI->hasOneUse();
     39 
     40   return false;
     41 }
     42 
     43 static inline Value *dyn_castNotVal(Value *V) {
     44   // If this is not(not(x)) don't return that this is a not: we want the two
     45   // not's to be folded first.
     46   if (BinaryOperator::isNot(V)) {
     47     Value *Operand = BinaryOperator::getNotArgument(V);
     48     if (!isFreeToInvert(Operand))
     49       return Operand;
     50   }
     51 
     52   // Constants can be considered to be not'ed values...
     53   if (ConstantInt *C = dyn_cast<ConstantInt>(V))
     54     return ConstantInt::get(C->getType(), ~C->getValue());
     55   return nullptr;
     56 }
     57 
     58 /// getFCmpCode - Similar to getICmpCode but for FCmpInst. This encodes a fcmp
     59 /// predicate into a three bit mask. It also returns whether it is an ordered
     60 /// predicate by reference.
     61 static unsigned getFCmpCode(FCmpInst::Predicate CC, bool &isOrdered) {
     62   isOrdered = false;
     63   switch (CC) {
     64   case FCmpInst::FCMP_ORD: isOrdered = true; return 0;  // 000
     65   case FCmpInst::FCMP_UNO:                   return 0;  // 000
     66   case FCmpInst::FCMP_OGT: isOrdered = true; return 1;  // 001
     67   case FCmpInst::FCMP_UGT:                   return 1;  // 001
     68   case FCmpInst::FCMP_OEQ: isOrdered = true; return 2;  // 010
     69   case FCmpInst::FCMP_UEQ:                   return 2;  // 010
     70   case FCmpInst::FCMP_OGE: isOrdered = true; return 3;  // 011
     71   case FCmpInst::FCMP_UGE:                   return 3;  // 011
     72   case FCmpInst::FCMP_OLT: isOrdered = true; return 4;  // 100
     73   case FCmpInst::FCMP_ULT:                   return 4;  // 100
     74   case FCmpInst::FCMP_ONE: isOrdered = true; return 5;  // 101
     75   case FCmpInst::FCMP_UNE:                   return 5;  // 101
     76   case FCmpInst::FCMP_OLE: isOrdered = true; return 6;  // 110
     77   case FCmpInst::FCMP_ULE:                   return 6;  // 110
     78     // True -> 7
     79   default:
     80     // Not expecting FCMP_FALSE and FCMP_TRUE;
     81     llvm_unreachable("Unexpected FCmp predicate!");
     82   }
     83 }
     84 
     85 /// getNewICmpValue - This is the complement of getICmpCode, which turns an
     86 /// opcode and two operands into either a constant true or false, or a brand
     87 /// new ICmp instruction. The sign is passed in to determine which kind
     88 /// of predicate to use in the new icmp instruction.
     89 static Value *getNewICmpValue(bool Sign, unsigned Code, Value *LHS, Value *RHS,
     90                               InstCombiner::BuilderTy *Builder) {
     91   ICmpInst::Predicate NewPred;
     92   if (Value *NewConstant = getICmpValue(Sign, Code, LHS, RHS, NewPred))
     93     return NewConstant;
     94   return Builder->CreateICmp(NewPred, LHS, RHS);
     95 }
     96 
     97 /// getFCmpValue - This is the complement of getFCmpCode, which turns an
     98 /// opcode and two operands into either a FCmp instruction. isordered is passed
     99 /// in to determine which kind of predicate to use in the new fcmp instruction.
    100 static Value *getFCmpValue(bool isordered, unsigned code,
    101                            Value *LHS, Value *RHS,
    102                            InstCombiner::BuilderTy *Builder) {
    103   CmpInst::Predicate Pred;
    104   switch (code) {
    105   default: llvm_unreachable("Illegal FCmp code!");
    106   case 0: Pred = isordered ? FCmpInst::FCMP_ORD : FCmpInst::FCMP_UNO; break;
    107   case 1: Pred = isordered ? FCmpInst::FCMP_OGT : FCmpInst::FCMP_UGT; break;
    108   case 2: Pred = isordered ? FCmpInst::FCMP_OEQ : FCmpInst::FCMP_UEQ; break;
    109   case 3: Pred = isordered ? FCmpInst::FCMP_OGE : FCmpInst::FCMP_UGE; break;
    110   case 4: Pred = isordered ? FCmpInst::FCMP_OLT : FCmpInst::FCMP_ULT; break;
    111   case 5: Pred = isordered ? FCmpInst::FCMP_ONE : FCmpInst::FCMP_UNE; break;
    112   case 6: Pred = isordered ? FCmpInst::FCMP_OLE : FCmpInst::FCMP_ULE; break;
    113   case 7:
    114     if (!isordered) return ConstantInt::getTrue(LHS->getContext());
    115     Pred = FCmpInst::FCMP_ORD; break;
    116   }
    117   return Builder->CreateFCmp(Pred, LHS, RHS);
    118 }
    119 
    120 // OptAndOp - This handles expressions of the form ((val OP C1) & C2).  Where
    121 // the Op parameter is 'OP', OpRHS is 'C1', and AndRHS is 'C2'.  Op is
    122 // guaranteed to be a binary operator.
    123 Instruction *InstCombiner::OptAndOp(Instruction *Op,
    124                                     ConstantInt *OpRHS,
    125                                     ConstantInt *AndRHS,
    126                                     BinaryOperator &TheAnd) {
    127   Value *X = Op->getOperand(0);
    128   Constant *Together = nullptr;
    129   if (!Op->isShift())
    130     Together = ConstantExpr::getAnd(AndRHS, OpRHS);
    131 
    132   switch (Op->getOpcode()) {
    133   case Instruction::Xor:
    134     if (Op->hasOneUse()) {
    135       // (X ^ C1) & C2 --> (X & C2) ^ (C1&C2)
    136       Value *And = Builder->CreateAnd(X, AndRHS);
    137       And->takeName(Op);
    138       return BinaryOperator::CreateXor(And, Together);
    139     }
    140     break;
    141   case Instruction::Or:
    142     if (Op->hasOneUse()){
    143       if (Together != OpRHS) {
    144         // (X | C1) & C2 --> (X | (C1&C2)) & C2
    145         Value *Or = Builder->CreateOr(X, Together);
    146         Or->takeName(Op);
    147         return BinaryOperator::CreateAnd(Or, AndRHS);
    148       }
    149 
    150       ConstantInt *TogetherCI = dyn_cast<ConstantInt>(Together);
    151       if (TogetherCI && !TogetherCI->isZero()){
    152         // (X | C1) & C2 --> (X & (C2^(C1&C2))) | C1
    153         // NOTE: This reduces the number of bits set in the & mask, which
    154         // can expose opportunities for store narrowing.
    155         Together = ConstantExpr::getXor(AndRHS, Together);
    156         Value *And = Builder->CreateAnd(X, Together);
    157         And->takeName(Op);
    158         return BinaryOperator::CreateOr(And, OpRHS);
    159       }
    160     }
    161 
    162     break;
    163   case Instruction::Add:
    164     if (Op->hasOneUse()) {
    165       // Adding a one to a single bit bit-field should be turned into an XOR
    166       // of the bit.  First thing to check is to see if this AND is with a
    167       // single bit constant.
    168       const APInt &AndRHSV = AndRHS->getValue();
    169 
    170       // If there is only one bit set.
    171       if (AndRHSV.isPowerOf2()) {
    172         // Ok, at this point, we know that we are masking the result of the
    173         // ADD down to exactly one bit.  If the constant we are adding has
    174         // no bits set below this bit, then we can eliminate the ADD.
    175         const APInt& AddRHS = OpRHS->getValue();
    176 
    177         // Check to see if any bits below the one bit set in AndRHSV are set.
    178         if ((AddRHS & (AndRHSV-1)) == 0) {
    179           // If not, the only thing that can effect the output of the AND is
    180           // the bit specified by AndRHSV.  If that bit is set, the effect of
    181           // the XOR is to toggle the bit.  If it is clear, then the ADD has
    182           // no effect.
    183           if ((AddRHS & AndRHSV) == 0) { // Bit is not set, noop
    184             TheAnd.setOperand(0, X);
    185             return &TheAnd;
    186           } else {
    187             // Pull the XOR out of the AND.
    188             Value *NewAnd = Builder->CreateAnd(X, AndRHS);
    189             NewAnd->takeName(Op);
    190             return BinaryOperator::CreateXor(NewAnd, AndRHS);
    191           }
    192         }
    193       }
    194     }
    195     break;
    196 
    197   case Instruction::Shl: {
    198     // We know that the AND will not produce any of the bits shifted in, so if
    199     // the anded constant includes them, clear them now!
    200     //
    201     uint32_t BitWidth = AndRHS->getType()->getBitWidth();
    202     uint32_t OpRHSVal = OpRHS->getLimitedValue(BitWidth);
    203     APInt ShlMask(APInt::getHighBitsSet(BitWidth, BitWidth-OpRHSVal));
    204     ConstantInt *CI = Builder->getInt(AndRHS->getValue() & ShlMask);
    205 
    206     if (CI->getValue() == ShlMask)
    207       // Masking out bits that the shift already masks.
    208       return ReplaceInstUsesWith(TheAnd, Op);   // No need for the and.
    209 
    210     if (CI != AndRHS) {                  // Reducing bits set in and.
    211       TheAnd.setOperand(1, CI);
    212       return &TheAnd;
    213     }
    214     break;
    215   }
    216   case Instruction::LShr: {
    217     // We know that the AND will not produce any of the bits shifted in, so if
    218     // the anded constant includes them, clear them now!  This only applies to
    219     // unsigned shifts, because a signed shr may bring in set bits!
    220     //
    221     uint32_t BitWidth = AndRHS->getType()->getBitWidth();
    222     uint32_t OpRHSVal = OpRHS->getLimitedValue(BitWidth);
    223     APInt ShrMask(APInt::getLowBitsSet(BitWidth, BitWidth - OpRHSVal));
    224     ConstantInt *CI = Builder->getInt(AndRHS->getValue() & ShrMask);
    225 
    226     if (CI->getValue() == ShrMask)
    227       // Masking out bits that the shift already masks.
    228       return ReplaceInstUsesWith(TheAnd, Op);
    229 
    230     if (CI != AndRHS) {
    231       TheAnd.setOperand(1, CI);  // Reduce bits set in and cst.
    232       return &TheAnd;
    233     }
    234     break;
    235   }
    236   case Instruction::AShr:
    237     // Signed shr.
    238     // See if this is shifting in some sign extension, then masking it out
    239     // with an and.
    240     if (Op->hasOneUse()) {
    241       uint32_t BitWidth = AndRHS->getType()->getBitWidth();
    242       uint32_t OpRHSVal = OpRHS->getLimitedValue(BitWidth);
    243       APInt ShrMask(APInt::getLowBitsSet(BitWidth, BitWidth - OpRHSVal));
    244       Constant *C = Builder->getInt(AndRHS->getValue() & ShrMask);
    245       if (C == AndRHS) {          // Masking out bits shifted in.
    246         // (Val ashr C1) & C2 -> (Val lshr C1) & C2
    247         // Make the argument unsigned.
    248         Value *ShVal = Op->getOperand(0);
    249         ShVal = Builder->CreateLShr(ShVal, OpRHS, Op->getName());
    250         return BinaryOperator::CreateAnd(ShVal, AndRHS, TheAnd.getName());
    251       }
    252     }
    253     break;
    254   }
    255   return nullptr;
    256 }
    257 
    258 /// Emit a computation of: (V >= Lo && V < Hi) if Inside is true, otherwise
    259 /// (V < Lo || V >= Hi).  In practice, we emit the more efficient
    260 /// (V-Lo) \<u Hi-Lo.  This method expects that Lo <= Hi. isSigned indicates
    261 /// whether to treat the V, Lo and HI as signed or not. IB is the location to
    262 /// insert new instructions.
    263 Value *InstCombiner::InsertRangeTest(Value *V, Constant *Lo, Constant *Hi,
    264                                      bool isSigned, bool Inside) {
    265   assert(cast<ConstantInt>(ConstantExpr::getICmp((isSigned ?
    266             ICmpInst::ICMP_SLE:ICmpInst::ICMP_ULE), Lo, Hi))->getZExtValue() &&
    267          "Lo is not <= Hi in range emission code!");
    268 
    269   if (Inside) {
    270     if (Lo == Hi)  // Trivially false.
    271       return Builder->getFalse();
    272 
    273     // V >= Min && V < Hi --> V < Hi
    274     if (cast<ConstantInt>(Lo)->isMinValue(isSigned)) {
    275       ICmpInst::Predicate pred = (isSigned ?
    276         ICmpInst::ICMP_SLT : ICmpInst::ICMP_ULT);
    277       return Builder->CreateICmp(pred, V, Hi);
    278     }
    279 
    280     // Emit V-Lo <u Hi-Lo
    281     Constant *NegLo = ConstantExpr::getNeg(Lo);
    282     Value *Add = Builder->CreateAdd(V, NegLo, V->getName()+".off");
    283     Constant *UpperBound = ConstantExpr::getAdd(NegLo, Hi);
    284     return Builder->CreateICmpULT(Add, UpperBound);
    285   }
    286 
    287   if (Lo == Hi)  // Trivially true.
    288     return Builder->getTrue();
    289 
    290   // V < Min || V >= Hi -> V > Hi-1
    291   Hi = SubOne(cast<ConstantInt>(Hi));
    292   if (cast<ConstantInt>(Lo)->isMinValue(isSigned)) {
    293     ICmpInst::Predicate pred = (isSigned ?
    294         ICmpInst::ICMP_SGT : ICmpInst::ICMP_UGT);
    295     return Builder->CreateICmp(pred, V, Hi);
    296   }
    297 
    298   // Emit V-Lo >u Hi-1-Lo
    299   // Note that Hi has already had one subtracted from it, above.
    300   ConstantInt *NegLo = cast<ConstantInt>(ConstantExpr::getNeg(Lo));
    301   Value *Add = Builder->CreateAdd(V, NegLo, V->getName()+".off");
    302   Constant *LowerBound = ConstantExpr::getAdd(NegLo, Hi);
    303   return Builder->CreateICmpUGT(Add, LowerBound);
    304 }
    305 
    306 // isRunOfOnes - Returns true iff Val consists of one contiguous run of 1s with
    307 // any number of 0s on either side.  The 1s are allowed to wrap from LSB to
    308 // MSB, so 0x000FFF0, 0x0000FFFF, and 0xFF0000FF are all runs.  0x0F0F0000 is
    309 // not, since all 1s are not contiguous.
    310 static bool isRunOfOnes(ConstantInt *Val, uint32_t &MB, uint32_t &ME) {
    311   const APInt& V = Val->getValue();
    312   uint32_t BitWidth = Val->getType()->getBitWidth();
    313   if (!APIntOps::isShiftedMask(BitWidth, V)) return false;
    314 
    315   // look for the first zero bit after the run of ones
    316   MB = BitWidth - ((V - 1) ^ V).countLeadingZeros();
    317   // look for the first non-zero bit
    318   ME = V.getActiveBits();
    319   return true;
    320 }
    321 
    322 /// FoldLogicalPlusAnd - This is part of an expression (LHS +/- RHS) & Mask,
    323 /// where isSub determines whether the operator is a sub.  If we can fold one of
    324 /// the following xforms:
    325 ///
    326 /// ((A & N) +/- B) & Mask -> (A +/- B) & Mask iff N&Mask == Mask
    327 /// ((A | N) +/- B) & Mask -> (A +/- B) & Mask iff N&Mask == 0
    328 /// ((A ^ N) +/- B) & Mask -> (A +/- B) & Mask iff N&Mask == 0
    329 ///
    330 /// return (A +/- B).
    331 ///
    332 Value *InstCombiner::FoldLogicalPlusAnd(Value *LHS, Value *RHS,
    333                                         ConstantInt *Mask, bool isSub,
    334                                         Instruction &I) {
    335   Instruction *LHSI = dyn_cast<Instruction>(LHS);
    336   if (!LHSI || LHSI->getNumOperands() != 2 ||
    337       !isa<ConstantInt>(LHSI->getOperand(1))) return nullptr;
    338 
    339   ConstantInt *N = cast<ConstantInt>(LHSI->getOperand(1));
    340 
    341   switch (LHSI->getOpcode()) {
    342   default: return nullptr;
    343   case Instruction::And:
    344     if (ConstantExpr::getAnd(N, Mask) == Mask) {
    345       // If the AndRHS is a power of two minus one (0+1+), this is simple.
    346       if ((Mask->getValue().countLeadingZeros() +
    347            Mask->getValue().countPopulation()) ==
    348           Mask->getValue().getBitWidth())
    349         break;
    350 
    351       // Otherwise, if Mask is 0+1+0+, and if B is known to have the low 0+
    352       // part, we don't need any explicit masks to take them out of A.  If that
    353       // is all N is, ignore it.
    354       uint32_t MB = 0, ME = 0;
    355       if (isRunOfOnes(Mask, MB, ME)) {  // begin/end bit of run, inclusive
    356         uint32_t BitWidth = cast<IntegerType>(RHS->getType())->getBitWidth();
    357         APInt Mask(APInt::getLowBitsSet(BitWidth, MB-1));
    358         if (MaskedValueIsZero(RHS, Mask))
    359           break;
    360       }
    361     }
    362     return nullptr;
    363   case Instruction::Or:
    364   case Instruction::Xor:
    365     // If the AndRHS is a power of two minus one (0+1+), and N&Mask == 0
    366     if ((Mask->getValue().countLeadingZeros() +
    367          Mask->getValue().countPopulation()) == Mask->getValue().getBitWidth()
    368         && ConstantExpr::getAnd(N, Mask)->isNullValue())
    369       break;
    370     return nullptr;
    371   }
    372 
    373   if (isSub)
    374     return Builder->CreateSub(LHSI->getOperand(0), RHS, "fold");
    375   return Builder->CreateAdd(LHSI->getOperand(0), RHS, "fold");
    376 }
    377 
    378 /// enum for classifying (icmp eq (A & B), C) and (icmp ne (A & B), C)
    379 /// One of A and B is considered the mask, the other the value. This is
    380 /// described as the "AMask" or "BMask" part of the enum. If the enum
    381 /// contains only "Mask", then both A and B can be considered masks.
    382 /// If A is the mask, then it was proven, that (A & C) == C. This
    383 /// is trivial if C == A, or C == 0. If both A and C are constants, this
    384 /// proof is also easy.
    385 /// For the following explanations we assume that A is the mask.
    386 /// The part "AllOnes" declares, that the comparison is true only
    387 /// if (A & B) == A, or all bits of A are set in B.
    388 ///   Example: (icmp eq (A & 3), 3) -> FoldMskICmp_AMask_AllOnes
    389 /// The part "AllZeroes" declares, that the comparison is true only
    390 /// if (A & B) == 0, or all bits of A are cleared in B.
    391 ///   Example: (icmp eq (A & 3), 0) -> FoldMskICmp_Mask_AllZeroes
    392 /// The part "Mixed" declares, that (A & B) == C and C might or might not
    393 /// contain any number of one bits and zero bits.
    394 ///   Example: (icmp eq (A & 3), 1) -> FoldMskICmp_AMask_Mixed
    395 /// The Part "Not" means, that in above descriptions "==" should be replaced
    396 /// by "!=".
    397 ///   Example: (icmp ne (A & 3), 3) -> FoldMskICmp_AMask_NotAllOnes
    398 /// If the mask A contains a single bit, then the following is equivalent:
    399 ///    (icmp eq (A & B), A) equals (icmp ne (A & B), 0)
    400 ///    (icmp ne (A & B), A) equals (icmp eq (A & B), 0)
    401 enum MaskedICmpType {
    402   FoldMskICmp_AMask_AllOnes           =     1,
    403   FoldMskICmp_AMask_NotAllOnes        =     2,
    404   FoldMskICmp_BMask_AllOnes           =     4,
    405   FoldMskICmp_BMask_NotAllOnes        =     8,
    406   FoldMskICmp_Mask_AllZeroes          =    16,
    407   FoldMskICmp_Mask_NotAllZeroes       =    32,
    408   FoldMskICmp_AMask_Mixed             =    64,
    409   FoldMskICmp_AMask_NotMixed          =   128,
    410   FoldMskICmp_BMask_Mixed             =   256,
    411   FoldMskICmp_BMask_NotMixed          =   512
    412 };
    413 
    414 /// return the set of pattern classes (from MaskedICmpType)
    415 /// that (icmp SCC (A & B), C) satisfies
    416 static unsigned getTypeOfMaskedICmp(Value* A, Value* B, Value* C,
    417                                     ICmpInst::Predicate SCC)
    418 {
    419   ConstantInt *ACst = dyn_cast<ConstantInt>(A);
    420   ConstantInt *BCst = dyn_cast<ConstantInt>(B);
    421   ConstantInt *CCst = dyn_cast<ConstantInt>(C);
    422   bool icmp_eq = (SCC == ICmpInst::ICMP_EQ);
    423   bool icmp_abit = (ACst && !ACst->isZero() &&
    424                     ACst->getValue().isPowerOf2());
    425   bool icmp_bbit = (BCst && !BCst->isZero() &&
    426                     BCst->getValue().isPowerOf2());
    427   unsigned result = 0;
    428   if (CCst && CCst->isZero()) {
    429     // if C is zero, then both A and B qualify as mask
    430     result |= (icmp_eq ? (FoldMskICmp_Mask_AllZeroes |
    431                           FoldMskICmp_Mask_AllZeroes |
    432                           FoldMskICmp_AMask_Mixed |
    433                           FoldMskICmp_BMask_Mixed)
    434                        : (FoldMskICmp_Mask_NotAllZeroes |
    435                           FoldMskICmp_Mask_NotAllZeroes |
    436                           FoldMskICmp_AMask_NotMixed |
    437                           FoldMskICmp_BMask_NotMixed));
    438     if (icmp_abit)
    439       result |= (icmp_eq ? (FoldMskICmp_AMask_NotAllOnes |
    440                             FoldMskICmp_AMask_NotMixed)
    441                          : (FoldMskICmp_AMask_AllOnes |
    442                             FoldMskICmp_AMask_Mixed));
    443     if (icmp_bbit)
    444       result |= (icmp_eq ? (FoldMskICmp_BMask_NotAllOnes |
    445                             FoldMskICmp_BMask_NotMixed)
    446                          : (FoldMskICmp_BMask_AllOnes |
    447                             FoldMskICmp_BMask_Mixed));
    448     return result;
    449   }
    450   if (A == C) {
    451     result |= (icmp_eq ? (FoldMskICmp_AMask_AllOnes |
    452                           FoldMskICmp_AMask_Mixed)
    453                        : (FoldMskICmp_AMask_NotAllOnes |
    454                           FoldMskICmp_AMask_NotMixed));
    455     if (icmp_abit)
    456       result |= (icmp_eq ? (FoldMskICmp_Mask_NotAllZeroes |
    457                             FoldMskICmp_AMask_NotMixed)
    458                          : (FoldMskICmp_Mask_AllZeroes |
    459                             FoldMskICmp_AMask_Mixed));
    460   } else if (ACst && CCst &&
    461              ConstantExpr::getAnd(ACst, CCst) == CCst) {
    462     result |= (icmp_eq ? FoldMskICmp_AMask_Mixed
    463                        : FoldMskICmp_AMask_NotMixed);
    464   }
    465   if (B == C) {
    466     result |= (icmp_eq ? (FoldMskICmp_BMask_AllOnes |
    467                           FoldMskICmp_BMask_Mixed)
    468                        : (FoldMskICmp_BMask_NotAllOnes |
    469                           FoldMskICmp_BMask_NotMixed));
    470     if (icmp_bbit)
    471       result |= (icmp_eq ? (FoldMskICmp_Mask_NotAllZeroes |
    472                             FoldMskICmp_BMask_NotMixed)
    473                          : (FoldMskICmp_Mask_AllZeroes |
    474                             FoldMskICmp_BMask_Mixed));
    475   } else if (BCst && CCst &&
    476              ConstantExpr::getAnd(BCst, CCst) == CCst) {
    477     result |= (icmp_eq ? FoldMskICmp_BMask_Mixed
    478                        : FoldMskICmp_BMask_NotMixed);
    479   }
    480   return result;
    481 }
    482 
    483 /// Convert an analysis of a masked ICmp into its equivalent if all boolean
    484 /// operations had the opposite sense. Since each "NotXXX" flag (recording !=)
    485 /// is adjacent to the corresponding normal flag (recording ==), this just
    486 /// involves swapping those bits over.
    487 static unsigned conjugateICmpMask(unsigned Mask) {
    488   unsigned NewMask;
    489   NewMask = (Mask & (FoldMskICmp_AMask_AllOnes | FoldMskICmp_BMask_AllOnes |
    490                      FoldMskICmp_Mask_AllZeroes | FoldMskICmp_AMask_Mixed |
    491                      FoldMskICmp_BMask_Mixed))
    492             << 1;
    493 
    494   NewMask |=
    495       (Mask & (FoldMskICmp_AMask_NotAllOnes | FoldMskICmp_BMask_NotAllOnes |
    496                FoldMskICmp_Mask_NotAllZeroes | FoldMskICmp_AMask_NotMixed |
    497                FoldMskICmp_BMask_NotMixed))
    498       >> 1;
    499 
    500   return NewMask;
    501 }
    502 
    503 /// decomposeBitTestICmp - Decompose an icmp into the form ((X & Y) pred Z)
    504 /// if possible. The returned predicate is either == or !=. Returns false if
    505 /// decomposition fails.
    506 static bool decomposeBitTestICmp(const ICmpInst *I, ICmpInst::Predicate &Pred,
    507                                  Value *&X, Value *&Y, Value *&Z) {
    508   ConstantInt *C = dyn_cast<ConstantInt>(I->getOperand(1));
    509   if (!C)
    510     return false;
    511 
    512   switch (I->getPredicate()) {
    513   default:
    514     return false;
    515   case ICmpInst::ICMP_SLT:
    516     // X < 0 is equivalent to (X & SignBit) != 0.
    517     if (!C->isZero())
    518       return false;
    519     Y = ConstantInt::get(I->getContext(), APInt::getSignBit(C->getBitWidth()));
    520     Pred = ICmpInst::ICMP_NE;
    521     break;
    522   case ICmpInst::ICMP_SGT:
    523     // X > -1 is equivalent to (X & SignBit) == 0.
    524     if (!C->isAllOnesValue())
    525       return false;
    526     Y = ConstantInt::get(I->getContext(), APInt::getSignBit(C->getBitWidth()));
    527     Pred = ICmpInst::ICMP_EQ;
    528     break;
    529   case ICmpInst::ICMP_ULT:
    530     // X <u 2^n is equivalent to (X & ~(2^n-1)) == 0.
    531     if (!C->getValue().isPowerOf2())
    532       return false;
    533     Y = ConstantInt::get(I->getContext(), -C->getValue());
    534     Pred = ICmpInst::ICMP_EQ;
    535     break;
    536   case ICmpInst::ICMP_UGT:
    537     // X >u 2^n-1 is equivalent to (X & ~(2^n-1)) != 0.
    538     if (!(C->getValue() + 1).isPowerOf2())
    539       return false;
    540     Y = ConstantInt::get(I->getContext(), ~C->getValue());
    541     Pred = ICmpInst::ICMP_NE;
    542     break;
    543   }
    544 
    545   X = I->getOperand(0);
    546   Z = ConstantInt::getNullValue(C->getType());
    547   return true;
    548 }
    549 
    550 /// foldLogOpOfMaskedICmpsHelper:
    551 /// handle (icmp(A & B) ==/!= C) &/| (icmp(A & D) ==/!= E)
    552 /// return the set of pattern classes (from MaskedICmpType)
    553 /// that both LHS and RHS satisfy
    554 static unsigned foldLogOpOfMaskedICmpsHelper(Value*& A,
    555                                              Value*& B, Value*& C,
    556                                              Value*& D, Value*& E,
    557                                              ICmpInst *LHS, ICmpInst *RHS,
    558                                              ICmpInst::Predicate &LHSCC,
    559                                              ICmpInst::Predicate &RHSCC) {
    560   if (LHS->getOperand(0)->getType() != RHS->getOperand(0)->getType()) return 0;
    561   // vectors are not (yet?) supported
    562   if (LHS->getOperand(0)->getType()->isVectorTy()) return 0;
    563 
    564   // Here comes the tricky part:
    565   // LHS might be of the form L11 & L12 == X, X == L21 & L22,
    566   // and L11 & L12 == L21 & L22. The same goes for RHS.
    567   // Now we must find those components L** and R**, that are equal, so
    568   // that we can extract the parameters A, B, C, D, and E for the canonical
    569   // above.
    570   Value *L1 = LHS->getOperand(0);
    571   Value *L2 = LHS->getOperand(1);
    572   Value *L11,*L12,*L21,*L22;
    573   // Check whether the icmp can be decomposed into a bit test.
    574   if (decomposeBitTestICmp(LHS, LHSCC, L11, L12, L2)) {
    575     L21 = L22 = L1 = nullptr;
    576   } else {
    577     // Look for ANDs in the LHS icmp.
    578     if (!L1->getType()->isIntegerTy()) {
    579       // You can icmp pointers, for example. They really aren't masks.
    580       L11 = L12 = nullptr;
    581     } else if (!match(L1, m_And(m_Value(L11), m_Value(L12)))) {
    582       // Any icmp can be viewed as being trivially masked; if it allows us to
    583       // remove one, it's worth it.
    584       L11 = L1;
    585       L12 = Constant::getAllOnesValue(L1->getType());
    586     }
    587 
    588     if (!L2->getType()->isIntegerTy()) {
    589       // You can icmp pointers, for example. They really aren't masks.
    590       L21 = L22 = nullptr;
    591     } else if (!match(L2, m_And(m_Value(L21), m_Value(L22)))) {
    592       L21 = L2;
    593       L22 = Constant::getAllOnesValue(L2->getType());
    594     }
    595   }
    596 
    597   // Bail if LHS was a icmp that can't be decomposed into an equality.
    598   if (!ICmpInst::isEquality(LHSCC))
    599     return 0;
    600 
    601   Value *R1 = RHS->getOperand(0);
    602   Value *R2 = RHS->getOperand(1);
    603   Value *R11,*R12;
    604   bool ok = false;
    605   if (decomposeBitTestICmp(RHS, RHSCC, R11, R12, R2)) {
    606     if (R11 == L11 || R11 == L12 || R11 == L21 || R11 == L22) {
    607       A = R11; D = R12;
    608     } else if (R12 == L11 || R12 == L12 || R12 == L21 || R12 == L22) {
    609       A = R12; D = R11;
    610     } else {
    611       return 0;
    612     }
    613     E = R2; R1 = nullptr; ok = true;
    614   } else if (R1->getType()->isIntegerTy()) {
    615     if (!match(R1, m_And(m_Value(R11), m_Value(R12)))) {
    616       // As before, model no mask as a trivial mask if it'll let us do an
    617       // optimisation.
    618       R11 = R1;
    619       R12 = Constant::getAllOnesValue(R1->getType());
    620     }
    621 
    622     if (R11 == L11 || R11 == L12 || R11 == L21 || R11 == L22) {
    623       A = R11; D = R12; E = R2; ok = true;
    624     } else if (R12 == L11 || R12 == L12 || R12 == L21 || R12 == L22) {
    625       A = R12; D = R11; E = R2; ok = true;
    626     }
    627   }
    628 
    629   // Bail if RHS was a icmp that can't be decomposed into an equality.
    630   if (!ICmpInst::isEquality(RHSCC))
    631     return 0;
    632 
    633   // Look for ANDs in on the right side of the RHS icmp.
    634   if (!ok && R2->getType()->isIntegerTy()) {
    635     if (!match(R2, m_And(m_Value(R11), m_Value(R12)))) {
    636       R11 = R2;
    637       R12 = Constant::getAllOnesValue(R2->getType());
    638     }
    639 
    640     if (R11 == L11 || R11 == L12 || R11 == L21 || R11 == L22) {
    641       A = R11; D = R12; E = R1; ok = true;
    642     } else if (R12 == L11 || R12 == L12 || R12 == L21 || R12 == L22) {
    643       A = R12; D = R11; E = R1; ok = true;
    644     } else {
    645       return 0;
    646     }
    647   }
    648   if (!ok)
    649     return 0;
    650 
    651   if (L11 == A) {
    652     B = L12; C = L2;
    653   } else if (L12 == A) {
    654     B = L11; C = L2;
    655   } else if (L21 == A) {
    656     B = L22; C = L1;
    657   } else if (L22 == A) {
    658     B = L21; C = L1;
    659   }
    660 
    661   unsigned left_type = getTypeOfMaskedICmp(A, B, C, LHSCC);
    662   unsigned right_type = getTypeOfMaskedICmp(A, D, E, RHSCC);
    663   return left_type & right_type;
    664 }
    665 /// foldLogOpOfMaskedICmps:
    666 /// try to fold (icmp(A & B) ==/!= C) &/| (icmp(A & D) ==/!= E)
    667 /// into a single (icmp(A & X) ==/!= Y)
    668 static Value* foldLogOpOfMaskedICmps(ICmpInst *LHS, ICmpInst *RHS, bool IsAnd,
    669                                      llvm::InstCombiner::BuilderTy* Builder) {
    670   Value *A = nullptr, *B = nullptr, *C = nullptr, *D = nullptr, *E = nullptr;
    671   ICmpInst::Predicate LHSCC = LHS->getPredicate(), RHSCC = RHS->getPredicate();
    672   unsigned mask = foldLogOpOfMaskedICmpsHelper(A, B, C, D, E, LHS, RHS,
    673                                                LHSCC, RHSCC);
    674   if (mask == 0) return nullptr;
    675   assert(ICmpInst::isEquality(LHSCC) && ICmpInst::isEquality(RHSCC) &&
    676          "foldLogOpOfMaskedICmpsHelper must return an equality predicate.");
    677 
    678   // In full generality:
    679   //     (icmp (A & B) Op C) | (icmp (A & D) Op E)
    680   // ==  ![ (icmp (A & B) !Op C) & (icmp (A & D) !Op E) ]
    681   //
    682   // If the latter can be converted into (icmp (A & X) Op Y) then the former is
    683   // equivalent to (icmp (A & X) !Op Y).
    684   //
    685   // Therefore, we can pretend for the rest of this function that we're dealing
    686   // with the conjunction, provided we flip the sense of any comparisons (both
    687   // input and output).
    688 
    689   // In most cases we're going to produce an EQ for the "&&" case.
    690   ICmpInst::Predicate NEWCC = IsAnd ? ICmpInst::ICMP_EQ : ICmpInst::ICMP_NE;
    691   if (!IsAnd) {
    692     // Convert the masking analysis into its equivalent with negated
    693     // comparisons.
    694     mask = conjugateICmpMask(mask);
    695   }
    696 
    697   if (mask & FoldMskICmp_Mask_AllZeroes) {
    698     // (icmp eq (A & B), 0) & (icmp eq (A & D), 0)
    699     // -> (icmp eq (A & (B|D)), 0)
    700     Value* newOr = Builder->CreateOr(B, D);
    701     Value* newAnd = Builder->CreateAnd(A, newOr);
    702     // we can't use C as zero, because we might actually handle
    703     //   (icmp ne (A & B), B) & (icmp ne (A & D), D)
    704     // with B and D, having a single bit set
    705     Value* zero = Constant::getNullValue(A->getType());
    706     return Builder->CreateICmp(NEWCC, newAnd, zero);
    707   }
    708   if (mask & FoldMskICmp_BMask_AllOnes) {
    709     // (icmp eq (A & B), B) & (icmp eq (A & D), D)
    710     // -> (icmp eq (A & (B|D)), (B|D))
    711     Value* newOr = Builder->CreateOr(B, D);
    712     Value* newAnd = Builder->CreateAnd(A, newOr);
    713     return Builder->CreateICmp(NEWCC, newAnd, newOr);
    714   }
    715   if (mask & FoldMskICmp_AMask_AllOnes) {
    716     // (icmp eq (A & B), A) & (icmp eq (A & D), A)
    717     // -> (icmp eq (A & (B&D)), A)
    718     Value* newAnd1 = Builder->CreateAnd(B, D);
    719     Value* newAnd = Builder->CreateAnd(A, newAnd1);
    720     return Builder->CreateICmp(NEWCC, newAnd, A);
    721   }
    722 
    723   // Remaining cases assume at least that B and D are constant, and depend on
    724   // their actual values. This isn't strictly, necessary, just a "handle the
    725   // easy cases for now" decision.
    726   ConstantInt *BCst = dyn_cast<ConstantInt>(B);
    727   if (!BCst) return nullptr;
    728   ConstantInt *DCst = dyn_cast<ConstantInt>(D);
    729   if (!DCst) return nullptr;
    730 
    731   if (mask & (FoldMskICmp_Mask_NotAllZeroes | FoldMskICmp_BMask_NotAllOnes)) {
    732     // (icmp ne (A & B), 0) & (icmp ne (A & D), 0) and
    733     // (icmp ne (A & B), B) & (icmp ne (A & D), D)
    734     //     -> (icmp ne (A & B), 0) or (icmp ne (A & D), 0)
    735     // Only valid if one of the masks is a superset of the other (check "B&D" is
    736     // the same as either B or D).
    737     APInt NewMask = BCst->getValue() & DCst->getValue();
    738 
    739     if (NewMask == BCst->getValue())
    740       return LHS;
    741     else if (NewMask == DCst->getValue())
    742       return RHS;
    743   }
    744   if (mask & FoldMskICmp_AMask_NotAllOnes) {
    745     // (icmp ne (A & B), B) & (icmp ne (A & D), D)
    746     //     -> (icmp ne (A & B), A) or (icmp ne (A & D), A)
    747     // Only valid if one of the masks is a superset of the other (check "B|D" is
    748     // the same as either B or D).
    749     APInt NewMask = BCst->getValue() | DCst->getValue();
    750 
    751     if (NewMask == BCst->getValue())
    752       return LHS;
    753     else if (NewMask == DCst->getValue())
    754       return RHS;
    755   }
    756   if (mask & FoldMskICmp_BMask_Mixed) {
    757     // (icmp eq (A & B), C) & (icmp eq (A & D), E)
    758     // We already know that B & C == C && D & E == E.
    759     // If we can prove that (B & D) & (C ^ E) == 0, that is, the bits of
    760     // C and E, which are shared by both the mask B and the mask D, don't
    761     // contradict, then we can transform to
    762     // -> (icmp eq (A & (B|D)), (C|E))
    763     // Currently, we only handle the case of B, C, D, and E being constant.
    764     // we can't simply use C and E, because we might actually handle
    765     //   (icmp ne (A & B), B) & (icmp eq (A & D), D)
    766     // with B and D, having a single bit set
    767     ConstantInt *CCst = dyn_cast<ConstantInt>(C);
    768     if (!CCst) return nullptr;
    769     if (LHSCC != NEWCC)
    770       CCst = dyn_cast<ConstantInt>( ConstantExpr::getXor(BCst, CCst) );
    771     ConstantInt *ECst = dyn_cast<ConstantInt>(E);
    772     if (!ECst) return nullptr;
    773     if (RHSCC != NEWCC)
    774       ECst = dyn_cast<ConstantInt>( ConstantExpr::getXor(DCst, ECst) );
    775     ConstantInt* MCst = dyn_cast<ConstantInt>(
    776       ConstantExpr::getAnd(ConstantExpr::getAnd(BCst, DCst),
    777                            ConstantExpr::getXor(CCst, ECst)) );
    778     // if there is a conflict we should actually return a false for the
    779     // whole construct
    780     if (!MCst->isZero())
    781       return nullptr;
    782     Value *newOr1 = Builder->CreateOr(B, D);
    783     Value *newOr2 = ConstantExpr::getOr(CCst, ECst);
    784     Value *newAnd = Builder->CreateAnd(A, newOr1);
    785     return Builder->CreateICmp(NEWCC, newAnd, newOr2);
    786   }
    787   return nullptr;
    788 }
    789 
    790 /// FoldAndOfICmps - Fold (icmp)&(icmp) if possible.
    791 Value *InstCombiner::FoldAndOfICmps(ICmpInst *LHS, ICmpInst *RHS) {
    792   ICmpInst::Predicate LHSCC = LHS->getPredicate(), RHSCC = RHS->getPredicate();
    793 
    794   // (icmp1 A, B) & (icmp2 A, B) --> (icmp3 A, B)
    795   if (PredicatesFoldable(LHSCC, RHSCC)) {
    796     if (LHS->getOperand(0) == RHS->getOperand(1) &&
    797         LHS->getOperand(1) == RHS->getOperand(0))
    798       LHS->swapOperands();
    799     if (LHS->getOperand(0) == RHS->getOperand(0) &&
    800         LHS->getOperand(1) == RHS->getOperand(1)) {
    801       Value *Op0 = LHS->getOperand(0), *Op1 = LHS->getOperand(1);
    802       unsigned Code = getICmpCode(LHS) & getICmpCode(RHS);
    803       bool isSigned = LHS->isSigned() || RHS->isSigned();
    804       return getNewICmpValue(isSigned, Code, Op0, Op1, Builder);
    805     }
    806   }
    807 
    808   // handle (roughly):  (icmp eq (A & B), C) & (icmp eq (A & D), E)
    809   if (Value *V = foldLogOpOfMaskedICmps(LHS, RHS, true, Builder))
    810     return V;
    811 
    812   // This only handles icmp of constants: (icmp1 A, C1) & (icmp2 B, C2).
    813   Value *Val = LHS->getOperand(0), *Val2 = RHS->getOperand(0);
    814   ConstantInt *LHSCst = dyn_cast<ConstantInt>(LHS->getOperand(1));
    815   ConstantInt *RHSCst = dyn_cast<ConstantInt>(RHS->getOperand(1));
    816   if (!LHSCst || !RHSCst) return nullptr;
    817 
    818   if (LHSCst == RHSCst && LHSCC == RHSCC) {
    819     // (icmp ult A, C) & (icmp ult B, C) --> (icmp ult (A|B), C)
    820     // where C is a power of 2
    821     if (LHSCC == ICmpInst::ICMP_ULT &&
    822         LHSCst->getValue().isPowerOf2()) {
    823       Value *NewOr = Builder->CreateOr(Val, Val2);
    824       return Builder->CreateICmp(LHSCC, NewOr, LHSCst);
    825     }
    826 
    827     // (icmp eq A, 0) & (icmp eq B, 0) --> (icmp eq (A|B), 0)
    828     if (LHSCC == ICmpInst::ICMP_EQ && LHSCst->isZero()) {
    829       Value *NewOr = Builder->CreateOr(Val, Val2);
    830       return Builder->CreateICmp(LHSCC, NewOr, LHSCst);
    831     }
    832   }
    833 
    834   // (trunc x) == C1 & (and x, CA) == C2 -> (and x, CA|CMAX) == C1|C2
    835   // where CMAX is the all ones value for the truncated type,
    836   // iff the lower bits of C2 and CA are zero.
    837   if (LHSCC == ICmpInst::ICMP_EQ && LHSCC == RHSCC &&
    838       LHS->hasOneUse() && RHS->hasOneUse()) {
    839     Value *V;
    840     ConstantInt *AndCst, *SmallCst = nullptr, *BigCst = nullptr;
    841 
    842     // (trunc x) == C1 & (and x, CA) == C2
    843     // (and x, CA) == C2 & (trunc x) == C1
    844     if (match(Val2, m_Trunc(m_Value(V))) &&
    845         match(Val, m_And(m_Specific(V), m_ConstantInt(AndCst)))) {
    846       SmallCst = RHSCst;
    847       BigCst = LHSCst;
    848     } else if (match(Val, m_Trunc(m_Value(V))) &&
    849                match(Val2, m_And(m_Specific(V), m_ConstantInt(AndCst)))) {
    850       SmallCst = LHSCst;
    851       BigCst = RHSCst;
    852     }
    853 
    854     if (SmallCst && BigCst) {
    855       unsigned BigBitSize = BigCst->getType()->getBitWidth();
    856       unsigned SmallBitSize = SmallCst->getType()->getBitWidth();
    857 
    858       // Check that the low bits are zero.
    859       APInt Low = APInt::getLowBitsSet(BigBitSize, SmallBitSize);
    860       if ((Low & AndCst->getValue()) == 0 && (Low & BigCst->getValue()) == 0) {
    861         Value *NewAnd = Builder->CreateAnd(V, Low | AndCst->getValue());
    862         APInt N = SmallCst->getValue().zext(BigBitSize) | BigCst->getValue();
    863         Value *NewVal = ConstantInt::get(AndCst->getType()->getContext(), N);
    864         return Builder->CreateICmp(LHSCC, NewAnd, NewVal);
    865       }
    866     }
    867   }
    868 
    869   // From here on, we only handle:
    870   //    (icmp1 A, C1) & (icmp2 A, C2) --> something simpler.
    871   if (Val != Val2) return nullptr;
    872 
    873   // ICMP_[US][GL]E X, CST is folded to ICMP_[US][GL]T elsewhere.
    874   if (LHSCC == ICmpInst::ICMP_UGE || LHSCC == ICmpInst::ICMP_ULE ||
    875       RHSCC == ICmpInst::ICMP_UGE || RHSCC == ICmpInst::ICMP_ULE ||
    876       LHSCC == ICmpInst::ICMP_SGE || LHSCC == ICmpInst::ICMP_SLE ||
    877       RHSCC == ICmpInst::ICMP_SGE || RHSCC == ICmpInst::ICMP_SLE)
    878     return nullptr;
    879 
    880   // Make a constant range that's the intersection of the two icmp ranges.
    881   // If the intersection is empty, we know that the result is false.
    882   ConstantRange LHSRange =
    883     ConstantRange::makeICmpRegion(LHSCC, LHSCst->getValue());
    884   ConstantRange RHSRange =
    885     ConstantRange::makeICmpRegion(RHSCC, RHSCst->getValue());
    886 
    887   if (LHSRange.intersectWith(RHSRange).isEmptySet())
    888     return ConstantInt::get(CmpInst::makeCmpResultType(LHS->getType()), 0);
    889 
    890   // We can't fold (ugt x, C) & (sgt x, C2).
    891   if (!PredicatesFoldable(LHSCC, RHSCC))
    892     return nullptr;
    893 
    894   // Ensure that the larger constant is on the RHS.
    895   bool ShouldSwap;
    896   if (CmpInst::isSigned(LHSCC) ||
    897       (ICmpInst::isEquality(LHSCC) &&
    898        CmpInst::isSigned(RHSCC)))
    899     ShouldSwap = LHSCst->getValue().sgt(RHSCst->getValue());
    900   else
    901     ShouldSwap = LHSCst->getValue().ugt(RHSCst->getValue());
    902 
    903   if (ShouldSwap) {
    904     std::swap(LHS, RHS);
    905     std::swap(LHSCst, RHSCst);
    906     std::swap(LHSCC, RHSCC);
    907   }
    908 
    909   // At this point, we know we have two icmp instructions
    910   // comparing a value against two constants and and'ing the result
    911   // together.  Because of the above check, we know that we only have
    912   // icmp eq, icmp ne, icmp [su]lt, and icmp [SU]gt here. We also know
    913   // (from the icmp folding check above), that the two constants
    914   // are not equal and that the larger constant is on the RHS
    915   assert(LHSCst != RHSCst && "Compares not folded above?");
    916 
    917   switch (LHSCC) {
    918   default: llvm_unreachable("Unknown integer condition code!");
    919   case ICmpInst::ICMP_EQ:
    920     switch (RHSCC) {
    921     default: llvm_unreachable("Unknown integer condition code!");
    922     case ICmpInst::ICMP_NE:         // (X == 13 & X != 15) -> X == 13
    923     case ICmpInst::ICMP_ULT:        // (X == 13 & X <  15) -> X == 13
    924     case ICmpInst::ICMP_SLT:        // (X == 13 & X <  15) -> X == 13
    925       return LHS;
    926     }
    927   case ICmpInst::ICMP_NE:
    928     switch (RHSCC) {
    929     default: llvm_unreachable("Unknown integer condition code!");
    930     case ICmpInst::ICMP_ULT:
    931       if (LHSCst == SubOne(RHSCst)) // (X != 13 & X u< 14) -> X < 13
    932         return Builder->CreateICmpULT(Val, LHSCst);
    933       break;                        // (X != 13 & X u< 15) -> no change
    934     case ICmpInst::ICMP_SLT:
    935       if (LHSCst == SubOne(RHSCst)) // (X != 13 & X s< 14) -> X < 13
    936         return Builder->CreateICmpSLT(Val, LHSCst);
    937       break;                        // (X != 13 & X s< 15) -> no change
    938     case ICmpInst::ICMP_EQ:         // (X != 13 & X == 15) -> X == 15
    939     case ICmpInst::ICMP_UGT:        // (X != 13 & X u> 15) -> X u> 15
    940     case ICmpInst::ICMP_SGT:        // (X != 13 & X s> 15) -> X s> 15
    941       return RHS;
    942     case ICmpInst::ICMP_NE:
    943       // Special case to get the ordering right when the values wrap around
    944       // zero.
    945       if (LHSCst->getValue() == 0 && RHSCst->getValue().isAllOnesValue())
    946         std::swap(LHSCst, RHSCst);
    947       if (LHSCst == SubOne(RHSCst)){// (X != 13 & X != 14) -> X-13 >u 1
    948         Constant *AddCST = ConstantExpr::getNeg(LHSCst);
    949         Value *Add = Builder->CreateAdd(Val, AddCST, Val->getName()+".off");
    950         return Builder->CreateICmpUGT(Add, ConstantInt::get(Add->getType(), 1),
    951                                       Val->getName()+".cmp");
    952       }
    953       break;                        // (X != 13 & X != 15) -> no change
    954     }
    955     break;
    956   case ICmpInst::ICMP_ULT:
    957     switch (RHSCC) {
    958     default: llvm_unreachable("Unknown integer condition code!");
    959     case ICmpInst::ICMP_EQ:         // (X u< 13 & X == 15) -> false
    960     case ICmpInst::ICMP_UGT:        // (X u< 13 & X u> 15) -> false
    961       return ConstantInt::get(CmpInst::makeCmpResultType(LHS->getType()), 0);
    962     case ICmpInst::ICMP_SGT:        // (X u< 13 & X s> 15) -> no change
    963       break;
    964     case ICmpInst::ICMP_NE:         // (X u< 13 & X != 15) -> X u< 13
    965     case ICmpInst::ICMP_ULT:        // (X u< 13 & X u< 15) -> X u< 13
    966       return LHS;
    967     case ICmpInst::ICMP_SLT:        // (X u< 13 & X s< 15) -> no change
    968       break;
    969     }
    970     break;
    971   case ICmpInst::ICMP_SLT:
    972     switch (RHSCC) {
    973     default: llvm_unreachable("Unknown integer condition code!");
    974     case ICmpInst::ICMP_UGT:        // (X s< 13 & X u> 15) -> no change
    975       break;
    976     case ICmpInst::ICMP_NE:         // (X s< 13 & X != 15) -> X < 13
    977     case ICmpInst::ICMP_SLT:        // (X s< 13 & X s< 15) -> X < 13
    978       return LHS;
    979     case ICmpInst::ICMP_ULT:        // (X s< 13 & X u< 15) -> no change
    980       break;
    981     }
    982     break;
    983   case ICmpInst::ICMP_UGT:
    984     switch (RHSCC) {
    985     default: llvm_unreachable("Unknown integer condition code!");
    986     case ICmpInst::ICMP_EQ:         // (X u> 13 & X == 15) -> X == 15
    987     case ICmpInst::ICMP_UGT:        // (X u> 13 & X u> 15) -> X u> 15
    988       return RHS;
    989     case ICmpInst::ICMP_SGT:        // (X u> 13 & X s> 15) -> no change
    990       break;
    991     case ICmpInst::ICMP_NE:
    992       if (RHSCst == AddOne(LHSCst)) // (X u> 13 & X != 14) -> X u> 14
    993         return Builder->CreateICmp(LHSCC, Val, RHSCst);
    994       break;                        // (X u> 13 & X != 15) -> no change
    995     case ICmpInst::ICMP_ULT:        // (X u> 13 & X u< 15) -> (X-14) <u 1
    996       return InsertRangeTest(Val, AddOne(LHSCst), RHSCst, false, true);
    997     case ICmpInst::ICMP_SLT:        // (X u> 13 & X s< 15) -> no change
    998       break;
    999     }
   1000     break;
   1001   case ICmpInst::ICMP_SGT:
   1002     switch (RHSCC) {
   1003     default: llvm_unreachable("Unknown integer condition code!");
   1004     case ICmpInst::ICMP_EQ:         // (X s> 13 & X == 15) -> X == 15
   1005     case ICmpInst::ICMP_SGT:        // (X s> 13 & X s> 15) -> X s> 15
   1006       return RHS;
   1007     case ICmpInst::ICMP_UGT:        // (X s> 13 & X u> 15) -> no change
   1008       break;
   1009     case ICmpInst::ICMP_NE:
   1010       if (RHSCst == AddOne(LHSCst)) // (X s> 13 & X != 14) -> X s> 14
   1011         return Builder->CreateICmp(LHSCC, Val, RHSCst);
   1012       break;                        // (X s> 13 & X != 15) -> no change
   1013     case ICmpInst::ICMP_SLT:        // (X s> 13 & X s< 15) -> (X-14) s< 1
   1014       return InsertRangeTest(Val, AddOne(LHSCst), RHSCst, true, true);
   1015     case ICmpInst::ICMP_ULT:        // (X s> 13 & X u< 15) -> no change
   1016       break;
   1017     }
   1018     break;
   1019   }
   1020 
   1021   return nullptr;
   1022 }
   1023 
   1024 /// FoldAndOfFCmps - Optimize (fcmp)&(fcmp).  NOTE: Unlike the rest of
   1025 /// instcombine, this returns a Value which should already be inserted into the
   1026 /// function.
   1027 Value *InstCombiner::FoldAndOfFCmps(FCmpInst *LHS, FCmpInst *RHS) {
   1028   if (LHS->getPredicate() == FCmpInst::FCMP_ORD &&
   1029       RHS->getPredicate() == FCmpInst::FCMP_ORD) {
   1030     if (LHS->getOperand(0)->getType() != RHS->getOperand(0)->getType())
   1031       return nullptr;
   1032 
   1033     // (fcmp ord x, c) & (fcmp ord y, c)  -> (fcmp ord x, y)
   1034     if (ConstantFP *LHSC = dyn_cast<ConstantFP>(LHS->getOperand(1)))
   1035       if (ConstantFP *RHSC = dyn_cast<ConstantFP>(RHS->getOperand(1))) {
   1036         // If either of the constants are nans, then the whole thing returns
   1037         // false.
   1038         if (LHSC->getValueAPF().isNaN() || RHSC->getValueAPF().isNaN())
   1039           return Builder->getFalse();
   1040         return Builder->CreateFCmpORD(LHS->getOperand(0), RHS->getOperand(0));
   1041       }
   1042 
   1043     // Handle vector zeros.  This occurs because the canonical form of
   1044     // "fcmp ord x,x" is "fcmp ord x, 0".
   1045     if (isa<ConstantAggregateZero>(LHS->getOperand(1)) &&
   1046         isa<ConstantAggregateZero>(RHS->getOperand(1)))
   1047       return Builder->CreateFCmpORD(LHS->getOperand(0), RHS->getOperand(0));
   1048     return nullptr;
   1049   }
   1050 
   1051   Value *Op0LHS = LHS->getOperand(0), *Op0RHS = LHS->getOperand(1);
   1052   Value *Op1LHS = RHS->getOperand(0), *Op1RHS = RHS->getOperand(1);
   1053   FCmpInst::Predicate Op0CC = LHS->getPredicate(), Op1CC = RHS->getPredicate();
   1054 
   1055 
   1056   if (Op0LHS == Op1RHS && Op0RHS == Op1LHS) {
   1057     // Swap RHS operands to match LHS.
   1058     Op1CC = FCmpInst::getSwappedPredicate(Op1CC);
   1059     std::swap(Op1LHS, Op1RHS);
   1060   }
   1061 
   1062   if (Op0LHS == Op1LHS && Op0RHS == Op1RHS) {
   1063     // Simplify (fcmp cc0 x, y) & (fcmp cc1 x, y).
   1064     if (Op0CC == Op1CC)
   1065       return Builder->CreateFCmp((FCmpInst::Predicate)Op0CC, Op0LHS, Op0RHS);
   1066     if (Op0CC == FCmpInst::FCMP_FALSE || Op1CC == FCmpInst::FCMP_FALSE)
   1067       return ConstantInt::get(CmpInst::makeCmpResultType(LHS->getType()), 0);
   1068     if (Op0CC == FCmpInst::FCMP_TRUE)
   1069       return RHS;
   1070     if (Op1CC == FCmpInst::FCMP_TRUE)
   1071       return LHS;
   1072 
   1073     bool Op0Ordered;
   1074     bool Op1Ordered;
   1075     unsigned Op0Pred = getFCmpCode(Op0CC, Op0Ordered);
   1076     unsigned Op1Pred = getFCmpCode(Op1CC, Op1Ordered);
   1077     // uno && ord -> false
   1078     if (Op0Pred == 0 && Op1Pred == 0 && Op0Ordered != Op1Ordered)
   1079         return ConstantInt::get(CmpInst::makeCmpResultType(LHS->getType()), 0);
   1080     if (Op1Pred == 0) {
   1081       std::swap(LHS, RHS);
   1082       std::swap(Op0Pred, Op1Pred);
   1083       std::swap(Op0Ordered, Op1Ordered);
   1084     }
   1085     if (Op0Pred == 0) {
   1086       // uno && ueq -> uno && (uno || eq) -> uno
   1087       // ord && olt -> ord && (ord && lt) -> olt
   1088       if (!Op0Ordered && (Op0Ordered == Op1Ordered))
   1089         return LHS;
   1090       if (Op0Ordered && (Op0Ordered == Op1Ordered))
   1091         return RHS;
   1092 
   1093       // uno && oeq -> uno && (ord && eq) -> false
   1094       if (!Op0Ordered)
   1095         return ConstantInt::get(CmpInst::makeCmpResultType(LHS->getType()), 0);
   1096       // ord && ueq -> ord && (uno || eq) -> oeq
   1097       return getFCmpValue(true, Op1Pred, Op0LHS, Op0RHS, Builder);
   1098     }
   1099   }
   1100 
   1101   return nullptr;
   1102 }
   1103 
   1104 
   1105 Instruction *InstCombiner::visitAnd(BinaryOperator &I) {
   1106   bool Changed = SimplifyAssociativeOrCommutative(I);
   1107   Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1);
   1108 
   1109   if (Value *V = SimplifyVectorOp(I))
   1110     return ReplaceInstUsesWith(I, V);
   1111 
   1112   if (Value *V = SimplifyAndInst(Op0, Op1, DL))
   1113     return ReplaceInstUsesWith(I, V);
   1114 
   1115   // (A|B)&(A|C) -> A|(B&C) etc
   1116   if (Value *V = SimplifyUsingDistributiveLaws(I))
   1117     return ReplaceInstUsesWith(I, V);
   1118 
   1119   // See if we can simplify any instructions used by the instruction whose sole
   1120   // purpose is to compute bits we don't care about.
   1121   if (SimplifyDemandedInstructionBits(I))
   1122     return &I;
   1123 
   1124   if (ConstantInt *AndRHS = dyn_cast<ConstantInt>(Op1)) {
   1125     const APInt &AndRHSMask = AndRHS->getValue();
   1126 
   1127     // Optimize a variety of ((val OP C1) & C2) combinations...
   1128     if (BinaryOperator *Op0I = dyn_cast<BinaryOperator>(Op0)) {
   1129       Value *Op0LHS = Op0I->getOperand(0);
   1130       Value *Op0RHS = Op0I->getOperand(1);
   1131       switch (Op0I->getOpcode()) {
   1132       default: break;
   1133       case Instruction::Xor:
   1134       case Instruction::Or: {
   1135         // If the mask is only needed on one incoming arm, push it up.
   1136         if (!Op0I->hasOneUse()) break;
   1137 
   1138         APInt NotAndRHS(~AndRHSMask);
   1139         if (MaskedValueIsZero(Op0LHS, NotAndRHS)) {
   1140           // Not masking anything out for the LHS, move to RHS.
   1141           Value *NewRHS = Builder->CreateAnd(Op0RHS, AndRHS,
   1142                                              Op0RHS->getName()+".masked");
   1143           return BinaryOperator::Create(Op0I->getOpcode(), Op0LHS, NewRHS);
   1144         }
   1145         if (!isa<Constant>(Op0RHS) &&
   1146             MaskedValueIsZero(Op0RHS, NotAndRHS)) {
   1147           // Not masking anything out for the RHS, move to LHS.
   1148           Value *NewLHS = Builder->CreateAnd(Op0LHS, AndRHS,
   1149                                              Op0LHS->getName()+".masked");
   1150           return BinaryOperator::Create(Op0I->getOpcode(), NewLHS, Op0RHS);
   1151         }
   1152 
   1153         break;
   1154       }
   1155       case Instruction::Add:
   1156         // ((A & N) + B) & AndRHS -> (A + B) & AndRHS iff N&AndRHS == AndRHS.
   1157         // ((A | N) + B) & AndRHS -> (A + B) & AndRHS iff N&AndRHS == 0
   1158         // ((A ^ N) + B) & AndRHS -> (A + B) & AndRHS iff N&AndRHS == 0
   1159         if (Value *V = FoldLogicalPlusAnd(Op0LHS, Op0RHS, AndRHS, false, I))
   1160           return BinaryOperator::CreateAnd(V, AndRHS);
   1161         if (Value *V = FoldLogicalPlusAnd(Op0RHS, Op0LHS, AndRHS, false, I))
   1162           return BinaryOperator::CreateAnd(V, AndRHS);  // Add commutes
   1163         break;
   1164 
   1165       case Instruction::Sub:
   1166         // ((A & N) - B) & AndRHS -> (A - B) & AndRHS iff N&AndRHS == AndRHS.
   1167         // ((A | N) - B) & AndRHS -> (A - B) & AndRHS iff N&AndRHS == 0
   1168         // ((A ^ N) - B) & AndRHS -> (A - B) & AndRHS iff N&AndRHS == 0
   1169         if (Value *V = FoldLogicalPlusAnd(Op0LHS, Op0RHS, AndRHS, true, I))
   1170           return BinaryOperator::CreateAnd(V, AndRHS);
   1171 
   1172         // (A - N) & AndRHS -> -N & AndRHS iff A&AndRHS==0 and AndRHS
   1173         // has 1's for all bits that the subtraction with A might affect.
   1174         if (Op0I->hasOneUse() && !match(Op0LHS, m_Zero())) {
   1175           uint32_t BitWidth = AndRHSMask.getBitWidth();
   1176           uint32_t Zeros = AndRHSMask.countLeadingZeros();
   1177           APInt Mask = APInt::getLowBitsSet(BitWidth, BitWidth - Zeros);
   1178 
   1179           if (MaskedValueIsZero(Op0LHS, Mask)) {
   1180             Value *NewNeg = Builder->CreateNeg(Op0RHS);
   1181             return BinaryOperator::CreateAnd(NewNeg, AndRHS);
   1182           }
   1183         }
   1184         break;
   1185 
   1186       case Instruction::Shl:
   1187       case Instruction::LShr:
   1188         // (1 << x) & 1 --> zext(x == 0)
   1189         // (1 >> x) & 1 --> zext(x == 0)
   1190         if (AndRHSMask == 1 && Op0LHS == AndRHS) {
   1191           Value *NewICmp =
   1192             Builder->CreateICmpEQ(Op0RHS, Constant::getNullValue(I.getType()));
   1193           return new ZExtInst(NewICmp, I.getType());
   1194         }
   1195         break;
   1196       }
   1197 
   1198       if (ConstantInt *Op0CI = dyn_cast<ConstantInt>(Op0I->getOperand(1)))
   1199         if (Instruction *Res = OptAndOp(Op0I, Op0CI, AndRHS, I))
   1200           return Res;
   1201     }
   1202 
   1203     // If this is an integer truncation, and if the source is an 'and' with
   1204     // immediate, transform it.  This frequently occurs for bitfield accesses.
   1205     {
   1206       Value *X = nullptr; ConstantInt *YC = nullptr;
   1207       if (match(Op0, m_Trunc(m_And(m_Value(X), m_ConstantInt(YC))))) {
   1208         // Change: and (trunc (and X, YC) to T), C2
   1209         // into  : and (trunc X to T), trunc(YC) & C2
   1210         // This will fold the two constants together, which may allow
   1211         // other simplifications.
   1212         Value *NewCast = Builder->CreateTrunc(X, I.getType(), "and.shrunk");
   1213         Constant *C3 = ConstantExpr::getTrunc(YC, I.getType());
   1214         C3 = ConstantExpr::getAnd(C3, AndRHS);
   1215         return BinaryOperator::CreateAnd(NewCast, C3);
   1216       }
   1217     }
   1218 
   1219     // Try to fold constant and into select arguments.
   1220     if (SelectInst *SI = dyn_cast<SelectInst>(Op0))
   1221       if (Instruction *R = FoldOpIntoSelect(I, SI))
   1222         return R;
   1223     if (isa<PHINode>(Op0))
   1224       if (Instruction *NV = FoldOpIntoPhi(I))
   1225         return NV;
   1226   }
   1227 
   1228 
   1229   // (~A & ~B) == (~(A | B)) - De Morgan's Law
   1230   if (Value *Op0NotVal = dyn_castNotVal(Op0))
   1231     if (Value *Op1NotVal = dyn_castNotVal(Op1))
   1232       if (Op0->hasOneUse() && Op1->hasOneUse()) {
   1233         Value *Or = Builder->CreateOr(Op0NotVal, Op1NotVal,
   1234                                       I.getName()+".demorgan");
   1235         return BinaryOperator::CreateNot(Or);
   1236       }
   1237 
   1238   {
   1239     Value *A = nullptr, *B = nullptr, *C = nullptr, *D = nullptr;
   1240     // (A|B) & ~(A&B) -> A^B
   1241     if (match(Op0, m_Or(m_Value(A), m_Value(B))) &&
   1242         match(Op1, m_Not(m_And(m_Value(C), m_Value(D)))) &&
   1243         ((A == C && B == D) || (A == D && B == C)))
   1244       return BinaryOperator::CreateXor(A, B);
   1245 
   1246     // ~(A&B) & (A|B) -> A^B
   1247     if (match(Op1, m_Or(m_Value(A), m_Value(B))) &&
   1248         match(Op0, m_Not(m_And(m_Value(C), m_Value(D)))) &&
   1249         ((A == C && B == D) || (A == D && B == C)))
   1250       return BinaryOperator::CreateXor(A, B);
   1251 
   1252     // A&(A^B) => A & ~B
   1253     {
   1254       Value *tmpOp0 = Op0;
   1255       Value *tmpOp1 = Op1;
   1256       if (Op0->hasOneUse() &&
   1257           match(Op0, m_Xor(m_Value(A), m_Value(B)))) {
   1258         if (A == Op1 || B == Op1 ) {
   1259           tmpOp1 = Op0;
   1260           tmpOp0 = Op1;
   1261           // Simplify below
   1262         }
   1263       }
   1264 
   1265       if (tmpOp1->hasOneUse() &&
   1266           match(tmpOp1, m_Xor(m_Value(A), m_Value(B)))) {
   1267         if (B == tmpOp0) {
   1268           std::swap(A, B);
   1269         }
   1270         // Notice that the patten (A&(~B)) is actually (A&(-1^B)), so if
   1271         // A is originally -1 (or a vector of -1 and undefs), then we enter
   1272         // an endless loop. By checking that A is non-constant we ensure that
   1273         // we will never get to the loop.
   1274         if (A == tmpOp0 && !isa<Constant>(A)) // A&(A^B) -> A & ~B
   1275           return BinaryOperator::CreateAnd(A, Builder->CreateNot(B));
   1276       }
   1277     }
   1278 
   1279     // (A&((~A)|B)) -> A&B
   1280     if (match(Op0, m_Or(m_Not(m_Specific(Op1)), m_Value(A))) ||
   1281         match(Op0, m_Or(m_Value(A), m_Not(m_Specific(Op1)))))
   1282       return BinaryOperator::CreateAnd(A, Op1);
   1283     if (match(Op1, m_Or(m_Not(m_Specific(Op0)), m_Value(A))) ||
   1284         match(Op1, m_Or(m_Value(A), m_Not(m_Specific(Op0)))))
   1285       return BinaryOperator::CreateAnd(A, Op0);
   1286   }
   1287 
   1288   if (ICmpInst *RHS = dyn_cast<ICmpInst>(Op1))
   1289     if (ICmpInst *LHS = dyn_cast<ICmpInst>(Op0))
   1290       if (Value *Res = FoldAndOfICmps(LHS, RHS))
   1291         return ReplaceInstUsesWith(I, Res);
   1292 
   1293   // If and'ing two fcmp, try combine them into one.
   1294   if (FCmpInst *LHS = dyn_cast<FCmpInst>(I.getOperand(0)))
   1295     if (FCmpInst *RHS = dyn_cast<FCmpInst>(I.getOperand(1)))
   1296       if (Value *Res = FoldAndOfFCmps(LHS, RHS))
   1297         return ReplaceInstUsesWith(I, Res);
   1298 
   1299 
   1300   // fold (and (cast A), (cast B)) -> (cast (and A, B))
   1301   if (CastInst *Op0C = dyn_cast<CastInst>(Op0))
   1302     if (CastInst *Op1C = dyn_cast<CastInst>(Op1)) {
   1303       Type *SrcTy = Op0C->getOperand(0)->getType();
   1304       if (Op0C->getOpcode() == Op1C->getOpcode() && // same cast kind ?
   1305           SrcTy == Op1C->getOperand(0)->getType() &&
   1306           SrcTy->isIntOrIntVectorTy()) {
   1307         Value *Op0COp = Op0C->getOperand(0), *Op1COp = Op1C->getOperand(0);
   1308 
   1309         // Only do this if the casts both really cause code to be generated.
   1310         if (ShouldOptimizeCast(Op0C->getOpcode(), Op0COp, I.getType()) &&
   1311             ShouldOptimizeCast(Op1C->getOpcode(), Op1COp, I.getType())) {
   1312           Value *NewOp = Builder->CreateAnd(Op0COp, Op1COp, I.getName());
   1313           return CastInst::Create(Op0C->getOpcode(), NewOp, I.getType());
   1314         }
   1315 
   1316         // If this is and(cast(icmp), cast(icmp)), try to fold this even if the
   1317         // cast is otherwise not optimizable.  This happens for vector sexts.
   1318         if (ICmpInst *RHS = dyn_cast<ICmpInst>(Op1COp))
   1319           if (ICmpInst *LHS = dyn_cast<ICmpInst>(Op0COp))
   1320             if (Value *Res = FoldAndOfICmps(LHS, RHS))
   1321               return CastInst::Create(Op0C->getOpcode(), Res, I.getType());
   1322 
   1323         // If this is and(cast(fcmp), cast(fcmp)), try to fold this even if the
   1324         // cast is otherwise not optimizable.  This happens for vector sexts.
   1325         if (FCmpInst *RHS = dyn_cast<FCmpInst>(Op1COp))
   1326           if (FCmpInst *LHS = dyn_cast<FCmpInst>(Op0COp))
   1327             if (Value *Res = FoldAndOfFCmps(LHS, RHS))
   1328               return CastInst::Create(Op0C->getOpcode(), Res, I.getType());
   1329       }
   1330     }
   1331 
   1332   // (X >> Z) & (Y >> Z)  -> (X&Y) >> Z  for all shifts.
   1333   if (BinaryOperator *SI1 = dyn_cast<BinaryOperator>(Op1)) {
   1334     if (BinaryOperator *SI0 = dyn_cast<BinaryOperator>(Op0))
   1335       if (SI0->isShift() && SI0->getOpcode() == SI1->getOpcode() &&
   1336           SI0->getOperand(1) == SI1->getOperand(1) &&
   1337           (SI0->hasOneUse() || SI1->hasOneUse())) {
   1338         Value *NewOp =
   1339           Builder->CreateAnd(SI0->getOperand(0), SI1->getOperand(0),
   1340                              SI0->getName());
   1341         return BinaryOperator::Create(SI1->getOpcode(), NewOp,
   1342                                       SI1->getOperand(1));
   1343       }
   1344   }
   1345 
   1346   {
   1347     Value *X = nullptr;
   1348     bool OpsSwapped = false;
   1349     // Canonicalize SExt or Not to the LHS
   1350     if (match(Op1, m_SExt(m_Value())) ||
   1351         match(Op1, m_Not(m_Value()))) {
   1352       std::swap(Op0, Op1);
   1353       OpsSwapped = true;
   1354     }
   1355 
   1356     // Fold (and (sext bool to A), B) --> (select bool, B, 0)
   1357     if (match(Op0, m_SExt(m_Value(X))) &&
   1358         X->getType()->getScalarType()->isIntegerTy(1)) {
   1359       Value *Zero = Constant::getNullValue(Op1->getType());
   1360       return SelectInst::Create(X, Op1, Zero);
   1361     }
   1362 
   1363     // Fold (and ~(sext bool to A), B) --> (select bool, 0, B)
   1364     if (match(Op0, m_Not(m_SExt(m_Value(X)))) &&
   1365         X->getType()->getScalarType()->isIntegerTy(1)) {
   1366       Value *Zero = Constant::getNullValue(Op0->getType());
   1367       return SelectInst::Create(X, Zero, Op1);
   1368     }
   1369 
   1370     if (OpsSwapped)
   1371       std::swap(Op0, Op1);
   1372   }
   1373 
   1374   return Changed ? &I : nullptr;
   1375 }
   1376 
   1377 /// CollectBSwapParts - Analyze the specified subexpression and see if it is
   1378 /// capable of providing pieces of a bswap.  The subexpression provides pieces
   1379 /// of a bswap if it is proven that each of the non-zero bytes in the output of
   1380 /// the expression came from the corresponding "byte swapped" byte in some other
   1381 /// value.  For example, if the current subexpression is "(shl i32 %X, 24)" then
   1382 /// we know that the expression deposits the low byte of %X into the high byte
   1383 /// of the bswap result and that all other bytes are zero.  This expression is
   1384 /// accepted, the high byte of ByteValues is set to X to indicate a correct
   1385 /// match.
   1386 ///
   1387 /// This function returns true if the match was unsuccessful and false if so.
   1388 /// On entry to the function the "OverallLeftShift" is a signed integer value
   1389 /// indicating the number of bytes that the subexpression is later shifted.  For
   1390 /// example, if the expression is later right shifted by 16 bits, the
   1391 /// OverallLeftShift value would be -2 on entry.  This is used to specify which
   1392 /// byte of ByteValues is actually being set.
   1393 ///
   1394 /// Similarly, ByteMask is a bitmask where a bit is clear if its corresponding
   1395 /// byte is masked to zero by a user.  For example, in (X & 255), X will be
   1396 /// processed with a bytemask of 1.  Because bytemask is 32-bits, this limits
   1397 /// this function to working on up to 32-byte (256 bit) values.  ByteMask is
   1398 /// always in the local (OverallLeftShift) coordinate space.
   1399 ///
   1400 static bool CollectBSwapParts(Value *V, int OverallLeftShift, uint32_t ByteMask,
   1401                               SmallVectorImpl<Value *> &ByteValues) {
   1402   if (Instruction *I = dyn_cast<Instruction>(V)) {
   1403     // If this is an or instruction, it may be an inner node of the bswap.
   1404     if (I->getOpcode() == Instruction::Or) {
   1405       return CollectBSwapParts(I->getOperand(0), OverallLeftShift, ByteMask,
   1406                                ByteValues) ||
   1407              CollectBSwapParts(I->getOperand(1), OverallLeftShift, ByteMask,
   1408                                ByteValues);
   1409     }
   1410 
   1411     // If this is a logical shift by a constant multiple of 8, recurse with
   1412     // OverallLeftShift and ByteMask adjusted.
   1413     if (I->isLogicalShift() && isa<ConstantInt>(I->getOperand(1))) {
   1414       unsigned ShAmt =
   1415         cast<ConstantInt>(I->getOperand(1))->getLimitedValue(~0U);
   1416       // Ensure the shift amount is defined and of a byte value.
   1417       if ((ShAmt & 7) || (ShAmt > 8*ByteValues.size()))
   1418         return true;
   1419 
   1420       unsigned ByteShift = ShAmt >> 3;
   1421       if (I->getOpcode() == Instruction::Shl) {
   1422         // X << 2 -> collect(X, +2)
   1423         OverallLeftShift += ByteShift;
   1424         ByteMask >>= ByteShift;
   1425       } else {
   1426         // X >>u 2 -> collect(X, -2)
   1427         OverallLeftShift -= ByteShift;
   1428         ByteMask <<= ByteShift;
   1429         ByteMask &= (~0U >> (32-ByteValues.size()));
   1430       }
   1431 
   1432       if (OverallLeftShift >= (int)ByteValues.size()) return true;
   1433       if (OverallLeftShift <= -(int)ByteValues.size()) return true;
   1434 
   1435       return CollectBSwapParts(I->getOperand(0), OverallLeftShift, ByteMask,
   1436                                ByteValues);
   1437     }
   1438 
   1439     // If this is a logical 'and' with a mask that clears bytes, clear the
   1440     // corresponding bytes in ByteMask.
   1441     if (I->getOpcode() == Instruction::And &&
   1442         isa<ConstantInt>(I->getOperand(1))) {
   1443       // Scan every byte of the and mask, seeing if the byte is either 0 or 255.
   1444       unsigned NumBytes = ByteValues.size();
   1445       APInt Byte(I->getType()->getPrimitiveSizeInBits(), 255);
   1446       const APInt &AndMask = cast<ConstantInt>(I->getOperand(1))->getValue();
   1447 
   1448       for (unsigned i = 0; i != NumBytes; ++i, Byte <<= 8) {
   1449         // If this byte is masked out by a later operation, we don't care what
   1450         // the and mask is.
   1451         if ((ByteMask & (1 << i)) == 0)
   1452           continue;
   1453 
   1454         // If the AndMask is all zeros for this byte, clear the bit.
   1455         APInt MaskB = AndMask & Byte;
   1456         if (MaskB == 0) {
   1457           ByteMask &= ~(1U << i);
   1458           continue;
   1459         }
   1460 
   1461         // If the AndMask is not all ones for this byte, it's not a bytezap.
   1462         if (MaskB != Byte)
   1463           return true;
   1464 
   1465         // Otherwise, this byte is kept.
   1466       }
   1467 
   1468       return CollectBSwapParts(I->getOperand(0), OverallLeftShift, ByteMask,
   1469                                ByteValues);
   1470     }
   1471   }
   1472 
   1473   // Okay, we got to something that isn't a shift, 'or' or 'and'.  This must be
   1474   // the input value to the bswap.  Some observations: 1) if more than one byte
   1475   // is demanded from this input, then it could not be successfully assembled
   1476   // into a byteswap.  At least one of the two bytes would not be aligned with
   1477   // their ultimate destination.
   1478   if (!isPowerOf2_32(ByteMask)) return true;
   1479   unsigned InputByteNo = countTrailingZeros(ByteMask);
   1480 
   1481   // 2) The input and ultimate destinations must line up: if byte 3 of an i32
   1482   // is demanded, it needs to go into byte 0 of the result.  This means that the
   1483   // byte needs to be shifted until it lands in the right byte bucket.  The
   1484   // shift amount depends on the position: if the byte is coming from the high
   1485   // part of the value (e.g. byte 3) then it must be shifted right.  If from the
   1486   // low part, it must be shifted left.
   1487   unsigned DestByteNo = InputByteNo + OverallLeftShift;
   1488   if (ByteValues.size()-1-DestByteNo != InputByteNo)
   1489     return true;
   1490 
   1491   // If the destination byte value is already defined, the values are or'd
   1492   // together, which isn't a bswap (unless it's an or of the same bits).
   1493   if (ByteValues[DestByteNo] && ByteValues[DestByteNo] != V)
   1494     return true;
   1495   ByteValues[DestByteNo] = V;
   1496   return false;
   1497 }
   1498 
   1499 /// MatchBSwap - Given an OR instruction, check to see if this is a bswap idiom.
   1500 /// If so, insert the new bswap intrinsic and return it.
   1501 Instruction *InstCombiner::MatchBSwap(BinaryOperator &I) {
   1502   IntegerType *ITy = dyn_cast<IntegerType>(I.getType());
   1503   if (!ITy || ITy->getBitWidth() % 16 ||
   1504       // ByteMask only allows up to 32-byte values.
   1505       ITy->getBitWidth() > 32*8)
   1506     return nullptr;   // Can only bswap pairs of bytes.  Can't do vectors.
   1507 
   1508   /// ByteValues - For each byte of the result, we keep track of which value
   1509   /// defines each byte.
   1510   SmallVector<Value*, 8> ByteValues;
   1511   ByteValues.resize(ITy->getBitWidth()/8);
   1512 
   1513   // Try to find all the pieces corresponding to the bswap.
   1514   uint32_t ByteMask = ~0U >> (32-ByteValues.size());
   1515   if (CollectBSwapParts(&I, 0, ByteMask, ByteValues))
   1516     return nullptr;
   1517 
   1518   // Check to see if all of the bytes come from the same value.
   1519   Value *V = ByteValues[0];
   1520   if (!V) return nullptr;  // Didn't find a byte?  Must be zero.
   1521 
   1522   // Check to make sure that all of the bytes come from the same value.
   1523   for (unsigned i = 1, e = ByteValues.size(); i != e; ++i)
   1524     if (ByteValues[i] != V)
   1525       return nullptr;
   1526   Module *M = I.getParent()->getParent()->getParent();
   1527   Function *F = Intrinsic::getDeclaration(M, Intrinsic::bswap, ITy);
   1528   return CallInst::Create(F, V);
   1529 }
   1530 
   1531 /// MatchSelectFromAndOr - We have an expression of the form (A&C)|(B&D).  Check
   1532 /// If A is (cond?-1:0) and either B or D is ~(cond?-1,0) or (cond?0,-1), then
   1533 /// we can simplify this expression to "cond ? C : D or B".
   1534 static Instruction *MatchSelectFromAndOr(Value *A, Value *B,
   1535                                          Value *C, Value *D) {
   1536   // If A is not a select of -1/0, this cannot match.
   1537   Value *Cond = nullptr;
   1538   if (!match(A, m_SExt(m_Value(Cond))) ||
   1539       !Cond->getType()->isIntegerTy(1))
   1540     return nullptr;
   1541 
   1542   // ((cond?-1:0)&C) | (B&(cond?0:-1)) -> cond ? C : B.
   1543   if (match(D, m_Not(m_SExt(m_Specific(Cond)))))
   1544     return SelectInst::Create(Cond, C, B);
   1545   if (match(D, m_SExt(m_Not(m_Specific(Cond)))))
   1546     return SelectInst::Create(Cond, C, B);
   1547 
   1548   // ((cond?-1:0)&C) | ((cond?0:-1)&D) -> cond ? C : D.
   1549   if (match(B, m_Not(m_SExt(m_Specific(Cond)))))
   1550     return SelectInst::Create(Cond, C, D);
   1551   if (match(B, m_SExt(m_Not(m_Specific(Cond)))))
   1552     return SelectInst::Create(Cond, C, D);
   1553   return nullptr;
   1554 }
   1555 
   1556 /// FoldOrOfICmps - Fold (icmp)|(icmp) if possible.
   1557 Value *InstCombiner::FoldOrOfICmps(ICmpInst *LHS, ICmpInst *RHS) {
   1558   ICmpInst::Predicate LHSCC = LHS->getPredicate(), RHSCC = RHS->getPredicate();
   1559 
   1560   // Fold (iszero(A & K1) | iszero(A & K2)) ->  (A & (K1 | K2)) != (K1 | K2)
   1561   // if K1 and K2 are a one-bit mask.
   1562   ConstantInt *LHSCst = dyn_cast<ConstantInt>(LHS->getOperand(1));
   1563   ConstantInt *RHSCst = dyn_cast<ConstantInt>(RHS->getOperand(1));
   1564 
   1565   if (LHS->getPredicate() == ICmpInst::ICMP_EQ && LHSCst && LHSCst->isZero() &&
   1566       RHS->getPredicate() == ICmpInst::ICMP_EQ && RHSCst && RHSCst->isZero()) {
   1567 
   1568     BinaryOperator *LAnd = dyn_cast<BinaryOperator>(LHS->getOperand(0));
   1569     BinaryOperator *RAnd = dyn_cast<BinaryOperator>(RHS->getOperand(0));
   1570     if (LAnd && RAnd && LAnd->hasOneUse() && RHS->hasOneUse() &&
   1571         LAnd->getOpcode() == Instruction::And &&
   1572         RAnd->getOpcode() == Instruction::And) {
   1573 
   1574       Value *Mask = nullptr;
   1575       Value *Masked = nullptr;
   1576       if (LAnd->getOperand(0) == RAnd->getOperand(0) &&
   1577           isKnownToBeAPowerOfTwo(LAnd->getOperand(1)) &&
   1578           isKnownToBeAPowerOfTwo(RAnd->getOperand(1))) {
   1579         Mask = Builder->CreateOr(LAnd->getOperand(1), RAnd->getOperand(1));
   1580         Masked = Builder->CreateAnd(LAnd->getOperand(0), Mask);
   1581       } else if (LAnd->getOperand(1) == RAnd->getOperand(1) &&
   1582                  isKnownToBeAPowerOfTwo(LAnd->getOperand(0)) &&
   1583                  isKnownToBeAPowerOfTwo(RAnd->getOperand(0))) {
   1584         Mask = Builder->CreateOr(LAnd->getOperand(0), RAnd->getOperand(0));
   1585         Masked = Builder->CreateAnd(LAnd->getOperand(1), Mask);
   1586       }
   1587 
   1588       if (Masked)
   1589         return Builder->CreateICmp(ICmpInst::ICMP_NE, Masked, Mask);
   1590     }
   1591   }
   1592 
   1593   // (icmp1 A, B) | (icmp2 A, B) --> (icmp3 A, B)
   1594   if (PredicatesFoldable(LHSCC, RHSCC)) {
   1595     if (LHS->getOperand(0) == RHS->getOperand(1) &&
   1596         LHS->getOperand(1) == RHS->getOperand(0))
   1597       LHS->swapOperands();
   1598     if (LHS->getOperand(0) == RHS->getOperand(0) &&
   1599         LHS->getOperand(1) == RHS->getOperand(1)) {
   1600       Value *Op0 = LHS->getOperand(0), *Op1 = LHS->getOperand(1);
   1601       unsigned Code = getICmpCode(LHS) | getICmpCode(RHS);
   1602       bool isSigned = LHS->isSigned() || RHS->isSigned();
   1603       return getNewICmpValue(isSigned, Code, Op0, Op1, Builder);
   1604     }
   1605   }
   1606 
   1607   // handle (roughly):
   1608   // (icmp ne (A & B), C) | (icmp ne (A & D), E)
   1609   if (Value *V = foldLogOpOfMaskedICmps(LHS, RHS, false, Builder))
   1610     return V;
   1611 
   1612   Value *Val = LHS->getOperand(0), *Val2 = RHS->getOperand(0);
   1613   if (LHS->hasOneUse() || RHS->hasOneUse()) {
   1614     // (icmp eq B, 0) | (icmp ult A, B) -> (icmp ule A, B-1)
   1615     // (icmp eq B, 0) | (icmp ugt B, A) -> (icmp ule A, B-1)
   1616     Value *A = nullptr, *B = nullptr;
   1617     if (LHSCC == ICmpInst::ICMP_EQ && LHSCst && LHSCst->isZero()) {
   1618       B = Val;
   1619       if (RHSCC == ICmpInst::ICMP_ULT && Val == RHS->getOperand(1))
   1620         A = Val2;
   1621       else if (RHSCC == ICmpInst::ICMP_UGT && Val == Val2)
   1622         A = RHS->getOperand(1);
   1623     }
   1624     // (icmp ult A, B) | (icmp eq B, 0) -> (icmp ule A, B-1)
   1625     // (icmp ugt B, A) | (icmp eq B, 0) -> (icmp ule A, B-1)
   1626     else if (RHSCC == ICmpInst::ICMP_EQ && RHSCst && RHSCst->isZero()) {
   1627       B = Val2;
   1628       if (LHSCC == ICmpInst::ICMP_ULT && Val2 == LHS->getOperand(1))
   1629         A = Val;
   1630       else if (LHSCC == ICmpInst::ICMP_UGT && Val2 == Val)
   1631         A = LHS->getOperand(1);
   1632     }
   1633     if (A && B)
   1634       return Builder->CreateICmp(
   1635           ICmpInst::ICMP_UGE,
   1636           Builder->CreateAdd(B, ConstantInt::getSigned(B->getType(), -1)), A);
   1637   }
   1638 
   1639   // This only handles icmp of constants: (icmp1 A, C1) | (icmp2 B, C2).
   1640   if (!LHSCst || !RHSCst) return nullptr;
   1641 
   1642   if (LHSCst == RHSCst && LHSCC == RHSCC) {
   1643     // (icmp ne A, 0) | (icmp ne B, 0) --> (icmp ne (A|B), 0)
   1644     if (LHSCC == ICmpInst::ICMP_NE && LHSCst->isZero()) {
   1645       Value *NewOr = Builder->CreateOr(Val, Val2);
   1646       return Builder->CreateICmp(LHSCC, NewOr, LHSCst);
   1647     }
   1648   }
   1649 
   1650   // (icmp ult (X + CA), C1) | (icmp eq X, C2) -> (icmp ule (X + CA), C1)
   1651   //   iff C2 + CA == C1.
   1652   if (LHSCC == ICmpInst::ICMP_ULT && RHSCC == ICmpInst::ICMP_EQ) {
   1653     ConstantInt *AddCst;
   1654     if (match(Val, m_Add(m_Specific(Val2), m_ConstantInt(AddCst))))
   1655       if (RHSCst->getValue() + AddCst->getValue() == LHSCst->getValue())
   1656         return Builder->CreateICmpULE(Val, LHSCst);
   1657   }
   1658 
   1659   // From here on, we only handle:
   1660   //    (icmp1 A, C1) | (icmp2 A, C2) --> something simpler.
   1661   if (Val != Val2) return nullptr;
   1662 
   1663   // ICMP_[US][GL]E X, CST is folded to ICMP_[US][GL]T elsewhere.
   1664   if (LHSCC == ICmpInst::ICMP_UGE || LHSCC == ICmpInst::ICMP_ULE ||
   1665       RHSCC == ICmpInst::ICMP_UGE || RHSCC == ICmpInst::ICMP_ULE ||
   1666       LHSCC == ICmpInst::ICMP_SGE || LHSCC == ICmpInst::ICMP_SLE ||
   1667       RHSCC == ICmpInst::ICMP_SGE || RHSCC == ICmpInst::ICMP_SLE)
   1668     return nullptr;
   1669 
   1670   // We can't fold (ugt x, C) | (sgt x, C2).
   1671   if (!PredicatesFoldable(LHSCC, RHSCC))
   1672     return nullptr;
   1673 
   1674   // Ensure that the larger constant is on the RHS.
   1675   bool ShouldSwap;
   1676   if (CmpInst::isSigned(LHSCC) ||
   1677       (ICmpInst::isEquality(LHSCC) &&
   1678        CmpInst::isSigned(RHSCC)))
   1679     ShouldSwap = LHSCst->getValue().sgt(RHSCst->getValue());
   1680   else
   1681     ShouldSwap = LHSCst->getValue().ugt(RHSCst->getValue());
   1682 
   1683   if (ShouldSwap) {
   1684     std::swap(LHS, RHS);
   1685     std::swap(LHSCst, RHSCst);
   1686     std::swap(LHSCC, RHSCC);
   1687   }
   1688 
   1689   // At this point, we know we have two icmp instructions
   1690   // comparing a value against two constants and or'ing the result
   1691   // together.  Because of the above check, we know that we only have
   1692   // ICMP_EQ, ICMP_NE, ICMP_LT, and ICMP_GT here. We also know (from the
   1693   // icmp folding check above), that the two constants are not
   1694   // equal.
   1695   assert(LHSCst != RHSCst && "Compares not folded above?");
   1696 
   1697   switch (LHSCC) {
   1698   default: llvm_unreachable("Unknown integer condition code!");
   1699   case ICmpInst::ICMP_EQ:
   1700     switch (RHSCC) {
   1701     default: llvm_unreachable("Unknown integer condition code!");
   1702     case ICmpInst::ICMP_EQ:
   1703       if (LHS->getOperand(0) == RHS->getOperand(0)) {
   1704         // if LHSCst and RHSCst differ only by one bit:
   1705         // (A == C1 || A == C2) -> (A & ~(C1 ^ C2)) == C1
   1706         assert(LHSCst->getValue().ule(LHSCst->getValue()));
   1707 
   1708         APInt Xor = LHSCst->getValue() ^ RHSCst->getValue();
   1709         if (Xor.isPowerOf2()) {
   1710           Value *NegCst = Builder->getInt(~Xor);
   1711           Value *And = Builder->CreateAnd(LHS->getOperand(0), NegCst);
   1712           return Builder->CreateICmp(ICmpInst::ICMP_EQ, And, LHSCst);
   1713         }
   1714       }
   1715 
   1716       if (LHSCst == SubOne(RHSCst)) {
   1717         // (X == 13 | X == 14) -> X-13 <u 2
   1718         Constant *AddCST = ConstantExpr::getNeg(LHSCst);
   1719         Value *Add = Builder->CreateAdd(Val, AddCST, Val->getName()+".off");
   1720         AddCST = ConstantExpr::getSub(AddOne(RHSCst), LHSCst);
   1721         return Builder->CreateICmpULT(Add, AddCST);
   1722       }
   1723 
   1724       break;                         // (X == 13 | X == 15) -> no change
   1725     case ICmpInst::ICMP_UGT:         // (X == 13 | X u> 14) -> no change
   1726     case ICmpInst::ICMP_SGT:         // (X == 13 | X s> 14) -> no change
   1727       break;
   1728     case ICmpInst::ICMP_NE:          // (X == 13 | X != 15) -> X != 15
   1729     case ICmpInst::ICMP_ULT:         // (X == 13 | X u< 15) -> X u< 15
   1730     case ICmpInst::ICMP_SLT:         // (X == 13 | X s< 15) -> X s< 15
   1731       return RHS;
   1732     }
   1733     break;
   1734   case ICmpInst::ICMP_NE:
   1735     switch (RHSCC) {
   1736     default: llvm_unreachable("Unknown integer condition code!");
   1737     case ICmpInst::ICMP_EQ:          // (X != 13 | X == 15) -> X != 13
   1738     case ICmpInst::ICMP_UGT:         // (X != 13 | X u> 15) -> X != 13
   1739     case ICmpInst::ICMP_SGT:         // (X != 13 | X s> 15) -> X != 13
   1740       return LHS;
   1741     case ICmpInst::ICMP_NE:          // (X != 13 | X != 15) -> true
   1742     case ICmpInst::ICMP_ULT:         // (X != 13 | X u< 15) -> true
   1743     case ICmpInst::ICMP_SLT:         // (X != 13 | X s< 15) -> true
   1744       return Builder->getTrue();
   1745     }
   1746   case ICmpInst::ICMP_ULT:
   1747     switch (RHSCC) {
   1748     default: llvm_unreachable("Unknown integer condition code!");
   1749     case ICmpInst::ICMP_EQ:         // (X u< 13 | X == 14) -> no change
   1750       break;
   1751     case ICmpInst::ICMP_UGT:        // (X u< 13 | X u> 15) -> (X-13) u> 2
   1752       // If RHSCst is [us]MAXINT, it is always false.  Not handling
   1753       // this can cause overflow.
   1754       if (RHSCst->isMaxValue(false))
   1755         return LHS;
   1756       return InsertRangeTest(Val, LHSCst, AddOne(RHSCst), false, false);
   1757     case ICmpInst::ICMP_SGT:        // (X u< 13 | X s> 15) -> no change
   1758       break;
   1759     case ICmpInst::ICMP_NE:         // (X u< 13 | X != 15) -> X != 15
   1760     case ICmpInst::ICMP_ULT:        // (X u< 13 | X u< 15) -> X u< 15
   1761       return RHS;
   1762     case ICmpInst::ICMP_SLT:        // (X u< 13 | X s< 15) -> no change
   1763       break;
   1764     }
   1765     break;
   1766   case ICmpInst::ICMP_SLT:
   1767     switch (RHSCC) {
   1768     default: llvm_unreachable("Unknown integer condition code!");
   1769     case ICmpInst::ICMP_EQ:         // (X s< 13 | X == 14) -> no change
   1770       break;
   1771     case ICmpInst::ICMP_SGT:        // (X s< 13 | X s> 15) -> (X-13) s> 2
   1772       // If RHSCst is [us]MAXINT, it is always false.  Not handling
   1773       // this can cause overflow.
   1774       if (RHSCst->isMaxValue(true))
   1775         return LHS;
   1776       return InsertRangeTest(Val, LHSCst, AddOne(RHSCst), true, false);
   1777     case ICmpInst::ICMP_UGT:        // (X s< 13 | X u> 15) -> no change
   1778       break;
   1779     case ICmpInst::ICMP_NE:         // (X s< 13 | X != 15) -> X != 15
   1780     case ICmpInst::ICMP_SLT:        // (X s< 13 | X s< 15) -> X s< 15
   1781       return RHS;
   1782     case ICmpInst::ICMP_ULT:        // (X s< 13 | X u< 15) -> no change
   1783       break;
   1784     }
   1785     break;
   1786   case ICmpInst::ICMP_UGT:
   1787     switch (RHSCC) {
   1788     default: llvm_unreachable("Unknown integer condition code!");
   1789     case ICmpInst::ICMP_EQ:         // (X u> 13 | X == 15) -> X u> 13
   1790     case ICmpInst::ICMP_UGT:        // (X u> 13 | X u> 15) -> X u> 13
   1791       return LHS;
   1792     case ICmpInst::ICMP_SGT:        // (X u> 13 | X s> 15) -> no change
   1793       break;
   1794     case ICmpInst::ICMP_NE:         // (X u> 13 | X != 15) -> true
   1795     case ICmpInst::ICMP_ULT:        // (X u> 13 | X u< 15) -> true
   1796       return Builder->getTrue();
   1797     case ICmpInst::ICMP_SLT:        // (X u> 13 | X s< 15) -> no change
   1798       break;
   1799     }
   1800     break;
   1801   case ICmpInst::ICMP_SGT:
   1802     switch (RHSCC) {
   1803     default: llvm_unreachable("Unknown integer condition code!");
   1804     case ICmpInst::ICMP_EQ:         // (X s> 13 | X == 15) -> X > 13
   1805     case ICmpInst::ICMP_SGT:        // (X s> 13 | X s> 15) -> X > 13
   1806       return LHS;
   1807     case ICmpInst::ICMP_UGT:        // (X s> 13 | X u> 15) -> no change
   1808       break;
   1809     case ICmpInst::ICMP_NE:         // (X s> 13 | X != 15) -> true
   1810     case ICmpInst::ICMP_SLT:        // (X s> 13 | X s< 15) -> true
   1811       return Builder->getTrue();
   1812     case ICmpInst::ICMP_ULT:        // (X s> 13 | X u< 15) -> no change
   1813       break;
   1814     }
   1815     break;
   1816   }
   1817   return nullptr;
   1818 }
   1819 
   1820 /// FoldOrOfFCmps - Optimize (fcmp)|(fcmp).  NOTE: Unlike the rest of
   1821 /// instcombine, this returns a Value which should already be inserted into the
   1822 /// function.
   1823 Value *InstCombiner::FoldOrOfFCmps(FCmpInst *LHS, FCmpInst *RHS) {
   1824   if (LHS->getPredicate() == FCmpInst::FCMP_UNO &&
   1825       RHS->getPredicate() == FCmpInst::FCMP_UNO &&
   1826       LHS->getOperand(0)->getType() == RHS->getOperand(0)->getType()) {
   1827     if (ConstantFP *LHSC = dyn_cast<ConstantFP>(LHS->getOperand(1)))
   1828       if (ConstantFP *RHSC = dyn_cast<ConstantFP>(RHS->getOperand(1))) {
   1829         // If either of the constants are nans, then the whole thing returns
   1830         // true.
   1831         if (LHSC->getValueAPF().isNaN() || RHSC->getValueAPF().isNaN())
   1832           return Builder->getTrue();
   1833 
   1834         // Otherwise, no need to compare the two constants, compare the
   1835         // rest.
   1836         return Builder->CreateFCmpUNO(LHS->getOperand(0), RHS->getOperand(0));
   1837       }
   1838 
   1839     // Handle vector zeros.  This occurs because the canonical form of
   1840     // "fcmp uno x,x" is "fcmp uno x, 0".
   1841     if (isa<ConstantAggregateZero>(LHS->getOperand(1)) &&
   1842         isa<ConstantAggregateZero>(RHS->getOperand(1)))
   1843       return Builder->CreateFCmpUNO(LHS->getOperand(0), RHS->getOperand(0));
   1844 
   1845     return nullptr;
   1846   }
   1847 
   1848   Value *Op0LHS = LHS->getOperand(0), *Op0RHS = LHS->getOperand(1);
   1849   Value *Op1LHS = RHS->getOperand(0), *Op1RHS = RHS->getOperand(1);
   1850   FCmpInst::Predicate Op0CC = LHS->getPredicate(), Op1CC = RHS->getPredicate();
   1851 
   1852   if (Op0LHS == Op1RHS && Op0RHS == Op1LHS) {
   1853     // Swap RHS operands to match LHS.
   1854     Op1CC = FCmpInst::getSwappedPredicate(Op1CC);
   1855     std::swap(Op1LHS, Op1RHS);
   1856   }
   1857   if (Op0LHS == Op1LHS && Op0RHS == Op1RHS) {
   1858     // Simplify (fcmp cc0 x, y) | (fcmp cc1 x, y).
   1859     if (Op0CC == Op1CC)
   1860       return Builder->CreateFCmp((FCmpInst::Predicate)Op0CC, Op0LHS, Op0RHS);
   1861     if (Op0CC == FCmpInst::FCMP_TRUE || Op1CC == FCmpInst::FCMP_TRUE)
   1862       return ConstantInt::get(CmpInst::makeCmpResultType(LHS->getType()), 1);
   1863     if (Op0CC == FCmpInst::FCMP_FALSE)
   1864       return RHS;
   1865     if (Op1CC == FCmpInst::FCMP_FALSE)
   1866       return LHS;
   1867     bool Op0Ordered;
   1868     bool Op1Ordered;
   1869     unsigned Op0Pred = getFCmpCode(Op0CC, Op0Ordered);
   1870     unsigned Op1Pred = getFCmpCode(Op1CC, Op1Ordered);
   1871     if (Op0Ordered == Op1Ordered) {
   1872       // If both are ordered or unordered, return a new fcmp with
   1873       // or'ed predicates.
   1874       return getFCmpValue(Op0Ordered, Op0Pred|Op1Pred, Op0LHS, Op0RHS, Builder);
   1875     }
   1876   }
   1877   return nullptr;
   1878 }
   1879 
   1880 /// FoldOrWithConstants - This helper function folds:
   1881 ///
   1882 ///     ((A | B) & C1) | (B & C2)
   1883 ///
   1884 /// into:
   1885 ///
   1886 ///     (A & C1) | B
   1887 ///
   1888 /// when the XOR of the two constants is "all ones" (-1).
   1889 Instruction *InstCombiner::FoldOrWithConstants(BinaryOperator &I, Value *Op,
   1890                                                Value *A, Value *B, Value *C) {
   1891   ConstantInt *CI1 = dyn_cast<ConstantInt>(C);
   1892   if (!CI1) return nullptr;
   1893 
   1894   Value *V1 = nullptr;
   1895   ConstantInt *CI2 = nullptr;
   1896   if (!match(Op, m_And(m_Value(V1), m_ConstantInt(CI2)))) return nullptr;
   1897 
   1898   APInt Xor = CI1->getValue() ^ CI2->getValue();
   1899   if (!Xor.isAllOnesValue()) return nullptr;
   1900 
   1901   if (V1 == A || V1 == B) {
   1902     Value *NewOp = Builder->CreateAnd((V1 == A) ? B : A, CI1);
   1903     return BinaryOperator::CreateOr(NewOp, V1);
   1904   }
   1905 
   1906   return nullptr;
   1907 }
   1908 
   1909 Instruction *InstCombiner::visitOr(BinaryOperator &I) {
   1910   bool Changed = SimplifyAssociativeOrCommutative(I);
   1911   Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1);
   1912 
   1913   if (Value *V = SimplifyVectorOp(I))
   1914     return ReplaceInstUsesWith(I, V);
   1915 
   1916   if (Value *V = SimplifyOrInst(Op0, Op1, DL))
   1917     return ReplaceInstUsesWith(I, V);
   1918 
   1919   // (A&B)|(A&C) -> A&(B|C) etc
   1920   if (Value *V = SimplifyUsingDistributiveLaws(I))
   1921     return ReplaceInstUsesWith(I, V);
   1922 
   1923   // See if we can simplify any instructions used by the instruction whose sole
   1924   // purpose is to compute bits we don't care about.
   1925   if (SimplifyDemandedInstructionBits(I))
   1926     return &I;
   1927 
   1928   if (ConstantInt *RHS = dyn_cast<ConstantInt>(Op1)) {
   1929     ConstantInt *C1 = nullptr; Value *X = nullptr;
   1930     // (X & C1) | C2 --> (X | C2) & (C1|C2)
   1931     // iff (C1 & C2) == 0.
   1932     if (match(Op0, m_And(m_Value(X), m_ConstantInt(C1))) &&
   1933         (RHS->getValue() & C1->getValue()) != 0 &&
   1934         Op0->hasOneUse()) {
   1935       Value *Or = Builder->CreateOr(X, RHS);
   1936       Or->takeName(Op0);
   1937       return BinaryOperator::CreateAnd(Or,
   1938                              Builder->getInt(RHS->getValue() | C1->getValue()));
   1939     }
   1940 
   1941     // (X ^ C1) | C2 --> (X | C2) ^ (C1&~C2)
   1942     if (match(Op0, m_Xor(m_Value(X), m_ConstantInt(C1))) &&
   1943         Op0->hasOneUse()) {
   1944       Value *Or = Builder->CreateOr(X, RHS);
   1945       Or->takeName(Op0);
   1946       return BinaryOperator::CreateXor(Or,
   1947                             Builder->getInt(C1->getValue() & ~RHS->getValue()));
   1948     }
   1949 
   1950     // Try to fold constant and into select arguments.
   1951     if (SelectInst *SI = dyn_cast<SelectInst>(Op0))
   1952       if (Instruction *R = FoldOpIntoSelect(I, SI))
   1953         return R;
   1954 
   1955     if (isa<PHINode>(Op0))
   1956       if (Instruction *NV = FoldOpIntoPhi(I))
   1957         return NV;
   1958   }
   1959 
   1960   Value *A = nullptr, *B = nullptr;
   1961   ConstantInt *C1 = nullptr, *C2 = nullptr;
   1962 
   1963   // (A | B) | C  and  A | (B | C)                  -> bswap if possible.
   1964   // (A >> B) | (C << D)  and  (A << B) | (B >> C)  -> bswap if possible.
   1965   if (match(Op0, m_Or(m_Value(), m_Value())) ||
   1966       match(Op1, m_Or(m_Value(), m_Value())) ||
   1967       (match(Op0, m_LogicalShift(m_Value(), m_Value())) &&
   1968        match(Op1, m_LogicalShift(m_Value(), m_Value())))) {
   1969     if (Instruction *BSwap = MatchBSwap(I))
   1970       return BSwap;
   1971   }
   1972 
   1973   // (X^C)|Y -> (X|Y)^C iff Y&C == 0
   1974   if (Op0->hasOneUse() &&
   1975       match(Op0, m_Xor(m_Value(A), m_ConstantInt(C1))) &&
   1976       MaskedValueIsZero(Op1, C1->getValue())) {
   1977     Value *NOr = Builder->CreateOr(A, Op1);
   1978     NOr->takeName(Op0);
   1979     return BinaryOperator::CreateXor(NOr, C1);
   1980   }
   1981 
   1982   // Y|(X^C) -> (X|Y)^C iff Y&C == 0
   1983   if (Op1->hasOneUse() &&
   1984       match(Op1, m_Xor(m_Value(A), m_ConstantInt(C1))) &&
   1985       MaskedValueIsZero(Op0, C1->getValue())) {
   1986     Value *NOr = Builder->CreateOr(A, Op0);
   1987     NOr->takeName(Op0);
   1988     return BinaryOperator::CreateXor(NOr, C1);
   1989   }
   1990 
   1991   // (A & C)|(B & D)
   1992   Value *C = nullptr, *D = nullptr;
   1993   if (match(Op0, m_And(m_Value(A), m_Value(C))) &&
   1994       match(Op1, m_And(m_Value(B), m_Value(D)))) {
   1995     Value *V1 = nullptr, *V2 = nullptr;
   1996     C1 = dyn_cast<ConstantInt>(C);
   1997     C2 = dyn_cast<ConstantInt>(D);
   1998     if (C1 && C2) {  // (A & C1)|(B & C2)
   1999       if ((C1->getValue() & C2->getValue()) == 0) {
   2000         // ((V | N) & C1) | (V & C2) --> (V|N) & (C1|C2)
   2001         // iff (C1&C2) == 0 and (N&~C1) == 0
   2002         if (match(A, m_Or(m_Value(V1), m_Value(V2))) &&
   2003             ((V1 == B && MaskedValueIsZero(V2, ~C1->getValue())) ||  // (V|N)
   2004              (V2 == B && MaskedValueIsZero(V1, ~C1->getValue()))))   // (N|V)
   2005           return BinaryOperator::CreateAnd(A,
   2006                                 Builder->getInt(C1->getValue()|C2->getValue()));
   2007         // Or commutes, try both ways.
   2008         if (match(B, m_Or(m_Value(V1), m_Value(V2))) &&
   2009             ((V1 == A && MaskedValueIsZero(V2, ~C2->getValue())) ||  // (V|N)
   2010              (V2 == A && MaskedValueIsZero(V1, ~C2->getValue()))))   // (N|V)
   2011           return BinaryOperator::CreateAnd(B,
   2012                                 Builder->getInt(C1->getValue()|C2->getValue()));
   2013 
   2014         // ((V|C3)&C1) | ((V|C4)&C2) --> (V|C3|C4)&(C1|C2)
   2015         // iff (C1&C2) == 0 and (C3&~C1) == 0 and (C4&~C2) == 0.
   2016         ConstantInt *C3 = nullptr, *C4 = nullptr;
   2017         if (match(A, m_Or(m_Value(V1), m_ConstantInt(C3))) &&
   2018             (C3->getValue() & ~C1->getValue()) == 0 &&
   2019             match(B, m_Or(m_Specific(V1), m_ConstantInt(C4))) &&
   2020             (C4->getValue() & ~C2->getValue()) == 0) {
   2021           V2 = Builder->CreateOr(V1, ConstantExpr::getOr(C3, C4), "bitfield");
   2022           return BinaryOperator::CreateAnd(V2,
   2023                                 Builder->getInt(C1->getValue()|C2->getValue()));
   2024         }
   2025       }
   2026     }
   2027 
   2028     // (A & (C0?-1:0)) | (B & ~(C0?-1:0)) ->  C0 ? A : B, and commuted variants.
   2029     // Don't do this for vector select idioms, the code generator doesn't handle
   2030     // them well yet.
   2031     if (!I.getType()->isVectorTy()) {
   2032       if (Instruction *Match = MatchSelectFromAndOr(A, B, C, D))
   2033         return Match;
   2034       if (Instruction *Match = MatchSelectFromAndOr(B, A, D, C))
   2035         return Match;
   2036       if (Instruction *Match = MatchSelectFromAndOr(C, B, A, D))
   2037         return Match;
   2038       if (Instruction *Match = MatchSelectFromAndOr(D, A, B, C))
   2039         return Match;
   2040     }
   2041 
   2042     // ((A&~B)|(~A&B)) -> A^B
   2043     if ((match(C, m_Not(m_Specific(D))) &&
   2044          match(B, m_Not(m_Specific(A)))))
   2045       return BinaryOperator::CreateXor(A, D);
   2046     // ((~B&A)|(~A&B)) -> A^B
   2047     if ((match(A, m_Not(m_Specific(D))) &&
   2048          match(B, m_Not(m_Specific(C)))))
   2049       return BinaryOperator::CreateXor(C, D);
   2050     // ((A&~B)|(B&~A)) -> A^B
   2051     if ((match(C, m_Not(m_Specific(B))) &&
   2052          match(D, m_Not(m_Specific(A)))))
   2053       return BinaryOperator::CreateXor(A, B);
   2054     // ((~B&A)|(B&~A)) -> A^B
   2055     if ((match(A, m_Not(m_Specific(B))) &&
   2056          match(D, m_Not(m_Specific(C)))))
   2057       return BinaryOperator::CreateXor(C, B);
   2058 
   2059     // ((A|B)&1)|(B&-2) -> (A&1) | B
   2060     if (match(A, m_Or(m_Value(V1), m_Specific(B))) ||
   2061         match(A, m_Or(m_Specific(B), m_Value(V1)))) {
   2062       Instruction *Ret = FoldOrWithConstants(I, Op1, V1, B, C);
   2063       if (Ret) return Ret;
   2064     }
   2065     // (B&-2)|((A|B)&1) -> (A&1) | B
   2066     if (match(B, m_Or(m_Specific(A), m_Value(V1))) ||
   2067         match(B, m_Or(m_Value(V1), m_Specific(A)))) {
   2068       Instruction *Ret = FoldOrWithConstants(I, Op0, A, V1, D);
   2069       if (Ret) return Ret;
   2070     }
   2071   }
   2072 
   2073   // (X >> Z) | (Y >> Z)  -> (X|Y) >> Z  for all shifts.
   2074   if (BinaryOperator *SI1 = dyn_cast<BinaryOperator>(Op1)) {
   2075     if (BinaryOperator *SI0 = dyn_cast<BinaryOperator>(Op0))
   2076       if (SI0->isShift() && SI0->getOpcode() == SI1->getOpcode() &&
   2077           SI0->getOperand(1) == SI1->getOperand(1) &&
   2078           (SI0->hasOneUse() || SI1->hasOneUse())) {
   2079         Value *NewOp = Builder->CreateOr(SI0->getOperand(0), SI1->getOperand(0),
   2080                                          SI0->getName());
   2081         return BinaryOperator::Create(SI1->getOpcode(), NewOp,
   2082                                       SI1->getOperand(1));
   2083       }
   2084   }
   2085 
   2086   // (~A | ~B) == (~(A & B)) - De Morgan's Law
   2087   if (Value *Op0NotVal = dyn_castNotVal(Op0))
   2088     if (Value *Op1NotVal = dyn_castNotVal(Op1))
   2089       if (Op0->hasOneUse() && Op1->hasOneUse()) {
   2090         Value *And = Builder->CreateAnd(Op0NotVal, Op1NotVal,
   2091                                         I.getName()+".demorgan");
   2092         return BinaryOperator::CreateNot(And);
   2093       }
   2094 
   2095   // Canonicalize xor to the RHS.
   2096   bool SwappedForXor = false;
   2097   if (match(Op0, m_Xor(m_Value(), m_Value()))) {
   2098     std::swap(Op0, Op1);
   2099     SwappedForXor = true;
   2100   }
   2101 
   2102   // A | ( A ^ B) -> A |  B
   2103   // A | (~A ^ B) -> A | ~B
   2104   // (A & B) | (A ^ B)
   2105   if (match(Op1, m_Xor(m_Value(A), m_Value(B)))) {
   2106     if (Op0 == A || Op0 == B)
   2107       return BinaryOperator::CreateOr(A, B);
   2108 
   2109     if (match(Op0, m_And(m_Specific(A), m_Specific(B))) ||
   2110         match(Op0, m_And(m_Specific(B), m_Specific(A))))
   2111       return BinaryOperator::CreateOr(A, B);
   2112 
   2113     if (Op1->hasOneUse() && match(A, m_Not(m_Specific(Op0)))) {
   2114       Value *Not = Builder->CreateNot(B, B->getName()+".not");
   2115       return BinaryOperator::CreateOr(Not, Op0);
   2116     }
   2117     if (Op1->hasOneUse() && match(B, m_Not(m_Specific(Op0)))) {
   2118       Value *Not = Builder->CreateNot(A, A->getName()+".not");
   2119       return BinaryOperator::CreateOr(Not, Op0);
   2120     }
   2121   }
   2122 
   2123   // A | ~(A | B) -> A | ~B
   2124   // A | ~(A ^ B) -> A | ~B
   2125   if (match(Op1, m_Not(m_Value(A))))
   2126     if (BinaryOperator *B = dyn_cast<BinaryOperator>(A))
   2127       if ((Op0 == B->getOperand(0) || Op0 == B->getOperand(1)) &&
   2128           Op1->hasOneUse() && (B->getOpcode() == Instruction::Or ||
   2129                                B->getOpcode() == Instruction::Xor)) {
   2130         Value *NotOp = Op0 == B->getOperand(0) ? B->getOperand(1) :
   2131                                                  B->getOperand(0);
   2132         Value *Not = Builder->CreateNot(NotOp, NotOp->getName()+".not");
   2133         return BinaryOperator::CreateOr(Not, Op0);
   2134       }
   2135 
   2136   if (SwappedForXor)
   2137     std::swap(Op0, Op1);
   2138 
   2139   if (ICmpInst *RHS = dyn_cast<ICmpInst>(I.getOperand(1)))
   2140     if (ICmpInst *LHS = dyn_cast<ICmpInst>(I.getOperand(0)))
   2141       if (Value *Res = FoldOrOfICmps(LHS, RHS))
   2142         return ReplaceInstUsesWith(I, Res);
   2143 
   2144   // (fcmp uno x, c) | (fcmp uno y, c)  -> (fcmp uno x, y)
   2145   if (FCmpInst *LHS = dyn_cast<FCmpInst>(I.getOperand(0)))
   2146     if (FCmpInst *RHS = dyn_cast<FCmpInst>(I.getOperand(1)))
   2147       if (Value *Res = FoldOrOfFCmps(LHS, RHS))
   2148         return ReplaceInstUsesWith(I, Res);
   2149 
   2150   // fold (or (cast A), (cast B)) -> (cast (or A, B))
   2151   if (CastInst *Op0C = dyn_cast<CastInst>(Op0)) {
   2152     CastInst *Op1C = dyn_cast<CastInst>(Op1);
   2153     if (Op1C && Op0C->getOpcode() == Op1C->getOpcode()) {// same cast kind ?
   2154       Type *SrcTy = Op0C->getOperand(0)->getType();
   2155       if (SrcTy == Op1C->getOperand(0)->getType() &&
   2156           SrcTy->isIntOrIntVectorTy()) {
   2157         Value *Op0COp = Op0C->getOperand(0), *Op1COp = Op1C->getOperand(0);
   2158 
   2159         if ((!isa<ICmpInst>(Op0COp) || !isa<ICmpInst>(Op1COp)) &&
   2160             // Only do this if the casts both really cause code to be
   2161             // generated.
   2162             ShouldOptimizeCast(Op0C->getOpcode(), Op0COp, I.getType()) &&
   2163             ShouldOptimizeCast(Op1C->getOpcode(), Op1COp, I.getType())) {
   2164           Value *NewOp = Builder->CreateOr(Op0COp, Op1COp, I.getName());
   2165           return CastInst::Create(Op0C->getOpcode(), NewOp, I.getType());
   2166         }
   2167 
   2168         // If this is or(cast(icmp), cast(icmp)), try to fold this even if the
   2169         // cast is otherwise not optimizable.  This happens for vector sexts.
   2170         if (ICmpInst *RHS = dyn_cast<ICmpInst>(Op1COp))
   2171           if (ICmpInst *LHS = dyn_cast<ICmpInst>(Op0COp))
   2172             if (Value *Res = FoldOrOfICmps(LHS, RHS))
   2173               return CastInst::Create(Op0C->getOpcode(), Res, I.getType());
   2174 
   2175         // If this is or(cast(fcmp), cast(fcmp)), try to fold this even if the
   2176         // cast is otherwise not optimizable.  This happens for vector sexts.
   2177         if (FCmpInst *RHS = dyn_cast<FCmpInst>(Op1COp))
   2178           if (FCmpInst *LHS = dyn_cast<FCmpInst>(Op0COp))
   2179             if (Value *Res = FoldOrOfFCmps(LHS, RHS))
   2180               return CastInst::Create(Op0C->getOpcode(), Res, I.getType());
   2181       }
   2182     }
   2183   }
   2184 
   2185   // or(sext(A), B) -> A ? -1 : B where A is an i1
   2186   // or(A, sext(B)) -> B ? -1 : A where B is an i1
   2187   if (match(Op0, m_SExt(m_Value(A))) && A->getType()->isIntegerTy(1))
   2188     return SelectInst::Create(A, ConstantInt::getSigned(I.getType(), -1), Op1);
   2189   if (match(Op1, m_SExt(m_Value(A))) && A->getType()->isIntegerTy(1))
   2190     return SelectInst::Create(A, ConstantInt::getSigned(I.getType(), -1), Op0);
   2191 
   2192   // Note: If we've gotten to the point of visiting the outer OR, then the
   2193   // inner one couldn't be simplified.  If it was a constant, then it won't
   2194   // be simplified by a later pass either, so we try swapping the inner/outer
   2195   // ORs in the hopes that we'll be able to simplify it this way.
   2196   // (X|C) | V --> (X|V) | C
   2197   if (Op0->hasOneUse() && !isa<ConstantInt>(Op1) &&
   2198       match(Op0, m_Or(m_Value(A), m_ConstantInt(C1)))) {
   2199     Value *Inner = Builder->CreateOr(A, Op1);
   2200     Inner->takeName(Op0);
   2201     return BinaryOperator::CreateOr(Inner, C1);
   2202   }
   2203 
   2204   // Change (or (bool?A:B),(bool?C:D)) --> (bool?(or A,C):(or B,D))
   2205   // Since this OR statement hasn't been optimized further yet, we hope
   2206   // that this transformation will allow the new ORs to be optimized.
   2207   {
   2208     Value *X = nullptr, *Y = nullptr;
   2209     if (Op0->hasOneUse() && Op1->hasOneUse() &&
   2210         match(Op0, m_Select(m_Value(X), m_Value(A), m_Value(B))) &&
   2211         match(Op1, m_Select(m_Value(Y), m_Value(C), m_Value(D))) && X == Y) {
   2212       Value *orTrue = Builder->CreateOr(A, C);
   2213       Value *orFalse = Builder->CreateOr(B, D);
   2214       return SelectInst::Create(X, orTrue, orFalse);
   2215     }
   2216   }
   2217 
   2218   return Changed ? &I : nullptr;
   2219 }
   2220 
   2221 Instruction *InstCombiner::visitXor(BinaryOperator &I) {
   2222   bool Changed = SimplifyAssociativeOrCommutative(I);
   2223   Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1);
   2224 
   2225   if (Value *V = SimplifyVectorOp(I))
   2226     return ReplaceInstUsesWith(I, V);
   2227 
   2228   if (Value *V = SimplifyXorInst(Op0, Op1, DL))
   2229     return ReplaceInstUsesWith(I, V);
   2230 
   2231   // (A&B)^(A&C) -> A&(B^C) etc
   2232   if (Value *V = SimplifyUsingDistributiveLaws(I))
   2233     return ReplaceInstUsesWith(I, V);
   2234 
   2235   // See if we can simplify any instructions used by the instruction whose sole
   2236   // purpose is to compute bits we don't care about.
   2237   if (SimplifyDemandedInstructionBits(I))
   2238     return &I;
   2239 
   2240   // Is this a ~ operation?
   2241   if (Value *NotOp = dyn_castNotVal(&I)) {
   2242     if (BinaryOperator *Op0I = dyn_cast<BinaryOperator>(NotOp)) {
   2243       if (Op0I->getOpcode() == Instruction::And ||
   2244           Op0I->getOpcode() == Instruction::Or) {
   2245         // ~(~X & Y) --> (X | ~Y) - De Morgan's Law
   2246         // ~(~X | Y) === (X & ~Y) - De Morgan's Law
   2247         if (dyn_castNotVal(Op0I->getOperand(1)))
   2248           Op0I->swapOperands();
   2249         if (Value *Op0NotVal = dyn_castNotVal(Op0I->getOperand(0))) {
   2250           Value *NotY =
   2251             Builder->CreateNot(Op0I->getOperand(1),
   2252                                Op0I->getOperand(1)->getName()+".not");
   2253           if (Op0I->getOpcode() == Instruction::And)
   2254             return BinaryOperator::CreateOr(Op0NotVal, NotY);
   2255           return BinaryOperator::CreateAnd(Op0NotVal, NotY);
   2256         }
   2257 
   2258         // ~(X & Y) --> (~X | ~Y) - De Morgan's Law
   2259         // ~(X | Y) === (~X & ~Y) - De Morgan's Law
   2260         if (isFreeToInvert(Op0I->getOperand(0)) &&
   2261             isFreeToInvert(Op0I->getOperand(1))) {
   2262           Value *NotX =
   2263             Builder->CreateNot(Op0I->getOperand(0), "notlhs");
   2264           Value *NotY =
   2265             Builder->CreateNot(Op0I->getOperand(1), "notrhs");
   2266           if (Op0I->getOpcode() == Instruction::And)
   2267             return BinaryOperator::CreateOr(NotX, NotY);
   2268           return BinaryOperator::CreateAnd(NotX, NotY);
   2269         }
   2270 
   2271       } else if (Op0I->getOpcode() == Instruction::AShr) {
   2272         // ~(~X >>s Y) --> (X >>s Y)
   2273         if (Value *Op0NotVal = dyn_castNotVal(Op0I->getOperand(0)))
   2274           return BinaryOperator::CreateAShr(Op0NotVal, Op0I->getOperand(1));
   2275       }
   2276     }
   2277   }
   2278 
   2279 
   2280   if (ConstantInt *RHS = dyn_cast<ConstantInt>(Op1)) {
   2281     if (RHS->isOne() && Op0->hasOneUse())
   2282       // xor (cmp A, B), true = not (cmp A, B) = !cmp A, B
   2283       if (CmpInst *CI = dyn_cast<CmpInst>(Op0))
   2284         return CmpInst::Create(CI->getOpcode(),
   2285                                CI->getInversePredicate(),
   2286                                CI->getOperand(0), CI->getOperand(1));
   2287 
   2288     // fold (xor(zext(cmp)), 1) and (xor(sext(cmp)), -1) to ext(!cmp).
   2289     if (CastInst *Op0C = dyn_cast<CastInst>(Op0)) {
   2290       if (CmpInst *CI = dyn_cast<CmpInst>(Op0C->getOperand(0))) {
   2291         if (CI->hasOneUse() && Op0C->hasOneUse()) {
   2292           Instruction::CastOps Opcode = Op0C->getOpcode();
   2293           if ((Opcode == Instruction::ZExt || Opcode == Instruction::SExt) &&
   2294               (RHS == ConstantExpr::getCast(Opcode, Builder->getTrue(),
   2295                                             Op0C->getDestTy()))) {
   2296             CI->setPredicate(CI->getInversePredicate());
   2297             return CastInst::Create(Opcode, CI, Op0C->getType());
   2298           }
   2299         }
   2300       }
   2301     }
   2302 
   2303     if (BinaryOperator *Op0I = dyn_cast<BinaryOperator>(Op0)) {
   2304       // ~(c-X) == X-c-1 == X+(-c-1)
   2305       if (Op0I->getOpcode() == Instruction::Sub && RHS->isAllOnesValue())
   2306         if (Constant *Op0I0C = dyn_cast<Constant>(Op0I->getOperand(0))) {
   2307           Constant *NegOp0I0C = ConstantExpr::getNeg(Op0I0C);
   2308           Constant *ConstantRHS = ConstantExpr::getSub(NegOp0I0C,
   2309                                       ConstantInt::get(I.getType(), 1));
   2310           return BinaryOperator::CreateAdd(Op0I->getOperand(1), ConstantRHS);
   2311         }
   2312 
   2313       if (ConstantInt *Op0CI = dyn_cast<ConstantInt>(Op0I->getOperand(1))) {
   2314         if (Op0I->getOpcode() == Instruction::Add) {
   2315           // ~(X-c) --> (-c-1)-X
   2316           if (RHS->isAllOnesValue()) {
   2317             Constant *NegOp0CI = ConstantExpr::getNeg(Op0CI);
   2318             return BinaryOperator::CreateSub(
   2319                            ConstantExpr::getSub(NegOp0CI,
   2320                                       ConstantInt::get(I.getType(), 1)),
   2321                                       Op0I->getOperand(0));
   2322           } else if (RHS->getValue().isSignBit()) {
   2323             // (X + C) ^ signbit -> (X + C + signbit)
   2324             Constant *C = Builder->getInt(RHS->getValue() + Op0CI->getValue());
   2325             return BinaryOperator::CreateAdd(Op0I->getOperand(0), C);
   2326 
   2327           }
   2328         } else if (Op0I->getOpcode() == Instruction::Or) {
   2329           // (X|C1)^C2 -> X^(C1|C2) iff X&~C1 == 0
   2330           if (MaskedValueIsZero(Op0I->getOperand(0), Op0CI->getValue())) {
   2331             Constant *NewRHS = ConstantExpr::getOr(Op0CI, RHS);
   2332             // Anything in both C1 and C2 is known to be zero, remove it from
   2333             // NewRHS.
   2334             Constant *CommonBits = ConstantExpr::getAnd(Op0CI, RHS);
   2335             NewRHS = ConstantExpr::getAnd(NewRHS,
   2336                                        ConstantExpr::getNot(CommonBits));
   2337             Worklist.Add(Op0I);
   2338             I.setOperand(0, Op0I->getOperand(0));
   2339             I.setOperand(1, NewRHS);
   2340             return &I;
   2341           }
   2342         } else if (Op0I->getOpcode() == Instruction::LShr) {
   2343           // ((X^C1) >> C2) ^ C3 -> (X>>C2) ^ ((C1>>C2)^C3)
   2344           // E1 = "X ^ C1"
   2345           BinaryOperator *E1;
   2346           ConstantInt *C1;
   2347           if (Op0I->hasOneUse() &&
   2348               (E1 = dyn_cast<BinaryOperator>(Op0I->getOperand(0))) &&
   2349               E1->getOpcode() == Instruction::Xor &&
   2350               (C1 = dyn_cast<ConstantInt>(E1->getOperand(1)))) {
   2351             // fold (C1 >> C2) ^ C3
   2352             ConstantInt *C2 = Op0CI, *C3 = RHS;
   2353             APInt FoldConst = C1->getValue().lshr(C2->getValue());
   2354             FoldConst ^= C3->getValue();
   2355             // Prepare the two operands.
   2356             Value *Opnd0 = Builder->CreateLShr(E1->getOperand(0), C2);
   2357             Opnd0->takeName(Op0I);
   2358             cast<Instruction>(Opnd0)->setDebugLoc(I.getDebugLoc());
   2359             Value *FoldVal = ConstantInt::get(Opnd0->getType(), FoldConst);
   2360 
   2361             return BinaryOperator::CreateXor(Opnd0, FoldVal);
   2362           }
   2363         }
   2364       }
   2365     }
   2366 
   2367     // Try to fold constant and into select arguments.
   2368     if (SelectInst *SI = dyn_cast<SelectInst>(Op0))
   2369       if (Instruction *R = FoldOpIntoSelect(I, SI))
   2370         return R;
   2371     if (isa<PHINode>(Op0))
   2372       if (Instruction *NV = FoldOpIntoPhi(I))
   2373         return NV;
   2374   }
   2375 
   2376   BinaryOperator *Op1I = dyn_cast<BinaryOperator>(Op1);
   2377   if (Op1I) {
   2378     Value *A, *B;
   2379     if (match(Op1I, m_Or(m_Value(A), m_Value(B)))) {
   2380       if (A == Op0) {              // B^(B|A) == (A|B)^B
   2381         Op1I->swapOperands();
   2382         I.swapOperands();
   2383         std::swap(Op0, Op1);
   2384       } else if (B == Op0) {       // B^(A|B) == (A|B)^B
   2385         I.swapOperands();     // Simplified below.
   2386         std::swap(Op0, Op1);
   2387       }
   2388     } else if (match(Op1I, m_And(m_Value(A), m_Value(B))) &&
   2389                Op1I->hasOneUse()){
   2390       if (A == Op0) {                                      // A^(A&B) -> A^(B&A)
   2391         Op1I->swapOperands();
   2392         std::swap(A, B);
   2393       }
   2394       if (B == Op0) {                                      // A^(B&A) -> (B&A)^A
   2395         I.swapOperands();     // Simplified below.
   2396         std::swap(Op0, Op1);
   2397       }
   2398     }
   2399   }
   2400 
   2401   BinaryOperator *Op0I = dyn_cast<BinaryOperator>(Op0);
   2402   if (Op0I) {
   2403     Value *A, *B;
   2404     if (match(Op0I, m_Or(m_Value(A), m_Value(B))) &&
   2405         Op0I->hasOneUse()) {
   2406       if (A == Op1)                                  // (B|A)^B == (A|B)^B
   2407         std::swap(A, B);
   2408       if (B == Op1)                                  // (A|B)^B == A & ~B
   2409         return BinaryOperator::CreateAnd(A, Builder->CreateNot(Op1));
   2410     } else if (match(Op0I, m_And(m_Value(A), m_Value(B))) &&
   2411                Op0I->hasOneUse()){
   2412       if (A == Op1)                                        // (A&B)^A -> (B&A)^A
   2413         std::swap(A, B);
   2414       if (B == Op1 &&                                      // (B&A)^A == ~B & A
   2415           !isa<ConstantInt>(Op1)) {  // Canonical form is (B&C)^C
   2416         return BinaryOperator::CreateAnd(Builder->CreateNot(A), Op1);
   2417       }
   2418     }
   2419   }
   2420 
   2421   // (X >> Z) ^ (Y >> Z)  -> (X^Y) >> Z  for all shifts.
   2422   if (Op0I && Op1I && Op0I->isShift() &&
   2423       Op0I->getOpcode() == Op1I->getOpcode() &&
   2424       Op0I->getOperand(1) == Op1I->getOperand(1) &&
   2425       (Op0I->hasOneUse() || Op1I->hasOneUse())) {
   2426     Value *NewOp =
   2427       Builder->CreateXor(Op0I->getOperand(0), Op1I->getOperand(0),
   2428                          Op0I->getName());
   2429     return BinaryOperator::Create(Op1I->getOpcode(), NewOp,
   2430                                   Op1I->getOperand(1));
   2431   }
   2432 
   2433   if (Op0I && Op1I) {
   2434     Value *A, *B, *C, *D;
   2435     // (A & B)^(A | B) -> A ^ B
   2436     if (match(Op0I, m_And(m_Value(A), m_Value(B))) &&
   2437         match(Op1I, m_Or(m_Value(C), m_Value(D)))) {
   2438       if ((A == C && B == D) || (A == D && B == C))
   2439         return BinaryOperator::CreateXor(A, B);
   2440     }
   2441     // (A | B)^(A & B) -> A ^ B
   2442     if (match(Op0I, m_Or(m_Value(A), m_Value(B))) &&
   2443         match(Op1I, m_And(m_Value(C), m_Value(D)))) {
   2444       if ((A == C && B == D) || (A == D && B == C))
   2445         return BinaryOperator::CreateXor(A, B);
   2446     }
   2447   }
   2448 
   2449   // (icmp1 A, B) ^ (icmp2 A, B) --> (icmp3 A, B)
   2450   if (ICmpInst *RHS = dyn_cast<ICmpInst>(I.getOperand(1)))
   2451     if (ICmpInst *LHS = dyn_cast<ICmpInst>(I.getOperand(0)))
   2452       if (PredicatesFoldable(LHS->getPredicate(), RHS->getPredicate())) {
   2453         if (LHS->getOperand(0) == RHS->getOperand(1) &&
   2454             LHS->getOperand(1) == RHS->getOperand(0))
   2455           LHS->swapOperands();
   2456         if (LHS->getOperand(0) == RHS->getOperand(0) &&
   2457             LHS->getOperand(1) == RHS->getOperand(1)) {
   2458           Value *Op0 = LHS->getOperand(0), *Op1 = LHS->getOperand(1);
   2459           unsigned Code = getICmpCode(LHS) ^ getICmpCode(RHS);
   2460           bool isSigned = LHS->isSigned() || RHS->isSigned();
   2461           return ReplaceInstUsesWith(I,
   2462                                getNewICmpValue(isSigned, Code, Op0, Op1,
   2463                                                Builder));
   2464         }
   2465       }
   2466 
   2467   // fold (xor (cast A), (cast B)) -> (cast (xor A, B))
   2468   if (CastInst *Op0C = dyn_cast<CastInst>(Op0)) {
   2469     if (CastInst *Op1C = dyn_cast<CastInst>(Op1))
   2470       if (Op0C->getOpcode() == Op1C->getOpcode()) { // same cast kind?
   2471         Type *SrcTy = Op0C->getOperand(0)->getType();
   2472         if (SrcTy == Op1C->getOperand(0)->getType() && SrcTy->isIntegerTy() &&
   2473             // Only do this if the casts both really cause code to be generated.
   2474             ShouldOptimizeCast(Op0C->getOpcode(), Op0C->getOperand(0),
   2475                                I.getType()) &&
   2476             ShouldOptimizeCast(Op1C->getOpcode(), Op1C->getOperand(0),
   2477                                I.getType())) {
   2478           Value *NewOp = Builder->CreateXor(Op0C->getOperand(0),
   2479                                             Op1C->getOperand(0), I.getName());
   2480           return CastInst::Create(Op0C->getOpcode(), NewOp, I.getType());
   2481         }
   2482       }
   2483   }
   2484 
   2485   return Changed ? &I : nullptr;
   2486 }
   2487