Home | History | Annotate | Download | only in SelectionDAG
      1 //===-- DAGCombiner.cpp - Implement a DAG node combiner -------------------===//
      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 pass combines dag nodes to form fewer, simpler DAG nodes.  It can be run
     11 // both before and after the DAG is legalized.
     12 //
     13 // This pass is not a substitute for the LLVM IR instcombine pass. This pass is
     14 // primarily intended to handle simplification opportunities that are implicit
     15 // in the LLVM IR and exposed by the various codegen lowering phases.
     16 //
     17 //===----------------------------------------------------------------------===//
     18 
     19 #define DEBUG_TYPE "dagcombine"
     20 #include "llvm/CodeGen/SelectionDAG.h"
     21 #include "llvm/DerivedTypes.h"
     22 #include "llvm/LLVMContext.h"
     23 #include "llvm/CodeGen/MachineFunction.h"
     24 #include "llvm/CodeGen/MachineFrameInfo.h"
     25 #include "llvm/Analysis/AliasAnalysis.h"
     26 #include "llvm/Target/TargetData.h"
     27 #include "llvm/Target/TargetLowering.h"
     28 #include "llvm/Target/TargetMachine.h"
     29 #include "llvm/Target/TargetOptions.h"
     30 #include "llvm/ADT/SmallPtrSet.h"
     31 #include "llvm/ADT/Statistic.h"
     32 #include "llvm/Support/CommandLine.h"
     33 #include "llvm/Support/Debug.h"
     34 #include "llvm/Support/ErrorHandling.h"
     35 #include "llvm/Support/MathExtras.h"
     36 #include "llvm/Support/raw_ostream.h"
     37 #include <algorithm>
     38 using namespace llvm;
     39 
     40 STATISTIC(NodesCombined   , "Number of dag nodes combined");
     41 STATISTIC(PreIndexedNodes , "Number of pre-indexed nodes created");
     42 STATISTIC(PostIndexedNodes, "Number of post-indexed nodes created");
     43 STATISTIC(OpsNarrowed     , "Number of load/op/store narrowed");
     44 STATISTIC(LdStFP2Int      , "Number of fp load/store pairs transformed to int");
     45 
     46 namespace {
     47   static cl::opt<bool>
     48     CombinerAA("combiner-alias-analysis", cl::Hidden,
     49                cl::desc("Turn on alias analysis during testing"));
     50 
     51   static cl::opt<bool>
     52     CombinerGlobalAA("combiner-global-alias-analysis", cl::Hidden,
     53                cl::desc("Include global information in alias analysis"));
     54 
     55 //------------------------------ DAGCombiner ---------------------------------//
     56 
     57   class DAGCombiner {
     58     SelectionDAG &DAG;
     59     const TargetLowering &TLI;
     60     CombineLevel Level;
     61     CodeGenOpt::Level OptLevel;
     62     bool LegalOperations;
     63     bool LegalTypes;
     64 
     65     // Worklist of all of the nodes that need to be simplified.
     66     //
     67     // This has the semantics that when adding to the worklist,
     68     // the item added must be next to be processed. It should
     69     // also only appear once. The naive approach to this takes
     70     // linear time.
     71     //
     72     // To reduce the insert/remove time to logarithmic, we use
     73     // a set and a vector to maintain our worklist.
     74     //
     75     // The set contains the items on the worklist, but does not
     76     // maintain the order they should be visited.
     77     //
     78     // The vector maintains the order nodes should be visited, but may
     79     // contain duplicate or removed nodes. When choosing a node to
     80     // visit, we pop off the order stack until we find an item that is
     81     // also in the contents set. All operations are O(log N).
     82     SmallPtrSet<SDNode*, 64> WorkListContents;
     83     SmallVector<SDNode*, 64> WorkListOrder;
     84 
     85     // AA - Used for DAG load/store alias analysis.
     86     AliasAnalysis &AA;
     87 
     88     /// AddUsersToWorkList - When an instruction is simplified, add all users of
     89     /// the instruction to the work lists because they might get more simplified
     90     /// now.
     91     ///
     92     void AddUsersToWorkList(SDNode *N) {
     93       for (SDNode::use_iterator UI = N->use_begin(), UE = N->use_end();
     94            UI != UE; ++UI)
     95         AddToWorkList(*UI);
     96     }
     97 
     98     /// visit - call the node-specific routine that knows how to fold each
     99     /// particular type of node.
    100     SDValue visit(SDNode *N);
    101 
    102   public:
    103     /// AddToWorkList - Add to the work list making sure its instance is at the
    104     /// back (next to be processed.)
    105     void AddToWorkList(SDNode *N) {
    106       WorkListContents.insert(N);
    107       WorkListOrder.push_back(N);
    108     }
    109 
    110     /// removeFromWorkList - remove all instances of N from the worklist.
    111     ///
    112     void removeFromWorkList(SDNode *N) {
    113       WorkListContents.erase(N);
    114     }
    115 
    116     SDValue CombineTo(SDNode *N, const SDValue *To, unsigned NumTo,
    117                       bool AddTo = true);
    118 
    119     SDValue CombineTo(SDNode *N, SDValue Res, bool AddTo = true) {
    120       return CombineTo(N, &Res, 1, AddTo);
    121     }
    122 
    123     SDValue CombineTo(SDNode *N, SDValue Res0, SDValue Res1,
    124                       bool AddTo = true) {
    125       SDValue To[] = { Res0, Res1 };
    126       return CombineTo(N, To, 2, AddTo);
    127     }
    128 
    129     void CommitTargetLoweringOpt(const TargetLowering::TargetLoweringOpt &TLO);
    130 
    131   private:
    132 
    133     /// SimplifyDemandedBits - Check the specified integer node value to see if
    134     /// it can be simplified or if things it uses can be simplified by bit
    135     /// propagation.  If so, return true.
    136     bool SimplifyDemandedBits(SDValue Op) {
    137       unsigned BitWidth = Op.getValueType().getScalarType().getSizeInBits();
    138       APInt Demanded = APInt::getAllOnesValue(BitWidth);
    139       return SimplifyDemandedBits(Op, Demanded);
    140     }
    141 
    142     bool SimplifyDemandedBits(SDValue Op, const APInt &Demanded);
    143 
    144     bool CombineToPreIndexedLoadStore(SDNode *N);
    145     bool CombineToPostIndexedLoadStore(SDNode *N);
    146 
    147     void ReplaceLoadWithPromotedLoad(SDNode *Load, SDNode *ExtLoad);
    148     SDValue PromoteOperand(SDValue Op, EVT PVT, bool &Replace);
    149     SDValue SExtPromoteOperand(SDValue Op, EVT PVT);
    150     SDValue ZExtPromoteOperand(SDValue Op, EVT PVT);
    151     SDValue PromoteIntBinOp(SDValue Op);
    152     SDValue PromoteIntShiftOp(SDValue Op);
    153     SDValue PromoteExtend(SDValue Op);
    154     bool PromoteLoad(SDValue Op);
    155 
    156     void ExtendSetCCUses(SmallVector<SDNode*, 4> SetCCs,
    157                          SDValue Trunc, SDValue ExtLoad, DebugLoc DL,
    158                          ISD::NodeType ExtType);
    159 
    160     /// combine - call the node-specific routine that knows how to fold each
    161     /// particular type of node. If that doesn't do anything, try the
    162     /// target-specific DAG combines.
    163     SDValue combine(SDNode *N);
    164 
    165     // Visitation implementation - Implement dag node combining for different
    166     // node types.  The semantics are as follows:
    167     // Return Value:
    168     //   SDValue.getNode() == 0 - No change was made
    169     //   SDValue.getNode() == N - N was replaced, is dead and has been handled.
    170     //   otherwise              - N should be replaced by the returned Operand.
    171     //
    172     SDValue visitTokenFactor(SDNode *N);
    173     SDValue visitMERGE_VALUES(SDNode *N);
    174     SDValue visitADD(SDNode *N);
    175     SDValue visitSUB(SDNode *N);
    176     SDValue visitADDC(SDNode *N);
    177     SDValue visitSUBC(SDNode *N);
    178     SDValue visitADDE(SDNode *N);
    179     SDValue visitSUBE(SDNode *N);
    180     SDValue visitMUL(SDNode *N);
    181     SDValue visitSDIV(SDNode *N);
    182     SDValue visitUDIV(SDNode *N);
    183     SDValue visitSREM(SDNode *N);
    184     SDValue visitUREM(SDNode *N);
    185     SDValue visitMULHU(SDNode *N);
    186     SDValue visitMULHS(SDNode *N);
    187     SDValue visitSMUL_LOHI(SDNode *N);
    188     SDValue visitUMUL_LOHI(SDNode *N);
    189     SDValue visitSMULO(SDNode *N);
    190     SDValue visitUMULO(SDNode *N);
    191     SDValue visitSDIVREM(SDNode *N);
    192     SDValue visitUDIVREM(SDNode *N);
    193     SDValue visitAND(SDNode *N);
    194     SDValue visitOR(SDNode *N);
    195     SDValue visitXOR(SDNode *N);
    196     SDValue SimplifyVBinOp(SDNode *N);
    197     SDValue visitSHL(SDNode *N);
    198     SDValue visitSRA(SDNode *N);
    199     SDValue visitSRL(SDNode *N);
    200     SDValue visitCTLZ(SDNode *N);
    201     SDValue visitCTLZ_ZERO_UNDEF(SDNode *N);
    202     SDValue visitCTTZ(SDNode *N);
    203     SDValue visitCTTZ_ZERO_UNDEF(SDNode *N);
    204     SDValue visitCTPOP(SDNode *N);
    205     SDValue visitSELECT(SDNode *N);
    206     SDValue visitSELECT_CC(SDNode *N);
    207     SDValue visitSETCC(SDNode *N);
    208     SDValue visitSIGN_EXTEND(SDNode *N);
    209     SDValue visitZERO_EXTEND(SDNode *N);
    210     SDValue visitANY_EXTEND(SDNode *N);
    211     SDValue visitSIGN_EXTEND_INREG(SDNode *N);
    212     SDValue visitTRUNCATE(SDNode *N);
    213     SDValue visitBITCAST(SDNode *N);
    214     SDValue visitBUILD_PAIR(SDNode *N);
    215     SDValue visitFADD(SDNode *N);
    216     SDValue visitFSUB(SDNode *N);
    217     SDValue visitFMUL(SDNode *N);
    218     SDValue visitFDIV(SDNode *N);
    219     SDValue visitFREM(SDNode *N);
    220     SDValue visitFCOPYSIGN(SDNode *N);
    221     SDValue visitSINT_TO_FP(SDNode *N);
    222     SDValue visitUINT_TO_FP(SDNode *N);
    223     SDValue visitFP_TO_SINT(SDNode *N);
    224     SDValue visitFP_TO_UINT(SDNode *N);
    225     SDValue visitFP_ROUND(SDNode *N);
    226     SDValue visitFP_ROUND_INREG(SDNode *N);
    227     SDValue visitFP_EXTEND(SDNode *N);
    228     SDValue visitFNEG(SDNode *N);
    229     SDValue visitFABS(SDNode *N);
    230     SDValue visitBRCOND(SDNode *N);
    231     SDValue visitBR_CC(SDNode *N);
    232     SDValue visitLOAD(SDNode *N);
    233     SDValue visitSTORE(SDNode *N);
    234     SDValue visitINSERT_VECTOR_ELT(SDNode *N);
    235     SDValue visitEXTRACT_VECTOR_ELT(SDNode *N);
    236     SDValue visitBUILD_VECTOR(SDNode *N);
    237     SDValue visitCONCAT_VECTORS(SDNode *N);
    238     SDValue visitEXTRACT_SUBVECTOR(SDNode *N);
    239     SDValue visitVECTOR_SHUFFLE(SDNode *N);
    240     SDValue visitMEMBARRIER(SDNode *N);
    241 
    242     SDValue XformToShuffleWithZero(SDNode *N);
    243     SDValue ReassociateOps(unsigned Opc, DebugLoc DL, SDValue LHS, SDValue RHS);
    244 
    245     SDValue visitShiftByConstant(SDNode *N, unsigned Amt);
    246 
    247     bool SimplifySelectOps(SDNode *SELECT, SDValue LHS, SDValue RHS);
    248     SDValue SimplifyBinOpWithSameOpcodeHands(SDNode *N);
    249     SDValue SimplifySelect(DebugLoc DL, SDValue N0, SDValue N1, SDValue N2);
    250     SDValue SimplifySelectCC(DebugLoc DL, SDValue N0, SDValue N1, SDValue N2,
    251                              SDValue N3, ISD::CondCode CC,
    252                              bool NotExtCompare = false);
    253     SDValue SimplifySetCC(EVT VT, SDValue N0, SDValue N1, ISD::CondCode Cond,
    254                           DebugLoc DL, bool foldBooleans = true);
    255     SDValue SimplifyNodeWithTwoResults(SDNode *N, unsigned LoOp,
    256                                          unsigned HiOp);
    257     SDValue CombineConsecutiveLoads(SDNode *N, EVT VT);
    258     SDValue ConstantFoldBITCASTofBUILD_VECTOR(SDNode *, EVT);
    259     SDValue BuildSDIV(SDNode *N);
    260     SDValue BuildUDIV(SDNode *N);
    261     SDValue MatchBSwapHWordLow(SDNode *N, SDValue N0, SDValue N1,
    262                                bool DemandHighBits = true);
    263     SDValue MatchBSwapHWord(SDNode *N, SDValue N0, SDValue N1);
    264     SDNode *MatchRotate(SDValue LHS, SDValue RHS, DebugLoc DL);
    265     SDValue ReduceLoadWidth(SDNode *N);
    266     SDValue ReduceLoadOpStoreWidth(SDNode *N);
    267     SDValue TransformFPLoadStorePair(SDNode *N);
    268 
    269     SDValue GetDemandedBits(SDValue V, const APInt &Mask);
    270 
    271     /// GatherAllAliases - Walk up chain skipping non-aliasing memory nodes,
    272     /// looking for aliasing nodes and adding them to the Aliases vector.
    273     void GatherAllAliases(SDNode *N, SDValue OriginalChain,
    274                           SmallVector<SDValue, 8> &Aliases);
    275 
    276     /// isAlias - Return true if there is any possibility that the two addresses
    277     /// overlap.
    278     bool isAlias(SDValue Ptr1, int64_t Size1,
    279                  const Value *SrcValue1, int SrcValueOffset1,
    280                  unsigned SrcValueAlign1,
    281                  const MDNode *TBAAInfo1,
    282                  SDValue Ptr2, int64_t Size2,
    283                  const Value *SrcValue2, int SrcValueOffset2,
    284                  unsigned SrcValueAlign2,
    285                  const MDNode *TBAAInfo2) const;
    286 
    287     /// FindAliasInfo - Extracts the relevant alias information from the memory
    288     /// node.  Returns true if the operand was a load.
    289     bool FindAliasInfo(SDNode *N,
    290                        SDValue &Ptr, int64_t &Size,
    291                        const Value *&SrcValue, int &SrcValueOffset,
    292                        unsigned &SrcValueAlignment,
    293                        const MDNode *&TBAAInfo) const;
    294 
    295     /// FindBetterChain - Walk up chain skipping non-aliasing memory nodes,
    296     /// looking for a better chain (aliasing node.)
    297     SDValue FindBetterChain(SDNode *N, SDValue Chain);
    298 
    299   public:
    300     DAGCombiner(SelectionDAG &D, AliasAnalysis &A, CodeGenOpt::Level OL)
    301       : DAG(D), TLI(D.getTargetLoweringInfo()), Level(BeforeLegalizeTypes),
    302         OptLevel(OL), LegalOperations(false), LegalTypes(false), AA(A) {}
    303 
    304     /// Run - runs the dag combiner on all nodes in the work list
    305     void Run(CombineLevel AtLevel);
    306 
    307     SelectionDAG &getDAG() const { return DAG; }
    308 
    309     /// getShiftAmountTy - Returns a type large enough to hold any valid
    310     /// shift amount - before type legalization these can be huge.
    311     EVT getShiftAmountTy(EVT LHSTy) {
    312       return LegalTypes ? TLI.getShiftAmountTy(LHSTy) : TLI.getPointerTy();
    313     }
    314 
    315     /// isTypeLegal - This method returns true if we are running before type
    316     /// legalization or if the specified VT is legal.
    317     bool isTypeLegal(const EVT &VT) {
    318       if (!LegalTypes) return true;
    319       return TLI.isTypeLegal(VT);
    320     }
    321   };
    322 }
    323 
    324 
    325 namespace {
    326 /// WorkListRemover - This class is a DAGUpdateListener that removes any deleted
    327 /// nodes from the worklist.
    328 class WorkListRemover : public SelectionDAG::DAGUpdateListener {
    329   DAGCombiner &DC;
    330 public:
    331   explicit WorkListRemover(DAGCombiner &dc) : DC(dc) {}
    332 
    333   virtual void NodeDeleted(SDNode *N, SDNode *E) {
    334     DC.removeFromWorkList(N);
    335   }
    336 
    337   virtual void NodeUpdated(SDNode *N) {
    338     // Ignore updates.
    339   }
    340 };
    341 }
    342 
    343 //===----------------------------------------------------------------------===//
    344 //  TargetLowering::DAGCombinerInfo implementation
    345 //===----------------------------------------------------------------------===//
    346 
    347 void TargetLowering::DAGCombinerInfo::AddToWorklist(SDNode *N) {
    348   ((DAGCombiner*)DC)->AddToWorkList(N);
    349 }
    350 
    351 void TargetLowering::DAGCombinerInfo::RemoveFromWorklist(SDNode *N) {
    352   ((DAGCombiner*)DC)->removeFromWorkList(N);
    353 }
    354 
    355 SDValue TargetLowering::DAGCombinerInfo::
    356 CombineTo(SDNode *N, const std::vector<SDValue> &To, bool AddTo) {
    357   return ((DAGCombiner*)DC)->CombineTo(N, &To[0], To.size(), AddTo);
    358 }
    359 
    360 SDValue TargetLowering::DAGCombinerInfo::
    361 CombineTo(SDNode *N, SDValue Res, bool AddTo) {
    362   return ((DAGCombiner*)DC)->CombineTo(N, Res, AddTo);
    363 }
    364 
    365 
    366 SDValue TargetLowering::DAGCombinerInfo::
    367 CombineTo(SDNode *N, SDValue Res0, SDValue Res1, bool AddTo) {
    368   return ((DAGCombiner*)DC)->CombineTo(N, Res0, Res1, AddTo);
    369 }
    370 
    371 void TargetLowering::DAGCombinerInfo::
    372 CommitTargetLoweringOpt(const TargetLowering::TargetLoweringOpt &TLO) {
    373   return ((DAGCombiner*)DC)->CommitTargetLoweringOpt(TLO);
    374 }
    375 
    376 //===----------------------------------------------------------------------===//
    377 // Helper Functions
    378 //===----------------------------------------------------------------------===//
    379 
    380 /// isNegatibleForFree - Return 1 if we can compute the negated form of the
    381 /// specified expression for the same cost as the expression itself, or 2 if we
    382 /// can compute the negated form more cheaply than the expression itself.
    383 static char isNegatibleForFree(SDValue Op, bool LegalOperations,
    384                                const TargetLowering &TLI,
    385                                const TargetOptions *Options,
    386                                unsigned Depth = 0) {
    387   // No compile time optimizations on this type.
    388   if (Op.getValueType() == MVT::ppcf128)
    389     return 0;
    390 
    391   // fneg is removable even if it has multiple uses.
    392   if (Op.getOpcode() == ISD::FNEG) return 2;
    393 
    394   // Don't allow anything with multiple uses.
    395   if (!Op.hasOneUse()) return 0;
    396 
    397   // Don't recurse exponentially.
    398   if (Depth > 6) return 0;
    399 
    400   switch (Op.getOpcode()) {
    401   default: return false;
    402   case ISD::ConstantFP:
    403     // Don't invert constant FP values after legalize.  The negated constant
    404     // isn't necessarily legal.
    405     return LegalOperations ? 0 : 1;
    406   case ISD::FADD:
    407     // FIXME: determine better conditions for this xform.
    408     if (!Options->UnsafeFPMath) return 0;
    409 
    410     // After operation legalization, it might not be legal to create new FSUBs.
    411     if (LegalOperations &&
    412         !TLI.isOperationLegalOrCustom(ISD::FSUB,  Op.getValueType()))
    413       return 0;
    414 
    415     // fold (fsub (fadd A, B)) -> (fsub (fneg A), B)
    416     if (char V = isNegatibleForFree(Op.getOperand(0), LegalOperations, TLI,
    417                                     Options, Depth + 1))
    418       return V;
    419     // fold (fneg (fadd A, B)) -> (fsub (fneg B), A)
    420     return isNegatibleForFree(Op.getOperand(1), LegalOperations, TLI, Options,
    421                               Depth + 1);
    422   case ISD::FSUB:
    423     // We can't turn -(A-B) into B-A when we honor signed zeros.
    424     if (!Options->UnsafeFPMath) return 0;
    425 
    426     // fold (fneg (fsub A, B)) -> (fsub B, A)
    427     return 1;
    428 
    429   case ISD::FMUL:
    430   case ISD::FDIV:
    431     if (Options->HonorSignDependentRoundingFPMath()) return 0;
    432 
    433     // fold (fneg (fmul X, Y)) -> (fmul (fneg X), Y) or (fmul X, (fneg Y))
    434     if (char V = isNegatibleForFree(Op.getOperand(0), LegalOperations, TLI,
    435                                     Options, Depth + 1))
    436       return V;
    437 
    438     return isNegatibleForFree(Op.getOperand(1), LegalOperations, TLI, Options,
    439                               Depth + 1);
    440 
    441   case ISD::FP_EXTEND:
    442   case ISD::FP_ROUND:
    443   case ISD::FSIN:
    444     return isNegatibleForFree(Op.getOperand(0), LegalOperations, TLI, Options,
    445                               Depth + 1);
    446   }
    447 }
    448 
    449 /// GetNegatedExpression - If isNegatibleForFree returns true, this function
    450 /// returns the newly negated expression.
    451 static SDValue GetNegatedExpression(SDValue Op, SelectionDAG &DAG,
    452                                     bool LegalOperations, unsigned Depth = 0) {
    453   // fneg is removable even if it has multiple uses.
    454   if (Op.getOpcode() == ISD::FNEG) return Op.getOperand(0);
    455 
    456   // Don't allow anything with multiple uses.
    457   assert(Op.hasOneUse() && "Unknown reuse!");
    458 
    459   assert(Depth <= 6 && "GetNegatedExpression doesn't match isNegatibleForFree");
    460   switch (Op.getOpcode()) {
    461   default: llvm_unreachable("Unknown code");
    462   case ISD::ConstantFP: {
    463     APFloat V = cast<ConstantFPSDNode>(Op)->getValueAPF();
    464     V.changeSign();
    465     return DAG.getConstantFP(V, Op.getValueType());
    466   }
    467   case ISD::FADD:
    468     // FIXME: determine better conditions for this xform.
    469     assert(DAG.getTarget().Options.UnsafeFPMath);
    470 
    471     // fold (fneg (fadd A, B)) -> (fsub (fneg A), B)
    472     if (isNegatibleForFree(Op.getOperand(0), LegalOperations,
    473                            DAG.getTargetLoweringInfo(),
    474                            &DAG.getTarget().Options, Depth+1))
    475       return DAG.getNode(ISD::FSUB, Op.getDebugLoc(), Op.getValueType(),
    476                          GetNegatedExpression(Op.getOperand(0), DAG,
    477                                               LegalOperations, Depth+1),
    478                          Op.getOperand(1));
    479     // fold (fneg (fadd A, B)) -> (fsub (fneg B), A)
    480     return DAG.getNode(ISD::FSUB, Op.getDebugLoc(), Op.getValueType(),
    481                        GetNegatedExpression(Op.getOperand(1), DAG,
    482                                             LegalOperations, Depth+1),
    483                        Op.getOperand(0));
    484   case ISD::FSUB:
    485     // We can't turn -(A-B) into B-A when we honor signed zeros.
    486     assert(DAG.getTarget().Options.UnsafeFPMath);
    487 
    488     // fold (fneg (fsub 0, B)) -> B
    489     if (ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(Op.getOperand(0)))
    490       if (N0CFP->getValueAPF().isZero())
    491         return Op.getOperand(1);
    492 
    493     // fold (fneg (fsub A, B)) -> (fsub B, A)
    494     return DAG.getNode(ISD::FSUB, Op.getDebugLoc(), Op.getValueType(),
    495                        Op.getOperand(1), Op.getOperand(0));
    496 
    497   case ISD::FMUL:
    498   case ISD::FDIV:
    499     assert(!DAG.getTarget().Options.HonorSignDependentRoundingFPMath());
    500 
    501     // fold (fneg (fmul X, Y)) -> (fmul (fneg X), Y)
    502     if (isNegatibleForFree(Op.getOperand(0), LegalOperations,
    503                            DAG.getTargetLoweringInfo(),
    504                            &DAG.getTarget().Options, Depth+1))
    505       return DAG.getNode(Op.getOpcode(), Op.getDebugLoc(), Op.getValueType(),
    506                          GetNegatedExpression(Op.getOperand(0), DAG,
    507                                               LegalOperations, Depth+1),
    508                          Op.getOperand(1));
    509 
    510     // fold (fneg (fmul X, Y)) -> (fmul X, (fneg Y))
    511     return DAG.getNode(Op.getOpcode(), Op.getDebugLoc(), Op.getValueType(),
    512                        Op.getOperand(0),
    513                        GetNegatedExpression(Op.getOperand(1), DAG,
    514                                             LegalOperations, Depth+1));
    515 
    516   case ISD::FP_EXTEND:
    517   case ISD::FSIN:
    518     return DAG.getNode(Op.getOpcode(), Op.getDebugLoc(), Op.getValueType(),
    519                        GetNegatedExpression(Op.getOperand(0), DAG,
    520                                             LegalOperations, Depth+1));
    521   case ISD::FP_ROUND:
    522       return DAG.getNode(ISD::FP_ROUND, Op.getDebugLoc(), Op.getValueType(),
    523                          GetNegatedExpression(Op.getOperand(0), DAG,
    524                                               LegalOperations, Depth+1),
    525                          Op.getOperand(1));
    526   }
    527 }
    528 
    529 
    530 // isSetCCEquivalent - Return true if this node is a setcc, or is a select_cc
    531 // that selects between the values 1 and 0, making it equivalent to a setcc.
    532 // Also, set the incoming LHS, RHS, and CC references to the appropriate
    533 // nodes based on the type of node we are checking.  This simplifies life a
    534 // bit for the callers.
    535 static bool isSetCCEquivalent(SDValue N, SDValue &LHS, SDValue &RHS,
    536                               SDValue &CC) {
    537   if (N.getOpcode() == ISD::SETCC) {
    538     LHS = N.getOperand(0);
    539     RHS = N.getOperand(1);
    540     CC  = N.getOperand(2);
    541     return true;
    542   }
    543   if (N.getOpcode() == ISD::SELECT_CC &&
    544       N.getOperand(2).getOpcode() == ISD::Constant &&
    545       N.getOperand(3).getOpcode() == ISD::Constant &&
    546       cast<ConstantSDNode>(N.getOperand(2))->getAPIntValue() == 1 &&
    547       cast<ConstantSDNode>(N.getOperand(3))->isNullValue()) {
    548     LHS = N.getOperand(0);
    549     RHS = N.getOperand(1);
    550     CC  = N.getOperand(4);
    551     return true;
    552   }
    553   return false;
    554 }
    555 
    556 // isOneUseSetCC - Return true if this is a SetCC-equivalent operation with only
    557 // one use.  If this is true, it allows the users to invert the operation for
    558 // free when it is profitable to do so.
    559 static bool isOneUseSetCC(SDValue N) {
    560   SDValue N0, N1, N2;
    561   if (isSetCCEquivalent(N, N0, N1, N2) && N.getNode()->hasOneUse())
    562     return true;
    563   return false;
    564 }
    565 
    566 SDValue DAGCombiner::ReassociateOps(unsigned Opc, DebugLoc DL,
    567                                     SDValue N0, SDValue N1) {
    568   EVT VT = N0.getValueType();
    569   if (N0.getOpcode() == Opc && isa<ConstantSDNode>(N0.getOperand(1))) {
    570     if (isa<ConstantSDNode>(N1)) {
    571       // reassoc. (op (op x, c1), c2) -> (op x, (op c1, c2))
    572       SDValue OpNode =
    573         DAG.FoldConstantArithmetic(Opc, VT,
    574                                    cast<ConstantSDNode>(N0.getOperand(1)),
    575                                    cast<ConstantSDNode>(N1));
    576       return DAG.getNode(Opc, DL, VT, N0.getOperand(0), OpNode);
    577     }
    578     if (N0.hasOneUse()) {
    579       // reassoc. (op (op x, c1), y) -> (op (op x, y), c1) iff x+c1 has one use
    580       SDValue OpNode = DAG.getNode(Opc, N0.getDebugLoc(), VT,
    581                                    N0.getOperand(0), N1);
    582       AddToWorkList(OpNode.getNode());
    583       return DAG.getNode(Opc, DL, VT, OpNode, N0.getOperand(1));
    584     }
    585   }
    586 
    587   if (N1.getOpcode() == Opc && isa<ConstantSDNode>(N1.getOperand(1))) {
    588     if (isa<ConstantSDNode>(N0)) {
    589       // reassoc. (op c2, (op x, c1)) -> (op x, (op c1, c2))
    590       SDValue OpNode =
    591         DAG.FoldConstantArithmetic(Opc, VT,
    592                                    cast<ConstantSDNode>(N1.getOperand(1)),
    593                                    cast<ConstantSDNode>(N0));
    594       return DAG.getNode(Opc, DL, VT, N1.getOperand(0), OpNode);
    595     }
    596     if (N1.hasOneUse()) {
    597       // reassoc. (op y, (op x, c1)) -> (op (op x, y), c1) iff x+c1 has one use
    598       SDValue OpNode = DAG.getNode(Opc, N0.getDebugLoc(), VT,
    599                                    N1.getOperand(0), N0);
    600       AddToWorkList(OpNode.getNode());
    601       return DAG.getNode(Opc, DL, VT, OpNode, N1.getOperand(1));
    602     }
    603   }
    604 
    605   return SDValue();
    606 }
    607 
    608 SDValue DAGCombiner::CombineTo(SDNode *N, const SDValue *To, unsigned NumTo,
    609                                bool AddTo) {
    610   assert(N->getNumValues() == NumTo && "Broken CombineTo call!");
    611   ++NodesCombined;
    612   DEBUG(dbgs() << "\nReplacing.1 ";
    613         N->dump(&DAG);
    614         dbgs() << "\nWith: ";
    615         To[0].getNode()->dump(&DAG);
    616         dbgs() << " and " << NumTo-1 << " other values\n";
    617         for (unsigned i = 0, e = NumTo; i != e; ++i)
    618           assert((!To[i].getNode() ||
    619                   N->getValueType(i) == To[i].getValueType()) &&
    620                  "Cannot combine value to value of different type!"));
    621   WorkListRemover DeadNodes(*this);
    622   DAG.ReplaceAllUsesWith(N, To, &DeadNodes);
    623 
    624   if (AddTo) {
    625     // Push the new nodes and any users onto the worklist
    626     for (unsigned i = 0, e = NumTo; i != e; ++i) {
    627       if (To[i].getNode()) {
    628         AddToWorkList(To[i].getNode());
    629         AddUsersToWorkList(To[i].getNode());
    630       }
    631     }
    632   }
    633 
    634   // Finally, if the node is now dead, remove it from the graph.  The node
    635   // may not be dead if the replacement process recursively simplified to
    636   // something else needing this node.
    637   if (N->use_empty()) {
    638     // Nodes can be reintroduced into the worklist.  Make sure we do not
    639     // process a node that has been replaced.
    640     removeFromWorkList(N);
    641 
    642     // Finally, since the node is now dead, remove it from the graph.
    643     DAG.DeleteNode(N);
    644   }
    645   return SDValue(N, 0);
    646 }
    647 
    648 void DAGCombiner::
    649 CommitTargetLoweringOpt(const TargetLowering::TargetLoweringOpt &TLO) {
    650   // Replace all uses.  If any nodes become isomorphic to other nodes and
    651   // are deleted, make sure to remove them from our worklist.
    652   WorkListRemover DeadNodes(*this);
    653   DAG.ReplaceAllUsesOfValueWith(TLO.Old, TLO.New, &DeadNodes);
    654 
    655   // Push the new node and any (possibly new) users onto the worklist.
    656   AddToWorkList(TLO.New.getNode());
    657   AddUsersToWorkList(TLO.New.getNode());
    658 
    659   // Finally, if the node is now dead, remove it from the graph.  The node
    660   // may not be dead if the replacement process recursively simplified to
    661   // something else needing this node.
    662   if (TLO.Old.getNode()->use_empty()) {
    663     removeFromWorkList(TLO.Old.getNode());
    664 
    665     // If the operands of this node are only used by the node, they will now
    666     // be dead.  Make sure to visit them first to delete dead nodes early.
    667     for (unsigned i = 0, e = TLO.Old.getNode()->getNumOperands(); i != e; ++i)
    668       if (TLO.Old.getNode()->getOperand(i).getNode()->hasOneUse())
    669         AddToWorkList(TLO.Old.getNode()->getOperand(i).getNode());
    670 
    671     DAG.DeleteNode(TLO.Old.getNode());
    672   }
    673 }
    674 
    675 /// SimplifyDemandedBits - Check the specified integer node value to see if
    676 /// it can be simplified or if things it uses can be simplified by bit
    677 /// propagation.  If so, return true.
    678 bool DAGCombiner::SimplifyDemandedBits(SDValue Op, const APInt &Demanded) {
    679   TargetLowering::TargetLoweringOpt TLO(DAG, LegalTypes, LegalOperations);
    680   APInt KnownZero, KnownOne;
    681   if (!TLI.SimplifyDemandedBits(Op, Demanded, KnownZero, KnownOne, TLO))
    682     return false;
    683 
    684   // Revisit the node.
    685   AddToWorkList(Op.getNode());
    686 
    687   // Replace the old value with the new one.
    688   ++NodesCombined;
    689   DEBUG(dbgs() << "\nReplacing.2 ";
    690         TLO.Old.getNode()->dump(&DAG);
    691         dbgs() << "\nWith: ";
    692         TLO.New.getNode()->dump(&DAG);
    693         dbgs() << '\n');
    694 
    695   CommitTargetLoweringOpt(TLO);
    696   return true;
    697 }
    698 
    699 void DAGCombiner::ReplaceLoadWithPromotedLoad(SDNode *Load, SDNode *ExtLoad) {
    700   DebugLoc dl = Load->getDebugLoc();
    701   EVT VT = Load->getValueType(0);
    702   SDValue Trunc = DAG.getNode(ISD::TRUNCATE, dl, VT, SDValue(ExtLoad, 0));
    703 
    704   DEBUG(dbgs() << "\nReplacing.9 ";
    705         Load->dump(&DAG);
    706         dbgs() << "\nWith: ";
    707         Trunc.getNode()->dump(&DAG);
    708         dbgs() << '\n');
    709   WorkListRemover DeadNodes(*this);
    710   DAG.ReplaceAllUsesOfValueWith(SDValue(Load, 0), Trunc, &DeadNodes);
    711   DAG.ReplaceAllUsesOfValueWith(SDValue(Load, 1), SDValue(ExtLoad, 1),
    712                                 &DeadNodes);
    713   removeFromWorkList(Load);
    714   DAG.DeleteNode(Load);
    715   AddToWorkList(Trunc.getNode());
    716 }
    717 
    718 SDValue DAGCombiner::PromoteOperand(SDValue Op, EVT PVT, bool &Replace) {
    719   Replace = false;
    720   DebugLoc dl = Op.getDebugLoc();
    721   if (LoadSDNode *LD = dyn_cast<LoadSDNode>(Op)) {
    722     EVT MemVT = LD->getMemoryVT();
    723     ISD::LoadExtType ExtType = ISD::isNON_EXTLoad(LD)
    724       ? (TLI.isLoadExtLegal(ISD::ZEXTLOAD, MemVT) ? ISD::ZEXTLOAD
    725                                                   : ISD::EXTLOAD)
    726       : LD->getExtensionType();
    727     Replace = true;
    728     return DAG.getExtLoad(ExtType, dl, PVT,
    729                           LD->getChain(), LD->getBasePtr(),
    730                           LD->getPointerInfo(),
    731                           MemVT, LD->isVolatile(),
    732                           LD->isNonTemporal(), LD->getAlignment());
    733   }
    734 
    735   unsigned Opc = Op.getOpcode();
    736   switch (Opc) {
    737   default: break;
    738   case ISD::AssertSext:
    739     return DAG.getNode(ISD::AssertSext, dl, PVT,
    740                        SExtPromoteOperand(Op.getOperand(0), PVT),
    741                        Op.getOperand(1));
    742   case ISD::AssertZext:
    743     return DAG.getNode(ISD::AssertZext, dl, PVT,
    744                        ZExtPromoteOperand(Op.getOperand(0), PVT),
    745                        Op.getOperand(1));
    746   case ISD::Constant: {
    747     unsigned ExtOpc =
    748       Op.getValueType().isByteSized() ? ISD::SIGN_EXTEND : ISD::ZERO_EXTEND;
    749     return DAG.getNode(ExtOpc, dl, PVT, Op);
    750   }
    751   }
    752 
    753   if (!TLI.isOperationLegal(ISD::ANY_EXTEND, PVT))
    754     return SDValue();
    755   return DAG.getNode(ISD::ANY_EXTEND, dl, PVT, Op);
    756 }
    757 
    758 SDValue DAGCombiner::SExtPromoteOperand(SDValue Op, EVT PVT) {
    759   if (!TLI.isOperationLegal(ISD::SIGN_EXTEND_INREG, PVT))
    760     return SDValue();
    761   EVT OldVT = Op.getValueType();
    762   DebugLoc dl = Op.getDebugLoc();
    763   bool Replace = false;
    764   SDValue NewOp = PromoteOperand(Op, PVT, Replace);
    765   if (NewOp.getNode() == 0)
    766     return SDValue();
    767   AddToWorkList(NewOp.getNode());
    768 
    769   if (Replace)
    770     ReplaceLoadWithPromotedLoad(Op.getNode(), NewOp.getNode());
    771   return DAG.getNode(ISD::SIGN_EXTEND_INREG, dl, NewOp.getValueType(), NewOp,
    772                      DAG.getValueType(OldVT));
    773 }
    774 
    775 SDValue DAGCombiner::ZExtPromoteOperand(SDValue Op, EVT PVT) {
    776   EVT OldVT = Op.getValueType();
    777   DebugLoc dl = Op.getDebugLoc();
    778   bool Replace = false;
    779   SDValue NewOp = PromoteOperand(Op, PVT, Replace);
    780   if (NewOp.getNode() == 0)
    781     return SDValue();
    782   AddToWorkList(NewOp.getNode());
    783 
    784   if (Replace)
    785     ReplaceLoadWithPromotedLoad(Op.getNode(), NewOp.getNode());
    786   return DAG.getZeroExtendInReg(NewOp, dl, OldVT);
    787 }
    788 
    789 /// PromoteIntBinOp - Promote the specified integer binary operation if the
    790 /// target indicates it is beneficial. e.g. On x86, it's usually better to
    791 /// promote i16 operations to i32 since i16 instructions are longer.
    792 SDValue DAGCombiner::PromoteIntBinOp(SDValue Op) {
    793   if (!LegalOperations)
    794     return SDValue();
    795 
    796   EVT VT = Op.getValueType();
    797   if (VT.isVector() || !VT.isInteger())
    798     return SDValue();
    799 
    800   // If operation type is 'undesirable', e.g. i16 on x86, consider
    801   // promoting it.
    802   unsigned Opc = Op.getOpcode();
    803   if (TLI.isTypeDesirableForOp(Opc, VT))
    804     return SDValue();
    805 
    806   EVT PVT = VT;
    807   // Consult target whether it is a good idea to promote this operation and
    808   // what's the right type to promote it to.
    809   if (TLI.IsDesirableToPromoteOp(Op, PVT)) {
    810     assert(PVT != VT && "Don't know what type to promote to!");
    811 
    812     bool Replace0 = false;
    813     SDValue N0 = Op.getOperand(0);
    814     SDValue NN0 = PromoteOperand(N0, PVT, Replace0);
    815     if (NN0.getNode() == 0)
    816       return SDValue();
    817 
    818     bool Replace1 = false;
    819     SDValue N1 = Op.getOperand(1);
    820     SDValue NN1;
    821     if (N0 == N1)
    822       NN1 = NN0;
    823     else {
    824       NN1 = PromoteOperand(N1, PVT, Replace1);
    825       if (NN1.getNode() == 0)
    826         return SDValue();
    827     }
    828 
    829     AddToWorkList(NN0.getNode());
    830     if (NN1.getNode())
    831       AddToWorkList(NN1.getNode());
    832 
    833     if (Replace0)
    834       ReplaceLoadWithPromotedLoad(N0.getNode(), NN0.getNode());
    835     if (Replace1)
    836       ReplaceLoadWithPromotedLoad(N1.getNode(), NN1.getNode());
    837 
    838     DEBUG(dbgs() << "\nPromoting ";
    839           Op.getNode()->dump(&DAG));
    840     DebugLoc dl = Op.getDebugLoc();
    841     return DAG.getNode(ISD::TRUNCATE, dl, VT,
    842                        DAG.getNode(Opc, dl, PVT, NN0, NN1));
    843   }
    844   return SDValue();
    845 }
    846 
    847 /// PromoteIntShiftOp - Promote the specified integer shift operation if the
    848 /// target indicates it is beneficial. e.g. On x86, it's usually better to
    849 /// promote i16 operations to i32 since i16 instructions are longer.
    850 SDValue DAGCombiner::PromoteIntShiftOp(SDValue Op) {
    851   if (!LegalOperations)
    852     return SDValue();
    853 
    854   EVT VT = Op.getValueType();
    855   if (VT.isVector() || !VT.isInteger())
    856     return SDValue();
    857 
    858   // If operation type is 'undesirable', e.g. i16 on x86, consider
    859   // promoting it.
    860   unsigned Opc = Op.getOpcode();
    861   if (TLI.isTypeDesirableForOp(Opc, VT))
    862     return SDValue();
    863 
    864   EVT PVT = VT;
    865   // Consult target whether it is a good idea to promote this operation and
    866   // what's the right type to promote it to.
    867   if (TLI.IsDesirableToPromoteOp(Op, PVT)) {
    868     assert(PVT != VT && "Don't know what type to promote to!");
    869 
    870     bool Replace = false;
    871     SDValue N0 = Op.getOperand(0);
    872     if (Opc == ISD::SRA)
    873       N0 = SExtPromoteOperand(Op.getOperand(0), PVT);
    874     else if (Opc == ISD::SRL)
    875       N0 = ZExtPromoteOperand(Op.getOperand(0), PVT);
    876     else
    877       N0 = PromoteOperand(N0, PVT, Replace);
    878     if (N0.getNode() == 0)
    879       return SDValue();
    880 
    881     AddToWorkList(N0.getNode());
    882     if (Replace)
    883       ReplaceLoadWithPromotedLoad(Op.getOperand(0).getNode(), N0.getNode());
    884 
    885     DEBUG(dbgs() << "\nPromoting ";
    886           Op.getNode()->dump(&DAG));
    887     DebugLoc dl = Op.getDebugLoc();
    888     return DAG.getNode(ISD::TRUNCATE, dl, VT,
    889                        DAG.getNode(Opc, dl, PVT, N0, Op.getOperand(1)));
    890   }
    891   return SDValue();
    892 }
    893 
    894 SDValue DAGCombiner::PromoteExtend(SDValue Op) {
    895   if (!LegalOperations)
    896     return SDValue();
    897 
    898   EVT VT = Op.getValueType();
    899   if (VT.isVector() || !VT.isInteger())
    900     return SDValue();
    901 
    902   // If operation type is 'undesirable', e.g. i16 on x86, consider
    903   // promoting it.
    904   unsigned Opc = Op.getOpcode();
    905   if (TLI.isTypeDesirableForOp(Opc, VT))
    906     return SDValue();
    907 
    908   EVT PVT = VT;
    909   // Consult target whether it is a good idea to promote this operation and
    910   // what's the right type to promote it to.
    911   if (TLI.IsDesirableToPromoteOp(Op, PVT)) {
    912     assert(PVT != VT && "Don't know what type to promote to!");
    913     // fold (aext (aext x)) -> (aext x)
    914     // fold (aext (zext x)) -> (zext x)
    915     // fold (aext (sext x)) -> (sext x)
    916     DEBUG(dbgs() << "\nPromoting ";
    917           Op.getNode()->dump(&DAG));
    918     return DAG.getNode(Op.getOpcode(), Op.getDebugLoc(), VT, Op.getOperand(0));
    919   }
    920   return SDValue();
    921 }
    922 
    923 bool DAGCombiner::PromoteLoad(SDValue Op) {
    924   if (!LegalOperations)
    925     return false;
    926 
    927   EVT VT = Op.getValueType();
    928   if (VT.isVector() || !VT.isInteger())
    929     return false;
    930 
    931   // If operation type is 'undesirable', e.g. i16 on x86, consider
    932   // promoting it.
    933   unsigned Opc = Op.getOpcode();
    934   if (TLI.isTypeDesirableForOp(Opc, VT))
    935     return false;
    936 
    937   EVT PVT = VT;
    938   // Consult target whether it is a good idea to promote this operation and
    939   // what's the right type to promote it to.
    940   if (TLI.IsDesirableToPromoteOp(Op, PVT)) {
    941     assert(PVT != VT && "Don't know what type to promote to!");
    942 
    943     DebugLoc dl = Op.getDebugLoc();
    944     SDNode *N = Op.getNode();
    945     LoadSDNode *LD = cast<LoadSDNode>(N);
    946     EVT MemVT = LD->getMemoryVT();
    947     ISD::LoadExtType ExtType = ISD::isNON_EXTLoad(LD)
    948       ? (TLI.isLoadExtLegal(ISD::ZEXTLOAD, MemVT) ? ISD::ZEXTLOAD
    949                                                   : ISD::EXTLOAD)
    950       : LD->getExtensionType();
    951     SDValue NewLD = DAG.getExtLoad(ExtType, dl, PVT,
    952                                    LD->getChain(), LD->getBasePtr(),
    953                                    LD->getPointerInfo(),
    954                                    MemVT, LD->isVolatile(),
    955                                    LD->isNonTemporal(), LD->getAlignment());
    956     SDValue Result = DAG.getNode(ISD::TRUNCATE, dl, VT, NewLD);
    957 
    958     DEBUG(dbgs() << "\nPromoting ";
    959           N->dump(&DAG);
    960           dbgs() << "\nTo: ";
    961           Result.getNode()->dump(&DAG);
    962           dbgs() << '\n');
    963     WorkListRemover DeadNodes(*this);
    964     DAG.ReplaceAllUsesOfValueWith(SDValue(N, 0), Result, &DeadNodes);
    965     DAG.ReplaceAllUsesOfValueWith(SDValue(N, 1), NewLD.getValue(1), &DeadNodes);
    966     removeFromWorkList(N);
    967     DAG.DeleteNode(N);
    968     AddToWorkList(Result.getNode());
    969     return true;
    970   }
    971   return false;
    972 }
    973 
    974 
    975 //===----------------------------------------------------------------------===//
    976 //  Main DAG Combiner implementation
    977 //===----------------------------------------------------------------------===//
    978 
    979 void DAGCombiner::Run(CombineLevel AtLevel) {
    980   // set the instance variables, so that the various visit routines may use it.
    981   Level = AtLevel;
    982   LegalOperations = Level >= AfterLegalizeVectorOps;
    983   LegalTypes = Level >= AfterLegalizeTypes;
    984 
    985   // Add all the dag nodes to the worklist.
    986   for (SelectionDAG::allnodes_iterator I = DAG.allnodes_begin(),
    987        E = DAG.allnodes_end(); I != E; ++I)
    988     AddToWorkList(I);
    989 
    990   // Create a dummy node (which is not added to allnodes), that adds a reference
    991   // to the root node, preventing it from being deleted, and tracking any
    992   // changes of the root.
    993   HandleSDNode Dummy(DAG.getRoot());
    994 
    995   // The root of the dag may dangle to deleted nodes until the dag combiner is
    996   // done.  Set it to null to avoid confusion.
    997   DAG.setRoot(SDValue());
    998 
    999   // while the worklist isn't empty, find a node and
   1000   // try and combine it.
   1001   while (!WorkListContents.empty()) {
   1002     SDNode *N;
   1003     // The WorkListOrder holds the SDNodes in order, but it may contain duplicates.
   1004     // In order to avoid a linear scan, we use a set (O(log N)) to hold what the
   1005     // worklist *should* contain, and check the node we want to visit is should
   1006     // actually be visited.
   1007     do {
   1008       N = WorkListOrder.pop_back_val();
   1009     } while (!WorkListContents.erase(N));
   1010 
   1011     // If N has no uses, it is dead.  Make sure to revisit all N's operands once
   1012     // N is deleted from the DAG, since they too may now be dead or may have a
   1013     // reduced number of uses, allowing other xforms.
   1014     if (N->use_empty() && N != &Dummy) {
   1015       for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i)
   1016         AddToWorkList(N->getOperand(i).getNode());
   1017 
   1018       DAG.DeleteNode(N);
   1019       continue;
   1020     }
   1021 
   1022     SDValue RV = combine(N);
   1023 
   1024     if (RV.getNode() == 0)
   1025       continue;
   1026 
   1027     ++NodesCombined;
   1028 
   1029     // If we get back the same node we passed in, rather than a new node or
   1030     // zero, we know that the node must have defined multiple values and
   1031     // CombineTo was used.  Since CombineTo takes care of the worklist
   1032     // mechanics for us, we have no work to do in this case.
   1033     if (RV.getNode() == N)
   1034       continue;
   1035 
   1036     assert(N->getOpcode() != ISD::DELETED_NODE &&
   1037            RV.getNode()->getOpcode() != ISD::DELETED_NODE &&
   1038            "Node was deleted but visit returned new node!");
   1039 
   1040     DEBUG(dbgs() << "\nReplacing.3 ";
   1041           N->dump(&DAG);
   1042           dbgs() << "\nWith: ";
   1043           RV.getNode()->dump(&DAG);
   1044           dbgs() << '\n');
   1045 
   1046     // Transfer debug value.
   1047     DAG.TransferDbgValues(SDValue(N, 0), RV);
   1048     WorkListRemover DeadNodes(*this);
   1049     if (N->getNumValues() == RV.getNode()->getNumValues())
   1050       DAG.ReplaceAllUsesWith(N, RV.getNode(), &DeadNodes);
   1051     else {
   1052       assert(N->getValueType(0) == RV.getValueType() &&
   1053              N->getNumValues() == 1 && "Type mismatch");
   1054       SDValue OpV = RV;
   1055       DAG.ReplaceAllUsesWith(N, &OpV, &DeadNodes);
   1056     }
   1057 
   1058     // Push the new node and any users onto the worklist
   1059     AddToWorkList(RV.getNode());
   1060     AddUsersToWorkList(RV.getNode());
   1061 
   1062     // Add any uses of the old node to the worklist in case this node is the
   1063     // last one that uses them.  They may become dead after this node is
   1064     // deleted.
   1065     for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i)
   1066       AddToWorkList(N->getOperand(i).getNode());
   1067 
   1068     // Finally, if the node is now dead, remove it from the graph.  The node
   1069     // may not be dead if the replacement process recursively simplified to
   1070     // something else needing this node.
   1071     if (N->use_empty()) {
   1072       // Nodes can be reintroduced into the worklist.  Make sure we do not
   1073       // process a node that has been replaced.
   1074       removeFromWorkList(N);
   1075 
   1076       // Finally, since the node is now dead, remove it from the graph.
   1077       DAG.DeleteNode(N);
   1078     }
   1079   }
   1080 
   1081   // If the root changed (e.g. it was a dead load, update the root).
   1082   DAG.setRoot(Dummy.getValue());
   1083   DAG.RemoveDeadNodes();
   1084 }
   1085 
   1086 SDValue DAGCombiner::visit(SDNode *N) {
   1087   switch (N->getOpcode()) {
   1088   default: break;
   1089   case ISD::TokenFactor:        return visitTokenFactor(N);
   1090   case ISD::MERGE_VALUES:       return visitMERGE_VALUES(N);
   1091   case ISD::ADD:                return visitADD(N);
   1092   case ISD::SUB:                return visitSUB(N);
   1093   case ISD::ADDC:               return visitADDC(N);
   1094   case ISD::SUBC:               return visitSUBC(N);
   1095   case ISD::ADDE:               return visitADDE(N);
   1096   case ISD::SUBE:               return visitSUBE(N);
   1097   case ISD::MUL:                return visitMUL(N);
   1098   case ISD::SDIV:               return visitSDIV(N);
   1099   case ISD::UDIV:               return visitUDIV(N);
   1100   case ISD::SREM:               return visitSREM(N);
   1101   case ISD::UREM:               return visitUREM(N);
   1102   case ISD::MULHU:              return visitMULHU(N);
   1103   case ISD::MULHS:              return visitMULHS(N);
   1104   case ISD::SMUL_LOHI:          return visitSMUL_LOHI(N);
   1105   case ISD::UMUL_LOHI:          return visitUMUL_LOHI(N);
   1106   case ISD::SMULO:              return visitSMULO(N);
   1107   case ISD::UMULO:              return visitUMULO(N);
   1108   case ISD::SDIVREM:            return visitSDIVREM(N);
   1109   case ISD::UDIVREM:            return visitUDIVREM(N);
   1110   case ISD::AND:                return visitAND(N);
   1111   case ISD::OR:                 return visitOR(N);
   1112   case ISD::XOR:                return visitXOR(N);
   1113   case ISD::SHL:                return visitSHL(N);
   1114   case ISD::SRA:                return visitSRA(N);
   1115   case ISD::SRL:                return visitSRL(N);
   1116   case ISD::CTLZ:               return visitCTLZ(N);
   1117   case ISD::CTLZ_ZERO_UNDEF:    return visitCTLZ_ZERO_UNDEF(N);
   1118   case ISD::CTTZ:               return visitCTTZ(N);
   1119   case ISD::CTTZ_ZERO_UNDEF:    return visitCTTZ_ZERO_UNDEF(N);
   1120   case ISD::CTPOP:              return visitCTPOP(N);
   1121   case ISD::SELECT:             return visitSELECT(N);
   1122   case ISD::SELECT_CC:          return visitSELECT_CC(N);
   1123   case ISD::SETCC:              return visitSETCC(N);
   1124   case ISD::SIGN_EXTEND:        return visitSIGN_EXTEND(N);
   1125   case ISD::ZERO_EXTEND:        return visitZERO_EXTEND(N);
   1126   case ISD::ANY_EXTEND:         return visitANY_EXTEND(N);
   1127   case ISD::SIGN_EXTEND_INREG:  return visitSIGN_EXTEND_INREG(N);
   1128   case ISD::TRUNCATE:           return visitTRUNCATE(N);
   1129   case ISD::BITCAST:            return visitBITCAST(N);
   1130   case ISD::BUILD_PAIR:         return visitBUILD_PAIR(N);
   1131   case ISD::FADD:               return visitFADD(N);
   1132   case ISD::FSUB:               return visitFSUB(N);
   1133   case ISD::FMUL:               return visitFMUL(N);
   1134   case ISD::FDIV:               return visitFDIV(N);
   1135   case ISD::FREM:               return visitFREM(N);
   1136   case ISD::FCOPYSIGN:          return visitFCOPYSIGN(N);
   1137   case ISD::SINT_TO_FP:         return visitSINT_TO_FP(N);
   1138   case ISD::UINT_TO_FP:         return visitUINT_TO_FP(N);
   1139   case ISD::FP_TO_SINT:         return visitFP_TO_SINT(N);
   1140   case ISD::FP_TO_UINT:         return visitFP_TO_UINT(N);
   1141   case ISD::FP_ROUND:           return visitFP_ROUND(N);
   1142   case ISD::FP_ROUND_INREG:     return visitFP_ROUND_INREG(N);
   1143   case ISD::FP_EXTEND:          return visitFP_EXTEND(N);
   1144   case ISD::FNEG:               return visitFNEG(N);
   1145   case ISD::FABS:               return visitFABS(N);
   1146   case ISD::BRCOND:             return visitBRCOND(N);
   1147   case ISD::BR_CC:              return visitBR_CC(N);
   1148   case ISD::LOAD:               return visitLOAD(N);
   1149   case ISD::STORE:              return visitSTORE(N);
   1150   case ISD::INSERT_VECTOR_ELT:  return visitINSERT_VECTOR_ELT(N);
   1151   case ISD::EXTRACT_VECTOR_ELT: return visitEXTRACT_VECTOR_ELT(N);
   1152   case ISD::BUILD_VECTOR:       return visitBUILD_VECTOR(N);
   1153   case ISD::CONCAT_VECTORS:     return visitCONCAT_VECTORS(N);
   1154   case ISD::EXTRACT_SUBVECTOR:  return visitEXTRACT_SUBVECTOR(N);
   1155   case ISD::VECTOR_SHUFFLE:     return visitVECTOR_SHUFFLE(N);
   1156   case ISD::MEMBARRIER:         return visitMEMBARRIER(N);
   1157   }
   1158   return SDValue();
   1159 }
   1160 
   1161 SDValue DAGCombiner::combine(SDNode *N) {
   1162   SDValue RV = visit(N);
   1163 
   1164   // If nothing happened, try a target-specific DAG combine.
   1165   if (RV.getNode() == 0) {
   1166     assert(N->getOpcode() != ISD::DELETED_NODE &&
   1167            "Node was deleted but visit returned NULL!");
   1168 
   1169     if (N->getOpcode() >= ISD::BUILTIN_OP_END ||
   1170         TLI.hasTargetDAGCombine((ISD::NodeType)N->getOpcode())) {
   1171 
   1172       // Expose the DAG combiner to the target combiner impls.
   1173       TargetLowering::DAGCombinerInfo
   1174         DagCombineInfo(DAG, !LegalTypes, !LegalOperations, false, this);
   1175 
   1176       RV = TLI.PerformDAGCombine(N, DagCombineInfo);
   1177     }
   1178   }
   1179 
   1180   // If nothing happened still, try promoting the operation.
   1181   if (RV.getNode() == 0) {
   1182     switch (N->getOpcode()) {
   1183     default: break;
   1184     case ISD::ADD:
   1185     case ISD::SUB:
   1186     case ISD::MUL:
   1187     case ISD::AND:
   1188     case ISD::OR:
   1189     case ISD::XOR:
   1190       RV = PromoteIntBinOp(SDValue(N, 0));
   1191       break;
   1192     case ISD::SHL:
   1193     case ISD::SRA:
   1194     case ISD::SRL:
   1195       RV = PromoteIntShiftOp(SDValue(N, 0));
   1196       break;
   1197     case ISD::SIGN_EXTEND:
   1198     case ISD::ZERO_EXTEND:
   1199     case ISD::ANY_EXTEND:
   1200       RV = PromoteExtend(SDValue(N, 0));
   1201       break;
   1202     case ISD::LOAD:
   1203       if (PromoteLoad(SDValue(N, 0)))
   1204         RV = SDValue(N, 0);
   1205       break;
   1206     }
   1207   }
   1208 
   1209   // If N is a commutative binary node, try commuting it to enable more
   1210   // sdisel CSE.
   1211   if (RV.getNode() == 0 &&
   1212       SelectionDAG::isCommutativeBinOp(N->getOpcode()) &&
   1213       N->getNumValues() == 1) {
   1214     SDValue N0 = N->getOperand(0);
   1215     SDValue N1 = N->getOperand(1);
   1216 
   1217     // Constant operands are canonicalized to RHS.
   1218     if (isa<ConstantSDNode>(N0) || !isa<ConstantSDNode>(N1)) {
   1219       SDValue Ops[] = { N1, N0 };
   1220       SDNode *CSENode = DAG.getNodeIfExists(N->getOpcode(), N->getVTList(),
   1221                                             Ops, 2);
   1222       if (CSENode)
   1223         return SDValue(CSENode, 0);
   1224     }
   1225   }
   1226 
   1227   return RV;
   1228 }
   1229 
   1230 /// getInputChainForNode - Given a node, return its input chain if it has one,
   1231 /// otherwise return a null sd operand.
   1232 static SDValue getInputChainForNode(SDNode *N) {
   1233   if (unsigned NumOps = N->getNumOperands()) {
   1234     if (N->getOperand(0).getValueType() == MVT::Other)
   1235       return N->getOperand(0);
   1236     else if (N->getOperand(NumOps-1).getValueType() == MVT::Other)
   1237       return N->getOperand(NumOps-1);
   1238     for (unsigned i = 1; i < NumOps-1; ++i)
   1239       if (N->getOperand(i).getValueType() == MVT::Other)
   1240         return N->getOperand(i);
   1241   }
   1242   return SDValue();
   1243 }
   1244 
   1245 SDValue DAGCombiner::visitTokenFactor(SDNode *N) {
   1246   // If N has two operands, where one has an input chain equal to the other,
   1247   // the 'other' chain is redundant.
   1248   if (N->getNumOperands() == 2) {
   1249     if (getInputChainForNode(N->getOperand(0).getNode()) == N->getOperand(1))
   1250       return N->getOperand(0);
   1251     if (getInputChainForNode(N->getOperand(1).getNode()) == N->getOperand(0))
   1252       return N->getOperand(1);
   1253   }
   1254 
   1255   SmallVector<SDNode *, 8> TFs;     // List of token factors to visit.
   1256   SmallVector<SDValue, 8> Ops;    // Ops for replacing token factor.
   1257   SmallPtrSet<SDNode*, 16> SeenOps;
   1258   bool Changed = false;             // If we should replace this token factor.
   1259 
   1260   // Start out with this token factor.
   1261   TFs.push_back(N);
   1262 
   1263   // Iterate through token factors.  The TFs grows when new token factors are
   1264   // encountered.
   1265   for (unsigned i = 0; i < TFs.size(); ++i) {
   1266     SDNode *TF = TFs[i];
   1267 
   1268     // Check each of the operands.
   1269     for (unsigned i = 0, ie = TF->getNumOperands(); i != ie; ++i) {
   1270       SDValue Op = TF->getOperand(i);
   1271 
   1272       switch (Op.getOpcode()) {
   1273       case ISD::EntryToken:
   1274         // Entry tokens don't need to be added to the list. They are
   1275         // rededundant.
   1276         Changed = true;
   1277         break;
   1278 
   1279       case ISD::TokenFactor:
   1280         if (Op.hasOneUse() &&
   1281             std::find(TFs.begin(), TFs.end(), Op.getNode()) == TFs.end()) {
   1282           // Queue up for processing.
   1283           TFs.push_back(Op.getNode());
   1284           // Clean up in case the token factor is removed.
   1285           AddToWorkList(Op.getNode());
   1286           Changed = true;
   1287           break;
   1288         }
   1289         // Fall thru
   1290 
   1291       default:
   1292         // Only add if it isn't already in the list.
   1293         if (SeenOps.insert(Op.getNode()))
   1294           Ops.push_back(Op);
   1295         else
   1296           Changed = true;
   1297         break;
   1298       }
   1299     }
   1300   }
   1301 
   1302   SDValue Result;
   1303 
   1304   // If we've change things around then replace token factor.
   1305   if (Changed) {
   1306     if (Ops.empty()) {
   1307       // The entry token is the only possible outcome.
   1308       Result = DAG.getEntryNode();
   1309     } else {
   1310       // New and improved token factor.
   1311       Result = DAG.getNode(ISD::TokenFactor, N->getDebugLoc(),
   1312                            MVT::Other, &Ops[0], Ops.size());
   1313     }
   1314 
   1315     // Don't add users to work list.
   1316     return CombineTo(N, Result, false);
   1317   }
   1318 
   1319   return Result;
   1320 }
   1321 
   1322 /// MERGE_VALUES can always be eliminated.
   1323 SDValue DAGCombiner::visitMERGE_VALUES(SDNode *N) {
   1324   WorkListRemover DeadNodes(*this);
   1325   // Replacing results may cause a different MERGE_VALUES to suddenly
   1326   // be CSE'd with N, and carry its uses with it. Iterate until no
   1327   // uses remain, to ensure that the node can be safely deleted.
   1328   do {
   1329     for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i)
   1330       DAG.ReplaceAllUsesOfValueWith(SDValue(N, i), N->getOperand(i),
   1331                                     &DeadNodes);
   1332   } while (!N->use_empty());
   1333   removeFromWorkList(N);
   1334   DAG.DeleteNode(N);
   1335   return SDValue(N, 0);   // Return N so it doesn't get rechecked!
   1336 }
   1337 
   1338 static
   1339 SDValue combineShlAddConstant(DebugLoc DL, SDValue N0, SDValue N1,
   1340                               SelectionDAG &DAG) {
   1341   EVT VT = N0.getValueType();
   1342   SDValue N00 = N0.getOperand(0);
   1343   SDValue N01 = N0.getOperand(1);
   1344   ConstantSDNode *N01C = dyn_cast<ConstantSDNode>(N01);
   1345 
   1346   if (N01C && N00.getOpcode() == ISD::ADD && N00.getNode()->hasOneUse() &&
   1347       isa<ConstantSDNode>(N00.getOperand(1))) {
   1348     // fold (add (shl (add x, c1), c2), ) -> (add (add (shl x, c2), c1<<c2), )
   1349     N0 = DAG.getNode(ISD::ADD, N0.getDebugLoc(), VT,
   1350                      DAG.getNode(ISD::SHL, N00.getDebugLoc(), VT,
   1351                                  N00.getOperand(0), N01),
   1352                      DAG.getNode(ISD::SHL, N01.getDebugLoc(), VT,
   1353                                  N00.getOperand(1), N01));
   1354     return DAG.getNode(ISD::ADD, DL, VT, N0, N1);
   1355   }
   1356 
   1357   return SDValue();
   1358 }
   1359 
   1360 SDValue DAGCombiner::visitADD(SDNode *N) {
   1361   SDValue N0 = N->getOperand(0);
   1362   SDValue N1 = N->getOperand(1);
   1363   ConstantSDNode *N0C = dyn_cast<ConstantSDNode>(N0);
   1364   ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1);
   1365   EVT VT = N0.getValueType();
   1366 
   1367   // fold vector ops
   1368   if (VT.isVector()) {
   1369     SDValue FoldedVOp = SimplifyVBinOp(N);
   1370     if (FoldedVOp.getNode()) return FoldedVOp;
   1371   }
   1372 
   1373   // fold (add x, undef) -> undef
   1374   if (N0.getOpcode() == ISD::UNDEF)
   1375     return N0;
   1376   if (N1.getOpcode() == ISD::UNDEF)
   1377     return N1;
   1378   // fold (add c1, c2) -> c1+c2
   1379   if (N0C && N1C)
   1380     return DAG.FoldConstantArithmetic(ISD::ADD, VT, N0C, N1C);
   1381   // canonicalize constant to RHS
   1382   if (N0C && !N1C)
   1383     return DAG.getNode(ISD::ADD, N->getDebugLoc(), VT, N1, N0);
   1384   // fold (add x, 0) -> x
   1385   if (N1C && N1C->isNullValue())
   1386     return N0;
   1387   // fold (add Sym, c) -> Sym+c
   1388   if (GlobalAddressSDNode *GA = dyn_cast<GlobalAddressSDNode>(N0))
   1389     if (!LegalOperations && TLI.isOffsetFoldingLegal(GA) && N1C &&
   1390         GA->getOpcode() == ISD::GlobalAddress)
   1391       return DAG.getGlobalAddress(GA->getGlobal(), N1C->getDebugLoc(), VT,
   1392                                   GA->getOffset() +
   1393                                     (uint64_t)N1C->getSExtValue());
   1394   // fold ((c1-A)+c2) -> (c1+c2)-A
   1395   if (N1C && N0.getOpcode() == ISD::SUB)
   1396     if (ConstantSDNode *N0C = dyn_cast<ConstantSDNode>(N0.getOperand(0)))
   1397       return DAG.getNode(ISD::SUB, N->getDebugLoc(), VT,
   1398                          DAG.getConstant(N1C->getAPIntValue()+
   1399                                          N0C->getAPIntValue(), VT),
   1400                          N0.getOperand(1));
   1401   // reassociate add
   1402   SDValue RADD = ReassociateOps(ISD::ADD, N->getDebugLoc(), N0, N1);
   1403   if (RADD.getNode() != 0)
   1404     return RADD;
   1405   // fold ((0-A) + B) -> B-A
   1406   if (N0.getOpcode() == ISD::SUB && isa<ConstantSDNode>(N0.getOperand(0)) &&
   1407       cast<ConstantSDNode>(N0.getOperand(0))->isNullValue())
   1408     return DAG.getNode(ISD::SUB, N->getDebugLoc(), VT, N1, N0.getOperand(1));
   1409   // fold (A + (0-B)) -> A-B
   1410   if (N1.getOpcode() == ISD::SUB && isa<ConstantSDNode>(N1.getOperand(0)) &&
   1411       cast<ConstantSDNode>(N1.getOperand(0))->isNullValue())
   1412     return DAG.getNode(ISD::SUB, N->getDebugLoc(), VT, N0, N1.getOperand(1));
   1413   // fold (A+(B-A)) -> B
   1414   if (N1.getOpcode() == ISD::SUB && N0 == N1.getOperand(1))
   1415     return N1.getOperand(0);
   1416   // fold ((B-A)+A) -> B
   1417   if (N0.getOpcode() == ISD::SUB && N1 == N0.getOperand(1))
   1418     return N0.getOperand(0);
   1419   // fold (A+(B-(A+C))) to (B-C)
   1420   if (N1.getOpcode() == ISD::SUB && N1.getOperand(1).getOpcode() == ISD::ADD &&
   1421       N0 == N1.getOperand(1).getOperand(0))
   1422     return DAG.getNode(ISD::SUB, N->getDebugLoc(), VT, N1.getOperand(0),
   1423                        N1.getOperand(1).getOperand(1));
   1424   // fold (A+(B-(C+A))) to (B-C)
   1425   if (N1.getOpcode() == ISD::SUB && N1.getOperand(1).getOpcode() == ISD::ADD &&
   1426       N0 == N1.getOperand(1).getOperand(1))
   1427     return DAG.getNode(ISD::SUB, N->getDebugLoc(), VT, N1.getOperand(0),
   1428                        N1.getOperand(1).getOperand(0));
   1429   // fold (A+((B-A)+or-C)) to (B+or-C)
   1430   if ((N1.getOpcode() == ISD::SUB || N1.getOpcode() == ISD::ADD) &&
   1431       N1.getOperand(0).getOpcode() == ISD::SUB &&
   1432       N0 == N1.getOperand(0).getOperand(1))
   1433     return DAG.getNode(N1.getOpcode(), N->getDebugLoc(), VT,
   1434                        N1.getOperand(0).getOperand(0), N1.getOperand(1));
   1435 
   1436   // fold (A-B)+(C-D) to (A+C)-(B+D) when A or C is constant
   1437   if (N0.getOpcode() == ISD::SUB && N1.getOpcode() == ISD::SUB) {
   1438     SDValue N00 = N0.getOperand(0);
   1439     SDValue N01 = N0.getOperand(1);
   1440     SDValue N10 = N1.getOperand(0);
   1441     SDValue N11 = N1.getOperand(1);
   1442 
   1443     if (isa<ConstantSDNode>(N00) || isa<ConstantSDNode>(N10))
   1444       return DAG.getNode(ISD::SUB, N->getDebugLoc(), VT,
   1445                          DAG.getNode(ISD::ADD, N0.getDebugLoc(), VT, N00, N10),
   1446                          DAG.getNode(ISD::ADD, N1.getDebugLoc(), VT, N01, N11));
   1447   }
   1448 
   1449   if (!VT.isVector() && SimplifyDemandedBits(SDValue(N, 0)))
   1450     return SDValue(N, 0);
   1451 
   1452   // fold (a+b) -> (a|b) iff a and b share no bits.
   1453   if (VT.isInteger() && !VT.isVector()) {
   1454     APInt LHSZero, LHSOne;
   1455     APInt RHSZero, RHSOne;
   1456     DAG.ComputeMaskedBits(N0, LHSZero, LHSOne);
   1457 
   1458     if (LHSZero.getBoolValue()) {
   1459       DAG.ComputeMaskedBits(N1, RHSZero, RHSOne);
   1460 
   1461       // If all possibly-set bits on the LHS are clear on the RHS, return an OR.
   1462       // If all possibly-set bits on the RHS are clear on the LHS, return an OR.
   1463       if ((RHSZero & ~LHSZero) == ~LHSZero || (LHSZero & ~RHSZero) == ~RHSZero)
   1464         return DAG.getNode(ISD::OR, N->getDebugLoc(), VT, N0, N1);
   1465     }
   1466   }
   1467 
   1468   // fold (add (shl (add x, c1), c2), ) -> (add (add (shl x, c2), c1<<c2), )
   1469   if (N0.getOpcode() == ISD::SHL && N0.getNode()->hasOneUse()) {
   1470     SDValue Result = combineShlAddConstant(N->getDebugLoc(), N0, N1, DAG);
   1471     if (Result.getNode()) return Result;
   1472   }
   1473   if (N1.getOpcode() == ISD::SHL && N1.getNode()->hasOneUse()) {
   1474     SDValue Result = combineShlAddConstant(N->getDebugLoc(), N1, N0, DAG);
   1475     if (Result.getNode()) return Result;
   1476   }
   1477 
   1478   // fold (add x, shl(0 - y, n)) -> sub(x, shl(y, n))
   1479   if (N1.getOpcode() == ISD::SHL &&
   1480       N1.getOperand(0).getOpcode() == ISD::SUB)
   1481     if (ConstantSDNode *C =
   1482           dyn_cast<ConstantSDNode>(N1.getOperand(0).getOperand(0)))
   1483       if (C->getAPIntValue() == 0)
   1484         return DAG.getNode(ISD::SUB, N->getDebugLoc(), VT, N0,
   1485                            DAG.getNode(ISD::SHL, N->getDebugLoc(), VT,
   1486                                        N1.getOperand(0).getOperand(1),
   1487                                        N1.getOperand(1)));
   1488   if (N0.getOpcode() == ISD::SHL &&
   1489       N0.getOperand(0).getOpcode() == ISD::SUB)
   1490     if (ConstantSDNode *C =
   1491           dyn_cast<ConstantSDNode>(N0.getOperand(0).getOperand(0)))
   1492       if (C->getAPIntValue() == 0)
   1493         return DAG.getNode(ISD::SUB, N->getDebugLoc(), VT, N1,
   1494                            DAG.getNode(ISD::SHL, N->getDebugLoc(), VT,
   1495                                        N0.getOperand(0).getOperand(1),
   1496                                        N0.getOperand(1)));
   1497 
   1498   if (N1.getOpcode() == ISD::AND) {
   1499     SDValue AndOp0 = N1.getOperand(0);
   1500     ConstantSDNode *AndOp1 = dyn_cast<ConstantSDNode>(N1->getOperand(1));
   1501     unsigned NumSignBits = DAG.ComputeNumSignBits(AndOp0);
   1502     unsigned DestBits = VT.getScalarType().getSizeInBits();
   1503 
   1504     // (add z, (and (sbbl x, x), 1)) -> (sub z, (sbbl x, x))
   1505     // and similar xforms where the inner op is either ~0 or 0.
   1506     if (NumSignBits == DestBits && AndOp1 && AndOp1->isOne()) {
   1507       DebugLoc DL = N->getDebugLoc();
   1508       return DAG.getNode(ISD::SUB, DL, VT, N->getOperand(0), AndOp0);
   1509     }
   1510   }
   1511 
   1512   // add (sext i1), X -> sub X, (zext i1)
   1513   if (N0.getOpcode() == ISD::SIGN_EXTEND &&
   1514       N0.getOperand(0).getValueType() == MVT::i1 &&
   1515       !TLI.isOperationLegal(ISD::SIGN_EXTEND, MVT::i1)) {
   1516     DebugLoc DL = N->getDebugLoc();
   1517     SDValue ZExt = DAG.getNode(ISD::ZERO_EXTEND, DL, VT, N0.getOperand(0));
   1518     return DAG.getNode(ISD::SUB, DL, VT, N1, ZExt);
   1519   }
   1520 
   1521   return SDValue();
   1522 }
   1523 
   1524 SDValue DAGCombiner::visitADDC(SDNode *N) {
   1525   SDValue N0 = N->getOperand(0);
   1526   SDValue N1 = N->getOperand(1);
   1527   ConstantSDNode *N0C = dyn_cast<ConstantSDNode>(N0);
   1528   ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1);
   1529   EVT VT = N0.getValueType();
   1530 
   1531   // If the flag result is dead, turn this into an ADD.
   1532   if (!N->hasAnyUseOfValue(1))
   1533     return CombineTo(N, DAG.getNode(ISD::ADD, N->getDebugLoc(), VT, N0, N1),
   1534                      DAG.getNode(ISD::CARRY_FALSE,
   1535                                  N->getDebugLoc(), MVT::Glue));
   1536 
   1537   // canonicalize constant to RHS.
   1538   if (N0C && !N1C)
   1539     return DAG.getNode(ISD::ADDC, N->getDebugLoc(), N->getVTList(), N1, N0);
   1540 
   1541   // fold (addc x, 0) -> x + no carry out
   1542   if (N1C && N1C->isNullValue())
   1543     return CombineTo(N, N0, DAG.getNode(ISD::CARRY_FALSE,
   1544                                         N->getDebugLoc(), MVT::Glue));
   1545 
   1546   // fold (addc a, b) -> (or a, b), CARRY_FALSE iff a and b share no bits.
   1547   APInt LHSZero, LHSOne;
   1548   APInt RHSZero, RHSOne;
   1549   DAG.ComputeMaskedBits(N0, LHSZero, LHSOne);
   1550 
   1551   if (LHSZero.getBoolValue()) {
   1552     DAG.ComputeMaskedBits(N1, RHSZero, RHSOne);
   1553 
   1554     // If all possibly-set bits on the LHS are clear on the RHS, return an OR.
   1555     // If all possibly-set bits on the RHS are clear on the LHS, return an OR.
   1556     if ((RHSZero & ~LHSZero) == ~LHSZero || (LHSZero & ~RHSZero) == ~RHSZero)
   1557       return CombineTo(N, DAG.getNode(ISD::OR, N->getDebugLoc(), VT, N0, N1),
   1558                        DAG.getNode(ISD::CARRY_FALSE,
   1559                                    N->getDebugLoc(), MVT::Glue));
   1560   }
   1561 
   1562   return SDValue();
   1563 }
   1564 
   1565 SDValue DAGCombiner::visitADDE(SDNode *N) {
   1566   SDValue N0 = N->getOperand(0);
   1567   SDValue N1 = N->getOperand(1);
   1568   SDValue CarryIn = N->getOperand(2);
   1569   ConstantSDNode *N0C = dyn_cast<ConstantSDNode>(N0);
   1570   ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1);
   1571 
   1572   // canonicalize constant to RHS
   1573   if (N0C && !N1C)
   1574     return DAG.getNode(ISD::ADDE, N->getDebugLoc(), N->getVTList(),
   1575                        N1, N0, CarryIn);
   1576 
   1577   // fold (adde x, y, false) -> (addc x, y)
   1578   if (CarryIn.getOpcode() == ISD::CARRY_FALSE)
   1579     return DAG.getNode(ISD::ADDC, N->getDebugLoc(), N->getVTList(), N0, N1);
   1580 
   1581   return SDValue();
   1582 }
   1583 
   1584 // Since it may not be valid to emit a fold to zero for vector initializers
   1585 // check if we can before folding.
   1586 static SDValue tryFoldToZero(DebugLoc DL, const TargetLowering &TLI, EVT VT,
   1587                              SelectionDAG &DAG, bool LegalOperations) {
   1588   if (!VT.isVector()) {
   1589     return DAG.getConstant(0, VT);
   1590   }
   1591   if (!LegalOperations || TLI.isOperationLegal(ISD::BUILD_VECTOR, VT)) {
   1592     // Produce a vector of zeros.
   1593     SDValue El = DAG.getConstant(0, VT.getVectorElementType());
   1594     std::vector<SDValue> Ops(VT.getVectorNumElements(), El);
   1595     return DAG.getNode(ISD::BUILD_VECTOR, DL, VT,
   1596       &Ops[0], Ops.size());
   1597   }
   1598   return SDValue();
   1599 }
   1600 
   1601 SDValue DAGCombiner::visitSUB(SDNode *N) {
   1602   SDValue N0 = N->getOperand(0);
   1603   SDValue N1 = N->getOperand(1);
   1604   ConstantSDNode *N0C = dyn_cast<ConstantSDNode>(N0.getNode());
   1605   ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1.getNode());
   1606   ConstantSDNode *N1C1 = N1.getOpcode() != ISD::ADD ? 0 :
   1607     dyn_cast<ConstantSDNode>(N1.getOperand(1).getNode());
   1608   EVT VT = N0.getValueType();
   1609 
   1610   // fold vector ops
   1611   if (VT.isVector()) {
   1612     SDValue FoldedVOp = SimplifyVBinOp(N);
   1613     if (FoldedVOp.getNode()) return FoldedVOp;
   1614   }
   1615 
   1616   // fold (sub x, x) -> 0
   1617   // FIXME: Refactor this and xor and other similar operations together.
   1618   if (N0 == N1)
   1619     return tryFoldToZero(N->getDebugLoc(), TLI, VT, DAG, LegalOperations);
   1620   // fold (sub c1, c2) -> c1-c2
   1621   if (N0C && N1C)
   1622     return DAG.FoldConstantArithmetic(ISD::SUB, VT, N0C, N1C);
   1623   // fold (sub x, c) -> (add x, -c)
   1624   if (N1C)
   1625     return DAG.getNode(ISD::ADD, N->getDebugLoc(), VT, N0,
   1626                        DAG.getConstant(-N1C->getAPIntValue(), VT));
   1627   // Canonicalize (sub -1, x) -> ~x, i.e. (xor x, -1)
   1628   if (N0C && N0C->isAllOnesValue())
   1629     return DAG.getNode(ISD::XOR, N->getDebugLoc(), VT, N1, N0);
   1630   // fold A-(A-B) -> B
   1631   if (N1.getOpcode() == ISD::SUB && N0 == N1.getOperand(0))
   1632     return N1.getOperand(1);
   1633   // fold (A+B)-A -> B
   1634   if (N0.getOpcode() == ISD::ADD && N0.getOperand(0) == N1)
   1635     return N0.getOperand(1);
   1636   // fold (A+B)-B -> A
   1637   if (N0.getOpcode() == ISD::ADD && N0.getOperand(1) == N1)
   1638     return N0.getOperand(0);
   1639   // fold C2-(A+C1) -> (C2-C1)-A
   1640   if (N1.getOpcode() == ISD::ADD && N0C && N1C1) {
   1641     SDValue NewC = DAG.getConstant((N0C->getAPIntValue() - N1C1->getAPIntValue()), VT);
   1642     return DAG.getNode(ISD::SUB, N->getDebugLoc(), VT, NewC,
   1643 		       N1.getOperand(0));
   1644   }
   1645   // fold ((A+(B+or-C))-B) -> A+or-C
   1646   if (N0.getOpcode() == ISD::ADD &&
   1647       (N0.getOperand(1).getOpcode() == ISD::SUB ||
   1648        N0.getOperand(1).getOpcode() == ISD::ADD) &&
   1649       N0.getOperand(1).getOperand(0) == N1)
   1650     return DAG.getNode(N0.getOperand(1).getOpcode(), N->getDebugLoc(), VT,
   1651                        N0.getOperand(0), N0.getOperand(1).getOperand(1));
   1652   // fold ((A+(C+B))-B) -> A+C
   1653   if (N0.getOpcode() == ISD::ADD &&
   1654       N0.getOperand(1).getOpcode() == ISD::ADD &&
   1655       N0.getOperand(1).getOperand(1) == N1)
   1656     return DAG.getNode(ISD::ADD, N->getDebugLoc(), VT,
   1657                        N0.getOperand(0), N0.getOperand(1).getOperand(0));
   1658   // fold ((A-(B-C))-C) -> A-B
   1659   if (N0.getOpcode() == ISD::SUB &&
   1660       N0.getOperand(1).getOpcode() == ISD::SUB &&
   1661       N0.getOperand(1).getOperand(1) == N1)
   1662     return DAG.getNode(ISD::SUB, N->getDebugLoc(), VT,
   1663                        N0.getOperand(0), N0.getOperand(1).getOperand(0));
   1664 
   1665   // If either operand of a sub is undef, the result is undef
   1666   if (N0.getOpcode() == ISD::UNDEF)
   1667     return N0;
   1668   if (N1.getOpcode() == ISD::UNDEF)
   1669     return N1;
   1670 
   1671   // If the relocation model supports it, consider symbol offsets.
   1672   if (GlobalAddressSDNode *GA = dyn_cast<GlobalAddressSDNode>(N0))
   1673     if (!LegalOperations && TLI.isOffsetFoldingLegal(GA)) {
   1674       // fold (sub Sym, c) -> Sym-c
   1675       if (N1C && GA->getOpcode() == ISD::GlobalAddress)
   1676         return DAG.getGlobalAddress(GA->getGlobal(), N1C->getDebugLoc(), VT,
   1677                                     GA->getOffset() -
   1678                                       (uint64_t)N1C->getSExtValue());
   1679       // fold (sub Sym+c1, Sym+c2) -> c1-c2
   1680       if (GlobalAddressSDNode *GB = dyn_cast<GlobalAddressSDNode>(N1))
   1681         if (GA->getGlobal() == GB->getGlobal())
   1682           return DAG.getConstant((uint64_t)GA->getOffset() - GB->getOffset(),
   1683                                  VT);
   1684     }
   1685 
   1686   return SDValue();
   1687 }
   1688 
   1689 SDValue DAGCombiner::visitSUBC(SDNode *N) {
   1690   SDValue N0 = N->getOperand(0);
   1691   SDValue N1 = N->getOperand(1);
   1692   ConstantSDNode *N0C = dyn_cast<ConstantSDNode>(N0);
   1693   ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1);
   1694   EVT VT = N0.getValueType();
   1695 
   1696   // If the flag result is dead, turn this into an SUB.
   1697   if (!N->hasAnyUseOfValue(1))
   1698     return CombineTo(N, DAG.getNode(ISD::SUB, N->getDebugLoc(), VT, N0, N1),
   1699                      DAG.getNode(ISD::CARRY_FALSE, N->getDebugLoc(),
   1700                                  MVT::Glue));
   1701 
   1702   // fold (subc x, x) -> 0 + no borrow
   1703   if (N0 == N1)
   1704     return CombineTo(N, DAG.getConstant(0, VT),
   1705                      DAG.getNode(ISD::CARRY_FALSE, N->getDebugLoc(),
   1706                                  MVT::Glue));
   1707 
   1708   // fold (subc x, 0) -> x + no borrow
   1709   if (N1C && N1C->isNullValue())
   1710     return CombineTo(N, N0, DAG.getNode(ISD::CARRY_FALSE, N->getDebugLoc(),
   1711                                         MVT::Glue));
   1712 
   1713   // Canonicalize (sub -1, x) -> ~x, i.e. (xor x, -1) + no borrow
   1714   if (N0C && N0C->isAllOnesValue())
   1715     return CombineTo(N, DAG.getNode(ISD::XOR, N->getDebugLoc(), VT, N1, N0),
   1716                      DAG.getNode(ISD::CARRY_FALSE, N->getDebugLoc(),
   1717                                  MVT::Glue));
   1718 
   1719   return SDValue();
   1720 }
   1721 
   1722 SDValue DAGCombiner::visitSUBE(SDNode *N) {
   1723   SDValue N0 = N->getOperand(0);
   1724   SDValue N1 = N->getOperand(1);
   1725   SDValue CarryIn = N->getOperand(2);
   1726 
   1727   // fold (sube x, y, false) -> (subc x, y)
   1728   if (CarryIn.getOpcode() == ISD::CARRY_FALSE)
   1729     return DAG.getNode(ISD::SUBC, N->getDebugLoc(), N->getVTList(), N0, N1);
   1730 
   1731   return SDValue();
   1732 }
   1733 
   1734 SDValue DAGCombiner::visitMUL(SDNode *N) {
   1735   SDValue N0 = N->getOperand(0);
   1736   SDValue N1 = N->getOperand(1);
   1737   ConstantSDNode *N0C = dyn_cast<ConstantSDNode>(N0);
   1738   ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1);
   1739   EVT VT = N0.getValueType();
   1740 
   1741   // fold vector ops
   1742   if (VT.isVector()) {
   1743     SDValue FoldedVOp = SimplifyVBinOp(N);
   1744     if (FoldedVOp.getNode()) return FoldedVOp;
   1745   }
   1746 
   1747   // fold (mul x, undef) -> 0
   1748   if (N0.getOpcode() == ISD::UNDEF || N1.getOpcode() == ISD::UNDEF)
   1749     return DAG.getConstant(0, VT);
   1750   // fold (mul c1, c2) -> c1*c2
   1751   if (N0C && N1C)
   1752     return DAG.FoldConstantArithmetic(ISD::MUL, VT, N0C, N1C);
   1753   // canonicalize constant to RHS
   1754   if (N0C && !N1C)
   1755     return DAG.getNode(ISD::MUL, N->getDebugLoc(), VT, N1, N0);
   1756   // fold (mul x, 0) -> 0
   1757   if (N1C && N1C->isNullValue())
   1758     return N1;
   1759   // fold (mul x, -1) -> 0-x
   1760   if (N1C && N1C->isAllOnesValue())
   1761     return DAG.getNode(ISD::SUB, N->getDebugLoc(), VT,
   1762                        DAG.getConstant(0, VT), N0);
   1763   // fold (mul x, (1 << c)) -> x << c
   1764   if (N1C && N1C->getAPIntValue().isPowerOf2())
   1765     return DAG.getNode(ISD::SHL, N->getDebugLoc(), VT, N0,
   1766                        DAG.getConstant(N1C->getAPIntValue().logBase2(),
   1767                                        getShiftAmountTy(N0.getValueType())));
   1768   // fold (mul x, -(1 << c)) -> -(x << c) or (-x) << c
   1769   if (N1C && (-N1C->getAPIntValue()).isPowerOf2()) {
   1770     unsigned Log2Val = (-N1C->getAPIntValue()).logBase2();
   1771     // FIXME: If the input is something that is easily negated (e.g. a
   1772     // single-use add), we should put the negate there.
   1773     return DAG.getNode(ISD::SUB, N->getDebugLoc(), VT,
   1774                        DAG.getConstant(0, VT),
   1775                        DAG.getNode(ISD::SHL, N->getDebugLoc(), VT, N0,
   1776                             DAG.getConstant(Log2Val,
   1777                                       getShiftAmountTy(N0.getValueType()))));
   1778   }
   1779   // (mul (shl X, c1), c2) -> (mul X, c2 << c1)
   1780   if (N1C && N0.getOpcode() == ISD::SHL &&
   1781       isa<ConstantSDNode>(N0.getOperand(1))) {
   1782     SDValue C3 = DAG.getNode(ISD::SHL, N->getDebugLoc(), VT,
   1783                              N1, N0.getOperand(1));
   1784     AddToWorkList(C3.getNode());
   1785     return DAG.getNode(ISD::MUL, N->getDebugLoc(), VT,
   1786                        N0.getOperand(0), C3);
   1787   }
   1788 
   1789   // Change (mul (shl X, C), Y) -> (shl (mul X, Y), C) when the shift has one
   1790   // use.
   1791   {
   1792     SDValue Sh(0,0), Y(0,0);
   1793     // Check for both (mul (shl X, C), Y)  and  (mul Y, (shl X, C)).
   1794     if (N0.getOpcode() == ISD::SHL && isa<ConstantSDNode>(N0.getOperand(1)) &&
   1795         N0.getNode()->hasOneUse()) {
   1796       Sh = N0; Y = N1;
   1797     } else if (N1.getOpcode() == ISD::SHL &&
   1798                isa<ConstantSDNode>(N1.getOperand(1)) &&
   1799                N1.getNode()->hasOneUse()) {
   1800       Sh = N1; Y = N0;
   1801     }
   1802 
   1803     if (Sh.getNode()) {
   1804       SDValue Mul = DAG.getNode(ISD::MUL, N->getDebugLoc(), VT,
   1805                                 Sh.getOperand(0), Y);
   1806       return DAG.getNode(ISD::SHL, N->getDebugLoc(), VT,
   1807                          Mul, Sh.getOperand(1));
   1808     }
   1809   }
   1810 
   1811   // fold (mul (add x, c1), c2) -> (add (mul x, c2), c1*c2)
   1812   if (N1C && N0.getOpcode() == ISD::ADD && N0.getNode()->hasOneUse() &&
   1813       isa<ConstantSDNode>(N0.getOperand(1)))
   1814     return DAG.getNode(ISD::ADD, N->getDebugLoc(), VT,
   1815                        DAG.getNode(ISD::MUL, N0.getDebugLoc(), VT,
   1816                                    N0.getOperand(0), N1),
   1817                        DAG.getNode(ISD::MUL, N1.getDebugLoc(), VT,
   1818                                    N0.getOperand(1), N1));
   1819 
   1820   // reassociate mul
   1821   SDValue RMUL = ReassociateOps(ISD::MUL, N->getDebugLoc(), N0, N1);
   1822   if (RMUL.getNode() != 0)
   1823     return RMUL;
   1824 
   1825   return SDValue();
   1826 }
   1827 
   1828 SDValue DAGCombiner::visitSDIV(SDNode *N) {
   1829   SDValue N0 = N->getOperand(0);
   1830   SDValue N1 = N->getOperand(1);
   1831   ConstantSDNode *N0C = dyn_cast<ConstantSDNode>(N0.getNode());
   1832   ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1.getNode());
   1833   EVT VT = N->getValueType(0);
   1834 
   1835   // fold vector ops
   1836   if (VT.isVector()) {
   1837     SDValue FoldedVOp = SimplifyVBinOp(N);
   1838     if (FoldedVOp.getNode()) return FoldedVOp;
   1839   }
   1840 
   1841   // fold (sdiv c1, c2) -> c1/c2
   1842   if (N0C && N1C && !N1C->isNullValue())
   1843     return DAG.FoldConstantArithmetic(ISD::SDIV, VT, N0C, N1C);
   1844   // fold (sdiv X, 1) -> X
   1845   if (N1C && N1C->getAPIntValue() == 1LL)
   1846     return N0;
   1847   // fold (sdiv X, -1) -> 0-X
   1848   if (N1C && N1C->isAllOnesValue())
   1849     return DAG.getNode(ISD::SUB, N->getDebugLoc(), VT,
   1850                        DAG.getConstant(0, VT), N0);
   1851   // If we know the sign bits of both operands are zero, strength reduce to a
   1852   // udiv instead.  Handles (X&15) /s 4 -> X&15 >> 2
   1853   if (!VT.isVector()) {
   1854     if (DAG.SignBitIsZero(N1) && DAG.SignBitIsZero(N0))
   1855       return DAG.getNode(ISD::UDIV, N->getDebugLoc(), N1.getValueType(),
   1856                          N0, N1);
   1857   }
   1858   // fold (sdiv X, pow2) -> simple ops after legalize
   1859   if (N1C && !N1C->isNullValue() &&
   1860       (N1C->getAPIntValue().isPowerOf2() ||
   1861        (-N1C->getAPIntValue()).isPowerOf2())) {
   1862     // If dividing by powers of two is cheap, then don't perform the following
   1863     // fold.
   1864     if (TLI.isPow2DivCheap())
   1865       return SDValue();
   1866 
   1867     unsigned lg2 = N1C->getAPIntValue().countTrailingZeros();
   1868 
   1869     // Splat the sign bit into the register
   1870     SDValue SGN = DAG.getNode(ISD::SRA, N->getDebugLoc(), VT, N0,
   1871                               DAG.getConstant(VT.getSizeInBits()-1,
   1872                                        getShiftAmountTy(N0.getValueType())));
   1873     AddToWorkList(SGN.getNode());
   1874 
   1875     // Add (N0 < 0) ? abs2 - 1 : 0;
   1876     SDValue SRL = DAG.getNode(ISD::SRL, N->getDebugLoc(), VT, SGN,
   1877                               DAG.getConstant(VT.getSizeInBits() - lg2,
   1878                                        getShiftAmountTy(SGN.getValueType())));
   1879     SDValue ADD = DAG.getNode(ISD::ADD, N->getDebugLoc(), VT, N0, SRL);
   1880     AddToWorkList(SRL.getNode());
   1881     AddToWorkList(ADD.getNode());    // Divide by pow2
   1882     SDValue SRA = DAG.getNode(ISD::SRA, N->getDebugLoc(), VT, ADD,
   1883                   DAG.getConstant(lg2, getShiftAmountTy(ADD.getValueType())));
   1884 
   1885     // If we're dividing by a positive value, we're done.  Otherwise, we must
   1886     // negate the result.
   1887     if (N1C->getAPIntValue().isNonNegative())
   1888       return SRA;
   1889 
   1890     AddToWorkList(SRA.getNode());
   1891     return DAG.getNode(ISD::SUB, N->getDebugLoc(), VT,
   1892                        DAG.getConstant(0, VT), SRA);
   1893   }
   1894 
   1895   // if integer divide is expensive and we satisfy the requirements, emit an
   1896   // alternate sequence.
   1897   if (N1C && !N1C->isNullValue() && !TLI.isIntDivCheap()) {
   1898     SDValue Op = BuildSDIV(N);
   1899     if (Op.getNode()) return Op;
   1900   }
   1901 
   1902   // undef / X -> 0
   1903   if (N0.getOpcode() == ISD::UNDEF)
   1904     return DAG.getConstant(0, VT);
   1905   // X / undef -> undef
   1906   if (N1.getOpcode() == ISD::UNDEF)
   1907     return N1;
   1908 
   1909   return SDValue();
   1910 }
   1911 
   1912 SDValue DAGCombiner::visitUDIV(SDNode *N) {
   1913   SDValue N0 = N->getOperand(0);
   1914   SDValue N1 = N->getOperand(1);
   1915   ConstantSDNode *N0C = dyn_cast<ConstantSDNode>(N0.getNode());
   1916   ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1.getNode());
   1917   EVT VT = N->getValueType(0);
   1918 
   1919   // fold vector ops
   1920   if (VT.isVector()) {
   1921     SDValue FoldedVOp = SimplifyVBinOp(N);
   1922     if (FoldedVOp.getNode()) return FoldedVOp;
   1923   }
   1924 
   1925   // fold (udiv c1, c2) -> c1/c2
   1926   if (N0C && N1C && !N1C->isNullValue())
   1927     return DAG.FoldConstantArithmetic(ISD::UDIV, VT, N0C, N1C);
   1928   // fold (udiv x, (1 << c)) -> x >>u c
   1929   if (N1C && N1C->getAPIntValue().isPowerOf2())
   1930     return DAG.getNode(ISD::SRL, N->getDebugLoc(), VT, N0,
   1931                        DAG.getConstant(N1C->getAPIntValue().logBase2(),
   1932                                        getShiftAmountTy(N0.getValueType())));
   1933   // fold (udiv x, (shl c, y)) -> x >>u (log2(c)+y) iff c is power of 2
   1934   if (N1.getOpcode() == ISD::SHL) {
   1935     if (ConstantSDNode *SHC = dyn_cast<ConstantSDNode>(N1.getOperand(0))) {
   1936       if (SHC->getAPIntValue().isPowerOf2()) {
   1937         EVT ADDVT = N1.getOperand(1).getValueType();
   1938         SDValue Add = DAG.getNode(ISD::ADD, N->getDebugLoc(), ADDVT,
   1939                                   N1.getOperand(1),
   1940                                   DAG.getConstant(SHC->getAPIntValue()
   1941                                                                   .logBase2(),
   1942                                                   ADDVT));
   1943         AddToWorkList(Add.getNode());
   1944         return DAG.getNode(ISD::SRL, N->getDebugLoc(), VT, N0, Add);
   1945       }
   1946     }
   1947   }
   1948   // fold (udiv x, c) -> alternate
   1949   if (N1C && !N1C->isNullValue() && !TLI.isIntDivCheap()) {
   1950     SDValue Op = BuildUDIV(N);
   1951     if (Op.getNode()) return Op;
   1952   }
   1953 
   1954   // undef / X -> 0
   1955   if (N0.getOpcode() == ISD::UNDEF)
   1956     return DAG.getConstant(0, VT);
   1957   // X / undef -> undef
   1958   if (N1.getOpcode() == ISD::UNDEF)
   1959     return N1;
   1960 
   1961   return SDValue();
   1962 }
   1963 
   1964 SDValue DAGCombiner::visitSREM(SDNode *N) {
   1965   SDValue N0 = N->getOperand(0);
   1966   SDValue N1 = N->getOperand(1);
   1967   ConstantSDNode *N0C = dyn_cast<ConstantSDNode>(N0);
   1968   ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1);
   1969   EVT VT = N->getValueType(0);
   1970 
   1971   // fold (srem c1, c2) -> c1%c2
   1972   if (N0C && N1C && !N1C->isNullValue())
   1973     return DAG.FoldConstantArithmetic(ISD::SREM, VT, N0C, N1C);
   1974   // If we know the sign bits of both operands are zero, strength reduce to a
   1975   // urem instead.  Handles (X & 0x0FFFFFFF) %s 16 -> X&15
   1976   if (!VT.isVector()) {
   1977     if (DAG.SignBitIsZero(N1) && DAG.SignBitIsZero(N0))
   1978       return DAG.getNode(ISD::UREM, N->getDebugLoc(), VT, N0, N1);
   1979   }
   1980 
   1981   // If X/C can be simplified by the division-by-constant logic, lower
   1982   // X%C to the equivalent of X-X/C*C.
   1983   if (N1C && !N1C->isNullValue()) {
   1984     SDValue Div = DAG.getNode(ISD::SDIV, N->getDebugLoc(), VT, N0, N1);
   1985     AddToWorkList(Div.getNode());
   1986     SDValue OptimizedDiv = combine(Div.getNode());
   1987     if (OptimizedDiv.getNode() && OptimizedDiv.getNode() != Div.getNode()) {
   1988       SDValue Mul = DAG.getNode(ISD::MUL, N->getDebugLoc(), VT,
   1989                                 OptimizedDiv, N1);
   1990       SDValue Sub = DAG.getNode(ISD::SUB, N->getDebugLoc(), VT, N0, Mul);
   1991       AddToWorkList(Mul.getNode());
   1992       return Sub;
   1993     }
   1994   }
   1995 
   1996   // undef % X -> 0
   1997   if (N0.getOpcode() == ISD::UNDEF)
   1998     return DAG.getConstant(0, VT);
   1999   // X % undef -> undef
   2000   if (N1.getOpcode() == ISD::UNDEF)
   2001     return N1;
   2002 
   2003   return SDValue();
   2004 }
   2005 
   2006 SDValue DAGCombiner::visitUREM(SDNode *N) {
   2007   SDValue N0 = N->getOperand(0);
   2008   SDValue N1 = N->getOperand(1);
   2009   ConstantSDNode *N0C = dyn_cast<ConstantSDNode>(N0);
   2010   ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1);
   2011   EVT VT = N->getValueType(0);
   2012 
   2013   // fold (urem c1, c2) -> c1%c2
   2014   if (N0C && N1C && !N1C->isNullValue())
   2015     return DAG.FoldConstantArithmetic(ISD::UREM, VT, N0C, N1C);
   2016   // fold (urem x, pow2) -> (and x, pow2-1)
   2017   if (N1C && !N1C->isNullValue() && N1C->getAPIntValue().isPowerOf2())
   2018     return DAG.getNode(ISD::AND, N->getDebugLoc(), VT, N0,
   2019                        DAG.getConstant(N1C->getAPIntValue()-1,VT));
   2020   // fold (urem x, (shl pow2, y)) -> (and x, (add (shl pow2, y), -1))
   2021   if (N1.getOpcode() == ISD::SHL) {
   2022     if (ConstantSDNode *SHC = dyn_cast<ConstantSDNode>(N1.getOperand(0))) {
   2023       if (SHC->getAPIntValue().isPowerOf2()) {
   2024         SDValue Add =
   2025           DAG.getNode(ISD::ADD, N->getDebugLoc(), VT, N1,
   2026                  DAG.getConstant(APInt::getAllOnesValue(VT.getSizeInBits()),
   2027                                  VT));
   2028         AddToWorkList(Add.getNode());
   2029         return DAG.getNode(ISD::AND, N->getDebugLoc(), VT, N0, Add);
   2030       }
   2031     }
   2032   }
   2033 
   2034   // If X/C can be simplified by the division-by-constant logic, lower
   2035   // X%C to the equivalent of X-X/C*C.
   2036   if (N1C && !N1C->isNullValue()) {
   2037     SDValue Div = DAG.getNode(ISD::UDIV, N->getDebugLoc(), VT, N0, N1);
   2038     AddToWorkList(Div.getNode());
   2039     SDValue OptimizedDiv = combine(Div.getNode());
   2040     if (OptimizedDiv.getNode() && OptimizedDiv.getNode() != Div.getNode()) {
   2041       SDValue Mul = DAG.getNode(ISD::MUL, N->getDebugLoc(), VT,
   2042                                 OptimizedDiv, N1);
   2043       SDValue Sub = DAG.getNode(ISD::SUB, N->getDebugLoc(), VT, N0, Mul);
   2044       AddToWorkList(Mul.getNode());
   2045       return Sub;
   2046     }
   2047   }
   2048 
   2049   // undef % X -> 0
   2050   if (N0.getOpcode() == ISD::UNDEF)
   2051     return DAG.getConstant(0, VT);
   2052   // X % undef -> undef
   2053   if (N1.getOpcode() == ISD::UNDEF)
   2054     return N1;
   2055 
   2056   return SDValue();
   2057 }
   2058 
   2059 SDValue DAGCombiner::visitMULHS(SDNode *N) {
   2060   SDValue N0 = N->getOperand(0);
   2061   SDValue N1 = N->getOperand(1);
   2062   ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1);
   2063   EVT VT = N->getValueType(0);
   2064   DebugLoc DL = N->getDebugLoc();
   2065 
   2066   // fold (mulhs x, 0) -> 0
   2067   if (N1C && N1C->isNullValue())
   2068     return N1;
   2069   // fold (mulhs x, 1) -> (sra x, size(x)-1)
   2070   if (N1C && N1C->getAPIntValue() == 1)
   2071     return DAG.getNode(ISD::SRA, N->getDebugLoc(), N0.getValueType(), N0,
   2072                        DAG.getConstant(N0.getValueType().getSizeInBits() - 1,
   2073                                        getShiftAmountTy(N0.getValueType())));
   2074   // fold (mulhs x, undef) -> 0
   2075   if (N0.getOpcode() == ISD::UNDEF || N1.getOpcode() == ISD::UNDEF)
   2076     return DAG.getConstant(0, VT);
   2077 
   2078   // If the type twice as wide is legal, transform the mulhs to a wider multiply
   2079   // plus a shift.
   2080   if (VT.isSimple() && !VT.isVector()) {
   2081     MVT Simple = VT.getSimpleVT();
   2082     unsigned SimpleSize = Simple.getSizeInBits();
   2083     EVT NewVT = EVT::getIntegerVT(*DAG.getContext(), SimpleSize*2);
   2084     if (TLI.isOperationLegal(ISD::MUL, NewVT)) {
   2085       N0 = DAG.getNode(ISD::SIGN_EXTEND, DL, NewVT, N0);
   2086       N1 = DAG.getNode(ISD::SIGN_EXTEND, DL, NewVT, N1);
   2087       N1 = DAG.getNode(ISD::MUL, DL, NewVT, N0, N1);
   2088       N1 = DAG.getNode(ISD::SRL, DL, NewVT, N1,
   2089             DAG.getConstant(SimpleSize, getShiftAmountTy(N1.getValueType())));
   2090       return DAG.getNode(ISD::TRUNCATE, DL, VT, N1);
   2091     }
   2092   }
   2093 
   2094   return SDValue();
   2095 }
   2096 
   2097 SDValue DAGCombiner::visitMULHU(SDNode *N) {
   2098   SDValue N0 = N->getOperand(0);
   2099   SDValue N1 = N->getOperand(1);
   2100   ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1);
   2101   EVT VT = N->getValueType(0);
   2102   DebugLoc DL = N->getDebugLoc();
   2103 
   2104   // fold (mulhu x, 0) -> 0
   2105   if (N1C && N1C->isNullValue())
   2106     return N1;
   2107   // fold (mulhu x, 1) -> 0
   2108   if (N1C && N1C->getAPIntValue() == 1)
   2109     return DAG.getConstant(0, N0.getValueType());
   2110   // fold (mulhu x, undef) -> 0
   2111   if (N0.getOpcode() == ISD::UNDEF || N1.getOpcode() == ISD::UNDEF)
   2112     return DAG.getConstant(0, VT);
   2113 
   2114   // If the type twice as wide is legal, transform the mulhu to a wider multiply
   2115   // plus a shift.
   2116   if (VT.isSimple() && !VT.isVector()) {
   2117     MVT Simple = VT.getSimpleVT();
   2118     unsigned SimpleSize = Simple.getSizeInBits();
   2119     EVT NewVT = EVT::getIntegerVT(*DAG.getContext(), SimpleSize*2);
   2120     if (TLI.isOperationLegal(ISD::MUL, NewVT)) {
   2121       N0 = DAG.getNode(ISD::ZERO_EXTEND, DL, NewVT, N0);
   2122       N1 = DAG.getNode(ISD::ZERO_EXTEND, DL, NewVT, N1);
   2123       N1 = DAG.getNode(ISD::MUL, DL, NewVT, N0, N1);
   2124       N1 = DAG.getNode(ISD::SRL, DL, NewVT, N1,
   2125             DAG.getConstant(SimpleSize, getShiftAmountTy(N1.getValueType())));
   2126       return DAG.getNode(ISD::TRUNCATE, DL, VT, N1);
   2127     }
   2128   }
   2129 
   2130   return SDValue();
   2131 }
   2132 
   2133 /// SimplifyNodeWithTwoResults - Perform optimizations common to nodes that
   2134 /// compute two values. LoOp and HiOp give the opcodes for the two computations
   2135 /// that are being performed. Return true if a simplification was made.
   2136 ///
   2137 SDValue DAGCombiner::SimplifyNodeWithTwoResults(SDNode *N, unsigned LoOp,
   2138                                                 unsigned HiOp) {
   2139   // If the high half is not needed, just compute the low half.
   2140   bool HiExists = N->hasAnyUseOfValue(1);
   2141   if (!HiExists &&
   2142       (!LegalOperations ||
   2143        TLI.isOperationLegal(LoOp, N->getValueType(0)))) {
   2144     SDValue Res = DAG.getNode(LoOp, N->getDebugLoc(), N->getValueType(0),
   2145                               N->op_begin(), N->getNumOperands());
   2146     return CombineTo(N, Res, Res);
   2147   }
   2148 
   2149   // If the low half is not needed, just compute the high half.
   2150   bool LoExists = N->hasAnyUseOfValue(0);
   2151   if (!LoExists &&
   2152       (!LegalOperations ||
   2153        TLI.isOperationLegal(HiOp, N->getValueType(1)))) {
   2154     SDValue Res = DAG.getNode(HiOp, N->getDebugLoc(), N->getValueType(1),
   2155                               N->op_begin(), N->getNumOperands());
   2156     return CombineTo(N, Res, Res);
   2157   }
   2158 
   2159   // If both halves are used, return as it is.
   2160   if (LoExists && HiExists)
   2161     return SDValue();
   2162 
   2163   // If the two computed results can be simplified separately, separate them.
   2164   if (LoExists) {
   2165     SDValue Lo = DAG.getNode(LoOp, N->getDebugLoc(), N->getValueType(0),
   2166                              N->op_begin(), N->getNumOperands());
   2167     AddToWorkList(Lo.getNode());
   2168     SDValue LoOpt = combine(Lo.getNode());
   2169     if (LoOpt.getNode() && LoOpt.getNode() != Lo.getNode() &&
   2170         (!LegalOperations ||
   2171          TLI.isOperationLegal(LoOpt.getOpcode(), LoOpt.getValueType())))
   2172       return CombineTo(N, LoOpt, LoOpt);
   2173   }
   2174 
   2175   if (HiExists) {
   2176     SDValue Hi = DAG.getNode(HiOp, N->getDebugLoc(), N->getValueType(1),
   2177                              N->op_begin(), N->getNumOperands());
   2178     AddToWorkList(Hi.getNode());
   2179     SDValue HiOpt = combine(Hi.getNode());
   2180     if (HiOpt.getNode() && HiOpt != Hi &&
   2181         (!LegalOperations ||
   2182          TLI.isOperationLegal(HiOpt.getOpcode(), HiOpt.getValueType())))
   2183       return CombineTo(N, HiOpt, HiOpt);
   2184   }
   2185 
   2186   return SDValue();
   2187 }
   2188 
   2189 SDValue DAGCombiner::visitSMUL_LOHI(SDNode *N) {
   2190   SDValue Res = SimplifyNodeWithTwoResults(N, ISD::MUL, ISD::MULHS);
   2191   if (Res.getNode()) return Res;
   2192 
   2193   EVT VT = N->getValueType(0);
   2194   DebugLoc DL = N->getDebugLoc();
   2195 
   2196   // If the type twice as wide is legal, transform the mulhu to a wider multiply
   2197   // plus a shift.
   2198   if (VT.isSimple() && !VT.isVector()) {
   2199     MVT Simple = VT.getSimpleVT();
   2200     unsigned SimpleSize = Simple.getSizeInBits();
   2201     EVT NewVT = EVT::getIntegerVT(*DAG.getContext(), SimpleSize*2);
   2202     if (TLI.isOperationLegal(ISD::MUL, NewVT)) {
   2203       SDValue Lo = DAG.getNode(ISD::SIGN_EXTEND, DL, NewVT, N->getOperand(0));
   2204       SDValue Hi = DAG.getNode(ISD::SIGN_EXTEND, DL, NewVT, N->getOperand(1));
   2205       Lo = DAG.getNode(ISD::MUL, DL, NewVT, Lo, Hi);
   2206       // Compute the high part as N1.
   2207       Hi = DAG.getNode(ISD::SRL, DL, NewVT, Lo,
   2208             DAG.getConstant(SimpleSize, getShiftAmountTy(Lo.getValueType())));
   2209       Hi = DAG.getNode(ISD::TRUNCATE, DL, VT, Hi);
   2210       // Compute the low part as N0.
   2211       Lo = DAG.getNode(ISD::TRUNCATE, DL, VT, Lo);
   2212       return CombineTo(N, Lo, Hi);
   2213     }
   2214   }
   2215 
   2216   return SDValue();
   2217 }
   2218 
   2219 SDValue DAGCombiner::visitUMUL_LOHI(SDNode *N) {
   2220   SDValue Res = SimplifyNodeWithTwoResults(N, ISD::MUL, ISD::MULHU);
   2221   if (Res.getNode()) return Res;
   2222 
   2223   EVT VT = N->getValueType(0);
   2224   DebugLoc DL = N->getDebugLoc();
   2225 
   2226   // If the type twice as wide is legal, transform the mulhu to a wider multiply
   2227   // plus a shift.
   2228   if (VT.isSimple() && !VT.isVector()) {
   2229     MVT Simple = VT.getSimpleVT();
   2230     unsigned SimpleSize = Simple.getSizeInBits();
   2231     EVT NewVT = EVT::getIntegerVT(*DAG.getContext(), SimpleSize*2);
   2232     if (TLI.isOperationLegal(ISD::MUL, NewVT)) {
   2233       SDValue Lo = DAG.getNode(ISD::ZERO_EXTEND, DL, NewVT, N->getOperand(0));
   2234       SDValue Hi = DAG.getNode(ISD::ZERO_EXTEND, DL, NewVT, N->getOperand(1));
   2235       Lo = DAG.getNode(ISD::MUL, DL, NewVT, Lo, Hi);
   2236       // Compute the high part as N1.
   2237       Hi = DAG.getNode(ISD::SRL, DL, NewVT, Lo,
   2238             DAG.getConstant(SimpleSize, getShiftAmountTy(Lo.getValueType())));
   2239       Hi = DAG.getNode(ISD::TRUNCATE, DL, VT, Hi);
   2240       // Compute the low part as N0.
   2241       Lo = DAG.getNode(ISD::TRUNCATE, DL, VT, Lo);
   2242       return CombineTo(N, Lo, Hi);
   2243     }
   2244   }
   2245 
   2246   return SDValue();
   2247 }
   2248 
   2249 SDValue DAGCombiner::visitSMULO(SDNode *N) {
   2250   // (smulo x, 2) -> (saddo x, x)
   2251   if (ConstantSDNode *C2 = dyn_cast<ConstantSDNode>(N->getOperand(1)))
   2252     if (C2->getAPIntValue() == 2)
   2253       return DAG.getNode(ISD::SADDO, N->getDebugLoc(), N->getVTList(),
   2254                          N->getOperand(0), N->getOperand(0));
   2255 
   2256   return SDValue();
   2257 }
   2258 
   2259 SDValue DAGCombiner::visitUMULO(SDNode *N) {
   2260   // (umulo x, 2) -> (uaddo x, x)
   2261   if (ConstantSDNode *C2 = dyn_cast<ConstantSDNode>(N->getOperand(1)))
   2262     if (C2->getAPIntValue() == 2)
   2263       return DAG.getNode(ISD::UADDO, N->getDebugLoc(), N->getVTList(),
   2264                          N->getOperand(0), N->getOperand(0));
   2265 
   2266   return SDValue();
   2267 }
   2268 
   2269 SDValue DAGCombiner::visitSDIVREM(SDNode *N) {
   2270   SDValue Res = SimplifyNodeWithTwoResults(N, ISD::SDIV, ISD::SREM);
   2271   if (Res.getNode()) return Res;
   2272 
   2273   return SDValue();
   2274 }
   2275 
   2276 SDValue DAGCombiner::visitUDIVREM(SDNode *N) {
   2277   SDValue Res = SimplifyNodeWithTwoResults(N, ISD::UDIV, ISD::UREM);
   2278   if (Res.getNode()) return Res;
   2279 
   2280   return SDValue();
   2281 }
   2282 
   2283 /// SimplifyBinOpWithSameOpcodeHands - If this is a binary operator with
   2284 /// two operands of the same opcode, try to simplify it.
   2285 SDValue DAGCombiner::SimplifyBinOpWithSameOpcodeHands(SDNode *N) {
   2286   SDValue N0 = N->getOperand(0), N1 = N->getOperand(1);
   2287   EVT VT = N0.getValueType();
   2288   assert(N0.getOpcode() == N1.getOpcode() && "Bad input!");
   2289 
   2290   // Bail early if none of these transforms apply.
   2291   if (N0.getNode()->getNumOperands() == 0) return SDValue();
   2292 
   2293   // For each of OP in AND/OR/XOR:
   2294   // fold (OP (zext x), (zext y)) -> (zext (OP x, y))
   2295   // fold (OP (sext x), (sext y)) -> (sext (OP x, y))
   2296   // fold (OP (aext x), (aext y)) -> (aext (OP x, y))
   2297   // fold (OP (trunc x), (trunc y)) -> (trunc (OP x, y)) (if trunc isn't free)
   2298   //
   2299   // do not sink logical op inside of a vector extend, since it may combine
   2300   // into a vsetcc.
   2301   EVT Op0VT = N0.getOperand(0).getValueType();
   2302   if ((N0.getOpcode() == ISD::ZERO_EXTEND ||
   2303        N0.getOpcode() == ISD::SIGN_EXTEND ||
   2304        // Avoid infinite looping with PromoteIntBinOp.
   2305        (N0.getOpcode() == ISD::ANY_EXTEND &&
   2306         (!LegalTypes || TLI.isTypeDesirableForOp(N->getOpcode(), Op0VT))) ||
   2307        (N0.getOpcode() == ISD::TRUNCATE &&
   2308         (!TLI.isZExtFree(VT, Op0VT) ||
   2309          !TLI.isTruncateFree(Op0VT, VT)) &&
   2310         TLI.isTypeLegal(Op0VT))) &&
   2311       !VT.isVector() &&
   2312       Op0VT == N1.getOperand(0).getValueType() &&
   2313       (!LegalOperations || TLI.isOperationLegal(N->getOpcode(), Op0VT))) {
   2314     SDValue ORNode = DAG.getNode(N->getOpcode(), N0.getDebugLoc(),
   2315                                  N0.getOperand(0).getValueType(),
   2316                                  N0.getOperand(0), N1.getOperand(0));
   2317     AddToWorkList(ORNode.getNode());
   2318     return DAG.getNode(N0.getOpcode(), N->getDebugLoc(), VT, ORNode);
   2319   }
   2320 
   2321   // For each of OP in SHL/SRL/SRA/AND...
   2322   //   fold (and (OP x, z), (OP y, z)) -> (OP (and x, y), z)
   2323   //   fold (or  (OP x, z), (OP y, z)) -> (OP (or  x, y), z)
   2324   //   fold (xor (OP x, z), (OP y, z)) -> (OP (xor x, y), z)
   2325   if ((N0.getOpcode() == ISD::SHL || N0.getOpcode() == ISD::SRL ||
   2326        N0.getOpcode() == ISD::SRA || N0.getOpcode() == ISD::AND) &&
   2327       N0.getOperand(1) == N1.getOperand(1)) {
   2328     SDValue ORNode = DAG.getNode(N->getOpcode(), N0.getDebugLoc(),
   2329                                  N0.getOperand(0).getValueType(),
   2330                                  N0.getOperand(0), N1.getOperand(0));
   2331     AddToWorkList(ORNode.getNode());
   2332     return DAG.getNode(N0.getOpcode(), N->getDebugLoc(), VT,
   2333                        ORNode, N0.getOperand(1));
   2334   }
   2335 
   2336   // Simplify xor/and/or (bitcast(A), bitcast(B)) -> bitcast(op (A,B))
   2337   // Only perform this optimization after type legalization and before
   2338   // LegalizeVectorOprs. LegalizeVectorOprs promotes vector operations by
   2339   // adding bitcasts. For example (xor v4i32) is promoted to (v2i64), and
   2340   // we don't want to undo this promotion.
   2341   // We also handle SCALAR_TO_VECTOR because xor/or/and operations are cheaper
   2342   // on scalars.
   2343   if ((N0.getOpcode() == ISD::BITCAST || N0.getOpcode() == ISD::SCALAR_TO_VECTOR)
   2344       && Level == AfterLegalizeVectorOps) {
   2345     SDValue In0 = N0.getOperand(0);
   2346     SDValue In1 = N1.getOperand(0);
   2347     EVT In0Ty = In0.getValueType();
   2348     EVT In1Ty = In1.getValueType();
   2349     // If both incoming values are integers, and the original types are the same.
   2350     if (In0Ty.isInteger() && In1Ty.isInteger() && In0Ty == In1Ty) {
   2351       SDValue Op = DAG.getNode(N->getOpcode(), N->getDebugLoc(), In0Ty, In0, In1);
   2352       SDValue BC = DAG.getNode(N0.getOpcode(), N->getDebugLoc(), VT, Op);
   2353       AddToWorkList(Op.getNode());
   2354       return BC;
   2355     }
   2356   }
   2357 
   2358   // Xor/and/or are indifferent to the swizzle operation (shuffle of one value).
   2359   // Simplify xor/and/or (shuff(A), shuff(B)) -> shuff(op (A,B))
   2360   // If both shuffles use the same mask, and both shuffle within a single
   2361   // vector, then it is worthwhile to move the swizzle after the operation.
   2362   // The type-legalizer generates this pattern when loading illegal
   2363   // vector types from memory. In many cases this allows additional shuffle
   2364   // optimizations.
   2365   if (N0.getOpcode() == ISD::VECTOR_SHUFFLE && Level < AfterLegalizeDAG &&
   2366       N0.getOperand(1).getOpcode() == ISD::UNDEF &&
   2367       N1.getOperand(1).getOpcode() == ISD::UNDEF) {
   2368     ShuffleVectorSDNode *SVN0 = cast<ShuffleVectorSDNode>(N0);
   2369     ShuffleVectorSDNode *SVN1 = cast<ShuffleVectorSDNode>(N1);
   2370 
   2371     assert(N0.getOperand(0).getValueType() == N1.getOperand(1).getValueType() &&
   2372            "Inputs to shuffles are not the same type");
   2373 
   2374     unsigned NumElts = VT.getVectorNumElements();
   2375 
   2376     // Check that both shuffles use the same mask. The masks are known to be of
   2377     // the same length because the result vector type is the same.
   2378     bool SameMask = true;
   2379     for (unsigned i = 0; i != NumElts; ++i) {
   2380       int Idx0 = SVN0->getMaskElt(i);
   2381       int Idx1 = SVN1->getMaskElt(i);
   2382       if (Idx0 != Idx1) {
   2383         SameMask = false;
   2384         break;
   2385       }
   2386     }
   2387 
   2388     if (SameMask) {
   2389       SDValue Op = DAG.getNode(N->getOpcode(), N->getDebugLoc(), VT,
   2390                                N0.getOperand(0), N1.getOperand(0));
   2391       AddToWorkList(Op.getNode());
   2392       return DAG.getVectorShuffle(VT, N->getDebugLoc(), Op,
   2393                                   DAG.getUNDEF(VT), &SVN0->getMask()[0]);
   2394     }
   2395   }
   2396 
   2397   return SDValue();
   2398 }
   2399 
   2400 SDValue DAGCombiner::visitAND(SDNode *N) {
   2401   SDValue N0 = N->getOperand(0);
   2402   SDValue N1 = N->getOperand(1);
   2403   SDValue LL, LR, RL, RR, CC0, CC1;
   2404   ConstantSDNode *N0C = dyn_cast<ConstantSDNode>(N0);
   2405   ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1);
   2406   EVT VT = N1.getValueType();
   2407   unsigned BitWidth = VT.getScalarType().getSizeInBits();
   2408 
   2409   // fold vector ops
   2410   if (VT.isVector()) {
   2411     SDValue FoldedVOp = SimplifyVBinOp(N);
   2412     if (FoldedVOp.getNode()) return FoldedVOp;
   2413   }
   2414 
   2415   // fold (and x, undef) -> 0
   2416   if (N0.getOpcode() == ISD::UNDEF || N1.getOpcode() == ISD::UNDEF)
   2417     return DAG.getConstant(0, VT);
   2418   // fold (and c1, c2) -> c1&c2
   2419   if (N0C && N1C)
   2420     return DAG.FoldConstantArithmetic(ISD::AND, VT, N0C, N1C);
   2421   // canonicalize constant to RHS
   2422   if (N0C && !N1C)
   2423     return DAG.getNode(ISD::AND, N->getDebugLoc(), VT, N1, N0);
   2424   // fold (and x, -1) -> x
   2425   if (N1C && N1C->isAllOnesValue())
   2426     return N0;
   2427   // if (and x, c) is known to be zero, return 0
   2428   if (N1C && DAG.MaskedValueIsZero(SDValue(N, 0),
   2429                                    APInt::getAllOnesValue(BitWidth)))
   2430     return DAG.getConstant(0, VT);
   2431   // reassociate and
   2432   SDValue RAND = ReassociateOps(ISD::AND, N->getDebugLoc(), N0, N1);
   2433   if (RAND.getNode() != 0)
   2434     return RAND;
   2435   // fold (and (or x, C), D) -> D if (C & D) == D
   2436   if (N1C && N0.getOpcode() == ISD::OR)
   2437     if (ConstantSDNode *ORI = dyn_cast<ConstantSDNode>(N0.getOperand(1)))
   2438       if ((ORI->getAPIntValue() & N1C->getAPIntValue()) == N1C->getAPIntValue())
   2439         return N1;
   2440   // fold (and (any_ext V), c) -> (zero_ext V) if 'and' only clears top bits.
   2441   if (N1C && N0.getOpcode() == ISD::ANY_EXTEND) {
   2442     SDValue N0Op0 = N0.getOperand(0);
   2443     APInt Mask = ~N1C->getAPIntValue();
   2444     Mask = Mask.trunc(N0Op0.getValueSizeInBits());
   2445     if (DAG.MaskedValueIsZero(N0Op0, Mask)) {
   2446       SDValue Zext = DAG.getNode(ISD::ZERO_EXTEND, N->getDebugLoc(),
   2447                                  N0.getValueType(), N0Op0);
   2448 
   2449       // Replace uses of the AND with uses of the Zero extend node.
   2450       CombineTo(N, Zext);
   2451 
   2452       // We actually want to replace all uses of the any_extend with the
   2453       // zero_extend, to avoid duplicating things.  This will later cause this
   2454       // AND to be folded.
   2455       CombineTo(N0.getNode(), Zext);
   2456       return SDValue(N, 0);   // Return N so it doesn't get rechecked!
   2457     }
   2458   }
   2459   // similarly fold (and (X (load ([non_ext|any_ext|zero_ext] V))), c) ->
   2460   // (X (load ([non_ext|zero_ext] V))) if 'and' only clears top bits which must
   2461   // already be zero by virtue of the width of the base type of the load.
   2462   //
   2463   // the 'X' node here can either be nothing or an extract_vector_elt to catch
   2464   // more cases.
   2465   if ((N0.getOpcode() == ISD::EXTRACT_VECTOR_ELT &&
   2466        N0.getOperand(0).getOpcode() == ISD::LOAD) ||
   2467       N0.getOpcode() == ISD::LOAD) {
   2468     LoadSDNode *Load = cast<LoadSDNode>( (N0.getOpcode() == ISD::LOAD) ?
   2469                                          N0 : N0.getOperand(0) );
   2470 
   2471     // Get the constant (if applicable) the zero'th operand is being ANDed with.
   2472     // This can be a pure constant or a vector splat, in which case we treat the
   2473     // vector as a scalar and use the splat value.
   2474     APInt Constant = APInt::getNullValue(1);
   2475     if (const ConstantSDNode *C = dyn_cast<ConstantSDNode>(N1)) {
   2476       Constant = C->getAPIntValue();
   2477     } else if (BuildVectorSDNode *Vector = dyn_cast<BuildVectorSDNode>(N1)) {
   2478       APInt SplatValue, SplatUndef;
   2479       unsigned SplatBitSize;
   2480       bool HasAnyUndefs;
   2481       bool IsSplat = Vector->isConstantSplat(SplatValue, SplatUndef,
   2482                                              SplatBitSize, HasAnyUndefs);
   2483       if (IsSplat) {
   2484         // Undef bits can contribute to a possible optimisation if set, so
   2485         // set them.
   2486         SplatValue |= SplatUndef;
   2487 
   2488         // The splat value may be something like "0x00FFFFFF", which means 0 for
   2489         // the first vector value and FF for the rest, repeating. We need a mask
   2490         // that will apply equally to all members of the vector, so AND all the
   2491         // lanes of the constant together.
   2492         EVT VT = Vector->getValueType(0);
   2493         unsigned BitWidth = VT.getVectorElementType().getSizeInBits();
   2494         Constant = APInt::getAllOnesValue(BitWidth);
   2495         for (unsigned i = 0, n = VT.getVectorNumElements(); i < n; ++i)
   2496           Constant &= SplatValue.lshr(i*BitWidth).zextOrTrunc(BitWidth);
   2497       }
   2498     }
   2499 
   2500     // If we want to change an EXTLOAD to a ZEXTLOAD, ensure a ZEXTLOAD is
   2501     // actually legal and isn't going to get expanded, else this is a false
   2502     // optimisation.
   2503     bool CanZextLoadProfitably = TLI.isLoadExtLegal(ISD::ZEXTLOAD,
   2504                                                     Load->getMemoryVT());
   2505 
   2506     // Resize the constant to the same size as the original memory access before
   2507     // extension. If it is still the AllOnesValue then this AND is completely
   2508     // unneeded.
   2509     Constant =
   2510       Constant.zextOrTrunc(Load->getMemoryVT().getScalarType().getSizeInBits());
   2511 
   2512     bool B;
   2513     switch (Load->getExtensionType()) {
   2514     default: B = false; break;
   2515     case ISD::EXTLOAD: B = CanZextLoadProfitably; break;
   2516     case ISD::ZEXTLOAD:
   2517     case ISD::NON_EXTLOAD: B = true; break;
   2518     }
   2519 
   2520     if (B && Constant.isAllOnesValue()) {
   2521       // If the load type was an EXTLOAD, convert to ZEXTLOAD in order to
   2522       // preserve semantics once we get rid of the AND.
   2523       SDValue NewLoad(Load, 0);
   2524       if (Load->getExtensionType() == ISD::EXTLOAD) {
   2525         NewLoad = DAG.getLoad(Load->getAddressingMode(), ISD::ZEXTLOAD,
   2526                               Load->getValueType(0), Load->getDebugLoc(),
   2527                               Load->getChain(), Load->getBasePtr(),
   2528                               Load->getOffset(), Load->getMemoryVT(),
   2529                               Load->getMemOperand());
   2530         // Replace uses of the EXTLOAD with the new ZEXTLOAD.
   2531         CombineTo(Load, NewLoad.getValue(0), NewLoad.getValue(1));
   2532       }
   2533 
   2534       // Fold the AND away, taking care not to fold to the old load node if we
   2535       // replaced it.
   2536       CombineTo(N, (N0.getNode() == Load) ? NewLoad : N0);
   2537 
   2538       return SDValue(N, 0); // Return N so it doesn't get rechecked!
   2539     }
   2540   }
   2541   // fold (and (setcc x), (setcc y)) -> (setcc (and x, y))
   2542   if (isSetCCEquivalent(N0, LL, LR, CC0) && isSetCCEquivalent(N1, RL, RR, CC1)){
   2543     ISD::CondCode Op0 = cast<CondCodeSDNode>(CC0)->get();
   2544     ISD::CondCode Op1 = cast<CondCodeSDNode>(CC1)->get();
   2545 
   2546     if (LR == RR && isa<ConstantSDNode>(LR) && Op0 == Op1 &&
   2547         LL.getValueType().isInteger()) {
   2548       // fold (and (seteq X, 0), (seteq Y, 0)) -> (seteq (or X, Y), 0)
   2549       if (cast<ConstantSDNode>(LR)->isNullValue() && Op1 == ISD::SETEQ) {
   2550         SDValue ORNode = DAG.getNode(ISD::OR, N0.getDebugLoc(),
   2551                                      LR.getValueType(), LL, RL);
   2552         AddToWorkList(ORNode.getNode());
   2553         return DAG.getSetCC(N->getDebugLoc(), VT, ORNode, LR, Op1);
   2554       }
   2555       // fold (and (seteq X, -1), (seteq Y, -1)) -> (seteq (and X, Y), -1)
   2556       if (cast<ConstantSDNode>(LR)->isAllOnesValue() && Op1 == ISD::SETEQ) {
   2557         SDValue ANDNode = DAG.getNode(ISD::AND, N0.getDebugLoc(),
   2558                                       LR.getValueType(), LL, RL);
   2559         AddToWorkList(ANDNode.getNode());
   2560         return DAG.getSetCC(N->getDebugLoc(), VT, ANDNode, LR, Op1);
   2561       }
   2562       // fold (and (setgt X,  -1), (setgt Y,  -1)) -> (setgt (or X, Y), -1)
   2563       if (cast<ConstantSDNode>(LR)->isAllOnesValue() && Op1 == ISD::SETGT) {
   2564         SDValue ORNode = DAG.getNode(ISD::OR, N0.getDebugLoc(),
   2565                                      LR.getValueType(), LL, RL);
   2566         AddToWorkList(ORNode.getNode());
   2567         return DAG.getSetCC(N->getDebugLoc(), VT, ORNode, LR, Op1);
   2568       }
   2569     }
   2570     // canonicalize equivalent to ll == rl
   2571     if (LL == RR && LR == RL) {
   2572       Op1 = ISD::getSetCCSwappedOperands(Op1);
   2573       std::swap(RL, RR);
   2574     }
   2575     if (LL == RL && LR == RR) {
   2576       bool isInteger = LL.getValueType().isInteger();
   2577       ISD::CondCode Result = ISD::getSetCCAndOperation(Op0, Op1, isInteger);
   2578       if (Result != ISD::SETCC_INVALID &&
   2579           (!LegalOperations || TLI.isCondCodeLegal(Result, LL.getValueType())))
   2580         return DAG.getSetCC(N->getDebugLoc(), N0.getValueType(),
   2581                             LL, LR, Result);
   2582     }
   2583   }
   2584 
   2585   // Simplify: (and (op x...), (op y...))  -> (op (and x, y))
   2586   if (N0.getOpcode() == N1.getOpcode()) {
   2587     SDValue Tmp = SimplifyBinOpWithSameOpcodeHands(N);
   2588     if (Tmp.getNode()) return Tmp;
   2589   }
   2590 
   2591   // fold (and (sign_extend_inreg x, i16 to i32), 1) -> (and x, 1)
   2592   // fold (and (sra)) -> (and (srl)) when possible.
   2593   if (!VT.isVector() &&
   2594       SimplifyDemandedBits(SDValue(N, 0)))
   2595     return SDValue(N, 0);
   2596 
   2597   // fold (zext_inreg (extload x)) -> (zextload x)
   2598   if (ISD::isEXTLoad(N0.getNode()) && ISD::isUNINDEXEDLoad(N0.getNode())) {
   2599     LoadSDNode *LN0 = cast<LoadSDNode>(N0);
   2600     EVT MemVT = LN0->getMemoryVT();
   2601     // If we zero all the possible extended bits, then we can turn this into
   2602     // a zextload if we are running before legalize or the operation is legal.
   2603     unsigned BitWidth = N1.getValueType().getScalarType().getSizeInBits();
   2604     if (DAG.MaskedValueIsZero(N1, APInt::getHighBitsSet(BitWidth,
   2605                            BitWidth - MemVT.getScalarType().getSizeInBits())) &&
   2606         ((!LegalOperations && !LN0->isVolatile()) ||
   2607          TLI.isLoadExtLegal(ISD::ZEXTLOAD, MemVT))) {
   2608       SDValue ExtLoad = DAG.getExtLoad(ISD::ZEXTLOAD, N0.getDebugLoc(), VT,
   2609                                        LN0->getChain(), LN0->getBasePtr(),
   2610                                        LN0->getPointerInfo(), MemVT,
   2611                                        LN0->isVolatile(), LN0->isNonTemporal(),
   2612                                        LN0->getAlignment());
   2613       AddToWorkList(N);
   2614       CombineTo(N0.getNode(), ExtLoad, ExtLoad.getValue(1));
   2615       return SDValue(N, 0);   // Return N so it doesn't get rechecked!
   2616     }
   2617   }
   2618   // fold (zext_inreg (sextload x)) -> (zextload x) iff load has one use
   2619   if (ISD::isSEXTLoad(N0.getNode()) && ISD::isUNINDEXEDLoad(N0.getNode()) &&
   2620       N0.hasOneUse()) {
   2621     LoadSDNode *LN0 = cast<LoadSDNode>(N0);
   2622     EVT MemVT = LN0->getMemoryVT();
   2623     // If we zero all the possible extended bits, then we can turn this into
   2624     // a zextload if we are running before legalize or the operation is legal.
   2625     unsigned BitWidth = N1.getValueType().getScalarType().getSizeInBits();
   2626     if (DAG.MaskedValueIsZero(N1, APInt::getHighBitsSet(BitWidth,
   2627                            BitWidth - MemVT.getScalarType().getSizeInBits())) &&
   2628         ((!LegalOperations && !LN0->isVolatile()) ||
   2629          TLI.isLoadExtLegal(ISD::ZEXTLOAD, MemVT))) {
   2630       SDValue ExtLoad = DAG.getExtLoad(ISD::ZEXTLOAD, N0.getDebugLoc(), VT,
   2631                                        LN0->getChain(),
   2632                                        LN0->getBasePtr(), LN0->getPointerInfo(),
   2633                                        MemVT,
   2634                                        LN0->isVolatile(), LN0->isNonTemporal(),
   2635                                        LN0->getAlignment());
   2636       AddToWorkList(N);
   2637       CombineTo(N0.getNode(), ExtLoad, ExtLoad.getValue(1));
   2638       return SDValue(N, 0);   // Return N so it doesn't get rechecked!
   2639     }
   2640   }
   2641 
   2642   // fold (and (load x), 255) -> (zextload x, i8)
   2643   // fold (and (extload x, i16), 255) -> (zextload x, i8)
   2644   // fold (and (any_ext (extload x, i16)), 255) -> (zextload x, i8)
   2645   if (N1C && (N0.getOpcode() == ISD::LOAD ||
   2646               (N0.getOpcode() == ISD::ANY_EXTEND &&
   2647                N0.getOperand(0).getOpcode() == ISD::LOAD))) {
   2648     bool HasAnyExt = N0.getOpcode() == ISD::ANY_EXTEND;
   2649     LoadSDNode *LN0 = HasAnyExt
   2650       ? cast<LoadSDNode>(N0.getOperand(0))
   2651       : cast<LoadSDNode>(N0);
   2652     if (LN0->getExtensionType() != ISD::SEXTLOAD &&
   2653         LN0->isUnindexed() && N0.hasOneUse() && LN0->hasOneUse()) {
   2654       uint32_t ActiveBits = N1C->getAPIntValue().getActiveBits();
   2655       if (ActiveBits > 0 && APIntOps::isMask(ActiveBits, N1C->getAPIntValue())){
   2656         EVT ExtVT = EVT::getIntegerVT(*DAG.getContext(), ActiveBits);
   2657         EVT LoadedVT = LN0->getMemoryVT();
   2658 
   2659         if (ExtVT == LoadedVT &&
   2660             (!LegalOperations || TLI.isLoadExtLegal(ISD::ZEXTLOAD, ExtVT))) {
   2661           EVT LoadResultTy = HasAnyExt ? LN0->getValueType(0) : VT;
   2662 
   2663           SDValue NewLoad =
   2664             DAG.getExtLoad(ISD::ZEXTLOAD, LN0->getDebugLoc(), LoadResultTy,
   2665                            LN0->getChain(), LN0->getBasePtr(),
   2666                            LN0->getPointerInfo(),
   2667                            ExtVT, LN0->isVolatile(), LN0->isNonTemporal(),
   2668                            LN0->getAlignment());
   2669           AddToWorkList(N);
   2670           CombineTo(LN0, NewLoad, NewLoad.getValue(1));
   2671           return SDValue(N, 0);   // Return N so it doesn't get rechecked!
   2672         }
   2673 
   2674         // Do not change the width of a volatile load.
   2675         // Do not generate loads of non-round integer types since these can
   2676         // be expensive (and would be wrong if the type is not byte sized).
   2677         if (!LN0->isVolatile() && LoadedVT.bitsGT(ExtVT) && ExtVT.isRound() &&
   2678             (!LegalOperations || TLI.isLoadExtLegal(ISD::ZEXTLOAD, ExtVT))) {
   2679           EVT PtrType = LN0->getOperand(1).getValueType();
   2680 
   2681           unsigned Alignment = LN0->getAlignment();
   2682           SDValue NewPtr = LN0->getBasePtr();
   2683 
   2684           // For big endian targets, we need to add an offset to the pointer
   2685           // to load the correct bytes.  For little endian systems, we merely
   2686           // need to read fewer bytes from the same pointer.
   2687           if (TLI.isBigEndian()) {
   2688             unsigned LVTStoreBytes = LoadedVT.getStoreSize();
   2689             unsigned EVTStoreBytes = ExtVT.getStoreSize();
   2690             unsigned PtrOff = LVTStoreBytes - EVTStoreBytes;
   2691             NewPtr = DAG.getNode(ISD::ADD, LN0->getDebugLoc(), PtrType,
   2692                                  NewPtr, DAG.getConstant(PtrOff, PtrType));
   2693             Alignment = MinAlign(Alignment, PtrOff);
   2694           }
   2695 
   2696           AddToWorkList(NewPtr.getNode());
   2697 
   2698           EVT LoadResultTy = HasAnyExt ? LN0->getValueType(0) : VT;
   2699           SDValue Load =
   2700             DAG.getExtLoad(ISD::ZEXTLOAD, LN0->getDebugLoc(), LoadResultTy,
   2701                            LN0->getChain(), NewPtr,
   2702                            LN0->getPointerInfo(),
   2703                            ExtVT, LN0->isVolatile(), LN0->isNonTemporal(),
   2704                            Alignment);
   2705           AddToWorkList(N);
   2706           CombineTo(LN0, Load, Load.getValue(1));
   2707           return SDValue(N, 0);   // Return N so it doesn't get rechecked!
   2708         }
   2709       }
   2710     }
   2711   }
   2712 
   2713   return SDValue();
   2714 }
   2715 
   2716 /// MatchBSwapHWord - Match (a >> 8) | (a << 8) as (bswap a) >> 16
   2717 ///
   2718 SDValue DAGCombiner::MatchBSwapHWordLow(SDNode *N, SDValue N0, SDValue N1,
   2719                                         bool DemandHighBits) {
   2720   if (!LegalOperations)
   2721     return SDValue();
   2722 
   2723   EVT VT = N->getValueType(0);
   2724   if (VT != MVT::i64 && VT != MVT::i32 && VT != MVT::i16)
   2725     return SDValue();
   2726   if (!TLI.isOperationLegal(ISD::BSWAP, VT))
   2727     return SDValue();
   2728 
   2729   // Recognize (and (shl a, 8), 0xff), (and (srl a, 8), 0xff00)
   2730   bool LookPassAnd0 = false;
   2731   bool LookPassAnd1 = false;
   2732   if (N0.getOpcode() == ISD::AND && N0.getOperand(0).getOpcode() == ISD::SRL)
   2733       std::swap(N0, N1);
   2734   if (N1.getOpcode() == ISD::AND && N1.getOperand(0).getOpcode() == ISD::SHL)
   2735       std::swap(N0, N1);
   2736   if (N0.getOpcode() == ISD::AND) {
   2737     if (!N0.getNode()->hasOneUse())
   2738       return SDValue();
   2739     ConstantSDNode *N01C = dyn_cast<ConstantSDNode>(N0.getOperand(1));
   2740     if (!N01C || N01C->getZExtValue() != 0xFF00)
   2741       return SDValue();
   2742     N0 = N0.getOperand(0);
   2743     LookPassAnd0 = true;
   2744   }
   2745 
   2746   if (N1.getOpcode() == ISD::AND) {
   2747     if (!N1.getNode()->hasOneUse())
   2748       return SDValue();
   2749     ConstantSDNode *N11C = dyn_cast<ConstantSDNode>(N1.getOperand(1));
   2750     if (!N11C || N11C->getZExtValue() != 0xFF)
   2751       return SDValue();
   2752     N1 = N1.getOperand(0);
   2753     LookPassAnd1 = true;
   2754   }
   2755 
   2756   if (N0.getOpcode() == ISD::SRL && N1.getOpcode() == ISD::SHL)
   2757     std::swap(N0, N1);
   2758   if (N0.getOpcode() != ISD::SHL || N1.getOpcode() != ISD::SRL)
   2759     return SDValue();
   2760   if (!N0.getNode()->hasOneUse() ||
   2761       !N1.getNode()->hasOneUse())
   2762     return SDValue();
   2763 
   2764   ConstantSDNode *N01C = dyn_cast<ConstantSDNode>(N0.getOperand(1));
   2765   ConstantSDNode *N11C = dyn_cast<ConstantSDNode>(N1.getOperand(1));
   2766   if (!N01C || !N11C)
   2767     return SDValue();
   2768   if (N01C->getZExtValue() != 8 || N11C->getZExtValue() != 8)
   2769     return SDValue();
   2770 
   2771   // Look for (shl (and a, 0xff), 8), (srl (and a, 0xff00), 8)
   2772   SDValue N00 = N0->getOperand(0);
   2773   if (!LookPassAnd0 && N00.getOpcode() == ISD::AND) {
   2774     if (!N00.getNode()->hasOneUse())
   2775       return SDValue();
   2776     ConstantSDNode *N001C = dyn_cast<ConstantSDNode>(N00.getOperand(1));
   2777     if (!N001C || N001C->getZExtValue() != 0xFF)
   2778       return SDValue();
   2779     N00 = N00.getOperand(0);
   2780     LookPassAnd0 = true;
   2781   }
   2782 
   2783   SDValue N10 = N1->getOperand(0);
   2784   if (!LookPassAnd1 && N10.getOpcode() == ISD::AND) {
   2785     if (!N10.getNode()->hasOneUse())
   2786       return SDValue();
   2787     ConstantSDNode *N101C = dyn_cast<ConstantSDNode>(N10.getOperand(1));
   2788     if (!N101C || N101C->getZExtValue() != 0xFF00)
   2789       return SDValue();
   2790     N10 = N10.getOperand(0);
   2791     LookPassAnd1 = true;
   2792   }
   2793 
   2794   if (N00 != N10)
   2795     return SDValue();
   2796 
   2797   // Make sure everything beyond the low halfword is zero since the SRL 16
   2798   // will clear the top bits.
   2799   unsigned OpSizeInBits = VT.getSizeInBits();
   2800   if (DemandHighBits && OpSizeInBits > 16 &&
   2801       (!LookPassAnd0 || !LookPassAnd1) &&
   2802       !DAG.MaskedValueIsZero(N10, APInt::getHighBitsSet(OpSizeInBits, 16)))
   2803     return SDValue();
   2804 
   2805   SDValue Res = DAG.getNode(ISD::BSWAP, N->getDebugLoc(), VT, N00);
   2806   if (OpSizeInBits > 16)
   2807     Res = DAG.getNode(ISD::SRL, N->getDebugLoc(), VT, Res,
   2808                       DAG.getConstant(OpSizeInBits-16, getShiftAmountTy(VT)));
   2809   return Res;
   2810 }
   2811 
   2812 /// isBSwapHWordElement - Return true if the specified node is an element
   2813 /// that makes up a 32-bit packed halfword byteswap. i.e.
   2814 /// ((x&0xff)<<8)|((x&0xff00)>>8)|((x&0x00ff0000)<<8)|((x&0xff000000)>>8)
   2815 static bool isBSwapHWordElement(SDValue N, SmallVector<SDNode*,4> &Parts) {
   2816   if (!N.getNode()->hasOneUse())
   2817     return false;
   2818 
   2819   unsigned Opc = N.getOpcode();
   2820   if (Opc != ISD::AND && Opc != ISD::SHL && Opc != ISD::SRL)
   2821     return false;
   2822 
   2823   ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N.getOperand(1));
   2824   if (!N1C)
   2825     return false;
   2826 
   2827   unsigned Num;
   2828   switch (N1C->getZExtValue()) {
   2829   default:
   2830     return false;
   2831   case 0xFF:       Num = 0; break;
   2832   case 0xFF00:     Num = 1; break;
   2833   case 0xFF0000:   Num = 2; break;
   2834   case 0xFF000000: Num = 3; break;
   2835   }
   2836 
   2837   // Look for (x & 0xff) << 8 as well as ((x << 8) & 0xff00).
   2838   SDValue N0 = N.getOperand(0);
   2839   if (Opc == ISD::AND) {
   2840     if (Num == 0 || Num == 2) {
   2841       // (x >> 8) & 0xff
   2842       // (x >> 8) & 0xff0000
   2843       if (N0.getOpcode() != ISD::SRL)
   2844         return false;
   2845       ConstantSDNode *C = dyn_cast<ConstantSDNode>(N0.getOperand(1));
   2846       if (!C || C->getZExtValue() != 8)
   2847         return false;
   2848     } else {
   2849       // (x << 8) & 0xff00
   2850       // (x << 8) & 0xff000000
   2851       if (N0.getOpcode() != ISD::SHL)
   2852         return false;
   2853       ConstantSDNode *C = dyn_cast<ConstantSDNode>(N0.getOperand(1));
   2854       if (!C || C->getZExtValue() != 8)
   2855         return false;
   2856     }
   2857   } else if (Opc == ISD::SHL) {
   2858     // (x & 0xff) << 8
   2859     // (x & 0xff0000) << 8
   2860     if (Num != 0 && Num != 2)
   2861       return false;
   2862     ConstantSDNode *C = dyn_cast<ConstantSDNode>(N.getOperand(1));
   2863     if (!C || C->getZExtValue() != 8)
   2864       return false;
   2865   } else { // Opc == ISD::SRL
   2866     // (x & 0xff00) >> 8
   2867     // (x & 0xff000000) >> 8
   2868     if (Num != 1 && Num != 3)
   2869       return false;
   2870     ConstantSDNode *C = dyn_cast<ConstantSDNode>(N.getOperand(1));
   2871     if (!C || C->getZExtValue() != 8)
   2872       return false;
   2873   }
   2874 
   2875   if (Parts[Num])
   2876     return false;
   2877 
   2878   Parts[Num] = N0.getOperand(0).getNode();
   2879   return true;
   2880 }
   2881 
   2882 /// MatchBSwapHWord - Match a 32-bit packed halfword bswap. That is
   2883 /// ((x&0xff)<<8)|((x&0xff00)>>8)|((x&0x00ff0000)<<8)|((x&0xff000000)>>8)
   2884 /// => (rotl (bswap x), 16)
   2885 SDValue DAGCombiner::MatchBSwapHWord(SDNode *N, SDValue N0, SDValue N1) {
   2886   if (!LegalOperations)
   2887     return SDValue();
   2888 
   2889   EVT VT = N->getValueType(0);
   2890   if (VT != MVT::i32)
   2891     return SDValue();
   2892   if (!TLI.isOperationLegal(ISD::BSWAP, VT))
   2893     return SDValue();
   2894 
   2895   SmallVector<SDNode*,4> Parts(4, (SDNode*)0);
   2896   // Look for either
   2897   // (or (or (and), (and)), (or (and), (and)))
   2898   // (or (or (or (and), (and)), (and)), (and))
   2899   if (N0.getOpcode() != ISD::OR)
   2900     return SDValue();
   2901   SDValue N00 = N0.getOperand(0);
   2902   SDValue N01 = N0.getOperand(1);
   2903 
   2904   if (N1.getOpcode() == ISD::OR) {
   2905     // (or (or (and), (and)), (or (and), (and)))
   2906     SDValue N000 = N00.getOperand(0);
   2907     if (!isBSwapHWordElement(N000, Parts))
   2908       return SDValue();
   2909 
   2910     SDValue N001 = N00.getOperand(1);
   2911     if (!isBSwapHWordElement(N001, Parts))
   2912       return SDValue();
   2913     SDValue N010 = N01.getOperand(0);
   2914     if (!isBSwapHWordElement(N010, Parts))
   2915       return SDValue();
   2916     SDValue N011 = N01.getOperand(1);
   2917     if (!isBSwapHWordElement(N011, Parts))
   2918       return SDValue();
   2919   } else {
   2920     // (or (or (or (and), (and)), (and)), (and))
   2921     if (!isBSwapHWordElement(N1, Parts))
   2922       return SDValue();
   2923     if (!isBSwapHWordElement(N01, Parts))
   2924       return SDValue();
   2925     if (N00.getOpcode() != ISD::OR)
   2926       return SDValue();
   2927     SDValue N000 = N00.getOperand(0);
   2928     if (!isBSwapHWordElement(N000, Parts))
   2929       return SDValue();
   2930     SDValue N001 = N00.getOperand(1);
   2931     if (!isBSwapHWordElement(N001, Parts))
   2932       return SDValue();
   2933   }
   2934 
   2935   // Make sure the parts are all coming from the same node.
   2936   if (Parts[0] != Parts[1] || Parts[0] != Parts[2] || Parts[0] != Parts[3])
   2937     return SDValue();
   2938 
   2939   SDValue BSwap = DAG.getNode(ISD::BSWAP, N->getDebugLoc(), VT,
   2940                               SDValue(Parts[0],0));
   2941 
   2942   // Result of the bswap should be rotated by 16. If it's not legal, than
   2943   // do  (x << 16) | (x >> 16).
   2944   SDValue ShAmt = DAG.getConstant(16, getShiftAmountTy(VT));
   2945   if (TLI.isOperationLegalOrCustom(ISD::ROTL, VT))
   2946     return DAG.getNode(ISD::ROTL, N->getDebugLoc(), VT, BSwap, ShAmt);
   2947   else if (TLI.isOperationLegalOrCustom(ISD::ROTR, VT))
   2948     return DAG.getNode(ISD::ROTR, N->getDebugLoc(), VT, BSwap, ShAmt);
   2949   return DAG.getNode(ISD::OR, N->getDebugLoc(), VT,
   2950                      DAG.getNode(ISD::SHL, N->getDebugLoc(), VT, BSwap, ShAmt),
   2951                      DAG.getNode(ISD::SRL, N->getDebugLoc(), VT, BSwap, ShAmt));
   2952 }
   2953 
   2954 SDValue DAGCombiner::visitOR(SDNode *N) {
   2955   SDValue N0 = N->getOperand(0);
   2956   SDValue N1 = N->getOperand(1);
   2957   SDValue LL, LR, RL, RR, CC0, CC1;
   2958   ConstantSDNode *N0C = dyn_cast<ConstantSDNode>(N0);
   2959   ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1);
   2960   EVT VT = N1.getValueType();
   2961 
   2962   // fold vector ops
   2963   if (VT.isVector()) {
   2964     SDValue FoldedVOp = SimplifyVBinOp(N);
   2965     if (FoldedVOp.getNode()) return FoldedVOp;
   2966   }
   2967 
   2968   // fold (or x, undef) -> -1
   2969   if (!LegalOperations &&
   2970       (N0.getOpcode() == ISD::UNDEF || N1.getOpcode() == ISD::UNDEF)) {
   2971     EVT EltVT = VT.isVector() ? VT.getVectorElementType() : VT;
   2972     return DAG.getConstant(APInt::getAllOnesValue(EltVT.getSizeInBits()), VT);
   2973   }
   2974   // fold (or c1, c2) -> c1|c2
   2975   if (N0C && N1C)
   2976     return DAG.FoldConstantArithmetic(ISD::OR, VT, N0C, N1C);
   2977   // canonicalize constant to RHS
   2978   if (N0C && !N1C)
   2979     return DAG.getNode(ISD::OR, N->getDebugLoc(), VT, N1, N0);
   2980   // fold (or x, 0) -> x
   2981   if (N1C && N1C->isNullValue())
   2982     return N0;
   2983   // fold (or x, -1) -> -1
   2984   if (N1C && N1C->isAllOnesValue())
   2985     return N1;
   2986   // fold (or x, c) -> c iff (x & ~c) == 0
   2987   if (N1C && DAG.MaskedValueIsZero(N0, ~N1C->getAPIntValue()))
   2988     return N1;
   2989 
   2990   // Recognize halfword bswaps as (bswap + rotl 16) or (bswap + shl 16)
   2991   SDValue BSwap = MatchBSwapHWord(N, N0, N1);
   2992   if (BSwap.getNode() != 0)
   2993     return BSwap;
   2994   BSwap = MatchBSwapHWordLow(N, N0, N1);
   2995   if (BSwap.getNode() != 0)
   2996     return BSwap;
   2997 
   2998   // reassociate or
   2999   SDValue ROR = ReassociateOps(ISD::OR, N->getDebugLoc(), N0, N1);
   3000   if (ROR.getNode() != 0)
   3001     return ROR;
   3002   // Canonicalize (or (and X, c1), c2) -> (and (or X, c2), c1|c2)
   3003   // iff (c1 & c2) == 0.
   3004   if (N1C && N0.getOpcode() == ISD::AND && N0.getNode()->hasOneUse() &&
   3005              isa<ConstantSDNode>(N0.getOperand(1))) {
   3006     ConstantSDNode *C1 = cast<ConstantSDNode>(N0.getOperand(1));
   3007     if ((C1->getAPIntValue() & N1C->getAPIntValue()) != 0)
   3008       return DAG.getNode(ISD::AND, N->getDebugLoc(), VT,
   3009                          DAG.getNode(ISD::OR, N0.getDebugLoc(), VT,
   3010                                      N0.getOperand(0), N1),
   3011                          DAG.FoldConstantArithmetic(ISD::OR, VT, N1C, C1));
   3012   }
   3013   // fold (or (setcc x), (setcc y)) -> (setcc (or x, y))
   3014   if (isSetCCEquivalent(N0, LL, LR, CC0) && isSetCCEquivalent(N1, RL, RR, CC1)){
   3015     ISD::CondCode Op0 = cast<CondCodeSDNode>(CC0)->get();
   3016     ISD::CondCode Op1 = cast<CondCodeSDNode>(CC1)->get();
   3017 
   3018     if (LR == RR && isa<ConstantSDNode>(LR) && Op0 == Op1 &&
   3019         LL.getValueType().isInteger()) {
   3020       // fold (or (setne X, 0), (setne Y, 0)) -> (setne (or X, Y), 0)
   3021       // fold (or (setlt X, 0), (setlt Y, 0)) -> (setne (or X, Y), 0)
   3022       if (cast<ConstantSDNode>(LR)->isNullValue() &&
   3023           (Op1 == ISD::SETNE || Op1 == ISD::SETLT)) {
   3024         SDValue ORNode = DAG.getNode(ISD::OR, LR.getDebugLoc(),
   3025                                      LR.getValueType(), LL, RL);
   3026         AddToWorkList(ORNode.getNode());
   3027         return DAG.getSetCC(N->getDebugLoc(), VT, ORNode, LR, Op1);
   3028       }
   3029       // fold (or (setne X, -1), (setne Y, -1)) -> (setne (and X, Y), -1)
   3030       // fold (or (setgt X, -1), (setgt Y  -1)) -> (setgt (and X, Y), -1)
   3031       if (cast<ConstantSDNode>(LR)->isAllOnesValue() &&
   3032           (Op1 == ISD::SETNE || Op1 == ISD::SETGT)) {
   3033         SDValue ANDNode = DAG.getNode(ISD::AND, LR.getDebugLoc(),
   3034                                       LR.getValueType(), LL, RL);
   3035         AddToWorkList(ANDNode.getNode());
   3036         return DAG.getSetCC(N->getDebugLoc(), VT, ANDNode, LR, Op1);
   3037       }
   3038     }
   3039     // canonicalize equivalent to ll == rl
   3040     if (LL == RR && LR == RL) {
   3041       Op1 = ISD::getSetCCSwappedOperands(Op1);
   3042       std::swap(RL, RR);
   3043     }
   3044     if (LL == RL && LR == RR) {
   3045       bool isInteger = LL.getValueType().isInteger();
   3046       ISD::CondCode Result = ISD::getSetCCOrOperation(Op0, Op1, isInteger);
   3047       if (Result != ISD::SETCC_INVALID &&
   3048           (!LegalOperations || TLI.isCondCodeLegal(Result, LL.getValueType())))
   3049         return DAG.getSetCC(N->getDebugLoc(), N0.getValueType(),
   3050                             LL, LR, Result);
   3051     }
   3052   }
   3053 
   3054   // Simplify: (or (op x...), (op y...))  -> (op (or x, y))
   3055   if (N0.getOpcode() == N1.getOpcode()) {
   3056     SDValue Tmp = SimplifyBinOpWithSameOpcodeHands(N);
   3057     if (Tmp.getNode()) return Tmp;
   3058   }
   3059 
   3060   // (or (and X, C1), (and Y, C2))  -> (and (or X, Y), C3) if possible.
   3061   if (N0.getOpcode() == ISD::AND &&
   3062       N1.getOpcode() == ISD::AND &&
   3063       N0.getOperand(1).getOpcode() == ISD::Constant &&
   3064       N1.getOperand(1).getOpcode() == ISD::Constant &&
   3065       // Don't increase # computations.
   3066       (N0.getNode()->hasOneUse() || N1.getNode()->hasOneUse())) {
   3067     // We can only do this xform if we know that bits from X that are set in C2
   3068     // but not in C1 are already zero.  Likewise for Y.
   3069     const APInt &LHSMask =
   3070       cast<ConstantSDNode>(N0.getOperand(1))->getAPIntValue();
   3071     const APInt &RHSMask =
   3072       cast<ConstantSDNode>(N1.getOperand(1))->getAPIntValue();
   3073 
   3074     if (DAG.MaskedValueIsZero(N0.getOperand(0), RHSMask&~LHSMask) &&
   3075         DAG.MaskedValueIsZero(N1.getOperand(0), LHSMask&~RHSMask)) {
   3076       SDValue X = DAG.getNode(ISD::OR, N0.getDebugLoc(), VT,
   3077                               N0.getOperand(0), N1.getOperand(0));
   3078       return DAG.getNode(ISD::AND, N->getDebugLoc(), VT, X,
   3079                          DAG.getConstant(LHSMask | RHSMask, VT));
   3080     }
   3081   }
   3082 
   3083   // See if this is some rotate idiom.
   3084   if (SDNode *Rot = MatchRotate(N0, N1, N->getDebugLoc()))
   3085     return SDValue(Rot, 0);
   3086 
   3087   // Simplify the operands using demanded-bits information.
   3088   if (!VT.isVector() &&
   3089       SimplifyDemandedBits(SDValue(N, 0)))
   3090     return SDValue(N, 0);
   3091 
   3092   return SDValue();
   3093 }
   3094 
   3095 /// MatchRotateHalf - Match "(X shl/srl V1) & V2" where V2 may not be present.
   3096 static bool MatchRotateHalf(SDValue Op, SDValue &Shift, SDValue &Mask) {
   3097   if (Op.getOpcode() == ISD::AND) {
   3098     if (isa<ConstantSDNode>(Op.getOperand(1))) {
   3099       Mask = Op.getOperand(1);
   3100       Op = Op.getOperand(0);
   3101     } else {
   3102       return false;
   3103     }
   3104   }
   3105 
   3106   if (Op.getOpcode() == ISD::SRL || Op.getOpcode() == ISD::SHL) {
   3107     Shift = Op;
   3108     return true;
   3109   }
   3110 
   3111   return false;
   3112 }
   3113 
   3114 // MatchRotate - Handle an 'or' of two operands.  If this is one of the many
   3115 // idioms for rotate, and if the target supports rotation instructions, generate
   3116 // a rot[lr].
   3117 SDNode *DAGCombiner::MatchRotate(SDValue LHS, SDValue RHS, DebugLoc DL) {
   3118   // Must be a legal type.  Expanded 'n promoted things won't work with rotates.
   3119   EVT VT = LHS.getValueType();
   3120   if (!TLI.isTypeLegal(VT)) return 0;
   3121 
   3122   // The target must have at least one rotate flavor.
   3123   bool HasROTL = TLI.isOperationLegalOrCustom(ISD::ROTL, VT);
   3124   bool HasROTR = TLI.isOperationLegalOrCustom(ISD::ROTR, VT);
   3125   if (!HasROTL && !HasROTR) return 0;
   3126 
   3127   // Match "(X shl/srl V1) & V2" where V2 may not be present.
   3128   SDValue LHSShift;   // The shift.
   3129   SDValue LHSMask;    // AND value if any.
   3130   if (!MatchRotateHalf(LHS, LHSShift, LHSMask))
   3131     return 0; // Not part of a rotate.
   3132 
   3133   SDValue RHSShift;   // The shift.
   3134   SDValue RHSMask;    // AND value if any.
   3135   if (!MatchRotateHalf(RHS, RHSShift, RHSMask))
   3136     return 0; // Not part of a rotate.
   3137 
   3138   if (LHSShift.getOperand(0) != RHSShift.getOperand(0))
   3139     return 0;   // Not shifting the same value.
   3140 
   3141   if (LHSShift.getOpcode() == RHSShift.getOpcode())
   3142     return 0;   // Shifts must disagree.
   3143 
   3144   // Canonicalize shl to left side in a shl/srl pair.
   3145   if (RHSShift.getOpcode() == ISD::SHL) {
   3146     std::swap(LHS, RHS);
   3147     std::swap(LHSShift, RHSShift);
   3148     std::swap(LHSMask , RHSMask );
   3149   }
   3150 
   3151   unsigned OpSizeInBits = VT.getSizeInBits();
   3152   SDValue LHSShiftArg = LHSShift.getOperand(0);
   3153   SDValue LHSShiftAmt = LHSShift.getOperand(1);
   3154   SDValue RHSShiftAmt = RHSShift.getOperand(1);
   3155 
   3156   // fold (or (shl x, C1), (srl x, C2)) -> (rotl x, C1)
   3157   // fold (or (shl x, C1), (srl x, C2)) -> (rotr x, C2)
   3158   if (LHSShiftAmt.getOpcode() == ISD::Constant &&
   3159       RHSShiftAmt.getOpcode() == ISD::Constant) {
   3160     uint64_t LShVal = cast<ConstantSDNode>(LHSShiftAmt)->getZExtValue();
   3161     uint64_t RShVal = cast<ConstantSDNode>(RHSShiftAmt)->getZExtValue();
   3162     if ((LShVal + RShVal) != OpSizeInBits)
   3163       return 0;
   3164 
   3165     SDValue Rot;
   3166     if (HasROTL)
   3167       Rot = DAG.getNode(ISD::ROTL, DL, VT, LHSShiftArg, LHSShiftAmt);
   3168     else
   3169       Rot = DAG.getNode(ISD::ROTR, DL, VT, LHSShiftArg, RHSShiftAmt);
   3170 
   3171     // If there is an AND of either shifted operand, apply it to the result.
   3172     if (LHSMask.getNode() || RHSMask.getNode()) {
   3173       APInt Mask = APInt::getAllOnesValue(OpSizeInBits);
   3174 
   3175       if (LHSMask.getNode()) {
   3176         APInt RHSBits = APInt::getLowBitsSet(OpSizeInBits, LShVal);
   3177         Mask &= cast<ConstantSDNode>(LHSMask)->getAPIntValue() | RHSBits;
   3178       }
   3179       if (RHSMask.getNode()) {
   3180         APInt LHSBits = APInt::getHighBitsSet(OpSizeInBits, RShVal);
   3181         Mask &= cast<ConstantSDNode>(RHSMask)->getAPIntValue() | LHSBits;
   3182       }
   3183 
   3184       Rot = DAG.getNode(ISD::AND, DL, VT, Rot, DAG.getConstant(Mask, VT));
   3185     }
   3186 
   3187     return Rot.getNode();
   3188   }
   3189 
   3190   // If there is a mask here, and we have a variable shift, we can't be sure
   3191   // that we're masking out the right stuff.
   3192   if (LHSMask.getNode() || RHSMask.getNode())
   3193     return 0;
   3194 
   3195   // fold (or (shl x, y), (srl x, (sub 32, y))) -> (rotl x, y)
   3196   // fold (or (shl x, y), (srl x, (sub 32, y))) -> (rotr x, (sub 32, y))
   3197   if (RHSShiftAmt.getOpcode() == ISD::SUB &&
   3198       LHSShiftAmt == RHSShiftAmt.getOperand(1)) {
   3199     if (ConstantSDNode *SUBC =
   3200           dyn_cast<ConstantSDNode>(RHSShiftAmt.getOperand(0))) {
   3201       if (SUBC->getAPIntValue() == OpSizeInBits) {
   3202         if (HasROTL)
   3203           return DAG.getNode(ISD::ROTL, DL, VT,
   3204                              LHSShiftArg, LHSShiftAmt).getNode();
   3205         else
   3206           return DAG.getNode(ISD::ROTR, DL, VT,
   3207                              LHSShiftArg, RHSShiftAmt).getNode();
   3208       }
   3209     }
   3210   }
   3211 
   3212   // fold (or (shl x, (sub 32, y)), (srl x, r)) -> (rotr x, y)
   3213   // fold (or (shl x, (sub 32, y)), (srl x, r)) -> (rotl x, (sub 32, y))
   3214   if (LHSShiftAmt.getOpcode() == ISD::SUB &&
   3215       RHSShiftAmt == LHSShiftAmt.getOperand(1)) {
   3216     if (ConstantSDNode *SUBC =
   3217           dyn_cast<ConstantSDNode>(LHSShiftAmt.getOperand(0))) {
   3218       if (SUBC->getAPIntValue() == OpSizeInBits) {
   3219         if (HasROTR)
   3220           return DAG.getNode(ISD::ROTR, DL, VT,
   3221                              LHSShiftArg, RHSShiftAmt).getNode();
   3222         else
   3223           return DAG.getNode(ISD::ROTL, DL, VT,
   3224                              LHSShiftArg, LHSShiftAmt).getNode();
   3225       }
   3226     }
   3227   }
   3228 
   3229   // Look for sign/zext/any-extended or truncate cases:
   3230   if ((LHSShiftAmt.getOpcode() == ISD::SIGN_EXTEND
   3231        || LHSShiftAmt.getOpcode() == ISD::ZERO_EXTEND
   3232        || LHSShiftAmt.getOpcode() == ISD::ANY_EXTEND
   3233        || LHSShiftAmt.getOpcode() == ISD::TRUNCATE) &&
   3234       (RHSShiftAmt.getOpcode() == ISD::SIGN_EXTEND
   3235        || RHSShiftAmt.getOpcode() == ISD::ZERO_EXTEND
   3236        || RHSShiftAmt.getOpcode() == ISD::ANY_EXTEND
   3237        || RHSShiftAmt.getOpcode() == ISD::TRUNCATE)) {
   3238     SDValue LExtOp0 = LHSShiftAmt.getOperand(0);
   3239     SDValue RExtOp0 = RHSShiftAmt.getOperand(0);
   3240     if (RExtOp0.getOpcode() == ISD::SUB &&
   3241         RExtOp0.getOperand(1) == LExtOp0) {
   3242       // fold (or (shl x, (*ext y)), (srl x, (*ext (sub 32, y)))) ->
   3243       //   (rotl x, y)
   3244       // fold (or (shl x, (*ext y)), (srl x, (*ext (sub 32, y)))) ->
   3245       //   (rotr x, (sub 32, y))
   3246       if (ConstantSDNode *SUBC =
   3247             dyn_cast<ConstantSDNode>(RExtOp0.getOperand(0))) {
   3248         if (SUBC->getAPIntValue() == OpSizeInBits) {
   3249           return DAG.getNode(HasROTL ? ISD::ROTL : ISD::ROTR, DL, VT,
   3250                              LHSShiftArg,
   3251                              HasROTL ? LHSShiftAmt : RHSShiftAmt).getNode();
   3252         }
   3253       }
   3254     } else if (LExtOp0.getOpcode() == ISD::SUB &&
   3255                RExtOp0 == LExtOp0.getOperand(1)) {
   3256       // fold (or (shl x, (*ext (sub 32, y))), (srl x, (*ext y))) ->
   3257       //   (rotr x, y)
   3258       // fold (or (shl x, (*ext (sub 32, y))), (srl x, (*ext y))) ->
   3259       //   (rotl x, (sub 32, y))
   3260       if (ConstantSDNode *SUBC =
   3261             dyn_cast<ConstantSDNode>(LExtOp0.getOperand(0))) {
   3262         if (SUBC->getAPIntValue() == OpSizeInBits) {
   3263           return DAG.getNode(HasROTR ? ISD::ROTR : ISD::ROTL, DL, VT,
   3264                              LHSShiftArg,
   3265                              HasROTR ? RHSShiftAmt : LHSShiftAmt).getNode();
   3266         }
   3267       }
   3268     }
   3269   }
   3270 
   3271   return 0;
   3272 }
   3273 
   3274 SDValue DAGCombiner::visitXOR(SDNode *N) {
   3275   SDValue N0 = N->getOperand(0);
   3276   SDValue N1 = N->getOperand(1);
   3277   SDValue LHS, RHS, CC;
   3278   ConstantSDNode *N0C = dyn_cast<ConstantSDNode>(N0);
   3279   ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1);
   3280   EVT VT = N0.getValueType();
   3281 
   3282   // fold vector ops
   3283   if (VT.isVector()) {
   3284     SDValue FoldedVOp = SimplifyVBinOp(N);
   3285     if (FoldedVOp.getNode()) return FoldedVOp;
   3286   }
   3287 
   3288   // fold (xor undef, undef) -> 0. This is a common idiom (misuse).
   3289   if (N0.getOpcode() == ISD::UNDEF && N1.getOpcode() == ISD::UNDEF)
   3290     return DAG.getConstant(0, VT);
   3291   // fold (xor x, undef) -> undef
   3292   if (N0.getOpcode() == ISD::UNDEF)
   3293     return N0;
   3294   if (N1.getOpcode() == ISD::UNDEF)
   3295     return N1;
   3296   // fold (xor c1, c2) -> c1^c2
   3297   if (N0C && N1C)
   3298     return DAG.FoldConstantArithmetic(ISD::XOR, VT, N0C, N1C);
   3299   // canonicalize constant to RHS
   3300   if (N0C && !N1C)
   3301     return DAG.getNode(ISD::XOR, N->getDebugLoc(), VT, N1, N0);
   3302   // fold (xor x, 0) -> x
   3303   if (N1C && N1C->isNullValue())
   3304     return N0;
   3305   // reassociate xor
   3306   SDValue RXOR = ReassociateOps(ISD::XOR, N->getDebugLoc(), N0, N1);
   3307   if (RXOR.getNode() != 0)
   3308     return RXOR;
   3309 
   3310   // fold !(x cc y) -> (x !cc y)
   3311   if (N1C && N1C->getAPIntValue() == 1 && isSetCCEquivalent(N0, LHS, RHS, CC)) {
   3312     bool isInt = LHS.getValueType().isInteger();
   3313     ISD::CondCode NotCC = ISD::getSetCCInverse(cast<CondCodeSDNode>(CC)->get(),
   3314                                                isInt);
   3315 
   3316     if (!LegalOperations || TLI.isCondCodeLegal(NotCC, LHS.getValueType())) {
   3317       switch (N0.getOpcode()) {
   3318       default:
   3319         llvm_unreachable("Unhandled SetCC Equivalent!");
   3320       case ISD::SETCC:
   3321         return DAG.getSetCC(N->getDebugLoc(), VT, LHS, RHS, NotCC);
   3322       case ISD::SELECT_CC:
   3323         return DAG.getSelectCC(N->getDebugLoc(), LHS, RHS, N0.getOperand(2),
   3324                                N0.getOperand(3), NotCC);
   3325       }
   3326     }
   3327   }
   3328 
   3329   // fold (not (zext (setcc x, y))) -> (zext (not (setcc x, y)))
   3330   if (N1C && N1C->getAPIntValue() == 1 && N0.getOpcode() == ISD::ZERO_EXTEND &&
   3331       N0.getNode()->hasOneUse() &&
   3332       isSetCCEquivalent(N0.getOperand(0), LHS, RHS, CC)){
   3333     SDValue V = N0.getOperand(0);
   3334     V = DAG.getNode(ISD::XOR, N0.getDebugLoc(), V.getValueType(), V,
   3335                     DAG.getConstant(1, V.getValueType()));
   3336     AddToWorkList(V.getNode());
   3337     return DAG.getNode(ISD::ZERO_EXTEND, N->getDebugLoc(), VT, V);
   3338   }
   3339 
   3340   // fold (not (or x, y)) -> (and (not x), (not y)) iff x or y are setcc
   3341   if (N1C && N1C->getAPIntValue() == 1 && VT == MVT::i1 &&
   3342       (N0.getOpcode() == ISD::OR || N0.getOpcode() == ISD::AND)) {
   3343     SDValue LHS = N0.getOperand(0), RHS = N0.getOperand(1);
   3344     if (isOneUseSetCC(RHS) || isOneUseSetCC(LHS)) {
   3345       unsigned NewOpcode = N0.getOpcode() == ISD::AND ? ISD::OR : ISD::AND;
   3346       LHS = DAG.getNode(ISD::XOR, LHS.getDebugLoc(), VT, LHS, N1); // LHS = ~LHS
   3347       RHS = DAG.getNode(ISD::XOR, RHS.getDebugLoc(), VT, RHS, N1); // RHS = ~RHS
   3348       AddToWorkList(LHS.getNode()); AddToWorkList(RHS.getNode());
   3349       return DAG.getNode(NewOpcode, N->getDebugLoc(), VT, LHS, RHS);
   3350     }
   3351   }
   3352   // fold (not (or x, y)) -> (and (not x), (not y)) iff x or y are constants
   3353   if (N1C && N1C->isAllOnesValue() &&
   3354       (N0.getOpcode() == ISD::OR || N0.getOpcode() == ISD::AND)) {
   3355     SDValue LHS = N0.getOperand(0), RHS = N0.getOperand(1);
   3356     if (isa<ConstantSDNode>(RHS) || isa<ConstantSDNode>(LHS)) {
   3357       unsigned NewOpcode = N0.getOpcode() == ISD::AND ? ISD::OR : ISD::AND;
   3358       LHS = DAG.getNode(ISD::XOR, LHS.getDebugLoc(), VT, LHS, N1); // LHS = ~LHS
   3359       RHS = DAG.getNode(ISD::XOR, RHS.getDebugLoc(), VT, RHS, N1); // RHS = ~RHS
   3360       AddToWorkList(LHS.getNode()); AddToWorkList(RHS.getNode());
   3361       return DAG.getNode(NewOpcode, N->getDebugLoc(), VT, LHS, RHS);
   3362     }
   3363   }
   3364   // fold (xor (xor x, c1), c2) -> (xor x, (xor c1, c2))
   3365   if (N1C && N0.getOpcode() == ISD::XOR) {
   3366     ConstantSDNode *N00C = dyn_cast<ConstantSDNode>(N0.getOperand(0));
   3367     ConstantSDNode *N01C = dyn_cast<ConstantSDNode>(N0.getOperand(1));
   3368     if (N00C)
   3369       return DAG.getNode(ISD::XOR, N->getDebugLoc(), VT, N0.getOperand(1),
   3370                          DAG.getConstant(N1C->getAPIntValue() ^
   3371                                          N00C->getAPIntValue(), VT));
   3372     if (N01C)
   3373       return DAG.getNode(ISD::XOR, N->getDebugLoc(), VT, N0.getOperand(0),
   3374                          DAG.getConstant(N1C->getAPIntValue() ^
   3375                                          N01C->getAPIntValue(), VT));
   3376   }
   3377   // fold (xor x, x) -> 0
   3378   if (N0 == N1)
   3379     return tryFoldToZero(N->getDebugLoc(), TLI, VT, DAG, LegalOperations);
   3380 
   3381   // Simplify: xor (op x...), (op y...)  -> (op (xor x, y))
   3382   if (N0.getOpcode() == N1.getOpcode()) {
   3383     SDValue Tmp = SimplifyBinOpWithSameOpcodeHands(N);
   3384     if (Tmp.getNode()) return Tmp;
   3385   }
   3386 
   3387   // Simplify the expression using non-local knowledge.
   3388   if (!VT.isVector() &&
   3389       SimplifyDemandedBits(SDValue(N, 0)))
   3390     return SDValue(N, 0);
   3391 
   3392   return SDValue();
   3393 }
   3394 
   3395 /// visitShiftByConstant - Handle transforms common to the three shifts, when
   3396 /// the shift amount is a constant.
   3397 SDValue DAGCombiner::visitShiftByConstant(SDNode *N, unsigned Amt) {
   3398   SDNode *LHS = N->getOperand(0).getNode();
   3399   if (!LHS->hasOneUse()) return SDValue();
   3400 
   3401   // We want to pull some binops through shifts, so that we have (and (shift))
   3402   // instead of (shift (and)), likewise for add, or, xor, etc.  This sort of
   3403   // thing happens with address calculations, so it's important to canonicalize
   3404   // it.
   3405   bool HighBitSet = false;  // Can we transform this if the high bit is set?
   3406 
   3407   switch (LHS->getOpcode()) {
   3408   default: return SDValue();
   3409   case ISD::OR:
   3410   case ISD::XOR:
   3411     HighBitSet = false; // We can only transform sra if the high bit is clear.
   3412     break;
   3413   case ISD::AND:
   3414     HighBitSet = true;  // We can only transform sra if the high bit is set.
   3415     break;
   3416   case ISD::ADD:
   3417     if (N->getOpcode() != ISD::SHL)
   3418       return SDValue(); // only shl(add) not sr[al](add).
   3419     HighBitSet = false; // We can only transform sra if the high bit is clear.
   3420     break;
   3421   }
   3422 
   3423   // We require the RHS of the binop to be a constant as well.
   3424   ConstantSDNode *BinOpCst = dyn_cast<ConstantSDNode>(LHS->getOperand(1));
   3425   if (!BinOpCst) return SDValue();
   3426 
   3427   // FIXME: disable this unless the input to the binop is a shift by a constant.
   3428   // If it is not a shift, it pessimizes some common cases like:
   3429   //
   3430   //    void foo(int *X, int i) { X[i & 1235] = 1; }
   3431   //    int bar(int *X, int i) { return X[i & 255]; }
   3432   SDNode *BinOpLHSVal = LHS->getOperand(0).getNode();
   3433   if ((BinOpLHSVal->getOpcode() != ISD::SHL &&
   3434        BinOpLHSVal->getOpcode() != ISD::SRA &&
   3435        BinOpLHSVal->getOpcode() != ISD::SRL) ||
   3436       !isa<ConstantSDNode>(BinOpLHSVal->getOperand(1)))
   3437     return SDValue();
   3438 
   3439   EVT VT = N->getValueType(0);
   3440 
   3441   // If this is a signed shift right, and the high bit is modified by the
   3442   // logical operation, do not perform the transformation. The highBitSet
   3443   // boolean indicates the value of the high bit of the constant which would
   3444   // cause it to be modified for this operation.
   3445   if (N->getOpcode() == ISD::SRA) {
   3446     bool BinOpRHSSignSet = BinOpCst->getAPIntValue().isNegative();
   3447     if (BinOpRHSSignSet != HighBitSet)
   3448       return SDValue();
   3449   }
   3450 
   3451   // Fold the constants, shifting the binop RHS by the shift amount.
   3452   SDValue NewRHS = DAG.getNode(N->getOpcode(), LHS->getOperand(1).getDebugLoc(),
   3453                                N->getValueType(0),
   3454                                LHS->getOperand(1), N->getOperand(1));
   3455 
   3456   // Create the new shift.
   3457   SDValue NewShift = DAG.getNode(N->getOpcode(),
   3458                                  LHS->getOperand(0).getDebugLoc(),
   3459                                  VT, LHS->getOperand(0), N->getOperand(1));
   3460 
   3461   // Create the new binop.
   3462   return DAG.getNode(LHS->getOpcode(), N->getDebugLoc(), VT, NewShift, NewRHS);
   3463 }
   3464 
   3465 SDValue DAGCombiner::visitSHL(SDNode *N) {
   3466   SDValue N0 = N->getOperand(0);
   3467   SDValue N1 = N->getOperand(1);
   3468   ConstantSDNode *N0C = dyn_cast<ConstantSDNode>(N0);
   3469   ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1);
   3470   EVT VT = N0.getValueType();
   3471   unsigned OpSizeInBits = VT.getScalarType().getSizeInBits();
   3472 
   3473   // fold (shl c1, c2) -> c1<<c2
   3474   if (N0C && N1C)
   3475     return DAG.FoldConstantArithmetic(ISD::SHL, VT, N0C, N1C);
   3476   // fold (shl 0, x) -> 0
   3477   if (N0C && N0C->isNullValue())
   3478     return N0;
   3479   // fold (shl x, c >= size(x)) -> undef
   3480   if (N1C && N1C->getZExtValue() >= OpSizeInBits)
   3481     return DAG.getUNDEF(VT);
   3482   // fold (shl x, 0) -> x
   3483   if (N1C && N1C->isNullValue())
   3484     return N0;
   3485   // fold (shl undef, x) -> 0
   3486   if (N0.getOpcode() == ISD::UNDEF)
   3487     return DAG.getConstant(0, VT);
   3488   // if (shl x, c) is known to be zero, return 0
   3489   if (DAG.MaskedValueIsZero(SDValue(N, 0),
   3490                             APInt::getAllOnesValue(OpSizeInBits)))
   3491     return DAG.getConstant(0, VT);
   3492   // fold (shl x, (trunc (and y, c))) -> (shl x, (and (trunc y), (trunc c))).
   3493   if (N1.getOpcode() == ISD::TRUNCATE &&
   3494       N1.getOperand(0).getOpcode() == ISD::AND &&
   3495       N1.hasOneUse() && N1.getOperand(0).hasOneUse()) {
   3496     SDValue N101 = N1.getOperand(0).getOperand(1);
   3497     if (ConstantSDNode *N101C = dyn_cast<ConstantSDNode>(N101)) {
   3498       EVT TruncVT = N1.getValueType();
   3499       SDValue N100 = N1.getOperand(0).getOperand(0);
   3500       APInt TruncC = N101C->getAPIntValue();
   3501       TruncC = TruncC.trunc(TruncVT.getSizeInBits());
   3502       return DAG.getNode(ISD::SHL, N->getDebugLoc(), VT, N0,
   3503                          DAG.getNode(ISD::AND, N->getDebugLoc(), TruncVT,
   3504                                      DAG.getNode(ISD::TRUNCATE,
   3505                                                  N->getDebugLoc(),
   3506                                                  TruncVT, N100),
   3507                                      DAG.getConstant(TruncC, TruncVT)));
   3508     }
   3509   }
   3510 
   3511   if (N1C && SimplifyDemandedBits(SDValue(N, 0)))
   3512     return SDValue(N, 0);
   3513 
   3514   // fold (shl (shl x, c1), c2) -> 0 or (shl x, (add c1, c2))
   3515   if (N1C && N0.getOpcode() == ISD::SHL &&
   3516       N0.getOperand(1).getOpcode() == ISD::Constant) {
   3517     uint64_t c1 = cast<ConstantSDNode>(N0.getOperand(1))->getZExtValue();
   3518     uint64_t c2 = N1C->getZExtValue();
   3519     if (c1 + c2 >= OpSizeInBits)
   3520       return DAG.getConstant(0, VT);
   3521     return DAG.getNode(ISD::SHL, N->getDebugLoc(), VT, N0.getOperand(0),
   3522                        DAG.getConstant(c1 + c2, N1.getValueType()));
   3523   }
   3524 
   3525   // fold (shl (ext (shl x, c1)), c2) -> (ext (shl x, (add c1, c2)))
   3526   // For this to be valid, the second form must not preserve any of the bits
   3527   // that are shifted out by the inner shift in the first form.  This means
   3528   // the outer shift size must be >= the number of bits added by the ext.
   3529   // As a corollary, we don't care what kind of ext it is.
   3530   if (N1C && (N0.getOpcode() == ISD::ZERO_EXTEND ||
   3531               N0.getOpcode() == ISD::ANY_EXTEND ||
   3532               N0.getOpcode() == ISD::SIGN_EXTEND) &&
   3533       N0.getOperand(0).getOpcode() == ISD::SHL &&
   3534       isa<ConstantSDNode>(N0.getOperand(0)->getOperand(1))) {
   3535     uint64_t c1 =
   3536       cast<ConstantSDNode>(N0.getOperand(0)->getOperand(1))->getZExtValue();
   3537     uint64_t c2 = N1C->getZExtValue();
   3538     EVT InnerShiftVT = N0.getOperand(0).getValueType();
   3539     uint64_t InnerShiftSize = InnerShiftVT.getScalarType().getSizeInBits();
   3540     if (c2 >= OpSizeInBits - InnerShiftSize) {
   3541       if (c1 + c2 >= OpSizeInBits)
   3542         return DAG.getConstant(0, VT);
   3543       return DAG.getNode(ISD::SHL, N0->getDebugLoc(), VT,
   3544                          DAG.getNode(N0.getOpcode(), N0->getDebugLoc(), VT,
   3545                                      N0.getOperand(0)->getOperand(0)),
   3546                          DAG.getConstant(c1 + c2, N1.getValueType()));
   3547     }
   3548   }
   3549 
   3550   // fold (shl (srl x, c1), c2) -> (and (shl x, (sub c2, c1), MASK) or
   3551   //                               (and (srl x, (sub c1, c2), MASK)
   3552   // Only fold this if the inner shift has no other uses -- if it does, folding
   3553   // this will increase the total number of instructions.
   3554   if (N1C && N0.getOpcode() == ISD::SRL && N0.hasOneUse() &&
   3555       N0.getOperand(1).getOpcode() == ISD::Constant) {
   3556     uint64_t c1 = cast<ConstantSDNode>(N0.getOperand(1))->getZExtValue();
   3557     if (c1 < VT.getSizeInBits()) {
   3558       uint64_t c2 = N1C->getZExtValue();
   3559       APInt Mask = APInt::getHighBitsSet(VT.getSizeInBits(),
   3560                                          VT.getSizeInBits() - c1);
   3561       SDValue Shift;
   3562       if (c2 > c1) {
   3563         Mask = Mask.shl(c2-c1);
   3564         Shift = DAG.getNode(ISD::SHL, N->getDebugLoc(), VT, N0.getOperand(0),
   3565                             DAG.getConstant(c2-c1, N1.getValueType()));
   3566       } else {
   3567         Mask = Mask.lshr(c1-c2);
   3568         Shift = DAG.getNode(ISD::SRL, N->getDebugLoc(), VT, N0.getOperand(0),
   3569                             DAG.getConstant(c1-c2, N1.getValueType()));
   3570       }
   3571       return DAG.getNode(ISD::AND, N0.getDebugLoc(), VT, Shift,
   3572                          DAG.getConstant(Mask, VT));
   3573     }
   3574   }
   3575   // fold (shl (sra x, c1), c1) -> (and x, (shl -1, c1))
   3576   if (N1C && N0.getOpcode() == ISD::SRA && N1 == N0.getOperand(1)) {
   3577     SDValue HiBitsMask =
   3578       DAG.getConstant(APInt::getHighBitsSet(VT.getSizeInBits(),
   3579                                             VT.getSizeInBits() -
   3580                                               N1C->getZExtValue()),
   3581                       VT);
   3582     return DAG.getNode(ISD::AND, N->getDebugLoc(), VT, N0.getOperand(0),
   3583                        HiBitsMask);
   3584   }
   3585 
   3586   if (N1C) {
   3587     SDValue NewSHL = visitShiftByConstant(N, N1C->getZExtValue());
   3588     if (NewSHL.getNode())
   3589       return NewSHL;
   3590   }
   3591 
   3592   return SDValue();
   3593 }
   3594 
   3595 SDValue DAGCombiner::visitSRA(SDNode *N) {
   3596   SDValue N0 = N->getOperand(0);
   3597   SDValue N1 = N->getOperand(1);
   3598   ConstantSDNode *N0C = dyn_cast<ConstantSDNode>(N0);
   3599   ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1);
   3600   EVT VT = N0.getValueType();
   3601   unsigned OpSizeInBits = VT.getScalarType().getSizeInBits();
   3602 
   3603   // fold (sra c1, c2) -> (sra c1, c2)
   3604   if (N0C && N1C)
   3605     return DAG.FoldConstantArithmetic(ISD::SRA, VT, N0C, N1C);
   3606   // fold (sra 0, x) -> 0
   3607   if (N0C && N0C->isNullValue())
   3608     return N0;
   3609   // fold (sra -1, x) -> -1
   3610   if (N0C && N0C->isAllOnesValue())
   3611     return N0;
   3612   // fold (sra x, (setge c, size(x))) -> undef
   3613   if (N1C && N1C->getZExtValue() >= OpSizeInBits)
   3614     return DAG.getUNDEF(VT);
   3615   // fold (sra x, 0) -> x
   3616   if (N1C && N1C->isNullValue())
   3617     return N0;
   3618   // fold (sra (shl x, c1), c1) -> sext_inreg for some c1 and target supports
   3619   // sext_inreg.
   3620   if (N1C && N0.getOpcode() == ISD::SHL && N1 == N0.getOperand(1)) {
   3621     unsigned LowBits = OpSizeInBits - (unsigned)N1C->getZExtValue();
   3622     EVT ExtVT = EVT::getIntegerVT(*DAG.getContext(), LowBits);
   3623     if (VT.isVector())
   3624       ExtVT = EVT::getVectorVT(*DAG.getContext(),
   3625                                ExtVT, VT.getVectorNumElements());
   3626     if ((!LegalOperations ||
   3627          TLI.isOperationLegal(ISD::SIGN_EXTEND_INREG, ExtVT)))
   3628       return DAG.getNode(ISD::SIGN_EXTEND_INREG, N->getDebugLoc(), VT,
   3629                          N0.getOperand(0), DAG.getValueType(ExtVT));
   3630   }
   3631 
   3632   // fold (sra (sra x, c1), c2) -> (sra x, (add c1, c2))
   3633   if (N1C && N0.getOpcode() == ISD::SRA) {
   3634     if (ConstantSDNode *C1 = dyn_cast<ConstantSDNode>(N0.getOperand(1))) {
   3635       unsigned Sum = N1C->getZExtValue() + C1->getZExtValue();
   3636       if (Sum >= OpSizeInBits) Sum = OpSizeInBits-1;
   3637       return DAG.getNode(ISD::SRA, N->getDebugLoc(), VT, N0.getOperand(0),
   3638                          DAG.getConstant(Sum, N1C->getValueType(0)));
   3639     }
   3640   }
   3641 
   3642   // fold (sra (shl X, m), (sub result_size, n))
   3643   // -> (sign_extend (trunc (shl X, (sub (sub result_size, n), m)))) for
   3644   // result_size - n != m.
   3645   // If truncate is free for the target sext(shl) is likely to result in better
   3646   // code.
   3647   if (N0.getOpcode() == ISD::SHL) {
   3648     // Get the two constanst of the shifts, CN0 = m, CN = n.
   3649     const ConstantSDNode *N01C = dyn_cast<ConstantSDNode>(N0.getOperand(1));
   3650     if (N01C && N1C) {
   3651       // Determine what the truncate's result bitsize and type would be.
   3652       EVT TruncVT =
   3653         EVT::getIntegerVT(*DAG.getContext(),
   3654                           OpSizeInBits - N1C->getZExtValue());
   3655       // Determine the residual right-shift amount.
   3656       signed ShiftAmt = N1C->getZExtValue() - N01C->getZExtValue();
   3657 
   3658       // If the shift is not a no-op (in which case this should be just a sign
   3659       // extend already), the truncated to type is legal, sign_extend is legal
   3660       // on that type, and the truncate to that type is both legal and free,
   3661       // perform the transform.
   3662       if ((ShiftAmt > 0) &&
   3663           TLI.isOperationLegalOrCustom(ISD::SIGN_EXTEND, TruncVT) &&
   3664           TLI.isOperationLegalOrCustom(ISD::TRUNCATE, VT) &&
   3665           TLI.isTruncateFree(VT, TruncVT)) {
   3666 
   3667           SDValue Amt = DAG.getConstant(ShiftAmt,
   3668               getShiftAmountTy(N0.getOperand(0).getValueType()));
   3669           SDValue Shift = DAG.getNode(ISD::SRL, N0.getDebugLoc(), VT,
   3670                                       N0.getOperand(0), Amt);
   3671           SDValue Trunc = DAG.getNode(ISD::TRUNCATE, N0.getDebugLoc(), TruncVT,
   3672                                       Shift);
   3673           return DAG.getNode(ISD::SIGN_EXTEND, N->getDebugLoc(),
   3674                              N->getValueType(0), Trunc);
   3675       }
   3676     }
   3677   }
   3678 
   3679   // fold (sra x, (trunc (and y, c))) -> (sra x, (and (trunc y), (trunc c))).
   3680   if (N1.getOpcode() == ISD::TRUNCATE &&
   3681       N1.getOperand(0).getOpcode() == ISD::AND &&
   3682       N1.hasOneUse() && N1.getOperand(0).hasOneUse()) {
   3683     SDValue N101 = N1.getOperand(0).getOperand(1);
   3684     if (ConstantSDNode *N101C = dyn_cast<ConstantSDNode>(N101)) {
   3685       EVT TruncVT = N1.getValueType();
   3686       SDValue N100 = N1.getOperand(0).getOperand(0);
   3687       APInt TruncC = N101C->getAPIntValue();
   3688       TruncC = TruncC.trunc(TruncVT.getScalarType().getSizeInBits());
   3689       return DAG.getNode(ISD::SRA, N->getDebugLoc(), VT, N0,
   3690                          DAG.getNode(ISD::AND, N->getDebugLoc(),
   3691                                      TruncVT,
   3692                                      DAG.getNode(ISD::TRUNCATE,
   3693                                                  N->getDebugLoc(),
   3694                                                  TruncVT, N100),
   3695                                      DAG.getConstant(TruncC, TruncVT)));
   3696     }
   3697   }
   3698 
   3699   // fold (sra (trunc (sr x, c1)), c2) -> (trunc (sra x, c1+c2))
   3700   //      if c1 is equal to the number of bits the trunc removes
   3701   if (N0.getOpcode() == ISD::TRUNCATE &&
   3702       (N0.getOperand(0).getOpcode() == ISD::SRL ||
   3703        N0.getOperand(0).getOpcode() == ISD::SRA) &&
   3704       N0.getOperand(0).hasOneUse() &&
   3705       N0.getOperand(0).getOperand(1).hasOneUse() &&
   3706       N1C && isa<ConstantSDNode>(N0.getOperand(0).getOperand(1))) {
   3707     EVT LargeVT = N0.getOperand(0).getValueType();
   3708     ConstantSDNode *LargeShiftAmt =
   3709       cast<ConstantSDNode>(N0.getOperand(0).getOperand(1));
   3710 
   3711     if (LargeVT.getScalarType().getSizeInBits() - OpSizeInBits ==
   3712         LargeShiftAmt->getZExtValue()) {
   3713       SDValue Amt =
   3714         DAG.getConstant(LargeShiftAmt->getZExtValue() + N1C->getZExtValue(),
   3715               getShiftAmountTy(N0.getOperand(0).getOperand(0).getValueType()));
   3716       SDValue SRA = DAG.getNode(ISD::SRA, N->getDebugLoc(), LargeVT,
   3717                                 N0.getOperand(0).getOperand(0), Amt);
   3718       return DAG.getNode(ISD::TRUNCATE, N->getDebugLoc(), VT, SRA);
   3719     }
   3720   }
   3721 
   3722   // Simplify, based on bits shifted out of the LHS.
   3723   if (N1C && SimplifyDemandedBits(SDValue(N, 0)))
   3724     return SDValue(N, 0);
   3725 
   3726 
   3727   // If the sign bit is known to be zero, switch this to a SRL.
   3728   if (DAG.SignBitIsZero(N0))
   3729     return DAG.getNode(ISD::SRL, N->getDebugLoc(), VT, N0, N1);
   3730 
   3731   if (N1C) {
   3732     SDValue NewSRA = visitShiftByConstant(N, N1C->getZExtValue());
   3733     if (NewSRA.getNode())
   3734       return NewSRA;
   3735   }
   3736 
   3737   return SDValue();
   3738 }
   3739 
   3740 SDValue DAGCombiner::visitSRL(SDNode *N) {
   3741   SDValue N0 = N->getOperand(0);
   3742   SDValue N1 = N->getOperand(1);
   3743   ConstantSDNode *N0C = dyn_cast<ConstantSDNode>(N0);
   3744   ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1);
   3745   EVT VT = N0.getValueType();
   3746   unsigned OpSizeInBits = VT.getScalarType().getSizeInBits();
   3747 
   3748   // fold (srl c1, c2) -> c1 >>u c2
   3749   if (N0C && N1C)
   3750     return DAG.FoldConstantArithmetic(ISD::SRL, VT, N0C, N1C);
   3751   // fold (srl 0, x) -> 0
   3752   if (N0C && N0C->isNullValue())
   3753     return N0;
   3754   // fold (srl x, c >= size(x)) -> undef
   3755   if (N1C && N1C->getZExtValue() >= OpSizeInBits)
   3756     return DAG.getUNDEF(VT);
   3757   // fold (srl x, 0) -> x
   3758   if (N1C && N1C->isNullValue())
   3759     return N0;
   3760   // if (srl x, c) is known to be zero, return 0
   3761   if (N1C && DAG.MaskedValueIsZero(SDValue(N, 0),
   3762                                    APInt::getAllOnesValue(OpSizeInBits)))
   3763     return DAG.getConstant(0, VT);
   3764 
   3765   // fold (srl (srl x, c1), c2) -> 0 or (srl x, (add c1, c2))
   3766   if (N1C && N0.getOpcode() == ISD::SRL &&
   3767       N0.getOperand(1).getOpcode() == ISD::Constant) {
   3768     uint64_t c1 = cast<ConstantSDNode>(N0.getOperand(1))->getZExtValue();
   3769     uint64_t c2 = N1C->getZExtValue();
   3770     if (c1 + c2 >= OpSizeInBits)
   3771       return DAG.getConstant(0, VT);
   3772     return DAG.getNode(ISD::SRL, N->getDebugLoc(), VT, N0.getOperand(0),
   3773                        DAG.getConstant(c1 + c2, N1.getValueType()));
   3774   }
   3775 
   3776   // fold (srl (trunc (srl x, c1)), c2) -> 0 or (trunc (srl x, (add c1, c2)))
   3777   if (N1C && N0.getOpcode() == ISD::TRUNCATE &&
   3778       N0.getOperand(0).getOpcode() == ISD::SRL &&
   3779       isa<ConstantSDNode>(N0.getOperand(0)->getOperand(1))) {
   3780     uint64_t c1 =
   3781       cast<ConstantSDNode>(N0.getOperand(0)->getOperand(1))->getZExtValue();
   3782     uint64_t c2 = N1C->getZExtValue();
   3783     EVT InnerShiftVT = N0.getOperand(0).getValueType();
   3784     EVT ShiftCountVT = N0.getOperand(0)->getOperand(1).getValueType();
   3785     uint64_t InnerShiftSize = InnerShiftVT.getScalarType().getSizeInBits();
   3786     // This is only valid if the OpSizeInBits + c1 = size of inner shift.
   3787     if (c1 + OpSizeInBits == InnerShiftSize) {
   3788       if (c1 + c2 >= InnerShiftSize)
   3789         return DAG.getConstant(0, VT);
   3790       return DAG.getNode(ISD::TRUNCATE, N0->getDebugLoc(), VT,
   3791                          DAG.getNode(ISD::SRL, N0->getDebugLoc(), InnerShiftVT,
   3792                                      N0.getOperand(0)->getOperand(0),
   3793                                      DAG.getConstant(c1 + c2, ShiftCountVT)));
   3794     }
   3795   }
   3796 
   3797   // fold (srl (shl x, c), c) -> (and x, cst2)
   3798   if (N1C && N0.getOpcode() == ISD::SHL && N0.getOperand(1) == N1 &&
   3799       N0.getValueSizeInBits() <= 64) {
   3800     uint64_t ShAmt = N1C->getZExtValue()+64-N0.getValueSizeInBits();
   3801     return DAG.getNode(ISD::AND, N->getDebugLoc(), VT, N0.getOperand(0),
   3802                        DAG.getConstant(~0ULL >> ShAmt, VT));
   3803   }
   3804 
   3805 
   3806   // fold (srl (anyextend x), c) -> (anyextend (srl x, c))
   3807   if (N1C && N0.getOpcode() == ISD::ANY_EXTEND) {
   3808     // Shifting in all undef bits?
   3809     EVT SmallVT = N0.getOperand(0).getValueType();
   3810     if (N1C->getZExtValue() >= SmallVT.getSizeInBits())
   3811       return DAG.getUNDEF(VT);
   3812 
   3813     if (!LegalTypes || TLI.isTypeDesirableForOp(ISD::SRL, SmallVT)) {
   3814       uint64_t ShiftAmt = N1C->getZExtValue();
   3815       SDValue SmallShift = DAG.getNode(ISD::SRL, N0.getDebugLoc(), SmallVT,
   3816                                        N0.getOperand(0),
   3817                           DAG.getConstant(ShiftAmt, getShiftAmountTy(SmallVT)));
   3818       AddToWorkList(SmallShift.getNode());
   3819       return DAG.getNode(ISD::ANY_EXTEND, N->getDebugLoc(), VT, SmallShift);
   3820     }
   3821   }
   3822 
   3823   // fold (srl (sra X, Y), 31) -> (srl X, 31).  This srl only looks at the sign
   3824   // bit, which is unmodified by sra.
   3825   if (N1C && N1C->getZExtValue() + 1 == VT.getSizeInBits()) {
   3826     if (N0.getOpcode() == ISD::SRA)
   3827       return DAG.getNode(ISD::SRL, N->getDebugLoc(), VT, N0.getOperand(0), N1);
   3828   }
   3829 
   3830   // fold (srl (ctlz x), "5") -> x  iff x has one bit set (the low bit).
   3831   if (N1C && N0.getOpcode() == ISD::CTLZ &&
   3832       N1C->getAPIntValue() == Log2_32(VT.getSizeInBits())) {
   3833     APInt KnownZero, KnownOne;
   3834     DAG.ComputeMaskedBits(N0.getOperand(0), KnownZero, KnownOne);
   3835 
   3836     // If any of the input bits are KnownOne, then the input couldn't be all
   3837     // zeros, thus the result of the srl will always be zero.
   3838     if (KnownOne.getBoolValue()) return DAG.getConstant(0, VT);
   3839 
   3840     // If all of the bits input the to ctlz node are known to be zero, then
   3841     // the result of the ctlz is "32" and the result of the shift is one.
   3842     APInt UnknownBits = ~KnownZero;
   3843     if (UnknownBits == 0) return DAG.getConstant(1, VT);
   3844 
   3845     // Otherwise, check to see if there is exactly one bit input to the ctlz.
   3846     if ((UnknownBits & (UnknownBits - 1)) == 0) {
   3847       // Okay, we know that only that the single bit specified by UnknownBits
   3848       // could be set on input to the CTLZ node. If this bit is set, the SRL
   3849       // will return 0, if it is clear, it returns 1. Change the CTLZ/SRL pair
   3850       // to an SRL/XOR pair, which is likely to simplify more.
   3851       unsigned ShAmt = UnknownBits.countTrailingZeros();
   3852       SDValue Op = N0.getOperand(0);
   3853 
   3854       if (ShAmt) {
   3855         Op = DAG.getNode(ISD::SRL, N0.getDebugLoc(), VT, Op,
   3856                   DAG.getConstant(ShAmt, getShiftAmountTy(Op.getValueType())));
   3857         AddToWorkList(Op.getNode());
   3858       }
   3859 
   3860       return DAG.getNode(ISD::XOR, N->getDebugLoc(), VT,
   3861                          Op, DAG.getConstant(1, VT));
   3862     }
   3863   }
   3864 
   3865   // fold (srl x, (trunc (and y, c))) -> (srl x, (and (trunc y), (trunc c))).
   3866   if (N1.getOpcode() == ISD::TRUNCATE &&
   3867       N1.getOperand(0).getOpcode() == ISD::AND &&
   3868       N1.hasOneUse() && N1.getOperand(0).hasOneUse()) {
   3869     SDValue N101 = N1.getOperand(0).getOperand(1);
   3870     if (ConstantSDNode *N101C = dyn_cast<ConstantSDNode>(N101)) {
   3871       EVT TruncVT = N1.getValueType();
   3872       SDValue N100 = N1.getOperand(0).getOperand(0);
   3873       APInt TruncC = N101C->getAPIntValue();
   3874       TruncC = TruncC.trunc(TruncVT.getSizeInBits());
   3875       return DAG.getNode(ISD::SRL, N->getDebugLoc(), VT, N0,
   3876                          DAG.getNode(ISD::AND, N->getDebugLoc(),
   3877                                      TruncVT,
   3878                                      DAG.getNode(ISD::TRUNCATE,
   3879                                                  N->getDebugLoc(),
   3880                                                  TruncVT, N100),
   3881                                      DAG.getConstant(TruncC, TruncVT)));
   3882     }
   3883   }
   3884 
   3885   // fold operands of srl based on knowledge that the low bits are not
   3886   // demanded.
   3887   if (N1C && SimplifyDemandedBits(SDValue(N, 0)))
   3888     return SDValue(N, 0);
   3889 
   3890   if (N1C) {
   3891     SDValue NewSRL = visitShiftByConstant(N, N1C->getZExtValue());
   3892     if (NewSRL.getNode())
   3893       return NewSRL;
   3894   }
   3895 
   3896   // Attempt to convert a srl of a load into a narrower zero-extending load.
   3897   SDValue NarrowLoad = ReduceLoadWidth(N);
   3898   if (NarrowLoad.getNode())
   3899     return NarrowLoad;
   3900 
   3901   // Here is a common situation. We want to optimize:
   3902   //
   3903   //   %a = ...
   3904   //   %b = and i32 %a, 2
   3905   //   %c = srl i32 %b, 1
   3906   //   brcond i32 %c ...
   3907   //
   3908   // into
   3909   //
   3910   //   %a = ...
   3911   //   %b = and %a, 2
   3912   //   %c = setcc eq %b, 0
   3913   //   brcond %c ...
   3914   //
   3915   // However when after the source operand of SRL is optimized into AND, the SRL
   3916   // itself may not be optimized further. Look for it and add the BRCOND into
   3917   // the worklist.
   3918   if (N->hasOneUse()) {
   3919     SDNode *Use = *N->use_begin();
   3920     if (Use->getOpcode() == ISD::BRCOND)
   3921       AddToWorkList(Use);
   3922     else if (Use->getOpcode() == ISD::TRUNCATE && Use->hasOneUse()) {
   3923       // Also look pass the truncate.
   3924       Use = *Use->use_begin();
   3925       if (Use->getOpcode() == ISD::BRCOND)
   3926         AddToWorkList(Use);
   3927     }
   3928   }
   3929 
   3930   return SDValue();
   3931 }
   3932 
   3933 SDValue DAGCombiner::visitCTLZ(SDNode *N) {
   3934   SDValue N0 = N->getOperand(0);
   3935   EVT VT = N->getValueType(0);
   3936 
   3937   // fold (ctlz c1) -> c2
   3938   if (isa<ConstantSDNode>(N0))
   3939     return DAG.getNode(ISD::CTLZ, N->getDebugLoc(), VT, N0);
   3940   return SDValue();
   3941 }
   3942 
   3943 SDValue DAGCombiner::visitCTLZ_ZERO_UNDEF(SDNode *N) {
   3944   SDValue N0 = N->getOperand(0);
   3945   EVT VT = N->getValueType(0);
   3946 
   3947   // fold (ctlz_zero_undef c1) -> c2
   3948   if (isa<ConstantSDNode>(N0))
   3949     return DAG.getNode(ISD::CTLZ_ZERO_UNDEF, N->getDebugLoc(), VT, N0);
   3950   return SDValue();
   3951 }
   3952 
   3953 SDValue DAGCombiner::visitCTTZ(SDNode *N) {
   3954   SDValue N0 = N->getOperand(0);
   3955   EVT VT = N->getValueType(0);
   3956 
   3957   // fold (cttz c1) -> c2
   3958   if (isa<ConstantSDNode>(N0))
   3959     return DAG.getNode(ISD::CTTZ, N->getDebugLoc(), VT, N0);
   3960   return SDValue();
   3961 }
   3962 
   3963 SDValue DAGCombiner::visitCTTZ_ZERO_UNDEF(SDNode *N) {
   3964   SDValue N0 = N->getOperand(0);
   3965   EVT VT = N->getValueType(0);
   3966 
   3967   // fold (cttz_zero_undef c1) -> c2
   3968   if (isa<ConstantSDNode>(N0))
   3969     return DAG.getNode(ISD::CTTZ_ZERO_UNDEF, N->getDebugLoc(), VT, N0);
   3970   return SDValue();
   3971 }
   3972 
   3973 SDValue DAGCombiner::visitCTPOP(SDNode *N) {
   3974   SDValue N0 = N->getOperand(0);
   3975   EVT VT = N->getValueType(0);
   3976 
   3977   // fold (ctpop c1) -> c2
   3978   if (isa<ConstantSDNode>(N0))
   3979     return DAG.getNode(ISD::CTPOP, N->getDebugLoc(), VT, N0);
   3980   return SDValue();
   3981 }
   3982 
   3983 SDValue DAGCombiner::visitSELECT(SDNode *N) {
   3984   SDValue N0 = N->getOperand(0);
   3985   SDValue N1 = N->getOperand(1);
   3986   SDValue N2 = N->getOperand(2);
   3987   ConstantSDNode *N0C = dyn_cast<ConstantSDNode>(N0);
   3988   ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1);
   3989   ConstantSDNode *N2C = dyn_cast<ConstantSDNode>(N2);
   3990   EVT VT = N->getValueType(0);
   3991   EVT VT0 = N0.getValueType();
   3992 
   3993   // fold (select C, X, X) -> X
   3994   if (N1 == N2)
   3995     return N1;
   3996   // fold (select true, X, Y) -> X
   3997   if (N0C && !N0C->isNullValue())
   3998     return N1;
   3999   // fold (select false, X, Y) -> Y
   4000   if (N0C && N0C->isNullValue())
   4001     return N2;
   4002   // fold (select C, 1, X) -> (or C, X)
   4003   if (VT == MVT::i1 && N1C && N1C->getAPIntValue() == 1)
   4004     return DAG.getNode(ISD::OR, N->getDebugLoc(), VT, N0, N2);
   4005   // fold (select C, 0, 1) -> (xor C, 1)
   4006   if (VT.isInteger() &&
   4007       (VT0 == MVT::i1 ||
   4008        (VT0.isInteger() &&
   4009         TLI.getBooleanContents(false) == TargetLowering::ZeroOrOneBooleanContent)) &&
   4010       N1C && N2C && N1C->isNullValue() && N2C->getAPIntValue() == 1) {
   4011     SDValue XORNode;
   4012     if (VT == VT0)
   4013       return DAG.getNode(ISD::XOR, N->getDebugLoc(), VT0,
   4014                          N0, DAG.getConstant(1, VT0));
   4015     XORNode = DAG.getNode(ISD::XOR, N0.getDebugLoc(), VT0,
   4016                           N0, DAG.getConstant(1, VT0));
   4017     AddToWorkList(XORNode.getNode());
   4018     if (VT.bitsGT(VT0))
   4019       return DAG.getNode(ISD::ZERO_EXTEND, N->getDebugLoc(), VT, XORNode);
   4020     return DAG.getNode(ISD::TRUNCATE, N->getDebugLoc(), VT, XORNode);
   4021   }
   4022   // fold (select C, 0, X) -> (and (not C), X)
   4023   if (VT == VT0 && VT == MVT::i1 && N1C && N1C->isNullValue()) {
   4024     SDValue NOTNode = DAG.getNOT(N0.getDebugLoc(), N0, VT);
   4025     AddToWorkList(NOTNode.getNode());
   4026     return DAG.getNode(ISD::AND, N->getDebugLoc(), VT, NOTNode, N2);
   4027   }
   4028   // fold (select C, X, 1) -> (or (not C), X)
   4029   if (VT == VT0 && VT == MVT::i1 && N2C && N2C->getAPIntValue() == 1) {
   4030     SDValue NOTNode = DAG.getNOT(N0.getDebugLoc(), N0, VT);
   4031     AddToWorkList(NOTNode.getNode());
   4032     return DAG.getNode(ISD::OR, N->getDebugLoc(), VT, NOTNode, N1);
   4033   }
   4034   // fold (select C, X, 0) -> (and C, X)
   4035   if (VT == MVT::i1 && N2C && N2C->isNullValue())
   4036     return DAG.getNode(ISD::AND, N->getDebugLoc(), VT, N0, N1);
   4037   // fold (select X, X, Y) -> (or X, Y)
   4038   // fold (select X, 1, Y) -> (or X, Y)
   4039   if (VT == MVT::i1 && (N0 == N1 || (N1C && N1C->getAPIntValue() == 1)))
   4040     return DAG.getNode(ISD::OR, N->getDebugLoc(), VT, N0, N2);
   4041   // fold (select X, Y, X) -> (and X, Y)
   4042   // fold (select X, Y, 0) -> (and X, Y)
   4043   if (VT == MVT::i1 && (N0 == N2 || (N2C && N2C->getAPIntValue() == 0)))
   4044     return DAG.getNode(ISD::AND, N->getDebugLoc(), VT, N0, N1);
   4045 
   4046   // If we can fold this based on the true/false value, do so.
   4047   if (SimplifySelectOps(N, N1, N2))
   4048     return SDValue(N, 0);  // Don't revisit N.
   4049 
   4050   // fold selects based on a setcc into other things, such as min/max/abs
   4051   if (N0.getOpcode() == ISD::SETCC) {
   4052     // FIXME:
   4053     // Check against MVT::Other for SELECT_CC, which is a workaround for targets
   4054     // having to say they don't support SELECT_CC on every type the DAG knows
   4055     // about, since there is no way to mark an opcode illegal at all value types
   4056     if (TLI.isOperationLegalOrCustom(ISD::SELECT_CC, MVT::Other) &&
   4057         TLI.isOperationLegalOrCustom(ISD::SELECT_CC, VT))
   4058       return DAG.getNode(ISD::SELECT_CC, N->getDebugLoc(), VT,
   4059                          N0.getOperand(0), N0.getOperand(1),
   4060                          N1, N2, N0.getOperand(2));
   4061     return SimplifySelect(N->getDebugLoc(), N0, N1, N2);
   4062   }
   4063 
   4064   return SDValue();
   4065 }
   4066 
   4067 SDValue DAGCombiner::visitSELECT_CC(SDNode *N) {
   4068   SDValue N0 = N->getOperand(0);
   4069   SDValue N1 = N->getOperand(1);
   4070   SDValue N2 = N->getOperand(2);
   4071   SDValue N3 = N->getOperand(3);
   4072   SDValue N4 = N->getOperand(4);
   4073   ISD::CondCode CC = cast<CondCodeSDNode>(N4)->get();
   4074 
   4075   // fold select_cc lhs, rhs, x, x, cc -> x
   4076   if (N2 == N3)
   4077     return N2;
   4078 
   4079   // Determine if the condition we're dealing with is constant
   4080   SDValue SCC = SimplifySetCC(TLI.getSetCCResultType(N0.getValueType()),
   4081                               N0, N1, CC, N->getDebugLoc(), false);
   4082   if (SCC.getNode()) AddToWorkList(SCC.getNode());
   4083 
   4084   if (ConstantSDNode *SCCC = dyn_cast_or_null<ConstantSDNode>(SCC.getNode())) {
   4085     if (!SCCC->isNullValue())
   4086       return N2;    // cond always true -> true val
   4087     else
   4088       return N3;    // cond always false -> false val
   4089   }
   4090 
   4091   // Fold to a simpler select_cc
   4092   if (SCC.getNode() && SCC.getOpcode() == ISD::SETCC)
   4093     return DAG.getNode(ISD::SELECT_CC, N->getDebugLoc(), N2.getValueType(),
   4094                        SCC.getOperand(0), SCC.getOperand(1), N2, N3,
   4095                        SCC.getOperand(2));
   4096 
   4097   // If we can fold this based on the true/false value, do so.
   4098   if (SimplifySelectOps(N, N2, N3))
   4099     return SDValue(N, 0);  // Don't revisit N.
   4100 
   4101   // fold select_cc into other things, such as min/max/abs
   4102   return SimplifySelectCC(N->getDebugLoc(), N0, N1, N2, N3, CC);
   4103 }
   4104 
   4105 SDValue DAGCombiner::visitSETCC(SDNode *N) {
   4106   return SimplifySetCC(N->getValueType(0), N->getOperand(0), N->getOperand(1),
   4107                        cast<CondCodeSDNode>(N->getOperand(2))->get(),
   4108                        N->getDebugLoc());
   4109 }
   4110 
   4111 // ExtendUsesToFormExtLoad - Trying to extend uses of a load to enable this:
   4112 // "fold ({s|z|a}ext (load x)) -> ({s|z|a}ext (truncate ({s|z|a}extload x)))"
   4113 // transformation. Returns true if extension are possible and the above
   4114 // mentioned transformation is profitable.
   4115 static bool ExtendUsesToFormExtLoad(SDNode *N, SDValue N0,
   4116                                     unsigned ExtOpc,
   4117                                     SmallVector<SDNode*, 4> &ExtendNodes,
   4118                                     const TargetLowering &TLI) {
   4119   bool HasCopyToRegUses = false;
   4120   bool isTruncFree = TLI.isTruncateFree(N->getValueType(0), N0.getValueType());
   4121   for (SDNode::use_iterator UI = N0.getNode()->use_begin(),
   4122                             UE = N0.getNode()->use_end();
   4123        UI != UE; ++UI) {
   4124     SDNode *User = *UI;
   4125     if (User == N)
   4126       continue;
   4127     if (UI.getUse().getResNo() != N0.getResNo())
   4128       continue;
   4129     // FIXME: Only extend SETCC N, N and SETCC N, c for now.
   4130     if (ExtOpc != ISD::ANY_EXTEND && User->getOpcode() == ISD::SETCC) {
   4131       ISD::CondCode CC = cast<CondCodeSDNode>(User->getOperand(2))->get();
   4132       if (ExtOpc == ISD::ZERO_EXTEND && ISD::isSignedIntSetCC(CC))
   4133         // Sign bits will be lost after a zext.
   4134         return false;
   4135       bool Add = false;
   4136       for (unsigned i = 0; i != 2; ++i) {
   4137         SDValue UseOp = User->getOperand(i);
   4138         if (UseOp == N0)
   4139           continue;
   4140         if (!isa<ConstantSDNode>(UseOp))
   4141           return false;
   4142         Add = true;
   4143       }
   4144       if (Add)
   4145         ExtendNodes.push_back(User);
   4146       continue;
   4147     }
   4148     // If truncates aren't free and there are users we can't
   4149     // extend, it isn't worthwhile.
   4150     if (!isTruncFree)
   4151       return false;
   4152     // Remember if this value is live-out.
   4153     if (User->getOpcode() == ISD::CopyToReg)
   4154       HasCopyToRegUses = true;
   4155   }
   4156 
   4157   if (HasCopyToRegUses) {
   4158     bool BothLiveOut = false;
   4159     for (SDNode::use_iterator UI = N->use_begin(), UE = N->use_end();
   4160          UI != UE; ++UI) {
   4161       SDUse &Use = UI.getUse();
   4162       if (Use.getResNo() == 0 && Use.getUser()->getOpcode() == ISD::CopyToReg) {
   4163         BothLiveOut = true;
   4164         break;
   4165       }
   4166     }
   4167     if (BothLiveOut)
   4168       // Both unextended and extended values are live out. There had better be
   4169       // a good reason for the transformation.
   4170       return ExtendNodes.size();
   4171   }
   4172   return true;
   4173 }
   4174 
   4175 void DAGCombiner::ExtendSetCCUses(SmallVector<SDNode*, 4> SetCCs,
   4176                                   SDValue Trunc, SDValue ExtLoad, DebugLoc DL,
   4177                                   ISD::NodeType ExtType) {
   4178   // Extend SetCC uses if necessary.
   4179   for (unsigned i = 0, e = SetCCs.size(); i != e; ++i) {
   4180     SDNode *SetCC = SetCCs[i];
   4181     SmallVector<SDValue, 4> Ops;
   4182 
   4183     for (unsigned j = 0; j != 2; ++j) {
   4184       SDValue SOp = SetCC->getOperand(j);
   4185       if (SOp == Trunc)
   4186         Ops.push_back(ExtLoad);
   4187       else
   4188         Ops.push_back(DAG.getNode(ExtType, DL, ExtLoad->getValueType(0), SOp));
   4189     }
   4190 
   4191     Ops.push_back(SetCC->getOperand(2));
   4192     CombineTo(SetCC, DAG.getNode(ISD::SETCC, DL, SetCC->getValueType(0),
   4193                                  &Ops[0], Ops.size()));
   4194   }
   4195 }
   4196 
   4197 SDValue DAGCombiner::visitSIGN_EXTEND(SDNode *N) {
   4198   SDValue N0 = N->getOperand(0);
   4199   EVT VT = N->getValueType(0);
   4200 
   4201   // fold (sext c1) -> c1
   4202   if (isa<ConstantSDNode>(N0))
   4203     return DAG.getNode(ISD::SIGN_EXTEND, N->getDebugLoc(), VT, N0);
   4204 
   4205   // fold (sext (sext x)) -> (sext x)
   4206   // fold (sext (aext x)) -> (sext x)
   4207   if (N0.getOpcode() == ISD::SIGN_EXTEND || N0.getOpcode() == ISD::ANY_EXTEND)
   4208     return DAG.getNode(ISD::SIGN_EXTEND, N->getDebugLoc(), VT,
   4209                        N0.getOperand(0));
   4210 
   4211   if (N0.getOpcode() == ISD::TRUNCATE) {
   4212     // fold (sext (truncate (load x))) -> (sext (smaller load x))
   4213     // fold (sext (truncate (srl (load x), c))) -> (sext (smaller load (x+c/n)))
   4214     SDValue NarrowLoad = ReduceLoadWidth(N0.getNode());
   4215     if (NarrowLoad.getNode()) {
   4216       SDNode* oye = N0.getNode()->getOperand(0).getNode();
   4217       if (NarrowLoad.getNode() != N0.getNode()) {
   4218         CombineTo(N0.getNode(), NarrowLoad);
   4219         // CombineTo deleted the truncate, if needed, but not what's under it.
   4220         AddToWorkList(oye);
   4221       }
   4222       return SDValue(N, 0);   // Return N so it doesn't get rechecked!
   4223     }
   4224 
   4225     // See if the value being truncated is already sign extended.  If so, just
   4226     // eliminate the trunc/sext pair.
   4227     SDValue Op = N0.getOperand(0);
   4228     unsigned OpBits   = Op.getValueType().getScalarType().getSizeInBits();
   4229     unsigned MidBits  = N0.getValueType().getScalarType().getSizeInBits();
   4230     unsigned DestBits = VT.getScalarType().getSizeInBits();
   4231     unsigned NumSignBits = DAG.ComputeNumSignBits(Op);
   4232 
   4233     if (OpBits == DestBits) {
   4234       // Op is i32, Mid is i8, and Dest is i32.  If Op has more than 24 sign
   4235       // bits, it is already ready.
   4236       if (NumSignBits > DestBits-MidBits)
   4237         return Op;
   4238     } else if (OpBits < DestBits) {
   4239       // Op is i32, Mid is i8, and Dest is i64.  If Op has more than 24 sign
   4240       // bits, just sext from i32.
   4241       if (NumSignBits > OpBits-MidBits)
   4242         return DAG.getNode(ISD::SIGN_EXTEND, N->getDebugLoc(), VT, Op);
   4243     } else {
   4244       // Op is i64, Mid is i8, and Dest is i32.  If Op has more than 56 sign
   4245       // bits, just truncate to i32.
   4246       if (NumSignBits > OpBits-MidBits)
   4247         return DAG.getNode(ISD::TRUNCATE, N->getDebugLoc(), VT, Op);
   4248     }
   4249 
   4250     // fold (sext (truncate x)) -> (sextinreg x).
   4251     if (!LegalOperations || TLI.isOperationLegal(ISD::SIGN_EXTEND_INREG,
   4252                                                  N0.getValueType())) {
   4253       if (OpBits < DestBits)
   4254         Op = DAG.getNode(ISD::ANY_EXTEND, N0.getDebugLoc(), VT, Op);
   4255       else if (OpBits > DestBits)
   4256         Op = DAG.getNode(ISD::TRUNCATE, N0.getDebugLoc(), VT, Op);
   4257       return DAG.getNode(ISD::SIGN_EXTEND_INREG, N->getDebugLoc(), VT, Op,
   4258                          DAG.getValueType(N0.getValueType()));
   4259     }
   4260   }
   4261 
   4262   // fold (sext (load x)) -> (sext (truncate (sextload x)))
   4263   // None of the supported targets knows how to perform load and sign extend
   4264   // on vectors in one instruction.  We only perform this transformation on
   4265   // scalars.
   4266   if (ISD::isNON_EXTLoad(N0.getNode()) && !VT.isVector() &&
   4267       ((!LegalOperations && !cast<LoadSDNode>(N0)->isVolatile()) ||
   4268        TLI.isLoadExtLegal(ISD::SEXTLOAD, N0.getValueType()))) {
   4269     bool DoXform = true;
   4270     SmallVector<SDNode*, 4> SetCCs;
   4271     if (!N0.hasOneUse())
   4272       DoXform = ExtendUsesToFormExtLoad(N, N0, ISD::SIGN_EXTEND, SetCCs, TLI);
   4273     if (DoXform) {
   4274       LoadSDNode *LN0 = cast<LoadSDNode>(N0);
   4275       SDValue ExtLoad = DAG.getExtLoad(ISD::SEXTLOAD, N->getDebugLoc(), VT,
   4276                                        LN0->getChain(),
   4277                                        LN0->getBasePtr(), LN0->getPointerInfo(),
   4278                                        N0.getValueType(),
   4279                                        LN0->isVolatile(), LN0->isNonTemporal(),
   4280                                        LN0->getAlignment());
   4281       CombineTo(N, ExtLoad);
   4282       SDValue Trunc = DAG.getNode(ISD::TRUNCATE, N0.getDebugLoc(),
   4283                                   N0.getValueType(), ExtLoad);
   4284       CombineTo(N0.getNode(), Trunc, ExtLoad.getValue(1));
   4285       ExtendSetCCUses(SetCCs, Trunc, ExtLoad, N->getDebugLoc(),
   4286                       ISD::SIGN_EXTEND);
   4287       return SDValue(N, 0);   // Return N so it doesn't get rechecked!
   4288     }
   4289   }
   4290 
   4291   // fold (sext (sextload x)) -> (sext (truncate (sextload x)))
   4292   // fold (sext ( extload x)) -> (sext (truncate (sextload x)))
   4293   if ((ISD::isSEXTLoad(N0.getNode()) || ISD::isEXTLoad(N0.getNode())) &&
   4294       ISD::isUNINDEXEDLoad(N0.getNode()) && N0.hasOneUse()) {
   4295     LoadSDNode *LN0 = cast<LoadSDNode>(N0);
   4296     EVT MemVT = LN0->getMemoryVT();
   4297     if ((!LegalOperations && !LN0->isVolatile()) ||
   4298         TLI.isLoadExtLegal(ISD::SEXTLOAD, MemVT)) {
   4299       SDValue ExtLoad = DAG.getExtLoad(ISD::SEXTLOAD, N->getDebugLoc(), VT,
   4300                                        LN0->getChain(),
   4301                                        LN0->getBasePtr(), LN0->getPointerInfo(),
   4302                                        MemVT,
   4303                                        LN0->isVolatile(), LN0->isNonTemporal(),
   4304                                        LN0->getAlignment());
   4305       CombineTo(N, ExtLoad);
   4306       CombineTo(N0.getNode(),
   4307                 DAG.getNode(ISD::TRUNCATE, N0.getDebugLoc(),
   4308                             N0.getValueType(), ExtLoad),
   4309                 ExtLoad.getValue(1));
   4310       return SDValue(N, 0);   // Return N so it doesn't get rechecked!
   4311     }
   4312   }
   4313 
   4314   // fold (sext (and/or/xor (load x), cst)) ->
   4315   //      (and/or/xor (sextload x), (sext cst))
   4316   if ((N0.getOpcode() == ISD::AND || N0.getOpcode() == ISD::OR ||
   4317        N0.getOpcode() == ISD::XOR) &&
   4318       isa<LoadSDNode>(N0.getOperand(0)) &&
   4319       N0.getOperand(1).getOpcode() == ISD::Constant &&
   4320       TLI.isLoadExtLegal(ISD::SEXTLOAD, N0.getValueType()) &&
   4321       (!LegalOperations && TLI.isOperationLegal(N0.getOpcode(), VT))) {
   4322     LoadSDNode *LN0 = cast<LoadSDNode>(N0.getOperand(0));
   4323     if (LN0->getExtensionType() != ISD::ZEXTLOAD) {
   4324       bool DoXform = true;
   4325       SmallVector<SDNode*, 4> SetCCs;
   4326       if (!N0.hasOneUse())
   4327         DoXform = ExtendUsesToFormExtLoad(N, N0.getOperand(0), ISD::SIGN_EXTEND,
   4328                                           SetCCs, TLI);
   4329       if (DoXform) {
   4330         SDValue ExtLoad = DAG.getExtLoad(ISD::SEXTLOAD, LN0->getDebugLoc(), VT,
   4331                                          LN0->getChain(), LN0->getBasePtr(),
   4332                                          LN0->getPointerInfo(),
   4333                                          LN0->getMemoryVT(),
   4334                                          LN0->isVolatile(),
   4335                                          LN0->isNonTemporal(),
   4336                                          LN0->getAlignment());
   4337         APInt Mask = cast<ConstantSDNode>(N0.getOperand(1))->getAPIntValue();
   4338         Mask = Mask.sext(VT.getSizeInBits());
   4339         SDValue And = DAG.getNode(N0.getOpcode(), N->getDebugLoc(), VT,
   4340                                   ExtLoad, DAG.getConstant(Mask, VT));
   4341         SDValue Trunc = DAG.getNode(ISD::TRUNCATE,
   4342                                     N0.getOperand(0).getDebugLoc(),
   4343                                     N0.getOperand(0).getValueType(), ExtLoad);
   4344         CombineTo(N, And);
   4345         CombineTo(N0.getOperand(0).getNode(), Trunc, ExtLoad.getValue(1));
   4346         ExtendSetCCUses(SetCCs, Trunc, ExtLoad, N->getDebugLoc(),
   4347                         ISD::SIGN_EXTEND);
   4348         return SDValue(N, 0);   // Return N so it doesn't get rechecked!
   4349       }
   4350     }
   4351   }
   4352 
   4353   if (N0.getOpcode() == ISD::SETCC) {
   4354     // sext(setcc) -> sext_in_reg(vsetcc) for vectors.
   4355     // Only do this before legalize for now.
   4356     if (VT.isVector() && !LegalOperations) {
   4357       EVT N0VT = N0.getOperand(0).getValueType();
   4358       // On some architectures (such as SSE/NEON/etc) the SETCC result type is
   4359       // of the same size as the compared operands. Only optimize sext(setcc())
   4360       // if this is the case.
   4361       EVT SVT = TLI.getSetCCResultType(N0VT);
   4362 
   4363       // We know that the # elements of the results is the same as the
   4364       // # elements of the compare (and the # elements of the compare result
   4365       // for that matter).  Check to see that they are the same size.  If so,
   4366       // we know that the element size of the sext'd result matches the
   4367       // element size of the compare operands.
   4368       if (VT.getSizeInBits() == SVT.getSizeInBits())
   4369         return DAG.getSetCC(N->getDebugLoc(), VT, N0.getOperand(0),
   4370                              N0.getOperand(1),
   4371                              cast<CondCodeSDNode>(N0.getOperand(2))->get());
   4372       // If the desired elements are smaller or larger than the source
   4373       // elements we can use a matching integer vector type and then
   4374       // truncate/sign extend
   4375       else {
   4376         EVT MatchingElementType =
   4377           EVT::getIntegerVT(*DAG.getContext(),
   4378                             N0VT.getScalarType().getSizeInBits());
   4379         EVT MatchingVectorType =
   4380           EVT::getVectorVT(*DAG.getContext(), MatchingElementType,
   4381                            N0VT.getVectorNumElements());
   4382 
   4383         if (SVT == MatchingVectorType) {
   4384           SDValue VsetCC = DAG.getSetCC(N->getDebugLoc(), MatchingVectorType,
   4385                                  N0.getOperand(0), N0.getOperand(1),
   4386                                  cast<CondCodeSDNode>(N0.getOperand(2))->get());
   4387           return DAG.getSExtOrTrunc(VsetCC, N->getDebugLoc(), VT);
   4388         }
   4389       }
   4390     }
   4391 
   4392     // sext(setcc x, y, cc) -> (select_cc x, y, -1, 0, cc)
   4393     unsigned ElementWidth = VT.getScalarType().getSizeInBits();
   4394     SDValue NegOne =
   4395       DAG.getConstant(APInt::getAllOnesValue(ElementWidth), VT);
   4396     SDValue SCC =
   4397       SimplifySelectCC(N->getDebugLoc(), N0.getOperand(0), N0.getOperand(1),
   4398                        NegOne, DAG.getConstant(0, VT),
   4399                        cast<CondCodeSDNode>(N0.getOperand(2))->get(), true);
   4400     if (SCC.getNode()) return SCC;
   4401     if (!LegalOperations ||
   4402         TLI.isOperationLegal(ISD::SETCC, TLI.getSetCCResultType(VT)))
   4403       return DAG.getNode(ISD::SELECT, N->getDebugLoc(), VT,
   4404                          DAG.getSetCC(N->getDebugLoc(),
   4405                                       TLI.getSetCCResultType(VT),
   4406                                       N0.getOperand(0), N0.getOperand(1),
   4407                                  cast<CondCodeSDNode>(N0.getOperand(2))->get()),
   4408                          NegOne, DAG.getConstant(0, VT));
   4409   }
   4410 
   4411   // fold (sext x) -> (zext x) if the sign bit is known zero.
   4412   if ((!LegalOperations || TLI.isOperationLegal(ISD::ZERO_EXTEND, VT)) &&
   4413       DAG.SignBitIsZero(N0))
   4414     return DAG.getNode(ISD::ZERO_EXTEND, N->getDebugLoc(), VT, N0);
   4415 
   4416   return SDValue();
   4417 }
   4418 
   4419 // isTruncateOf - If N is a truncate of some other value, return true, record
   4420 // the value being truncated in Op and which of Op's bits are zero in KnownZero.
   4421 // This function computes KnownZero to avoid a duplicated call to
   4422 // ComputeMaskedBits in the caller.
   4423 static bool isTruncateOf(SelectionDAG &DAG, SDValue N, SDValue &Op,
   4424                          APInt &KnownZero) {
   4425   APInt KnownOne;
   4426   if (N->getOpcode() == ISD::TRUNCATE) {
   4427     Op = N->getOperand(0);
   4428     DAG.ComputeMaskedBits(Op, KnownZero, KnownOne);
   4429     return true;
   4430   }
   4431 
   4432   if (N->getOpcode() != ISD::SETCC || N->getValueType(0) != MVT::i1 ||
   4433       cast<CondCodeSDNode>(N->getOperand(2))->get() != ISD::SETNE)
   4434     return false;
   4435 
   4436   SDValue Op0 = N->getOperand(0);
   4437   SDValue Op1 = N->getOperand(1);
   4438   assert(Op0.getValueType() == Op1.getValueType());
   4439 
   4440   ConstantSDNode *COp0 = dyn_cast<ConstantSDNode>(Op0);
   4441   ConstantSDNode *COp1 = dyn_cast<ConstantSDNode>(Op1);
   4442   if (COp0 && COp0->isNullValue())
   4443     Op = Op1;
   4444   else if (COp1 && COp1->isNullValue())
   4445     Op = Op0;
   4446   else
   4447     return false;
   4448 
   4449   DAG.ComputeMaskedBits(Op, KnownZero, KnownOne);
   4450 
   4451   if (!(KnownZero | APInt(Op.getValueSizeInBits(), 1)).isAllOnesValue())
   4452     return false;
   4453 
   4454   return true;
   4455 }
   4456 
   4457 SDValue DAGCombiner::visitZERO_EXTEND(SDNode *N) {
   4458   SDValue N0 = N->getOperand(0);
   4459   EVT VT = N->getValueType(0);
   4460 
   4461   // fold (zext c1) -> c1
   4462   if (isa<ConstantSDNode>(N0))
   4463     return DAG.getNode(ISD::ZERO_EXTEND, N->getDebugLoc(), VT, N0);
   4464   // fold (zext (zext x)) -> (zext x)
   4465   // fold (zext (aext x)) -> (zext x)
   4466   if (N0.getOpcode() == ISD::ZERO_EXTEND || N0.getOpcode() == ISD::ANY_EXTEND)
   4467     return DAG.getNode(ISD::ZERO_EXTEND, N->getDebugLoc(), VT,
   4468                        N0.getOperand(0));
   4469 
   4470   // fold (zext (truncate x)) -> (zext x) or
   4471   //      (zext (truncate x)) -> (truncate x)
   4472   // This is valid when the truncated bits of x are already zero.
   4473   // FIXME: We should extend this to work for vectors too.
   4474   SDValue Op;
   4475   APInt KnownZero;
   4476   if (!VT.isVector() && isTruncateOf(DAG, N0, Op, KnownZero)) {
   4477     APInt TruncatedBits =
   4478       (Op.getValueSizeInBits() == N0.getValueSizeInBits()) ?
   4479       APInt(Op.getValueSizeInBits(), 0) :
   4480       APInt::getBitsSet(Op.getValueSizeInBits(),
   4481                         N0.getValueSizeInBits(),
   4482                         std::min(Op.getValueSizeInBits(),
   4483                                  VT.getSizeInBits()));
   4484     if (TruncatedBits == (KnownZero & TruncatedBits)) {
   4485       if (VT.bitsGT(Op.getValueType()))
   4486         return DAG.getNode(ISD::ZERO_EXTEND, N->getDebugLoc(), VT, Op);
   4487       if (VT.bitsLT(Op.getValueType()))
   4488         return DAG.getNode(ISD::TRUNCATE, N->getDebugLoc(), VT, Op);
   4489 
   4490       return Op;
   4491     }
   4492   }
   4493 
   4494   // fold (zext (truncate (load x))) -> (zext (smaller load x))
   4495   // fold (zext (truncate (srl (load x), c))) -> (zext (small load (x+c/n)))
   4496   if (N0.getOpcode() == ISD::TRUNCATE) {
   4497     SDValue NarrowLoad = ReduceLoadWidth(N0.getNode());
   4498     if (NarrowLoad.getNode()) {
   4499       SDNode* oye = N0.getNode()->getOperand(0).getNode();
   4500       if (NarrowLoad.getNode() != N0.getNode()) {
   4501         CombineTo(N0.getNode(), NarrowLoad);
   4502         // CombineTo deleted the truncate, if needed, but not what's under it.
   4503         AddToWorkList(oye);
   4504       }
   4505       return SDValue(N, 0);   // Return N so it doesn't get rechecked!
   4506     }
   4507   }
   4508 
   4509   // fold (zext (truncate x)) -> (and x, mask)
   4510   if (N0.getOpcode() == ISD::TRUNCATE &&
   4511       (!LegalOperations || TLI.isOperationLegal(ISD::AND, VT))) {
   4512 
   4513     // fold (zext (truncate (load x))) -> (zext (smaller load x))
   4514     // fold (zext (truncate (srl (load x), c))) -> (zext (smaller load (x+c/n)))
   4515     SDValue NarrowLoad = ReduceLoadWidth(N0.getNode());
   4516     if (NarrowLoad.getNode()) {
   4517       SDNode* oye = N0.getNode()->getOperand(0).getNode();
   4518       if (NarrowLoad.getNode() != N0.getNode()) {
   4519         CombineTo(N0.getNode(), NarrowLoad);
   4520         // CombineTo deleted the truncate, if needed, but not what's under it.
   4521         AddToWorkList(oye);
   4522       }
   4523       return SDValue(N, 0);   // Return N so it doesn't get rechecked!
   4524     }
   4525 
   4526     SDValue Op = N0.getOperand(0);
   4527     if (Op.getValueType().bitsLT(VT)) {
   4528       Op = DAG.getNode(ISD::ANY_EXTEND, N->getDebugLoc(), VT, Op);
   4529     } else if (Op.getValueType().bitsGT(VT)) {
   4530       Op = DAG.getNode(ISD::TRUNCATE, N->getDebugLoc(), VT, Op);
   4531     }
   4532     return DAG.getZeroExtendInReg(Op, N->getDebugLoc(),
   4533                                   N0.getValueType().getScalarType());
   4534   }
   4535 
   4536   // Fold (zext (and (trunc x), cst)) -> (and x, cst),
   4537   // if either of the casts is not free.
   4538   if (N0.getOpcode() == ISD::AND &&
   4539       N0.getOperand(0).getOpcode() == ISD::TRUNCATE &&
   4540       N0.getOperand(1).getOpcode() == ISD::Constant &&
   4541       (!TLI.isTruncateFree(N0.getOperand(0).getOperand(0).getValueType(),
   4542                            N0.getValueType()) ||
   4543        !TLI.isZExtFree(N0.getValueType(), VT))) {
   4544     SDValue X = N0.getOperand(0).getOperand(0);
   4545     if (X.getValueType().bitsLT(VT)) {
   4546       X = DAG.getNode(ISD::ANY_EXTEND, X.getDebugLoc(), VT, X);
   4547     } else if (X.getValueType().bitsGT(VT)) {
   4548       X = DAG.getNode(ISD::TRUNCATE, X.getDebugLoc(), VT, X);
   4549     }
   4550     APInt Mask = cast<ConstantSDNode>(N0.getOperand(1))->getAPIntValue();
   4551     Mask = Mask.zext(VT.getSizeInBits());
   4552     return DAG.getNode(ISD::AND, N->getDebugLoc(), VT,
   4553                        X, DAG.getConstant(Mask, VT));
   4554   }
   4555 
   4556   // fold (zext (load x)) -> (zext (truncate (zextload x)))
   4557   // None of the supported targets knows how to perform load and vector_zext
   4558   // on vectors in one instruction.  We only perform this transformation on
   4559   // scalars.
   4560   if (ISD::isNON_EXTLoad(N0.getNode()) && !VT.isVector() &&
   4561       ((!LegalOperations && !cast<LoadSDNode>(N0)->isVolatile()) ||
   4562        TLI.isLoadExtLegal(ISD::ZEXTLOAD, N0.getValueType()))) {
   4563     bool DoXform = true;
   4564     SmallVector<SDNode*, 4> SetCCs;
   4565     if (!N0.hasOneUse())
   4566       DoXform = ExtendUsesToFormExtLoad(N, N0, ISD::ZERO_EXTEND, SetCCs, TLI);
   4567     if (DoXform) {
   4568       LoadSDNode *LN0 = cast<LoadSDNode>(N0);
   4569       SDValue ExtLoad = DAG.getExtLoad(ISD::ZEXTLOAD, N->getDebugLoc(), VT,
   4570                                        LN0->getChain(),
   4571                                        LN0->getBasePtr(), LN0->getPointerInfo(),
   4572                                        N0.getValueType(),
   4573                                        LN0->isVolatile(), LN0->isNonTemporal(),
   4574                                        LN0->getAlignment());
   4575       CombineTo(N, ExtLoad);
   4576       SDValue Trunc = DAG.getNode(ISD::TRUNCATE, N0.getDebugLoc(),
   4577                                   N0.getValueType(), ExtLoad);
   4578       CombineTo(N0.getNode(), Trunc, ExtLoad.getValue(1));
   4579 
   4580       ExtendSetCCUses(SetCCs, Trunc, ExtLoad, N->getDebugLoc(),
   4581                       ISD::ZERO_EXTEND);
   4582       return SDValue(N, 0);   // Return N so it doesn't get rechecked!
   4583     }
   4584   }
   4585 
   4586   // fold (zext (and/or/xor (load x), cst)) ->
   4587   //      (and/or/xor (zextload x), (zext cst))
   4588   if ((N0.getOpcode() == ISD::AND || N0.getOpcode() == ISD::OR ||
   4589        N0.getOpcode() == ISD::XOR) &&
   4590       isa<LoadSDNode>(N0.getOperand(0)) &&
   4591       N0.getOperand(1).getOpcode() == ISD::Constant &&
   4592       TLI.isLoadExtLegal(ISD::ZEXTLOAD, N0.getValueType()) &&
   4593       (!LegalOperations && TLI.isOperationLegal(N0.getOpcode(), VT))) {
   4594     LoadSDNode *LN0 = cast<LoadSDNode>(N0.getOperand(0));
   4595     if (LN0->getExtensionType() != ISD::SEXTLOAD) {
   4596       bool DoXform = true;
   4597       SmallVector<SDNode*, 4> SetCCs;
   4598       if (!N0.hasOneUse())
   4599         DoXform = ExtendUsesToFormExtLoad(N, N0.getOperand(0), ISD::ZERO_EXTEND,
   4600                                           SetCCs, TLI);
   4601       if (DoXform) {
   4602         SDValue ExtLoad = DAG.getExtLoad(ISD::ZEXTLOAD, LN0->getDebugLoc(), VT,
   4603                                          LN0->getChain(), LN0->getBasePtr(),
   4604                                          LN0->getPointerInfo(),
   4605                                          LN0->getMemoryVT(),
   4606                                          LN0->isVolatile(),
   4607                                          LN0->isNonTemporal(),
   4608                                          LN0->getAlignment());
   4609         APInt Mask = cast<ConstantSDNode>(N0.getOperand(1))->getAPIntValue();
   4610         Mask = Mask.zext(VT.getSizeInBits());
   4611         SDValue And = DAG.getNode(N0.getOpcode(), N->getDebugLoc(), VT,
   4612                                   ExtLoad, DAG.getConstant(Mask, VT));
   4613         SDValue Trunc = DAG.getNode(ISD::TRUNCATE,
   4614                                     N0.getOperand(0).getDebugLoc(),
   4615                                     N0.getOperand(0).getValueType(), ExtLoad);
   4616         CombineTo(N, And);
   4617         CombineTo(N0.getOperand(0).getNode(), Trunc, ExtLoad.getValue(1));
   4618         ExtendSetCCUses(SetCCs, Trunc, ExtLoad, N->getDebugLoc(),
   4619                         ISD::ZERO_EXTEND);
   4620         return SDValue(N, 0);   // Return N so it doesn't get rechecked!
   4621       }
   4622     }
   4623   }
   4624 
   4625   // fold (zext (zextload x)) -> (zext (truncate (zextload x)))
   4626   // fold (zext ( extload x)) -> (zext (truncate (zextload x)))
   4627   if ((ISD::isZEXTLoad(N0.getNode()) || ISD::isEXTLoad(N0.getNode())) &&
   4628       ISD::isUNINDEXEDLoad(N0.getNode()) && N0.hasOneUse()) {
   4629     LoadSDNode *LN0 = cast<LoadSDNode>(N0);
   4630     EVT MemVT = LN0->getMemoryVT();
   4631     if ((!LegalOperations && !LN0->isVolatile()) ||
   4632         TLI.isLoadExtLegal(ISD::ZEXTLOAD, MemVT)) {
   4633       SDValue ExtLoad = DAG.getExtLoad(ISD::ZEXTLOAD, N->getDebugLoc(), VT,
   4634                                        LN0->getChain(),
   4635                                        LN0->getBasePtr(), LN0->getPointerInfo(),
   4636                                        MemVT,
   4637                                        LN0->isVolatile(), LN0->isNonTemporal(),
   4638                                        LN0->getAlignment());
   4639       CombineTo(N, ExtLoad);
   4640       CombineTo(N0.getNode(),
   4641                 DAG.getNode(ISD::TRUNCATE, N0.getDebugLoc(), N0.getValueType(),
   4642                             ExtLoad),
   4643                 ExtLoad.getValue(1));
   4644       return SDValue(N, 0);   // Return N so it doesn't get rechecked!
   4645     }
   4646   }
   4647 
   4648   if (N0.getOpcode() == ISD::SETCC) {
   4649     if (!LegalOperations && VT.isVector()) {
   4650       // zext(setcc) -> (and (vsetcc), (1, 1, ...) for vectors.
   4651       // Only do this before legalize for now.
   4652       EVT N0VT = N0.getOperand(0).getValueType();
   4653       EVT EltVT = VT.getVectorElementType();
   4654       SmallVector<SDValue,8> OneOps(VT.getVectorNumElements(),
   4655                                     DAG.getConstant(1, EltVT));
   4656       if (VT.getSizeInBits() == N0VT.getSizeInBits())
   4657         // We know that the # elements of the results is the same as the
   4658         // # elements of the compare (and the # elements of the compare result
   4659         // for that matter).  Check to see that they are the same size.  If so,
   4660         // we know that the element size of the sext'd result matches the
   4661         // element size of the compare operands.
   4662         return DAG.getNode(ISD::AND, N->getDebugLoc(), VT,
   4663                            DAG.getSetCC(N->getDebugLoc(), VT, N0.getOperand(0),
   4664                                          N0.getOperand(1),
   4665                                  cast<CondCodeSDNode>(N0.getOperand(2))->get()),
   4666                            DAG.getNode(ISD::BUILD_VECTOR, N->getDebugLoc(), VT,
   4667                                        &OneOps[0], OneOps.size()));
   4668 
   4669       // If the desired elements are smaller or larger than the source
   4670       // elements we can use a matching integer vector type and then
   4671       // truncate/sign extend
   4672       EVT MatchingElementType =
   4673         EVT::getIntegerVT(*DAG.getContext(),
   4674                           N0VT.getScalarType().getSizeInBits());
   4675       EVT MatchingVectorType =
   4676         EVT::getVectorVT(*DAG.getContext(), MatchingElementType,
   4677                          N0VT.getVectorNumElements());
   4678       SDValue VsetCC =
   4679         DAG.getSetCC(N->getDebugLoc(), MatchingVectorType, N0.getOperand(0),
   4680                       N0.getOperand(1),
   4681                       cast<CondCodeSDNode>(N0.getOperand(2))->get());
   4682       return DAG.getNode(ISD::AND, N->getDebugLoc(), VT,
   4683                          DAG.getSExtOrTrunc(VsetCC, N->getDebugLoc(), VT),
   4684                          DAG.getNode(ISD::BUILD_VECTOR, N->getDebugLoc(), VT,
   4685                                      &OneOps[0], OneOps.size()));
   4686     }
   4687 
   4688     // zext(setcc x,y,cc) -> select_cc x, y, 1, 0, cc
   4689     SDValue SCC =
   4690       SimplifySelectCC(N->getDebugLoc(), N0.getOperand(0), N0.getOperand(1),
   4691                        DAG.getConstant(1, VT), DAG.getConstant(0, VT),
   4692                        cast<CondCodeSDNode>(N0.getOperand(2))->get(), true);
   4693     if (SCC.getNode()) return SCC;
   4694   }
   4695 
   4696   // (zext (shl (zext x), cst)) -> (shl (zext x), cst)
   4697   if ((N0.getOpcode() == ISD::SHL || N0.getOpcode() == ISD::SRL) &&
   4698       isa<ConstantSDNode>(N0.getOperand(1)) &&
   4699       N0.getOperand(0).getOpcode() == ISD::ZERO_EXTEND &&
   4700       N0.hasOneUse()) {
   4701     SDValue ShAmt = N0.getOperand(1);
   4702     unsigned ShAmtVal = cast<ConstantSDNode>(ShAmt)->getZExtValue();
   4703     if (N0.getOpcode() == ISD::SHL) {
   4704       SDValue InnerZExt = N0.getOperand(0);
   4705       // If the original shl may be shifting out bits, do not perform this
   4706       // transformation.
   4707       unsigned KnownZeroBits = InnerZExt.getValueType().getSizeInBits() -
   4708         InnerZExt.getOperand(0).getValueType().getSizeInBits();
   4709       if (ShAmtVal > KnownZeroBits)
   4710         return SDValue();
   4711     }
   4712 
   4713     DebugLoc DL = N->getDebugLoc();
   4714 
   4715     // Ensure that the shift amount is wide enough for the shifted value.
   4716     if (VT.getSizeInBits() >= 256)
   4717       ShAmt = DAG.getNode(ISD::ZERO_EXTEND, DL, MVT::i32, ShAmt);
   4718 
   4719     return DAG.getNode(N0.getOpcode(), DL, VT,
   4720                        DAG.getNode(ISD::ZERO_EXTEND, DL, VT, N0.getOperand(0)),
   4721                        ShAmt);
   4722   }
   4723 
   4724   return SDValue();
   4725 }
   4726 
   4727 SDValue DAGCombiner::visitANY_EXTEND(SDNode *N) {
   4728   SDValue N0 = N->getOperand(0);
   4729   EVT VT = N->getValueType(0);
   4730 
   4731   // fold (aext c1) -> c1
   4732   if (isa<ConstantSDNode>(N0))
   4733     return DAG.getNode(ISD::ANY_EXTEND, N->getDebugLoc(), VT, N0);
   4734   // fold (aext (aext x)) -> (aext x)
   4735   // fold (aext (zext x)) -> (zext x)
   4736   // fold (aext (sext x)) -> (sext x)
   4737   if (N0.getOpcode() == ISD::ANY_EXTEND  ||
   4738       N0.getOpcode() == ISD::ZERO_EXTEND ||
   4739       N0.getOpcode() == ISD::SIGN_EXTEND)
   4740     return DAG.getNode(N0.getOpcode(), N->getDebugLoc(), VT, N0.getOperand(0));
   4741 
   4742   // fold (aext (truncate (load x))) -> (aext (smaller load x))
   4743   // fold (aext (truncate (srl (load x), c))) -> (aext (small load (x+c/n)))
   4744   if (N0.getOpcode() == ISD::TRUNCATE) {
   4745     SDValue NarrowLoad = ReduceLoadWidth(N0.getNode());
   4746     if (NarrowLoad.getNode()) {
   4747       SDNode* oye = N0.getNode()->getOperand(0).getNode();
   4748       if (NarrowLoad.getNode() != N0.getNode()) {
   4749         CombineTo(N0.getNode(), NarrowLoad);
   4750         // CombineTo deleted the truncate, if needed, but not what's under it.
   4751         AddToWorkList(oye);
   4752       }
   4753       return SDValue(N, 0);   // Return N so it doesn't get rechecked!
   4754     }
   4755   }
   4756 
   4757   // fold (aext (truncate x))
   4758   if (N0.getOpcode() == ISD::TRUNCATE) {
   4759     SDValue TruncOp = N0.getOperand(0);
   4760     if (TruncOp.getValueType() == VT)
   4761       return TruncOp; // x iff x size == zext size.
   4762     if (TruncOp.getValueType().bitsGT(VT))
   4763       return DAG.getNode(ISD::TRUNCATE, N->getDebugLoc(), VT, TruncOp);
   4764     return DAG.getNode(ISD::ANY_EXTEND, N->getDebugLoc(), VT, TruncOp);
   4765   }
   4766 
   4767   // Fold (aext (and (trunc x), cst)) -> (and x, cst)
   4768   // if the trunc is not free.
   4769   if (N0.getOpcode() == ISD::AND &&
   4770       N0.getOperand(0).getOpcode() == ISD::TRUNCATE &&
   4771       N0.getOperand(1).getOpcode() == ISD::Constant &&
   4772       !TLI.isTruncateFree(N0.getOperand(0).getOperand(0).getValueType(),
   4773                           N0.getValueType())) {
   4774     SDValue X = N0.getOperand(0).getOperand(0);
   4775     if (X.getValueType().bitsLT(VT)) {
   4776       X = DAG.getNode(ISD::ANY_EXTEND, N->getDebugLoc(), VT, X);
   4777     } else if (X.getValueType().bitsGT(VT)) {
   4778       X = DAG.getNode(ISD::TRUNCATE, N->getDebugLoc(), VT, X);
   4779     }
   4780     APInt Mask = cast<ConstantSDNode>(N0.getOperand(1))->getAPIntValue();
   4781     Mask = Mask.zext(VT.getSizeInBits());
   4782     return DAG.getNode(ISD::AND, N->getDebugLoc(), VT,
   4783                        X, DAG.getConstant(Mask, VT));
   4784   }
   4785 
   4786   // fold (aext (load x)) -> (aext (truncate (extload x)))
   4787   // None of the supported targets knows how to perform load and any_ext
   4788   // on vectors in one instruction.  We only perform this transformation on
   4789   // scalars.
   4790   if (ISD::isNON_EXTLoad(N0.getNode()) && !VT.isVector() &&
   4791       ((!LegalOperations && !cast<LoadSDNode>(N0)->isVolatile()) ||
   4792        TLI.isLoadExtLegal(ISD::EXTLOAD, N0.getValueType()))) {
   4793     bool DoXform = true;
   4794     SmallVector<SDNode*, 4> SetCCs;
   4795     if (!N0.hasOneUse())
   4796       DoXform = ExtendUsesToFormExtLoad(N, N0, ISD::ANY_EXTEND, SetCCs, TLI);
   4797     if (DoXform) {
   4798       LoadSDNode *LN0 = cast<LoadSDNode>(N0);
   4799       SDValue ExtLoad = DAG.getExtLoad(ISD::EXTLOAD, N->getDebugLoc(), VT,
   4800                                        LN0->getChain(),
   4801                                        LN0->getBasePtr(), LN0->getPointerInfo(),
   4802                                        N0.getValueType(),
   4803                                        LN0->isVolatile(), LN0->isNonTemporal(),
   4804                                        LN0->getAlignment());
   4805       CombineTo(N, ExtLoad);
   4806       SDValue Trunc = DAG.getNode(ISD::TRUNCATE, N0.getDebugLoc(),
   4807                                   N0.getValueType(), ExtLoad);
   4808       CombineTo(N0.getNode(), Trunc, ExtLoad.getValue(1));
   4809       ExtendSetCCUses(SetCCs, Trunc, ExtLoad, N->getDebugLoc(),
   4810                       ISD::ANY_EXTEND);
   4811       return SDValue(N, 0);   // Return N so it doesn't get rechecked!
   4812     }
   4813   }
   4814 
   4815   // fold (aext (zextload x)) -> (aext (truncate (zextload x)))
   4816   // fold (aext (sextload x)) -> (aext (truncate (sextload x)))
   4817   // fold (aext ( extload x)) -> (aext (truncate (extload  x)))
   4818   if (N0.getOpcode() == ISD::LOAD &&
   4819       !ISD::isNON_EXTLoad(N0.getNode()) && ISD::isUNINDEXEDLoad(N0.getNode()) &&
   4820       N0.hasOneUse()) {
   4821     LoadSDNode *LN0 = cast<LoadSDNode>(N0);
   4822     EVT MemVT = LN0->getMemoryVT();
   4823     SDValue ExtLoad = DAG.getExtLoad(LN0->getExtensionType(), N->getDebugLoc(),
   4824                                      VT, LN0->getChain(), LN0->getBasePtr(),
   4825                                      LN0->getPointerInfo(), MemVT,
   4826                                      LN0->isVolatile(), LN0->isNonTemporal(),
   4827                                      LN0->getAlignment());
   4828     CombineTo(N, ExtLoad);
   4829     CombineTo(N0.getNode(),
   4830               DAG.getNode(ISD::TRUNCATE, N0.getDebugLoc(),
   4831                           N0.getValueType(), ExtLoad),
   4832               ExtLoad.getValue(1));
   4833     return SDValue(N, 0);   // Return N so it doesn't get rechecked!
   4834   }
   4835 
   4836   if (N0.getOpcode() == ISD::SETCC) {
   4837     // aext(setcc) -> sext_in_reg(vsetcc) for vectors.
   4838     // Only do this before legalize for now.
   4839     if (VT.isVector() && !LegalOperations) {
   4840       EVT N0VT = N0.getOperand(0).getValueType();
   4841         // We know that the # elements of the results is the same as the
   4842         // # elements of the compare (and the # elements of the compare result
   4843         // for that matter).  Check to see that they are the same size.  If so,
   4844         // we know that the element size of the sext'd result matches the
   4845         // element size of the compare operands.
   4846       if (VT.getSizeInBits() == N0VT.getSizeInBits())
   4847         return DAG.getSetCC(N->getDebugLoc(), VT, N0.getOperand(0),
   4848                              N0.getOperand(1),
   4849                              cast<CondCodeSDNode>(N0.getOperand(2))->get());
   4850       // If the desired elements are smaller or larger than the source
   4851       // elements we can use a matching integer vector type and then
   4852       // truncate/sign extend
   4853       else {
   4854         EVT MatchingElementType =
   4855           EVT::getIntegerVT(*DAG.getContext(),
   4856                             N0VT.getScalarType().getSizeInBits());
   4857         EVT MatchingVectorType =
   4858           EVT::getVectorVT(*DAG.getContext(), MatchingElementType,
   4859                            N0VT.getVectorNumElements());
   4860         SDValue VsetCC =
   4861           DAG.getSetCC(N->getDebugLoc(), MatchingVectorType, N0.getOperand(0),
   4862                         N0.getOperand(1),
   4863                         cast<CondCodeSDNode>(N0.getOperand(2))->get());
   4864         return DAG.getSExtOrTrunc(VsetCC, N->getDebugLoc(), VT);
   4865       }
   4866     }
   4867 
   4868     // aext(setcc x,y,cc) -> select_cc x, y, 1, 0, cc
   4869     SDValue SCC =
   4870       SimplifySelectCC(N->getDebugLoc(), N0.getOperand(0), N0.getOperand(1),
   4871                        DAG.getConstant(1, VT), DAG.getConstant(0, VT),
   4872                        cast<CondCodeSDNode>(N0.getOperand(2))->get(), true);
   4873     if (SCC.getNode())
   4874       return SCC;
   4875   }
   4876 
   4877   return SDValue();
   4878 }
   4879 
   4880 /// GetDemandedBits - See if the specified operand can be simplified with the
   4881 /// knowledge that only the bits specified by Mask are used.  If so, return the
   4882 /// simpler operand, otherwise return a null SDValue.
   4883 SDValue DAGCombiner::GetDemandedBits(SDValue V, const APInt &Mask) {
   4884   switch (V.getOpcode()) {
   4885   default: break;
   4886   case ISD::Constant: {
   4887     const ConstantSDNode *CV = cast<ConstantSDNode>(V.getNode());
   4888     assert(CV != 0 && "Const value should be ConstSDNode.");
   4889     const APInt &CVal = CV->getAPIntValue();
   4890     APInt NewVal = CVal & Mask;
   4891     if (NewVal != CVal) {
   4892       return DAG.getConstant(NewVal, V.getValueType());
   4893     }
   4894     break;
   4895   }
   4896   case ISD::OR:
   4897   case ISD::XOR:
   4898     // If the LHS or RHS don't contribute bits to the or, drop them.
   4899     if (DAG.MaskedValueIsZero(V.getOperand(0), Mask))
   4900       return V.getOperand(1);
   4901     if (DAG.MaskedValueIsZero(V.getOperand(1), Mask))
   4902       return V.getOperand(0);
   4903     break;
   4904   case ISD::SRL:
   4905     // Only look at single-use SRLs.
   4906     if (!V.getNode()->hasOneUse())
   4907       break;
   4908     if (ConstantSDNode *RHSC = dyn_cast<ConstantSDNode>(V.getOperand(1))) {
   4909       // See if we can recursively simplify the LHS.
   4910       unsigned Amt = RHSC->getZExtValue();
   4911 
   4912       // Watch out for shift count overflow though.
   4913       if (Amt >= Mask.getBitWidth()) break;
   4914       APInt NewMask = Mask << Amt;
   4915       SDValue SimplifyLHS = GetDemandedBits(V.getOperand(0), NewMask);
   4916       if (SimplifyLHS.getNode())
   4917         return DAG.getNode(ISD::SRL, V.getDebugLoc(), V.getValueType(),
   4918                            SimplifyLHS, V.getOperand(1));
   4919     }
   4920   }
   4921   return SDValue();
   4922 }
   4923 
   4924 /// ReduceLoadWidth - If the result of a wider load is shifted to right of N
   4925 /// bits and then truncated to a narrower type and where N is a multiple
   4926 /// of number of bits of the narrower type, transform it to a narrower load
   4927 /// from address + N / num of bits of new type. If the result is to be
   4928 /// extended, also fold the extension to form a extending load.
   4929 SDValue DAGCombiner::ReduceLoadWidth(SDNode *N) {
   4930   unsigned Opc = N->getOpcode();
   4931 
   4932   ISD::LoadExtType ExtType = ISD::NON_EXTLOAD;
   4933   SDValue N0 = N->getOperand(0);
   4934   EVT VT = N->getValueType(0);
   4935   EVT ExtVT = VT;
   4936 
   4937   // This transformation isn't valid for vector loads.
   4938   if (VT.isVector())
   4939     return SDValue();
   4940 
   4941   // Special case: SIGN_EXTEND_INREG is basically truncating to ExtVT then
   4942   // extended to VT.
   4943   if (Opc == ISD::SIGN_EXTEND_INREG) {
   4944     ExtType = ISD::SEXTLOAD;
   4945     ExtVT = cast<VTSDNode>(N->getOperand(1))->getVT();
   4946   } else if (Opc == ISD::SRL) {
   4947     // Another special-case: SRL is basically zero-extending a narrower value.
   4948     ExtType = ISD::ZEXTLOAD;
   4949     N0 = SDValue(N, 0);
   4950     ConstantSDNode *N01 = dyn_cast<ConstantSDNode>(N0.getOperand(1));
   4951     if (!N01) return SDValue();
   4952     ExtVT = EVT::getIntegerVT(*DAG.getContext(),
   4953                               VT.getSizeInBits() - N01->getZExtValue());
   4954   }
   4955   if (LegalOperations && !TLI.isLoadExtLegal(ExtType, ExtVT))
   4956     return SDValue();
   4957 
   4958   unsigned EVTBits = ExtVT.getSizeInBits();
   4959 
   4960   // Do not generate loads of non-round integer types since these can
   4961   // be expensive (and would be wrong if the type is not byte sized).
   4962   if (!ExtVT.isRound())
   4963     return SDValue();
   4964 
   4965   unsigned ShAmt = 0;
   4966   if (N0.getOpcode() == ISD::SRL && N0.hasOneUse()) {
   4967     if (ConstantSDNode *N01 = dyn_cast<ConstantSDNode>(N0.getOperand(1))) {
   4968       ShAmt = N01->getZExtValue();
   4969       // Is the shift amount a multiple of size of VT?
   4970       if ((ShAmt & (EVTBits-1)) == 0) {
   4971         N0 = N0.getOperand(0);
   4972         // Is the load width a multiple of size of VT?
   4973         if ((N0.getValueType().getSizeInBits() & (EVTBits-1)) != 0)
   4974           return SDValue();
   4975       }
   4976 
   4977       // At this point, we must have a load or else we can't do the transform.
   4978       if (!isa<LoadSDNode>(N0)) return SDValue();
   4979 
   4980       // If the shift amount is larger than the input type then we're not
   4981       // accessing any of the loaded bytes.  If the load was a zextload/extload
   4982       // then the result of the shift+trunc is zero/undef (handled elsewhere).
   4983       // If the load was a sextload then the result is a splat of the sign bit
   4984       // of the extended byte.  This is not worth optimizing for.
   4985       if (ShAmt >= cast<LoadSDNode>(N0)->getMemoryVT().getSizeInBits())
   4986         return SDValue();
   4987     }
   4988   }
   4989 
   4990   // If the load is shifted left (and the result isn't shifted back right),
   4991   // we can fold the truncate through the shift.
   4992   unsigned ShLeftAmt = 0;
   4993   if (ShAmt == 0 && N0.getOpcode() == ISD::SHL && N0.hasOneUse() &&
   4994       ExtVT == VT && TLI.isNarrowingProfitable(N0.getValueType(), VT)) {
   4995     if (ConstantSDNode *N01 = dyn_cast<ConstantSDNode>(N0.getOperand(1))) {
   4996       ShLeftAmt = N01->getZExtValue();
   4997       N0 = N0.getOperand(0);
   4998     }
   4999   }
   5000 
   5001   // If we haven't found a load, we can't narrow it.  Don't transform one with
   5002   // multiple uses, this would require adding a new load.
   5003   if (!isa<LoadSDNode>(N0) || !N0.hasOneUse() ||
   5004       // Don't change the width of a volatile load.
   5005       cast<LoadSDNode>(N0)->isVolatile())
   5006     return SDValue();
   5007 
   5008   // Verify that we are actually reducing a load width here.
   5009   if (cast<LoadSDNode>(N0)->getMemoryVT().getSizeInBits() < EVTBits)
   5010     return SDValue();
   5011 
   5012   LoadSDNode *LN0 = cast<LoadSDNode>(N0);
   5013   EVT PtrType = N0.getOperand(1).getValueType();
   5014 
   5015   // For big endian targets, we need to adjust the offset to the pointer to
   5016   // load the correct bytes.
   5017   if (TLI.isBigEndian()) {
   5018     unsigned LVTStoreBits = LN0->getMemoryVT().getStoreSizeInBits();
   5019     unsigned EVTStoreBits = ExtVT.getStoreSizeInBits();
   5020     ShAmt = LVTStoreBits - EVTStoreBits - ShAmt;
   5021   }
   5022 
   5023   uint64_t PtrOff = ShAmt / 8;
   5024   unsigned NewAlign = MinAlign(LN0->getAlignment(), PtrOff);
   5025   SDValue NewPtr = DAG.getNode(ISD::ADD, LN0->getDebugLoc(),
   5026                                PtrType, LN0->getBasePtr(),
   5027                                DAG.getConstant(PtrOff, PtrType));
   5028   AddToWorkList(NewPtr.getNode());
   5029 
   5030   SDValue Load;
   5031   if (ExtType == ISD::NON_EXTLOAD)
   5032     Load =  DAG.getLoad(VT, N0.getDebugLoc(), LN0->getChain(), NewPtr,
   5033                         LN0->getPointerInfo().getWithOffset(PtrOff),
   5034                         LN0->isVolatile(), LN0->isNonTemporal(),
   5035                         LN0->isInvariant(), NewAlign);
   5036   else
   5037     Load = DAG.getExtLoad(ExtType, N0.getDebugLoc(), VT, LN0->getChain(),NewPtr,
   5038                           LN0->getPointerInfo().getWithOffset(PtrOff),
   5039                           ExtVT, LN0->isVolatile(), LN0->isNonTemporal(),
   5040                           NewAlign);
   5041 
   5042   // Replace the old load's chain with the new load's chain.
   5043   WorkListRemover DeadNodes(*this);
   5044   DAG.ReplaceAllUsesOfValueWith(N0.getValue(1), Load.getValue(1),
   5045                                 &DeadNodes);
   5046 
   5047   // Shift the result left, if we've swallowed a left shift.
   5048   SDValue Result = Load;
   5049   if (ShLeftAmt != 0) {
   5050     EVT ShImmTy = getShiftAmountTy(Result.getValueType());
   5051     if (!isUIntN(ShImmTy.getSizeInBits(), ShLeftAmt))
   5052       ShImmTy = VT;
   5053     Result = DAG.getNode(ISD::SHL, N0.getDebugLoc(), VT,
   5054                          Result, DAG.getConstant(ShLeftAmt, ShImmTy));
   5055   }
   5056 
   5057   // Return the new loaded value.
   5058   return Result;
   5059 }
   5060 
   5061 SDValue DAGCombiner::visitSIGN_EXTEND_INREG(SDNode *N) {
   5062   SDValue N0 = N->getOperand(0);
   5063   SDValue N1 = N->getOperand(1);
   5064   EVT VT = N->getValueType(0);
   5065   EVT EVT = cast<VTSDNode>(N1)->getVT();
   5066   unsigned VTBits = VT.getScalarType().getSizeInBits();
   5067   unsigned EVTBits = EVT.getScalarType().getSizeInBits();
   5068 
   5069   // fold (sext_in_reg c1) -> c1
   5070   if (isa<ConstantSDNode>(N0) || N0.getOpcode() == ISD::UNDEF)
   5071     return DAG.getNode(ISD::SIGN_EXTEND_INREG, N->getDebugLoc(), VT, N0, N1);
   5072 
   5073   // If the input is already sign extended, just drop the extension.
   5074   if (DAG.ComputeNumSignBits(N0) >= VTBits-EVTBits+1)
   5075     return N0;
   5076 
   5077   // fold (sext_in_reg (sext_in_reg x, VT2), VT1) -> (sext_in_reg x, minVT) pt2
   5078   if (N0.getOpcode() == ISD::SIGN_EXTEND_INREG &&
   5079       EVT.bitsLT(cast<VTSDNode>(N0.getOperand(1))->getVT())) {
   5080     return DAG.getNode(ISD::SIGN_EXTEND_INREG, N->getDebugLoc(), VT,
   5081                        N0.getOperand(0), N1);
   5082   }
   5083 
   5084   // fold (sext_in_reg (sext x)) -> (sext x)
   5085   // fold (sext_in_reg (aext x)) -> (sext x)
   5086   // if x is small enough.
   5087   if (N0.getOpcode() == ISD::SIGN_EXTEND || N0.getOpcode() == ISD::ANY_EXTEND) {
   5088     SDValue N00 = N0.getOperand(0);
   5089     if (N00.getValueType().getScalarType().getSizeInBits() <= EVTBits &&
   5090         (!LegalOperations || TLI.isOperationLegal(ISD::SIGN_EXTEND, VT)))
   5091       return DAG.getNode(ISD::SIGN_EXTEND, N->getDebugLoc(), VT, N00, N1);
   5092   }
   5093 
   5094   // fold (sext_in_reg x) -> (zext_in_reg x) if the sign bit is known zero.
   5095   if (DAG.MaskedValueIsZero(N0, APInt::getBitsSet(VTBits, EVTBits-1, EVTBits)))
   5096     return DAG.getZeroExtendInReg(N0, N->getDebugLoc(), EVT);
   5097 
   5098   // fold operands of sext_in_reg based on knowledge that the top bits are not
   5099   // demanded.
   5100   if (SimplifyDemandedBits(SDValue(N, 0)))
   5101     return SDValue(N, 0);
   5102 
   5103   // fold (sext_in_reg (load x)) -> (smaller sextload x)
   5104   // fold (sext_in_reg (srl (load x), c)) -> (smaller sextload (x+c/evtbits))
   5105   SDValue NarrowLoad = ReduceLoadWidth(N);
   5106   if (NarrowLoad.getNode())
   5107     return NarrowLoad;
   5108 
   5109   // fold (sext_in_reg (srl X, 24), i8) -> (sra X, 24)
   5110   // fold (sext_in_reg (srl X, 23), i8) -> (sra X, 23) iff possible.
   5111   // We already fold "(sext_in_reg (srl X, 25), i8) -> srl X, 25" above.
   5112   if (N0.getOpcode() == ISD::SRL) {
   5113     if (ConstantSDNode *ShAmt = dyn_cast<ConstantSDNode>(N0.getOperand(1)))
   5114       if (ShAmt->getZExtValue()+EVTBits <= VTBits) {
   5115         // We can turn this into an SRA iff the input to the SRL is already sign
   5116         // extended enough.
   5117         unsigned InSignBits = DAG.ComputeNumSignBits(N0.getOperand(0));
   5118         if (VTBits-(ShAmt->getZExtValue()+EVTBits) < InSignBits)
   5119           return DAG.getNode(ISD::SRA, N->getDebugLoc(), VT,
   5120                              N0.getOperand(0), N0.getOperand(1));
   5121       }
   5122   }
   5123 
   5124   // fold (sext_inreg (extload x)) -> (sextload x)
   5125   if (ISD::isEXTLoad(N0.getNode()) &&
   5126       ISD::isUNINDEXEDLoad(N0.getNode()) &&
   5127       EVT == cast<LoadSDNode>(N0)->getMemoryVT() &&
   5128       ((!LegalOperations && !cast<LoadSDNode>(N0)->isVolatile()) ||
   5129        TLI.isLoadExtLegal(ISD::SEXTLOAD, EVT))) {
   5130     LoadSDNode *LN0 = cast<LoadSDNode>(N0);
   5131     SDValue ExtLoad = DAG.getExtLoad(ISD::SEXTLOAD, N->getDebugLoc(), VT,
   5132                                      LN0->getChain(),
   5133                                      LN0->getBasePtr(), LN0->getPointerInfo(),
   5134                                      EVT,
   5135                                      LN0->isVolatile(), LN0->isNonTemporal(),
   5136                                      LN0->getAlignment());
   5137     CombineTo(N, ExtLoad);
   5138     CombineTo(N0.getNode(), ExtLoad, ExtLoad.getValue(1));
   5139     return SDValue(N, 0);   // Return N so it doesn't get rechecked!
   5140   }
   5141   // fold (sext_inreg (zextload x)) -> (sextload x) iff load has one use
   5142   if (ISD::isZEXTLoad(N0.getNode()) && ISD::isUNINDEXEDLoad(N0.getNode()) &&
   5143       N0.hasOneUse() &&
   5144       EVT == cast<LoadSDNode>(N0)->getMemoryVT() &&
   5145       ((!LegalOperations && !cast<LoadSDNode>(N0)->isVolatile()) ||
   5146        TLI.isLoadExtLegal(ISD::SEXTLOAD, EVT))) {
   5147     LoadSDNode *LN0 = cast<LoadSDNode>(N0);
   5148     SDValue ExtLoad = DAG.getExtLoad(ISD::SEXTLOAD, N->getDebugLoc(), VT,
   5149                                      LN0->getChain(),
   5150                                      LN0->getBasePtr(), LN0->getPointerInfo(),
   5151                                      EVT,
   5152                                      LN0->isVolatile(), LN0->isNonTemporal(),
   5153                                      LN0->getAlignment());
   5154     CombineTo(N, ExtLoad);
   5155     CombineTo(N0.getNode(), ExtLoad, ExtLoad.getValue(1));
   5156     return SDValue(N, 0);   // Return N so it doesn't get rechecked!
   5157   }
   5158 
   5159   // Form (sext_inreg (bswap >> 16)) or (sext_inreg (rotl (bswap) 16))
   5160   if (EVTBits <= 16 && N0.getOpcode() == ISD::OR) {
   5161     SDValue BSwap = MatchBSwapHWordLow(N0.getNode(), N0.getOperand(0),
   5162                                        N0.getOperand(1), false);
   5163     if (BSwap.getNode() != 0)
   5164       return DAG.getNode(ISD::SIGN_EXTEND_INREG, N->getDebugLoc(), VT,
   5165                          BSwap, N1);
   5166   }
   5167 
   5168   return SDValue();
   5169 }
   5170 
   5171 SDValue DAGCombiner::visitTRUNCATE(SDNode *N) {
   5172   SDValue N0 = N->getOperand(0);
   5173   EVT VT = N->getValueType(0);
   5174   bool isLE = TLI.isLittleEndian();
   5175 
   5176   // noop truncate
   5177   if (N0.getValueType() == N->getValueType(0))
   5178     return N0;
   5179   // fold (truncate c1) -> c1
   5180   if (isa<ConstantSDNode>(N0))
   5181     return DAG.getNode(ISD::TRUNCATE, N->getDebugLoc(), VT, N0);
   5182   // fold (truncate (truncate x)) -> (truncate x)
   5183   if (N0.getOpcode() == ISD::TRUNCATE)
   5184     return DAG.getNode(ISD::TRUNCATE, N->getDebugLoc(), VT, N0.getOperand(0));
   5185   // fold (truncate (ext x)) -> (ext x) or (truncate x) or x
   5186   if (N0.getOpcode() == ISD::ZERO_EXTEND ||
   5187       N0.getOpcode() == ISD::SIGN_EXTEND ||
   5188       N0.getOpcode() == ISD::ANY_EXTEND) {
   5189     if (N0.getOperand(0).getValueType().bitsLT(VT))
   5190       // if the source is smaller than the dest, we still need an extend
   5191       return DAG.getNode(N0.getOpcode(), N->getDebugLoc(), VT,
   5192                          N0.getOperand(0));
   5193     else if (N0.getOperand(0).getValueType().bitsGT(VT))
   5194       // if the source is larger than the dest, than we just need the truncate
   5195       return DAG.getNode(ISD::TRUNCATE, N->getDebugLoc(), VT, N0.getOperand(0));
   5196     else
   5197       // if the source and dest are the same type, we can drop both the extend
   5198       // and the truncate.
   5199       return N0.getOperand(0);
   5200   }
   5201 
   5202   // Fold extract-and-trunc into a narrow extract. For example:
   5203   //   i64 x = EXTRACT_VECTOR_ELT(v2i64 val, i32 1)
   5204   //   i32 y = TRUNCATE(i64 x)
   5205   //        -- becomes --
   5206   //   v16i8 b = BITCAST (v2i64 val)
   5207   //   i8 x = EXTRACT_VECTOR_ELT(v16i8 b, i32 8)
   5208   //
   5209   // Note: We only run this optimization after type legalization (which often
   5210   // creates this pattern) and before operation legalization after which
   5211   // we need to be more careful about the vector instructions that we generate.
   5212   if (N0.getOpcode() == ISD::EXTRACT_VECTOR_ELT &&
   5213       LegalTypes && !LegalOperations && N0->hasOneUse()) {
   5214 
   5215     EVT VecTy = N0.getOperand(0).getValueType();
   5216     EVT ExTy = N0.getValueType();
   5217     EVT TrTy = N->getValueType(0);
   5218 
   5219     unsigned NumElem = VecTy.getVectorNumElements();
   5220     unsigned SizeRatio = ExTy.getSizeInBits()/TrTy.getSizeInBits();
   5221 
   5222     EVT NVT = EVT::getVectorVT(*DAG.getContext(), TrTy, SizeRatio * NumElem);
   5223     assert(NVT.getSizeInBits() == VecTy.getSizeInBits() && "Invalid Size");
   5224 
   5225     SDValue EltNo = N0->getOperand(1);
   5226     if (isa<ConstantSDNode>(EltNo) && isTypeLegal(NVT)) {
   5227       int Elt = cast<ConstantSDNode>(EltNo)->getZExtValue();
   5228 
   5229       int Index = isLE ? (Elt*SizeRatio) : (Elt*SizeRatio + (SizeRatio-1));
   5230 
   5231       SDValue V = DAG.getNode(ISD::BITCAST, N->getDebugLoc(),
   5232                               NVT, N0.getOperand(0));
   5233 
   5234       return DAG.getNode(ISD::EXTRACT_VECTOR_ELT,
   5235                          N->getDebugLoc(), TrTy, V,
   5236                          DAG.getConstant(Index, MVT::i32));
   5237     }
   5238   }
   5239 
   5240   // See if we can simplify the input to this truncate through knowledge that
   5241   // only the low bits are being used.
   5242   // For example "trunc (or (shl x, 8), y)" // -> trunc y
   5243   // Currently we only perform this optimization on scalars because vectors
   5244   // may have different active low bits.
   5245   if (!VT.isVector()) {
   5246     SDValue Shorter =
   5247       GetDemandedBits(N0, APInt::getLowBitsSet(N0.getValueSizeInBits(),
   5248                                                VT.getSizeInBits()));
   5249     if (Shorter.getNode())
   5250       return DAG.getNode(ISD::TRUNCATE, N->getDebugLoc(), VT, Shorter);
   5251   }
   5252   // fold (truncate (load x)) -> (smaller load x)
   5253   // fold (truncate (srl (load x), c)) -> (smaller load (x+c/evtbits))
   5254   if (!LegalTypes || TLI.isTypeDesirableForOp(N0.getOpcode(), VT)) {
   5255     SDValue Reduced = ReduceLoadWidth(N);
   5256     if (Reduced.getNode())
   5257       return Reduced;
   5258   }
   5259 
   5260   // Simplify the operands using demanded-bits information.
   5261   if (!VT.isVector() &&
   5262       SimplifyDemandedBits(SDValue(N, 0)))
   5263     return SDValue(N, 0);
   5264 
   5265   return SDValue();
   5266 }
   5267 
   5268 static SDNode *getBuildPairElt(SDNode *N, unsigned i) {
   5269   SDValue Elt = N->getOperand(i);
   5270   if (Elt.getOpcode() != ISD::MERGE_VALUES)
   5271     return Elt.getNode();
   5272   return Elt.getOperand(Elt.getResNo()).getNode();
   5273 }
   5274 
   5275 /// CombineConsecutiveLoads - build_pair (load, load) -> load
   5276 /// if load locations are consecutive.
   5277 SDValue DAGCombiner::CombineConsecutiveLoads(SDNode *N, EVT VT) {
   5278   assert(N->getOpcode() == ISD::BUILD_PAIR);
   5279 
   5280   LoadSDNode *LD1 = dyn_cast<LoadSDNode>(getBuildPairElt(N, 0));
   5281   LoadSDNode *LD2 = dyn_cast<LoadSDNode>(getBuildPairElt(N, 1));
   5282   if (!LD1 || !LD2 || !ISD::isNON_EXTLoad(LD1) || !LD1->hasOneUse() ||
   5283       LD1->getPointerInfo().getAddrSpace() !=
   5284          LD2->getPointerInfo().getAddrSpace())
   5285     return SDValue();
   5286   EVT LD1VT = LD1->getValueType(0);
   5287 
   5288   if (ISD::isNON_EXTLoad(LD2) &&
   5289       LD2->hasOneUse() &&
   5290       // If both are volatile this would reduce the number of volatile loads.
   5291       // If one is volatile it might be ok, but play conservative and bail out.
   5292       !LD1->isVolatile() &&
   5293       !LD2->isVolatile() &&
   5294       DAG.isConsecutiveLoad(LD2, LD1, LD1VT.getSizeInBits()/8, 1)) {
   5295     unsigned Align = LD1->getAlignment();
   5296     unsigned NewAlign = TLI.getTargetData()->
   5297       getABITypeAlignment(VT.getTypeForEVT(*DAG.getContext()));
   5298 
   5299     if (NewAlign <= Align &&
   5300         (!LegalOperations || TLI.isOperationLegal(ISD::LOAD, VT)))
   5301       return DAG.getLoad(VT, N->getDebugLoc(), LD1->getChain(),
   5302                          LD1->getBasePtr(), LD1->getPointerInfo(),
   5303                          false, false, false, Align);
   5304   }
   5305 
   5306   return SDValue();
   5307 }
   5308 
   5309 SDValue DAGCombiner::visitBITCAST(SDNode *N) {
   5310   SDValue N0 = N->getOperand(0);
   5311   EVT VT = N->getValueType(0);
   5312 
   5313   // If the input is a BUILD_VECTOR with all constant elements, fold this now.
   5314   // Only do this before legalize, since afterward the target may be depending
   5315   // on the bitconvert.
   5316   // First check to see if this is all constant.
   5317   if (!LegalTypes &&
   5318       N0.getOpcode() == ISD::BUILD_VECTOR && N0.getNode()->hasOneUse() &&
   5319       VT.isVector()) {
   5320     bool isSimple = true;
   5321     for (unsigned i = 0, e = N0.getNumOperands(); i != e; ++i)
   5322       if (N0.getOperand(i).getOpcode() != ISD::UNDEF &&
   5323           N0.getOperand(i).getOpcode() != ISD::Constant &&
   5324           N0.getOperand(i).getOpcode() != ISD::ConstantFP) {
   5325         isSimple = false;
   5326         break;
   5327       }
   5328 
   5329     EVT DestEltVT = N->getValueType(0).getVectorElementType();
   5330     assert(!DestEltVT.isVector() &&
   5331            "Element type of vector ValueType must not be vector!");
   5332     if (isSimple)
   5333       return ConstantFoldBITCASTofBUILD_VECTOR(N0.getNode(), DestEltVT);
   5334   }
   5335 
   5336   // If the input is a constant, let getNode fold it.
   5337   if (isa<ConstantSDNode>(N0) || isa<ConstantFPSDNode>(N0)) {
   5338     SDValue Res = DAG.getNode(ISD::BITCAST, N->getDebugLoc(), VT, N0);
   5339     if (Res.getNode() != N) {
   5340       if (!LegalOperations ||
   5341           TLI.isOperationLegal(Res.getNode()->getOpcode(), VT))
   5342         return Res;
   5343 
   5344       // Folding it resulted in an illegal node, and it's too late to
   5345       // do that. Clean up the old node and forego the transformation.
   5346       // Ideally this won't happen very often, because instcombine
   5347       // and the earlier dagcombine runs (where illegal nodes are
   5348       // permitted) should have folded most of them already.
   5349       DAG.DeleteNode(Res.getNode());
   5350     }
   5351   }
   5352 
   5353   // (conv (conv x, t1), t2) -> (conv x, t2)
   5354   if (N0.getOpcode() == ISD::BITCAST)
   5355     return DAG.getNode(ISD::BITCAST, N->getDebugLoc(), VT,
   5356                        N0.getOperand(0));
   5357 
   5358   // fold (conv (load x)) -> (load (conv*)x)
   5359   // If the resultant load doesn't need a higher alignment than the original!
   5360   if (ISD::isNormalLoad(N0.getNode()) && N0.hasOneUse() &&
   5361       // Do not change the width of a volatile load.
   5362       !cast<LoadSDNode>(N0)->isVolatile() &&
   5363       (!LegalOperations || TLI.isOperationLegal(ISD::LOAD, VT))) {
   5364     LoadSDNode *LN0 = cast<LoadSDNode>(N0);
   5365     unsigned Align = TLI.getTargetData()->
   5366       getABITypeAlignment(VT.getTypeForEVT(*DAG.getContext()));
   5367     unsigned OrigAlign = LN0->getAlignment();
   5368 
   5369     if (Align <= OrigAlign) {
   5370       SDValue Load = DAG.getLoad(VT, N->getDebugLoc(), LN0->getChain(),
   5371                                  LN0->getBasePtr(), LN0->getPointerInfo(),
   5372                                  LN0->isVolatile(), LN0->isNonTemporal(),
   5373                                  LN0->isInvariant(), OrigAlign);
   5374       AddToWorkList(N);
   5375       CombineTo(N0.getNode(),
   5376                 DAG.getNode(ISD::BITCAST, N0.getDebugLoc(),
   5377                             N0.getValueType(), Load),
   5378                 Load.getValue(1));
   5379       return Load;
   5380     }
   5381   }
   5382 
   5383   // fold (bitconvert (fneg x)) -> (xor (bitconvert x), signbit)
   5384   // fold (bitconvert (fabs x)) -> (and (bitconvert x), (not signbit))
   5385   // This often reduces constant pool loads.
   5386   if (((N0.getOpcode() == ISD::FNEG && !TLI.isFNegFree(VT)) ||
   5387        (N0.getOpcode() == ISD::FABS && !TLI.isFAbsFree(VT))) &&
   5388       N0.getNode()->hasOneUse() && VT.isInteger() && !VT.isVector()) {
   5389     SDValue NewConv = DAG.getNode(ISD::BITCAST, N0.getDebugLoc(), VT,
   5390                                   N0.getOperand(0));
   5391     AddToWorkList(NewConv.getNode());
   5392 
   5393     APInt SignBit = APInt::getSignBit(VT.getSizeInBits());
   5394     if (N0.getOpcode() == ISD::FNEG)
   5395       return DAG.getNode(ISD::XOR, N->getDebugLoc(), VT,
   5396                          NewConv, DAG.getConstant(SignBit, VT));
   5397     assert(N0.getOpcode() == ISD::FABS);
   5398     return DAG.getNode(ISD::AND, N->getDebugLoc(), VT,
   5399                        NewConv, DAG.getConstant(~SignBit, VT));
   5400   }
   5401 
   5402   // fold (bitconvert (fcopysign cst, x)) ->
   5403   //         (or (and (bitconvert x), sign), (and cst, (not sign)))
   5404   // Note that we don't handle (copysign x, cst) because this can always be
   5405   // folded to an fneg or fabs.
   5406   if (N0.getOpcode() == ISD::FCOPYSIGN && N0.getNode()->hasOneUse() &&
   5407       isa<ConstantFPSDNode>(N0.getOperand(0)) &&
   5408       VT.isInteger() && !VT.isVector()) {
   5409     unsigned OrigXWidth = N0.getOperand(1).getValueType().getSizeInBits();
   5410     EVT IntXVT = EVT::getIntegerVT(*DAG.getContext(), OrigXWidth);
   5411     if (isTypeLegal(IntXVT)) {
   5412       SDValue X = DAG.getNode(ISD::BITCAST, N0.getDebugLoc(),
   5413                               IntXVT, N0.getOperand(1));
   5414       AddToWorkList(X.getNode());
   5415 
   5416       // If X has a different width than the result/lhs, sext it or truncate it.
   5417       unsigned VTWidth = VT.getSizeInBits();
   5418       if (OrigXWidth < VTWidth) {
   5419         X = DAG.getNode(ISD::SIGN_EXTEND, N->getDebugLoc(), VT, X);
   5420         AddToWorkList(X.getNode());
   5421       } else if (OrigXWidth > VTWidth) {
   5422         // To get the sign bit in the right place, we have to shift it right
   5423         // before truncating.
   5424         X = DAG.getNode(ISD::SRL, X.getDebugLoc(),
   5425                         X.getValueType(), X,
   5426                         DAG.getConstant(OrigXWidth-VTWidth, X.getValueType()));
   5427         AddToWorkList(X.getNode());
   5428         X = DAG.getNode(ISD::TRUNCATE, X.getDebugLoc(), VT, X);
   5429         AddToWorkList(X.getNode());
   5430       }
   5431 
   5432       APInt SignBit = APInt::getSignBit(VT.getSizeInBits());
   5433       X = DAG.getNode(ISD::AND, X.getDebugLoc(), VT,
   5434                       X, DAG.getConstant(SignBit, VT));
   5435       AddToWorkList(X.getNode());
   5436 
   5437       SDValue Cst = DAG.getNode(ISD::BITCAST, N0.getDebugLoc(),
   5438                                 VT, N0.getOperand(0));
   5439       Cst = DAG.getNode(ISD::AND, Cst.getDebugLoc(), VT,
   5440                         Cst, DAG.getConstant(~SignBit, VT));
   5441       AddToWorkList(Cst.getNode());
   5442 
   5443       return DAG.getNode(ISD::OR, N->getDebugLoc(), VT, X, Cst);
   5444     }
   5445   }
   5446 
   5447   // bitconvert(build_pair(ld, ld)) -> ld iff load locations are consecutive.
   5448   if (N0.getOpcode() == ISD::BUILD_PAIR) {
   5449     SDValue CombineLD = CombineConsecutiveLoads(N0.getNode(), VT);
   5450     if (CombineLD.getNode())
   5451       return CombineLD;
   5452   }
   5453 
   5454   return SDValue();
   5455 }
   5456 
   5457 SDValue DAGCombiner::visitBUILD_PAIR(SDNode *N) {
   5458   EVT VT = N->getValueType(0);
   5459   return CombineConsecutiveLoads(N, VT);
   5460 }
   5461 
   5462 /// ConstantFoldBITCASTofBUILD_VECTOR - We know that BV is a build_vector
   5463 /// node with Constant, ConstantFP or Undef operands.  DstEltVT indicates the
   5464 /// destination element value type.
   5465 SDValue DAGCombiner::
   5466 ConstantFoldBITCASTofBUILD_VECTOR(SDNode *BV, EVT DstEltVT) {
   5467   EVT SrcEltVT = BV->getValueType(0).getVectorElementType();
   5468 
   5469   // If this is already the right type, we're done.
   5470   if (SrcEltVT == DstEltVT) return SDValue(BV, 0);
   5471 
   5472   unsigned SrcBitSize = SrcEltVT.getSizeInBits();
   5473   unsigned DstBitSize = DstEltVT.getSizeInBits();
   5474 
   5475   // If this is a conversion of N elements of one type to N elements of another
   5476   // type, convert each element.  This handles FP<->INT cases.
   5477   if (SrcBitSize == DstBitSize) {
   5478     EVT VT = EVT::getVectorVT(*DAG.getContext(), DstEltVT,
   5479                               BV->getValueType(0).getVectorNumElements());
   5480 
   5481     // Due to the FP element handling below calling this routine recursively,
   5482     // we can end up with a scalar-to-vector node here.
   5483     if (BV->getOpcode() == ISD::SCALAR_TO_VECTOR)
   5484       return DAG.getNode(ISD::SCALAR_TO_VECTOR, BV->getDebugLoc(), VT,
   5485                          DAG.getNode(ISD::BITCAST, BV->getDebugLoc(),
   5486                                      DstEltVT, BV->getOperand(0)));
   5487 
   5488     SmallVector<SDValue, 8> Ops;
   5489     for (unsigned i = 0, e = BV->getNumOperands(); i != e; ++i) {
   5490       SDValue Op = BV->getOperand(i);
   5491       // If the vector element type is not legal, the BUILD_VECTOR operands
   5492       // are promoted and implicitly truncated.  Make that explicit here.
   5493       if (Op.getValueType() != SrcEltVT)
   5494         Op = DAG.getNode(ISD::TRUNCATE, BV->getDebugLoc(), SrcEltVT, Op);
   5495       Ops.push_back(DAG.getNode(ISD::BITCAST, BV->getDebugLoc(),
   5496                                 DstEltVT, Op));
   5497       AddToWorkList(Ops.back().getNode());
   5498     }
   5499     return DAG.getNode(ISD::BUILD_VECTOR, BV->getDebugLoc(), VT,
   5500                        &Ops[0], Ops.size());
   5501   }
   5502 
   5503   // Otherwise, we're growing or shrinking the elements.  To avoid having to
   5504   // handle annoying details of growing/shrinking FP values, we convert them to
   5505   // int first.
   5506   if (SrcEltVT.isFloatingPoint()) {
   5507     // Convert the input float vector to a int vector where the elements are the
   5508     // same sizes.
   5509     assert((SrcEltVT == MVT::f32 || SrcEltVT == MVT::f64) && "Unknown FP VT!");
   5510     EVT IntVT = EVT::getIntegerVT(*DAG.getContext(), SrcEltVT.getSizeInBits());
   5511     BV = ConstantFoldBITCASTofBUILD_VECTOR(BV, IntVT).getNode();
   5512     SrcEltVT = IntVT;
   5513   }
   5514 
   5515   // Now we know the input is an integer vector.  If the output is a FP type,
   5516   // convert to integer first, then to FP of the right size.
   5517   if (DstEltVT.isFloatingPoint()) {
   5518     assert((DstEltVT == MVT::f32 || DstEltVT == MVT::f64) && "Unknown FP VT!");
   5519     EVT TmpVT = EVT::getIntegerVT(*DAG.getContext(), DstEltVT.getSizeInBits());
   5520     SDNode *Tmp = ConstantFoldBITCASTofBUILD_VECTOR(BV, TmpVT).getNode();
   5521 
   5522     // Next, convert to FP elements of the same size.
   5523     return ConstantFoldBITCASTofBUILD_VECTOR(Tmp, DstEltVT);
   5524   }
   5525 
   5526   // Okay, we know the src/dst types are both integers of differing types.
   5527   // Handling growing first.
   5528   assert(SrcEltVT.isInteger() && DstEltVT.isInteger());
   5529   if (SrcBitSize < DstBitSize) {
   5530     unsigned NumInputsPerOutput = DstBitSize/SrcBitSize;
   5531 
   5532     SmallVector<SDValue, 8> Ops;
   5533     for (unsigned i = 0, e = BV->getNumOperands(); i != e;
   5534          i += NumInputsPerOutput) {
   5535       bool isLE = TLI.isLittleEndian();
   5536       APInt NewBits = APInt(DstBitSize, 0);
   5537       bool EltIsUndef = true;
   5538       for (unsigned j = 0; j != NumInputsPerOutput; ++j) {
   5539         // Shift the previously computed bits over.
   5540         NewBits <<= SrcBitSize;
   5541         SDValue Op = BV->getOperand(i+ (isLE ? (NumInputsPerOutput-j-1) : j));
   5542         if (Op.getOpcode() == ISD::UNDEF) continue;
   5543         EltIsUndef = false;
   5544 
   5545         NewBits |= cast<ConstantSDNode>(Op)->getAPIntValue().
   5546                    zextOrTrunc(SrcBitSize).zext(DstBitSize);
   5547       }
   5548 
   5549       if (EltIsUndef)
   5550         Ops.push_back(DAG.getUNDEF(DstEltVT));
   5551       else
   5552         Ops.push_back(DAG.getConstant(NewBits, DstEltVT));
   5553     }
   5554 
   5555     EVT VT = EVT::getVectorVT(*DAG.getContext(), DstEltVT, Ops.size());
   5556     return DAG.getNode(ISD::BUILD_VECTOR, BV->getDebugLoc(), VT,
   5557                        &Ops[0], Ops.size());
   5558   }
   5559 
   5560   // Finally, this must be the case where we are shrinking elements: each input
   5561   // turns into multiple outputs.
   5562   bool isS2V = ISD::isScalarToVector(BV);
   5563   unsigned NumOutputsPerInput = SrcBitSize/DstBitSize;
   5564   EVT VT = EVT::getVectorVT(*DAG.getContext(), DstEltVT,
   5565                             NumOutputsPerInput*BV->getNumOperands());
   5566   SmallVector<SDValue, 8> Ops;
   5567 
   5568   for (unsigned i = 0, e = BV->getNumOperands(); i != e; ++i) {
   5569     if (BV->getOperand(i).getOpcode() == ISD::UNDEF) {
   5570       for (unsigned j = 0; j != NumOutputsPerInput; ++j)
   5571         Ops.push_back(DAG.getUNDEF(DstEltVT));
   5572       continue;
   5573     }
   5574 
   5575     APInt OpVal = cast<ConstantSDNode>(BV->getOperand(i))->
   5576                   getAPIntValue().zextOrTrunc(SrcBitSize);
   5577 
   5578     for (unsigned j = 0; j != NumOutputsPerInput; ++j) {
   5579       APInt ThisVal = OpVal.trunc(DstBitSize);
   5580       Ops.push_back(DAG.getConstant(ThisVal, DstEltVT));
   5581       if (isS2V && i == 0 && j == 0 && ThisVal.zext(SrcBitSize) == OpVal)
   5582         // Simply turn this into a SCALAR_TO_VECTOR of the new type.
   5583         return DAG.getNode(ISD::SCALAR_TO_VECTOR, BV->getDebugLoc(), VT,
   5584                            Ops[0]);
   5585       OpVal = OpVal.lshr(DstBitSize);
   5586     }
   5587 
   5588     // For big endian targets, swap the order of the pieces of each element.
   5589     if (TLI.isBigEndian())
   5590       std::reverse(Ops.end()-NumOutputsPerInput, Ops.end());
   5591   }
   5592 
   5593   return DAG.getNode(ISD::BUILD_VECTOR, BV->getDebugLoc(), VT,
   5594                      &Ops[0], Ops.size());
   5595 }
   5596 
   5597 SDValue DAGCombiner::visitFADD(SDNode *N) {
   5598   SDValue N0 = N->getOperand(0);
   5599   SDValue N1 = N->getOperand(1);
   5600   ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(N0);
   5601   ConstantFPSDNode *N1CFP = dyn_cast<ConstantFPSDNode>(N1);
   5602   EVT VT = N->getValueType(0);
   5603 
   5604   // fold vector ops
   5605   if (VT.isVector()) {
   5606     SDValue FoldedVOp = SimplifyVBinOp(N);
   5607     if (FoldedVOp.getNode()) return FoldedVOp;
   5608   }
   5609 
   5610   // fold (fadd c1, c2) -> (fadd c1, c2)
   5611   if (N0CFP && N1CFP && VT != MVT::ppcf128)
   5612     return DAG.getNode(ISD::FADD, N->getDebugLoc(), VT, N0, N1);
   5613   // canonicalize constant to RHS
   5614   if (N0CFP && !N1CFP)
   5615     return DAG.getNode(ISD::FADD, N->getDebugLoc(), VT, N1, N0);
   5616   // fold (fadd A, 0) -> A
   5617   if (DAG.getTarget().Options.UnsafeFPMath && N1CFP &&
   5618       N1CFP->getValueAPF().isZero())
   5619     return N0;
   5620   // fold (fadd A, (fneg B)) -> (fsub A, B)
   5621   if ((!LegalOperations || TLI.isOperationLegalOrCustom(ISD::FSUB, VT)) &&
   5622       isNegatibleForFree(N1, LegalOperations, TLI, &DAG.getTarget().Options) == 2)
   5623     return DAG.getNode(ISD::FSUB, N->getDebugLoc(), VT, N0,
   5624                        GetNegatedExpression(N1, DAG, LegalOperations));
   5625   // fold (fadd (fneg A), B) -> (fsub B, A)
   5626   if ((!LegalOperations || TLI.isOperationLegalOrCustom(ISD::FSUB, VT)) &&
   5627       isNegatibleForFree(N0, LegalOperations, TLI, &DAG.getTarget().Options) == 2)
   5628     return DAG.getNode(ISD::FSUB, N->getDebugLoc(), VT, N1,
   5629                        GetNegatedExpression(N0, DAG, LegalOperations));
   5630 
   5631   // If allowed, fold (fadd (fadd x, c1), c2) -> (fadd x, (fadd c1, c2))
   5632   if (DAG.getTarget().Options.UnsafeFPMath && N1CFP &&
   5633       N0.getOpcode() == ISD::FADD && N0.getNode()->hasOneUse() &&
   5634       isa<ConstantFPSDNode>(N0.getOperand(1)))
   5635     return DAG.getNode(ISD::FADD, N->getDebugLoc(), VT, N0.getOperand(0),
   5636                        DAG.getNode(ISD::FADD, N->getDebugLoc(), VT,
   5637                                    N0.getOperand(1), N1));
   5638 
   5639   return SDValue();
   5640 }
   5641 
   5642 SDValue DAGCombiner::visitFSUB(SDNode *N) {
   5643   SDValue N0 = N->getOperand(0);
   5644   SDValue N1 = N->getOperand(1);
   5645   ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(N0);
   5646   ConstantFPSDNode *N1CFP = dyn_cast<ConstantFPSDNode>(N1);
   5647   EVT VT = N->getValueType(0);
   5648 
   5649   // fold vector ops
   5650   if (VT.isVector()) {
   5651     SDValue FoldedVOp = SimplifyVBinOp(N);
   5652     if (FoldedVOp.getNode()) return FoldedVOp;
   5653   }
   5654 
   5655   // fold (fsub c1, c2) -> c1-c2
   5656   if (N0CFP && N1CFP && VT != MVT::ppcf128)
   5657     return DAG.getNode(ISD::FSUB, N->getDebugLoc(), VT, N0, N1);
   5658   // fold (fsub A, 0) -> A
   5659   if (DAG.getTarget().Options.UnsafeFPMath &&
   5660       N1CFP && N1CFP->getValueAPF().isZero())
   5661     return N0;
   5662   // fold (fsub 0, B) -> -B
   5663   if (DAG.getTarget().Options.UnsafeFPMath &&
   5664       N0CFP && N0CFP->getValueAPF().isZero()) {
   5665     if (isNegatibleForFree(N1, LegalOperations, TLI, &DAG.getTarget().Options))
   5666       return GetNegatedExpression(N1, DAG, LegalOperations);
   5667     if (!LegalOperations || TLI.isOperationLegal(ISD::FNEG, VT))
   5668       return DAG.getNode(ISD::FNEG, N->getDebugLoc(), VT, N1);
   5669   }
   5670   // fold (fsub A, (fneg B)) -> (fadd A, B)
   5671   if (isNegatibleForFree(N1, LegalOperations, TLI, &DAG.getTarget().Options))
   5672     return DAG.getNode(ISD::FADD, N->getDebugLoc(), VT, N0,
   5673                        GetNegatedExpression(N1, DAG, LegalOperations));
   5674 
   5675   // If 'unsafe math' is enabled, fold
   5676   //    (fsub x, (fadd x, y)) -> (fneg y) &
   5677   //    (fsub x, (fadd y, x)) -> (fneg y)
   5678   if (DAG.getTarget().Options.UnsafeFPMath) {
   5679     if (N1.getOpcode() == ISD::FADD) {
   5680       SDValue N10 = N1->getOperand(0);
   5681       SDValue N11 = N1->getOperand(1);
   5682 
   5683       if (N10 == N0 && isNegatibleForFree(N11, LegalOperations, TLI,
   5684                                           &DAG.getTarget().Options))
   5685         return GetNegatedExpression(N11, DAG, LegalOperations);
   5686       else if (N11 == N0 && isNegatibleForFree(N10, LegalOperations, TLI,
   5687                                                &DAG.getTarget().Options))
   5688         return GetNegatedExpression(N10, DAG, LegalOperations);
   5689     }
   5690   }
   5691 
   5692   return SDValue();
   5693 }
   5694 
   5695 SDValue DAGCombiner::visitFMUL(SDNode *N) {
   5696   SDValue N0 = N->getOperand(0);
   5697   SDValue N1 = N->getOperand(1);
   5698   ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(N0);
   5699   ConstantFPSDNode *N1CFP = dyn_cast<ConstantFPSDNode>(N1);
   5700   EVT VT = N->getValueType(0);
   5701   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
   5702 
   5703   // fold vector ops
   5704   if (VT.isVector()) {
   5705     SDValue FoldedVOp = SimplifyVBinOp(N);
   5706     if (FoldedVOp.getNode()) return FoldedVOp;
   5707   }
   5708 
   5709   // fold (fmul c1, c2) -> c1*c2
   5710   if (N0CFP && N1CFP && VT != MVT::ppcf128)
   5711     return DAG.getNode(ISD::FMUL, N->getDebugLoc(), VT, N0, N1);
   5712   // canonicalize constant to RHS
   5713   if (N0CFP && !N1CFP)
   5714     return DAG.getNode(ISD::FMUL, N->getDebugLoc(), VT, N1, N0);
   5715   // fold (fmul A, 0) -> 0
   5716   if (DAG.getTarget().Options.UnsafeFPMath &&
   5717       N1CFP && N1CFP->getValueAPF().isZero())
   5718     return N1;
   5719   // fold (fmul A, 0) -> 0, vector edition.
   5720   if (DAG.getTarget().Options.UnsafeFPMath &&
   5721       ISD::isBuildVectorAllZeros(N1.getNode()))
   5722     return N1;
   5723   // fold (fmul X, 2.0) -> (fadd X, X)
   5724   if (N1CFP && N1CFP->isExactlyValue(+2.0))
   5725     return DAG.getNode(ISD::FADD, N->getDebugLoc(), VT, N0, N0);
   5726   // fold (fmul X, -1.0) -> (fneg X)
   5727   if (N1CFP && N1CFP->isExactlyValue(-1.0))
   5728     if (!LegalOperations || TLI.isOperationLegal(ISD::FNEG, VT))
   5729       return DAG.getNode(ISD::FNEG, N->getDebugLoc(), VT, N0);
   5730 
   5731   // fold (fmul (fneg X), (fneg Y)) -> (fmul X, Y)
   5732   if (char LHSNeg = isNegatibleForFree(N0, LegalOperations, TLI,
   5733                                        &DAG.getTarget().Options)) {
   5734     if (char RHSNeg = isNegatibleForFree(N1, LegalOperations, TLI,
   5735                                          &DAG.getTarget().Options)) {
   5736       // Both can be negated for free, check to see if at least one is cheaper
   5737       // negated.
   5738       if (LHSNeg == 2 || RHSNeg == 2)
   5739         return DAG.getNode(ISD::FMUL, N->getDebugLoc(), VT,
   5740                            GetNegatedExpression(N0, DAG, LegalOperations),
   5741                            GetNegatedExpression(N1, DAG, LegalOperations));
   5742     }
   5743   }
   5744 
   5745   // If allowed, fold (fmul (fmul x, c1), c2) -> (fmul x, (fmul c1, c2))
   5746   if (DAG.getTarget().Options.UnsafeFPMath &&
   5747       N1CFP && N0.getOpcode() == ISD::FMUL &&
   5748       N0.getNode()->hasOneUse() && isa<ConstantFPSDNode>(N0.getOperand(1)))
   5749     return DAG.getNode(ISD::FMUL, N->getDebugLoc(), VT, N0.getOperand(0),
   5750                        DAG.getNode(ISD::FMUL, N->getDebugLoc(), VT,
   5751                                    N0.getOperand(1), N1));
   5752 
   5753   return SDValue();
   5754 }
   5755 
   5756 SDValue DAGCombiner::visitFDIV(SDNode *N) {
   5757   SDValue N0 = N->getOperand(0);
   5758   SDValue N1 = N->getOperand(1);
   5759   ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(N0);
   5760   ConstantFPSDNode *N1CFP = dyn_cast<ConstantFPSDNode>(N1);
   5761   EVT VT = N->getValueType(0);
   5762   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
   5763 
   5764   // fold vector ops
   5765   if (VT.isVector()) {
   5766     SDValue FoldedVOp = SimplifyVBinOp(N);
   5767     if (FoldedVOp.getNode()) return FoldedVOp;
   5768   }
   5769 
   5770   // fold (fdiv c1, c2) -> c1/c2
   5771   if (N0CFP && N1CFP && VT != MVT::ppcf128)
   5772     return DAG.getNode(ISD::FDIV, N->getDebugLoc(), VT, N0, N1);
   5773 
   5774   // fold (fdiv X, c2) -> fmul X, 1/c2 if losing precision is acceptable.
   5775   if (N1CFP && VT != MVT::ppcf128 && DAG.getTarget().Options.UnsafeFPMath) {
   5776     // Compute the reciprocal 1.0 / c2.
   5777     APFloat N1APF = N1CFP->getValueAPF();
   5778     APFloat Recip(N1APF.getSemantics(), 1); // 1.0
   5779     APFloat::opStatus st = Recip.divide(N1APF, APFloat::rmNearestTiesToEven);
   5780     // Only do the transform if the reciprocal is a legal fp immediate that
   5781     // isn't too nasty (eg NaN, denormal, ...).
   5782     if ((st == APFloat::opOK || st == APFloat::opInexact) && // Not too nasty
   5783         (!LegalOperations ||
   5784          // FIXME: custom lowering of ConstantFP might fail (see e.g. ARM
   5785          // backend)... we should handle this gracefully after Legalize.
   5786          // TLI.isOperationLegalOrCustom(llvm::ISD::ConstantFP, VT) ||
   5787          TLI.isOperationLegal(llvm::ISD::ConstantFP, VT) ||
   5788          TLI.isFPImmLegal(Recip, VT)))
   5789       return DAG.getNode(ISD::FMUL, N->getDebugLoc(), VT, N0,
   5790                          DAG.getConstantFP(Recip, VT));
   5791   }
   5792 
   5793   // (fdiv (fneg X), (fneg Y)) -> (fdiv X, Y)
   5794   if (char LHSNeg = isNegatibleForFree(N0, LegalOperations, TLI,
   5795                                        &DAG.getTarget().Options)) {
   5796     if (char RHSNeg = isNegatibleForFree(N1, LegalOperations, TLI,
   5797                                          &DAG.getTarget().Options)) {
   5798       // Both can be negated for free, check to see if at least one is cheaper
   5799       // negated.
   5800       if (LHSNeg == 2 || RHSNeg == 2)
   5801         return DAG.getNode(ISD::FDIV, N->getDebugLoc(), VT,
   5802                            GetNegatedExpression(N0, DAG, LegalOperations),
   5803                            GetNegatedExpression(N1, DAG, LegalOperations));
   5804     }
   5805   }
   5806 
   5807   return SDValue();
   5808 }
   5809 
   5810 SDValue DAGCombiner::visitFREM(SDNode *N) {
   5811   SDValue N0 = N->getOperand(0);
   5812   SDValue N1 = N->getOperand(1);
   5813   ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(N0);
   5814   ConstantFPSDNode *N1CFP = dyn_cast<ConstantFPSDNode>(N1);
   5815   EVT VT = N->getValueType(0);
   5816 
   5817   // fold (frem c1, c2) -> fmod(c1,c2)
   5818   if (N0CFP && N1CFP && VT != MVT::ppcf128)
   5819     return DAG.getNode(ISD::FREM, N->getDebugLoc(), VT, N0, N1);
   5820 
   5821   return SDValue();
   5822 }
   5823 
   5824 SDValue DAGCombiner::visitFCOPYSIGN(SDNode *N) {
   5825   SDValue N0 = N->getOperand(0);
   5826   SDValue N1 = N->getOperand(1);
   5827   ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(N0);
   5828   ConstantFPSDNode *N1CFP = dyn_cast<ConstantFPSDNode>(N1);
   5829   EVT VT = N->getValueType(0);
   5830 
   5831   if (N0CFP && N1CFP && VT != MVT::ppcf128)  // Constant fold
   5832     return DAG.getNode(ISD::FCOPYSIGN, N->getDebugLoc(), VT, N0, N1);
   5833 
   5834   if (N1CFP) {
   5835     const APFloat& V = N1CFP->getValueAPF();
   5836     // copysign(x, c1) -> fabs(x)       iff ispos(c1)
   5837     // copysign(x, c1) -> fneg(fabs(x)) iff isneg(c1)
   5838     if (!V.isNegative()) {
   5839       if (!LegalOperations || TLI.isOperationLegal(ISD::FABS, VT))
   5840         return DAG.getNode(ISD::FABS, N->getDebugLoc(), VT, N0);
   5841     } else {
   5842       if (!LegalOperations || TLI.isOperationLegal(ISD::FNEG, VT))
   5843         return DAG.getNode(ISD::FNEG, N->getDebugLoc(), VT,
   5844                            DAG.getNode(ISD::FABS, N0.getDebugLoc(), VT, N0));
   5845     }
   5846   }
   5847 
   5848   // copysign(fabs(x), y) -> copysign(x, y)
   5849   // copysign(fneg(x), y) -> copysign(x, y)
   5850   // copysign(copysign(x,z), y) -> copysign(x, y)
   5851   if (N0.getOpcode() == ISD::FABS || N0.getOpcode() == ISD::FNEG ||
   5852       N0.getOpcode() == ISD::FCOPYSIGN)
   5853     return DAG.getNode(ISD::FCOPYSIGN, N->getDebugLoc(), VT,
   5854                        N0.getOperand(0), N1);
   5855 
   5856   // copysign(x, abs(y)) -> abs(x)
   5857   if (N1.getOpcode() == ISD::FABS)
   5858     return DAG.getNode(ISD::FABS, N->getDebugLoc(), VT, N0);
   5859 
   5860   // copysign(x, copysign(y,z)) -> copysign(x, z)
   5861   if (N1.getOpcode() == ISD::FCOPYSIGN)
   5862     return DAG.getNode(ISD::FCOPYSIGN, N->getDebugLoc(), VT,
   5863                        N0, N1.getOperand(1));
   5864 
   5865   // copysign(x, fp_extend(y)) -> copysign(x, y)
   5866   // copysign(x, fp_round(y)) -> copysign(x, y)
   5867   if (N1.getOpcode() == ISD::FP_EXTEND || N1.getOpcode() == ISD::FP_ROUND)
   5868     return DAG.getNode(ISD::FCOPYSIGN, N->getDebugLoc(), VT,
   5869                        N0, N1.getOperand(0));
   5870 
   5871   return SDValue();
   5872 }
   5873 
   5874 SDValue DAGCombiner::visitSINT_TO_FP(SDNode *N) {
   5875   SDValue N0 = N->getOperand(0);
   5876   ConstantSDNode *N0C = dyn_cast<ConstantSDNode>(N0);
   5877   EVT VT = N->getValueType(0);
   5878   EVT OpVT = N0.getValueType();
   5879 
   5880   // fold (sint_to_fp c1) -> c1fp
   5881   if (N0C && OpVT != MVT::ppcf128 &&
   5882       // ...but only if the target supports immediate floating-point values
   5883       (!LegalOperations ||
   5884        TLI.isOperationLegalOrCustom(llvm::ISD::ConstantFP, VT)))
   5885     return DAG.getNode(ISD::SINT_TO_FP, N->getDebugLoc(), VT, N0);
   5886 
   5887   // If the input is a legal type, and SINT_TO_FP is not legal on this target,
   5888   // but UINT_TO_FP is legal on this target, try to convert.
   5889   if (!TLI.isOperationLegalOrCustom(ISD::SINT_TO_FP, OpVT) &&
   5890       TLI.isOperationLegalOrCustom(ISD::UINT_TO_FP, OpVT)) {
   5891     // If the sign bit is known to be zero, we can change this to UINT_TO_FP.
   5892     if (DAG.SignBitIsZero(N0))
   5893       return DAG.getNode(ISD::UINT_TO_FP, N->getDebugLoc(), VT, N0);
   5894   }
   5895 
   5896   return SDValue();
   5897 }
   5898 
   5899 SDValue DAGCombiner::visitUINT_TO_FP(SDNode *N) {
   5900   SDValue N0 = N->getOperand(0);
   5901   ConstantSDNode *N0C = dyn_cast<ConstantSDNode>(N0);
   5902   EVT VT = N->getValueType(0);
   5903   EVT OpVT = N0.getValueType();
   5904 
   5905   // fold (uint_to_fp c1) -> c1fp
   5906   if (N0C && OpVT != MVT::ppcf128 &&
   5907       // ...but only if the target supports immediate floating-point values
   5908       (!LegalOperations ||
   5909        TLI.isOperationLegalOrCustom(llvm::ISD::ConstantFP, VT)))
   5910     return DAG.getNode(ISD::UINT_TO_FP, N->getDebugLoc(), VT, N0);
   5911 
   5912   // If the input is a legal type, and UINT_TO_FP is not legal on this target,
   5913   // but SINT_TO_FP is legal on this target, try to convert.
   5914   if (!TLI.isOperationLegalOrCustom(ISD::UINT_TO_FP, OpVT) &&
   5915       TLI.isOperationLegalOrCustom(ISD::SINT_TO_FP, OpVT)) {
   5916     // If the sign bit is known to be zero, we can change this to SINT_TO_FP.
   5917     if (DAG.SignBitIsZero(N0))
   5918       return DAG.getNode(ISD::SINT_TO_FP, N->getDebugLoc(), VT, N0);
   5919   }
   5920 
   5921   return SDValue();
   5922 }
   5923 
   5924 SDValue DAGCombiner::visitFP_TO_SINT(SDNode *N) {
   5925   SDValue N0 = N->getOperand(0);
   5926   ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(N0);
   5927   EVT VT = N->getValueType(0);
   5928 
   5929   // fold (fp_to_sint c1fp) -> c1
   5930   if (N0CFP)
   5931     return DAG.getNode(ISD::FP_TO_SINT, N->getDebugLoc(), VT, N0);
   5932 
   5933   return SDValue();
   5934 }
   5935 
   5936 SDValue DAGCombiner::visitFP_TO_UINT(SDNode *N) {
   5937   SDValue N0 = N->getOperand(0);
   5938   ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(N0);
   5939   EVT VT = N->getValueType(0);
   5940 
   5941   // fold (fp_to_uint c1fp) -> c1
   5942   if (N0CFP && VT != MVT::ppcf128)
   5943     return DAG.getNode(ISD::FP_TO_UINT, N->getDebugLoc(), VT, N0);
   5944 
   5945   return SDValue();
   5946 }
   5947 
   5948 SDValue DAGCombiner::visitFP_ROUND(SDNode *N) {
   5949   SDValue N0 = N->getOperand(0);
   5950   SDValue N1 = N->getOperand(1);
   5951   ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(N0);
   5952   EVT VT = N->getValueType(0);
   5953 
   5954   // fold (fp_round c1fp) -> c1fp
   5955   if (N0CFP && N0.getValueType() != MVT::ppcf128)
   5956     return DAG.getNode(ISD::FP_ROUND, N->getDebugLoc(), VT, N0, N1);
   5957 
   5958   // fold (fp_round (fp_extend x)) -> x
   5959   if (N0.getOpcode() == ISD::FP_EXTEND && VT == N0.getOperand(0).getValueType())
   5960     return N0.getOperand(0);
   5961 
   5962   // fold (fp_round (fp_round x)) -> (fp_round x)
   5963   if (N0.getOpcode() == ISD::FP_ROUND) {
   5964     // This is a value preserving truncation if both round's are.
   5965     bool IsTrunc = N->getConstantOperandVal(1) == 1 &&
   5966                    N0.getNode()->getConstantOperandVal(1) == 1;
   5967     return DAG.getNode(ISD::FP_ROUND, N->getDebugLoc(), VT, N0.getOperand(0),
   5968                        DAG.getIntPtrConstant(IsTrunc));
   5969   }
   5970 
   5971   // fold (fp_round (copysign X, Y)) -> (copysign (fp_round X), Y)
   5972   if (N0.getOpcode() == ISD::FCOPYSIGN && N0.getNode()->hasOneUse()) {
   5973     SDValue Tmp = DAG.getNode(ISD::FP_ROUND, N0.getDebugLoc(), VT,
   5974                               N0.getOperand(0), N1);
   5975     AddToWorkList(Tmp.getNode());
   5976     return DAG.getNode(ISD::FCOPYSIGN, N->getDebugLoc(), VT,
   5977                        Tmp, N0.getOperand(1));
   5978   }
   5979 
   5980   return SDValue();
   5981 }
   5982 
   5983 SDValue DAGCombiner::visitFP_ROUND_INREG(SDNode *N) {
   5984   SDValue N0 = N->getOperand(0);
   5985   EVT VT = N->getValueType(0);
   5986   EVT EVT = cast<VTSDNode>(N->getOperand(1))->getVT();
   5987   ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(N0);
   5988 
   5989   // fold (fp_round_inreg c1fp) -> c1fp
   5990   if (N0CFP && isTypeLegal(EVT)) {
   5991     SDValue Round = DAG.getConstantFP(*N0CFP->getConstantFPValue(), EVT);
   5992     return DAG.getNode(ISD::FP_EXTEND, N->getDebugLoc(), VT, Round);
   5993   }
   5994 
   5995   return SDValue();
   5996 }
   5997 
   5998 SDValue DAGCombiner::visitFP_EXTEND(SDNode *N) {
   5999   SDValue N0 = N->getOperand(0);
   6000   ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(N0);
   6001   EVT VT = N->getValueType(0);
   6002 
   6003   // If this is fp_round(fpextend), don't fold it, allow ourselves to be folded.
   6004   if (N->hasOneUse() &&
   6005       N->use_begin()->getOpcode() == ISD::FP_ROUND)
   6006     return SDValue();
   6007 
   6008   // fold (fp_extend c1fp) -> c1fp
   6009   if (N0CFP && VT != MVT::ppcf128)
   6010     return DAG.getNode(ISD::FP_EXTEND, N->getDebugLoc(), VT, N0);
   6011 
   6012   // Turn fp_extend(fp_round(X, 1)) -> x since the fp_round doesn't affect the
   6013   // value of X.
   6014   if (N0.getOpcode() == ISD::FP_ROUND
   6015       && N0.getNode()->getConstantOperandVal(1) == 1) {
   6016     SDValue In = N0.getOperand(0);
   6017     if (In.getValueType() == VT) return In;
   6018     if (VT.bitsLT(In.getValueType()))
   6019       return DAG.getNode(ISD::FP_ROUND, N->getDebugLoc(), VT,
   6020                          In, N0.getOperand(1));
   6021     return DAG.getNode(ISD::FP_EXTEND, N->getDebugLoc(), VT, In);
   6022   }
   6023 
   6024   // fold (fpext (load x)) -> (fpext (fptrunc (extload x)))
   6025   if (ISD::isNON_EXTLoad(N0.getNode()) && N0.hasOneUse() &&
   6026       ((!LegalOperations && !cast<LoadSDNode>(N0)->isVolatile()) ||
   6027        TLI.isLoadExtLegal(ISD::EXTLOAD, N0.getValueType()))) {
   6028     LoadSDNode *LN0 = cast<LoadSDNode>(N0);
   6029     SDValue ExtLoad = DAG.getExtLoad(ISD::EXTLOAD, N->getDebugLoc(), VT,
   6030                                      LN0->getChain(),
   6031                                      LN0->getBasePtr(), LN0->getPointerInfo(),
   6032                                      N0.getValueType(),
   6033                                      LN0->isVolatile(), LN0->isNonTemporal(),
   6034                                      LN0->getAlignment());
   6035     CombineTo(N, ExtLoad);
   6036     CombineTo(N0.getNode(),
   6037               DAG.getNode(ISD::FP_ROUND, N0.getDebugLoc(),
   6038                           N0.getValueType(), ExtLoad, DAG.getIntPtrConstant(1)),
   6039               ExtLoad.getValue(1));
   6040     return SDValue(N, 0);   // Return N so it doesn't get rechecked!
   6041   }
   6042 
   6043   return SDValue();
   6044 }
   6045 
   6046 SDValue DAGCombiner::visitFNEG(SDNode *N) {
   6047   SDValue N0 = N->getOperand(0);
   6048   EVT VT = N->getValueType(0);
   6049 
   6050   if (isNegatibleForFree(N0, LegalOperations, DAG.getTargetLoweringInfo(),
   6051                          &DAG.getTarget().Options))
   6052     return GetNegatedExpression(N0, DAG, LegalOperations);
   6053 
   6054   // Transform fneg(bitconvert(x)) -> bitconvert(x^sign) to avoid loading
   6055   // constant pool values.
   6056   if (!TLI.isFNegFree(VT) && N0.getOpcode() == ISD::BITCAST &&
   6057       !VT.isVector() &&
   6058       N0.getNode()->hasOneUse() &&
   6059       N0.getOperand(0).getValueType().isInteger()) {
   6060     SDValue Int = N0.getOperand(0);
   6061     EVT IntVT = Int.getValueType();
   6062     if (IntVT.isInteger() && !IntVT.isVector()) {
   6063       Int = DAG.getNode(ISD::XOR, N0.getDebugLoc(), IntVT, Int,
   6064               DAG.getConstant(APInt::getSignBit(IntVT.getSizeInBits()), IntVT));
   6065       AddToWorkList(Int.getNode());
   6066       return DAG.getNode(ISD::BITCAST, N->getDebugLoc(),
   6067                          VT, Int);
   6068     }
   6069   }
   6070 
   6071   return SDValue();
   6072 }
   6073 
   6074 SDValue DAGCombiner::visitFABS(SDNode *N) {
   6075   SDValue N0 = N->getOperand(0);
   6076   ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(N0);
   6077   EVT VT = N->getValueType(0);
   6078 
   6079   // fold (fabs c1) -> fabs(c1)
   6080   if (N0CFP && VT != MVT::ppcf128)
   6081     return DAG.getNode(ISD::FABS, N->getDebugLoc(), VT, N0);
   6082   // fold (fabs (fabs x)) -> (fabs x)
   6083   if (N0.getOpcode() == ISD::FABS)
   6084     return N->getOperand(0);
   6085   // fold (fabs (fneg x)) -> (fabs x)
   6086   // fold (fabs (fcopysign x, y)) -> (fabs x)
   6087   if (N0.getOpcode() == ISD::FNEG || N0.getOpcode() == ISD::FCOPYSIGN)
   6088     return DAG.getNode(ISD::FABS, N->getDebugLoc(), VT, N0.getOperand(0));
   6089 
   6090   // Transform fabs(bitconvert(x)) -> bitconvert(x&~sign) to avoid loading
   6091   // constant pool values.
   6092   if (!TLI.isFAbsFree(VT) &&
   6093       N0.getOpcode() == ISD::BITCAST && N0.getNode()->hasOneUse() &&
   6094       N0.getOperand(0).getValueType().isInteger() &&
   6095       !N0.getOperand(0).getValueType().isVector()) {
   6096     SDValue Int = N0.getOperand(0);
   6097     EVT IntVT = Int.getValueType();
   6098     if (IntVT.isInteger() && !IntVT.isVector()) {
   6099       Int = DAG.getNode(ISD::AND, N0.getDebugLoc(), IntVT, Int,
   6100              DAG.getConstant(~APInt::getSignBit(IntVT.getSizeInBits()), IntVT));
   6101       AddToWorkList(Int.getNode());
   6102       return DAG.getNode(ISD::BITCAST, N->getDebugLoc(),
   6103                          N->getValueType(0), Int);
   6104     }
   6105   }
   6106 
   6107   return SDValue();
   6108 }
   6109 
   6110 SDValue DAGCombiner::visitBRCOND(SDNode *N) {
   6111   SDValue Chain = N->getOperand(0);
   6112   SDValue N1 = N->getOperand(1);
   6113   SDValue N2 = N->getOperand(2);
   6114 
   6115   // If N is a constant we could fold this into a fallthrough or unconditional
   6116   // branch. However that doesn't happen very often in normal code, because
   6117   // Instcombine/SimplifyCFG should have handled the available opportunities.
   6118   // If we did this folding here, it would be necessary to update the
   6119   // MachineBasicBlock CFG, which is awkward.
   6120 
   6121   // fold a brcond with a setcc condition into a BR_CC node if BR_CC is legal
   6122   // on the target.
   6123   if (N1.getOpcode() == ISD::SETCC &&
   6124       TLI.isOperationLegalOrCustom(ISD::BR_CC, MVT::Other)) {
   6125     return DAG.getNode(ISD::BR_CC, N->getDebugLoc(), MVT::Other,
   6126                        Chain, N1.getOperand(2),
   6127                        N1.getOperand(0), N1.getOperand(1), N2);
   6128   }
   6129 
   6130   if ((N1.hasOneUse() && N1.getOpcode() == ISD::SRL) ||
   6131       ((N1.getOpcode() == ISD::TRUNCATE && N1.hasOneUse()) &&
   6132        (N1.getOperand(0).hasOneUse() &&
   6133         N1.getOperand(0).getOpcode() == ISD::SRL))) {
   6134     SDNode *Trunc = 0;
   6135     if (N1.getOpcode() == ISD::TRUNCATE) {
   6136       // Look pass the truncate.
   6137       Trunc = N1.getNode();
   6138       N1 = N1.getOperand(0);
   6139     }
   6140 
   6141     // Match this pattern so that we can generate simpler code:
   6142     //
   6143     //   %a = ...
   6144     //   %b = and i32 %a, 2
   6145     //   %c = srl i32 %b, 1
   6146     //   brcond i32 %c ...
   6147     //
   6148     // into
   6149     //
   6150     //   %a = ...
   6151     //   %b = and i32 %a, 2
   6152     //   %c = setcc eq %b, 0
   6153     //   brcond %c ...
   6154     //
   6155     // This applies only when the AND constant value has one bit set and the
   6156     // SRL constant is equal to the log2 of the AND constant. The back-end is
   6157     // smart enough to convert the result into a TEST/JMP sequence.
   6158     SDValue Op0 = N1.getOperand(0);
   6159     SDValue Op1 = N1.getOperand(1);
   6160 
   6161     if (Op0.getOpcode() == ISD::AND &&
   6162         Op1.getOpcode() == ISD::Constant) {
   6163       SDValue AndOp1 = Op0.getOperand(1);
   6164 
   6165       if (AndOp1.getOpcode() == ISD::Constant) {
   6166         const APInt &AndConst = cast<ConstantSDNode>(AndOp1)->getAPIntValue();
   6167 
   6168         if (AndConst.isPowerOf2() &&
   6169             cast<ConstantSDNode>(Op1)->getAPIntValue()==AndConst.logBase2()) {
   6170           SDValue SetCC =
   6171             DAG.getSetCC(N->getDebugLoc(),
   6172                          TLI.getSetCCResultType(Op0.getValueType()),
   6173                          Op0, DAG.getConstant(0, Op0.getValueType()),
   6174                          ISD::SETNE);
   6175 
   6176           SDValue NewBRCond = DAG.getNode(ISD::BRCOND, N->getDebugLoc(),
   6177                                           MVT::Other, Chain, SetCC, N2);
   6178           // Don't add the new BRCond into the worklist or else SimplifySelectCC
   6179           // will convert it back to (X & C1) >> C2.
   6180           CombineTo(N, NewBRCond, false);
   6181           // Truncate is dead.
   6182           if (Trunc) {
   6183             removeFromWorkList(Trunc);
   6184             DAG.DeleteNode(Trunc);
   6185           }
   6186           // Replace the uses of SRL with SETCC
   6187           WorkListRemover DeadNodes(*this);
   6188           DAG.ReplaceAllUsesOfValueWith(N1, SetCC, &DeadNodes);
   6189           removeFromWorkList(N1.getNode());
   6190           DAG.DeleteNode(N1.getNode());
   6191           return SDValue(N, 0);   // Return N so it doesn't get rechecked!
   6192         }
   6193       }
   6194     }
   6195 
   6196     if (Trunc)
   6197       // Restore N1 if the above transformation doesn't match.
   6198       N1 = N->getOperand(1);
   6199   }
   6200 
   6201   // Transform br(xor(x, y)) -> br(x != y)
   6202   // Transform br(xor(xor(x,y), 1)) -> br (x == y)
   6203   if (N1.hasOneUse() && N1.getOpcode() == ISD::XOR) {
   6204     SDNode *TheXor = N1.getNode();
   6205     SDValue Op0 = TheXor->getOperand(0);
   6206     SDValue Op1 = TheXor->getOperand(1);
   6207     if (Op0.getOpcode() == Op1.getOpcode()) {
   6208       // Avoid missing important xor optimizations.
   6209       SDValue Tmp = visitXOR(TheXor);
   6210       if (Tmp.getNode() && Tmp.getNode() != TheXor) {
   6211         DEBUG(dbgs() << "\nReplacing.8 ";
   6212               TheXor->dump(&DAG);
   6213               dbgs() << "\nWith: ";
   6214               Tmp.getNode()->dump(&DAG);
   6215               dbgs() << '\n');
   6216         WorkListRemover DeadNodes(*this);
   6217         DAG.ReplaceAllUsesOfValueWith(N1, Tmp, &DeadNodes);
   6218         removeFromWorkList(TheXor);
   6219         DAG.DeleteNode(TheXor);
   6220         return DAG.getNode(ISD::BRCOND, N->getDebugLoc(),
   6221                            MVT::Other, Chain, Tmp, N2);
   6222       }
   6223     }
   6224 
   6225     if (Op0.getOpcode() != ISD::SETCC && Op1.getOpcode() != ISD::SETCC) {
   6226       bool Equal = false;
   6227       if (ConstantSDNode *RHSCI = dyn_cast<ConstantSDNode>(Op0))
   6228         if (RHSCI->getAPIntValue() == 1 && Op0.hasOneUse() &&
   6229             Op0.getOpcode() == ISD::XOR) {
   6230           TheXor = Op0.getNode();
   6231           Equal = true;
   6232         }
   6233 
   6234       EVT SetCCVT = N1.getValueType();
   6235       if (LegalTypes)
   6236         SetCCVT = TLI.getSetCCResultType(SetCCVT);
   6237       SDValue SetCC = DAG.getSetCC(TheXor->getDebugLoc(),
   6238                                    SetCCVT,
   6239                                    Op0, Op1,
   6240                                    Equal ? ISD::SETEQ : ISD::SETNE);
   6241       // Replace the uses of XOR with SETCC
   6242       WorkListRemover DeadNodes(*this);
   6243       DAG.ReplaceAllUsesOfValueWith(N1, SetCC, &DeadNodes);
   6244       removeFromWorkList(N1.getNode());
   6245       DAG.DeleteNode(N1.getNode());
   6246       return DAG.getNode(ISD::BRCOND, N->getDebugLoc(),
   6247                          MVT::Other, Chain, SetCC, N2);
   6248     }
   6249   }
   6250 
   6251   return SDValue();
   6252 }
   6253 
   6254 // Operand List for BR_CC: Chain, CondCC, CondLHS, CondRHS, DestBB.
   6255 //
   6256 SDValue DAGCombiner::visitBR_CC(SDNode *N) {
   6257   CondCodeSDNode *CC = cast<CondCodeSDNode>(N->getOperand(1));
   6258   SDValue CondLHS = N->getOperand(2), CondRHS = N->getOperand(3);
   6259 
   6260   // If N is a constant we could fold this into a fallthrough or unconditional
   6261   // branch. However that doesn't happen very often in normal code, because
   6262   // Instcombine/SimplifyCFG should have handled the available opportunities.
   6263   // If we did this folding here, it would be necessary to update the
   6264   // MachineBasicBlock CFG, which is awkward.
   6265 
   6266   // Use SimplifySetCC to simplify SETCC's.
   6267   SDValue Simp = SimplifySetCC(TLI.getSetCCResultType(CondLHS.getValueType()),
   6268                                CondLHS, CondRHS, CC->get(), N->getDebugLoc(),
   6269                                false);
   6270   if (Simp.getNode()) AddToWorkList(Simp.getNode());
   6271 
   6272   // fold to a simpler setcc
   6273   if (Simp.getNode() && Simp.getOpcode() == ISD::SETCC)
   6274     return DAG.getNode(ISD::BR_CC, N->getDebugLoc(), MVT::Other,
   6275                        N->getOperand(0), Simp.getOperand(2),
   6276                        Simp.getOperand(0), Simp.getOperand(1),
   6277                        N->getOperand(4));
   6278 
   6279   return SDValue();
   6280 }
   6281 
   6282 /// canFoldInAddressingMode - Return true if 'Use' is a load or a store that
   6283 /// uses N as its base pointer and that N may be folded in the load / store
   6284 /// addressing mode.
   6285 static bool canFoldInAddressingMode(SDNode *N, SDNode *Use,
   6286                                     SelectionDAG &DAG,
   6287                                     const TargetLowering &TLI) {
   6288   EVT VT;
   6289   if (LoadSDNode *LD  = dyn_cast<LoadSDNode>(Use)) {
   6290     if (LD->isIndexed() || LD->getBasePtr().getNode() != N)
   6291       return false;
   6292     VT = Use->getValueType(0);
   6293   } else if (StoreSDNode *ST  = dyn_cast<StoreSDNode>(Use)) {
   6294     if (ST->isIndexed() || ST->getBasePtr().getNode() != N)
   6295       return false;
   6296     VT = ST->getValue().getValueType();
   6297   } else
   6298     return false;
   6299 
   6300   TargetLowering::AddrMode AM;
   6301   if (N->getOpcode() == ISD::ADD) {
   6302     ConstantSDNode *Offset = dyn_cast<ConstantSDNode>(N->getOperand(1));
   6303     if (Offset)
   6304       // [reg +/- imm]
   6305       AM.BaseOffs = Offset->getSExtValue();
   6306     else
   6307       // [reg +/- reg]
   6308       AM.Scale = 1;
   6309   } else if (N->getOpcode() == ISD::SUB) {
   6310     ConstantSDNode *Offset = dyn_cast<ConstantSDNode>(N->getOperand(1));
   6311     if (Offset)
   6312       // [reg +/- imm]
   6313       AM.BaseOffs = -Offset->getSExtValue();
   6314     else
   6315       // [reg +/- reg]
   6316       AM.Scale = 1;
   6317   } else
   6318     return false;
   6319 
   6320   return TLI.isLegalAddressingMode(AM, VT.getTypeForEVT(*DAG.getContext()));
   6321 }
   6322 
   6323 /// CombineToPreIndexedLoadStore - Try turning a load / store into a
   6324 /// pre-indexed load / store when the base pointer is an add or subtract
   6325 /// and it has other uses besides the load / store. After the
   6326 /// transformation, the new indexed load / store has effectively folded
   6327 /// the add / subtract in and all of its other uses are redirected to the
   6328 /// new load / store.
   6329 bool DAGCombiner::CombineToPreIndexedLoadStore(SDNode *N) {
   6330   if (Level < AfterLegalizeDAG)
   6331     return false;
   6332 
   6333   bool isLoad = true;
   6334   SDValue Ptr;
   6335   EVT VT;
   6336   if (LoadSDNode *LD  = dyn_cast<LoadSDNode>(N)) {
   6337     if (LD->isIndexed())
   6338       return false;
   6339     VT = LD->getMemoryVT();
   6340     if (!TLI.isIndexedLoadLegal(ISD::PRE_INC, VT) &&
   6341         !TLI.isIndexedLoadLegal(ISD::PRE_DEC, VT))
   6342       return false;
   6343     Ptr = LD->getBasePtr();
   6344   } else if (StoreSDNode *ST  = dyn_cast<StoreSDNode>(N)) {
   6345     if (ST->isIndexed())
   6346       return false;
   6347     VT = ST->getMemoryVT();
   6348     if (!TLI.isIndexedStoreLegal(ISD::PRE_INC, VT) &&
   6349         !TLI.isIndexedStoreLegal(ISD::PRE_DEC, VT))
   6350       return false;
   6351     Ptr = ST->getBasePtr();
   6352     isLoad = false;
   6353   } else {
   6354     return false;
   6355   }
   6356 
   6357   // If the pointer is not an add/sub, or if it doesn't have multiple uses, bail
   6358   // out.  There is no reason to make this a preinc/predec.
   6359   if ((Ptr.getOpcode() != ISD::ADD && Ptr.getOpcode() != ISD::SUB) ||
   6360       Ptr.getNode()->hasOneUse())
   6361     return false;
   6362 
   6363   // Ask the target to do addressing mode selection.
   6364   SDValue BasePtr;
   6365   SDValue Offset;
   6366   ISD::MemIndexedMode AM = ISD::UNINDEXED;
   6367   if (!TLI.getPreIndexedAddressParts(N, BasePtr, Offset, AM, DAG))
   6368     return false;
   6369   // Don't create a indexed load / store with zero offset.
   6370   if (isa<ConstantSDNode>(Offset) &&
   6371       cast<ConstantSDNode>(Offset)->isNullValue())
   6372     return false;
   6373 
   6374   // Try turning it into a pre-indexed load / store except when:
   6375   // 1) The new base ptr is a frame index.
   6376   // 2) If N is a store and the new base ptr is either the same as or is a
   6377   //    predecessor of the value being stored.
   6378   // 3) Another use of old base ptr is a predecessor of N. If ptr is folded
   6379   //    that would create a cycle.
   6380   // 4) All uses are load / store ops that use it as old base ptr.
   6381 
   6382   // Check #1.  Preinc'ing a frame index would require copying the stack pointer
   6383   // (plus the implicit offset) to a register to preinc anyway.
   6384   if (isa<FrameIndexSDNode>(BasePtr) || isa<RegisterSDNode>(BasePtr))
   6385     return false;
   6386 
   6387   // Check #2.
   6388   if (!isLoad) {
   6389     SDValue Val = cast<StoreSDNode>(N)->getValue();
   6390     if (Val == BasePtr || BasePtr.getNode()->isPredecessorOf(Val.getNode()))
   6391       return false;
   6392   }
   6393 
   6394   // Now check for #3 and #4.
   6395   bool RealUse = false;
   6396 
   6397   // Caches for hasPredecessorHelper
   6398   SmallPtrSet<const SDNode *, 32> Visited;
   6399   SmallVector<const SDNode *, 16> Worklist;
   6400 
   6401   for (SDNode::use_iterator I = Ptr.getNode()->use_begin(),
   6402          E = Ptr.getNode()->use_end(); I != E; ++I) {
   6403     SDNode *Use = *I;
   6404     if (Use == N)
   6405       continue;
   6406     if (N->hasPredecessorHelper(Use, Visited, Worklist))
   6407       return false;
   6408 
   6409     // If Ptr may be folded in addressing mode of other use, then it's
   6410     // not profitable to do this transformation.
   6411     if (!canFoldInAddressingMode(Ptr.getNode(), Use, DAG, TLI))
   6412       RealUse = true;
   6413   }
   6414 
   6415   if (!RealUse)
   6416     return false;
   6417 
   6418   SDValue Result;
   6419   if (isLoad)
   6420     Result = DAG.getIndexedLoad(SDValue(N,0), N->getDebugLoc(),
   6421                                 BasePtr, Offset, AM);
   6422   else
   6423     Result = DAG.getIndexedStore(SDValue(N,0), N->getDebugLoc(),
   6424                                  BasePtr, Offset, AM);
   6425   ++PreIndexedNodes;
   6426   ++NodesCombined;
   6427   DEBUG(dbgs() << "\nReplacing.4 ";
   6428         N->dump(&DAG);
   6429         dbgs() << "\nWith: ";
   6430         Result.getNode()->dump(&DAG);
   6431         dbgs() << '\n');
   6432   WorkListRemover DeadNodes(*this);
   6433   if (isLoad) {
   6434     DAG.ReplaceAllUsesOfValueWith(SDValue(N, 0), Result.getValue(0),
   6435                                   &DeadNodes);
   6436     DAG.ReplaceAllUsesOfValueWith(SDValue(N, 1), Result.getValue(2),
   6437                                   &DeadNodes);
   6438   } else {
   6439     DAG.ReplaceAllUsesOfValueWith(SDValue(N, 0), Result.getValue(1),
   6440                                   &DeadNodes);
   6441   }
   6442 
   6443   // Finally, since the node is now dead, remove it from the graph.
   6444   DAG.DeleteNode(N);
   6445 
   6446   // Replace the uses of Ptr with uses of the updated base value.
   6447   DAG.ReplaceAllUsesOfValueWith(Ptr, Result.getValue(isLoad ? 1 : 0),
   6448                                 &DeadNodes);
   6449   removeFromWorkList(Ptr.getNode());
   6450   DAG.DeleteNode(Ptr.getNode());
   6451 
   6452   return true;
   6453 }
   6454 
   6455 /// CombineToPostIndexedLoadStore - Try to combine a load / store with a
   6456 /// add / sub of the base pointer node into a post-indexed load / store.
   6457 /// The transformation folded the add / subtract into the new indexed
   6458 /// load / store effectively and all of its uses are redirected to the
   6459 /// new load / store.
   6460 bool DAGCombiner::CombineToPostIndexedLoadStore(SDNode *N) {
   6461   if (Level < AfterLegalizeDAG)
   6462     return false;
   6463 
   6464   bool isLoad = true;
   6465   SDValue Ptr;
   6466   EVT VT;
   6467   if (LoadSDNode *LD  = dyn_cast<LoadSDNode>(N)) {
   6468     if (LD->isIndexed())
   6469       return false;
   6470     VT = LD->getMemoryVT();
   6471     if (!TLI.isIndexedLoadLegal(ISD::POST_INC, VT) &&
   6472         !TLI.isIndexedLoadLegal(ISD::POST_DEC, VT))
   6473       return false;
   6474     Ptr = LD->getBasePtr();
   6475   } else if (StoreSDNode *ST  = dyn_cast<StoreSDNode>(N)) {
   6476     if (ST->isIndexed())
   6477       return false;
   6478     VT = ST->getMemoryVT();
   6479     if (!TLI.isIndexedStoreLegal(ISD::POST_INC, VT) &&
   6480         !TLI.isIndexedStoreLegal(ISD::POST_DEC, VT))
   6481       return false;
   6482     Ptr = ST->getBasePtr();
   6483     isLoad = false;
   6484   } else {
   6485     return false;
   6486   }
   6487 
   6488   if (Ptr.getNode()->hasOneUse())
   6489     return false;
   6490 
   6491   for (SDNode::use_iterator I = Ptr.getNode()->use_begin(),
   6492          E = Ptr.getNode()->use_end(); I != E; ++I) {
   6493     SDNode *Op = *I;
   6494     if (Op == N ||
   6495         (Op->getOpcode() != ISD::ADD && Op->getOpcode() != ISD::SUB))
   6496       continue;
   6497 
   6498     SDValue BasePtr;
   6499     SDValue Offset;
   6500     ISD::MemIndexedMode AM = ISD::UNINDEXED;
   6501     if (TLI.getPostIndexedAddressParts(N, Op, BasePtr, Offset, AM, DAG)) {
   6502       // Don't create a indexed load / store with zero offset.
   6503       if (isa<ConstantSDNode>(Offset) &&
   6504           cast<ConstantSDNode>(Offset)->isNullValue())
   6505         continue;
   6506 
   6507       // Try turning it into a post-indexed load / store except when
   6508       // 1) All uses are load / store ops that use it as base ptr (and
   6509       //    it may be folded as addressing mmode).
   6510       // 2) Op must be independent of N, i.e. Op is neither a predecessor
   6511       //    nor a successor of N. Otherwise, if Op is folded that would
   6512       //    create a cycle.
   6513 
   6514       if (isa<FrameIndexSDNode>(BasePtr) || isa<RegisterSDNode>(BasePtr))
   6515         continue;
   6516 
   6517       // Check for #1.
   6518       bool TryNext = false;
   6519       for (SDNode::use_iterator II = BasePtr.getNode()->use_begin(),
   6520              EE = BasePtr.getNode()->use_end(); II != EE; ++II) {
   6521         SDNode *Use = *II;
   6522         if (Use == Ptr.getNode())
   6523           continue;
   6524 
   6525         // If all the uses are load / store addresses, then don't do the
   6526         // transformation.
   6527         if (Use->getOpcode() == ISD::ADD || Use->getOpcode() == ISD::SUB){
   6528           bool RealUse = false;
   6529           for (SDNode::use_iterator III = Use->use_begin(),
   6530                  EEE = Use->use_end(); III != EEE; ++III) {
   6531             SDNode *UseUse = *III;
   6532             if (!canFoldInAddressingMode(Use, UseUse, DAG, TLI))
   6533               RealUse = true;
   6534           }
   6535 
   6536           if (!RealUse) {
   6537             TryNext = true;
   6538             break;
   6539           }
   6540         }
   6541       }
   6542 
   6543       if (TryNext)
   6544         continue;
   6545 
   6546       // Check for #2
   6547       if (!Op->isPredecessorOf(N) && !N->isPredecessorOf(Op)) {
   6548         SDValue Result = isLoad
   6549           ? DAG.getIndexedLoad(SDValue(N,0), N->getDebugLoc(),
   6550                                BasePtr, Offset, AM)
   6551           : DAG.getIndexedStore(SDValue(N,0), N->getDebugLoc(),
   6552                                 BasePtr, Offset, AM);
   6553         ++PostIndexedNodes;
   6554         ++NodesCombined;
   6555         DEBUG(dbgs() << "\nReplacing.5 ";
   6556               N->dump(&DAG);
   6557               dbgs() << "\nWith: ";
   6558               Result.getNode()->dump(&DAG);
   6559               dbgs() << '\n');
   6560         WorkListRemover DeadNodes(*this);
   6561         if (isLoad) {
   6562           DAG.ReplaceAllUsesOfValueWith(SDValue(N, 0), Result.getValue(0),
   6563                                         &DeadNodes);
   6564           DAG.ReplaceAllUsesOfValueWith(SDValue(N, 1), Result.getValue(2),
   6565                                         &DeadNodes);
   6566         } else {
   6567           DAG.ReplaceAllUsesOfValueWith(SDValue(N, 0), Result.getValue(1),
   6568                                         &DeadNodes);
   6569         }
   6570 
   6571         // Finally, since the node is now dead, remove it from the graph.
   6572         DAG.DeleteNode(N);
   6573 
   6574         // Replace the uses of Use with uses of the updated base value.
   6575         DAG.ReplaceAllUsesOfValueWith(SDValue(Op, 0),
   6576                                       Result.getValue(isLoad ? 1 : 0),
   6577                                       &DeadNodes);
   6578         removeFromWorkList(Op);
   6579         DAG.DeleteNode(Op);
   6580         return true;
   6581       }
   6582     }
   6583   }
   6584 
   6585   return false;
   6586 }
   6587 
   6588 SDValue DAGCombiner::visitLOAD(SDNode *N) {
   6589   LoadSDNode *LD  = cast<LoadSDNode>(N);
   6590   SDValue Chain = LD->getChain();
   6591   SDValue Ptr   = LD->getBasePtr();
   6592 
   6593   // If load is not volatile and there are no uses of the loaded value (and
   6594   // the updated indexed value in case of indexed loads), change uses of the
   6595   // chain value into uses of the chain input (i.e. delete the dead load).
   6596   if (!LD->isVolatile()) {
   6597     if (N->getValueType(1) == MVT::Other) {
   6598       // Unindexed loads.
   6599       if (!N->hasAnyUseOfValue(0)) {
   6600         // It's not safe to use the two value CombineTo variant here. e.g.
   6601         // v1, chain2 = load chain1, loc
   6602         // v2, chain3 = load chain2, loc
   6603         // v3         = add v2, c
   6604         // Now we replace use of chain2 with chain1.  This makes the second load
   6605         // isomorphic to the one we are deleting, and thus makes this load live.
   6606         DEBUG(dbgs() << "\nReplacing.6 ";
   6607               N->dump(&DAG);
   6608               dbgs() << "\nWith chain: ";
   6609               Chain.getNode()->dump(&DAG);
   6610               dbgs() << "\n");
   6611         WorkListRemover DeadNodes(*this);
   6612         DAG.ReplaceAllUsesOfValueWith(SDValue(N, 1), Chain, &DeadNodes);
   6613 
   6614         if (N->use_empty()) {
   6615           removeFromWorkList(N);
   6616           DAG.DeleteNode(N);
   6617         }
   6618 
   6619         return SDValue(N, 0);   // Return N so it doesn't get rechecked!
   6620       }
   6621     } else {
   6622       // Indexed loads.
   6623       assert(N->getValueType(2) == MVT::Other && "Malformed indexed loads?");
   6624       if (!N->hasAnyUseOfValue(0) && !N->hasAnyUseOfValue(1)) {
   6625         SDValue Undef = DAG.getUNDEF(N->getValueType(0));
   6626         DEBUG(dbgs() << "\nReplacing.7 ";
   6627               N->dump(&DAG);
   6628               dbgs() << "\nWith: ";
   6629               Undef.getNode()->dump(&DAG);
   6630               dbgs() << " and 2 other values\n");
   6631         WorkListRemover DeadNodes(*this);
   6632         DAG.ReplaceAllUsesOfValueWith(SDValue(N, 0), Undef, &DeadNodes);
   6633         DAG.ReplaceAllUsesOfValueWith(SDValue(N, 1),
   6634                                       DAG.getUNDEF(N->getValueType(1)),
   6635                                       &DeadNodes);
   6636         DAG.ReplaceAllUsesOfValueWith(SDValue(N, 2), Chain, &DeadNodes);
   6637         removeFromWorkList(N);
   6638         DAG.DeleteNode(N);
   6639         return SDValue(N, 0);   // Return N so it doesn't get rechecked!
   6640       }
   6641     }
   6642   }
   6643 
   6644   // If this load is directly stored, replace the load value with the stored
   6645   // value.
   6646   // TODO: Handle store large -> read small portion.
   6647   // TODO: Handle TRUNCSTORE/LOADEXT
   6648   if (ISD::isNormalLoad(N) && !LD->isVolatile()) {
   6649     if (ISD::isNON_TRUNCStore(Chain.getNode())) {
   6650       StoreSDNode *PrevST = cast<StoreSDNode>(Chain);
   6651       if (PrevST->getBasePtr() == Ptr &&
   6652           PrevST->getValue().getValueType() == N->getValueType(0))
   6653       return CombineTo(N, Chain.getOperand(1), Chain);
   6654     }
   6655   }
   6656 
   6657   // Try to infer better alignment information than the load already has.
   6658   if (OptLevel != CodeGenOpt::None && LD->isUnindexed()) {
   6659     if (unsigned Align = DAG.InferPtrAlignment(Ptr)) {
   6660       if (Align > LD->getAlignment())
   6661         return DAG.getExtLoad(LD->getExtensionType(), N->getDebugLoc(),
   6662                               LD->getValueType(0),
   6663                               Chain, Ptr, LD->getPointerInfo(),
   6664                               LD->getMemoryVT(),
   6665                               LD->isVolatile(), LD->isNonTemporal(), Align);
   6666     }
   6667   }
   6668 
   6669   if (CombinerAA) {
   6670     // Walk up chain skipping non-aliasing memory nodes.
   6671     SDValue BetterChain = FindBetterChain(N, Chain);
   6672 
   6673     // If there is a better chain.
   6674     if (Chain != BetterChain) {
   6675       SDValue ReplLoad;
   6676 
   6677       // Replace the chain to void dependency.
   6678       if (LD->getExtensionType() == ISD::NON_EXTLOAD) {
   6679         ReplLoad = DAG.getLoad(N->getValueType(0), LD->getDebugLoc(),
   6680                                BetterChain, Ptr, LD->getPointerInfo(),
   6681                                LD->isVolatile(), LD->isNonTemporal(),
   6682                                LD->isInvariant(), LD->getAlignment());
   6683       } else {
   6684         ReplLoad = DAG.getExtLoad(LD->getExtensionType(), LD->getDebugLoc(),
   6685                                   LD->getValueType(0),
   6686                                   BetterChain, Ptr, LD->getPointerInfo(),
   6687                                   LD->getMemoryVT(),
   6688                                   LD->isVolatile(),
   6689                                   LD->isNonTemporal(),
   6690                                   LD->getAlignment());
   6691       }
   6692 
   6693       // Create token factor to keep old chain connected.
   6694       SDValue Token = DAG.getNode(ISD::TokenFactor, N->getDebugLoc(),
   6695                                   MVT::Other, Chain, ReplLoad.getValue(1));
   6696 
   6697       // Make sure the new and old chains are cleaned up.
   6698       AddToWorkList(Token.getNode());
   6699 
   6700       // Replace uses with load result and token factor. Don't add users
   6701       // to work list.
   6702       return CombineTo(N, ReplLoad.getValue(0), Token, false);
   6703     }
   6704   }
   6705 
   6706   // Try transforming N to an indexed load.
   6707   if (CombineToPreIndexedLoadStore(N) || CombineToPostIndexedLoadStore(N))
   6708     return SDValue(N, 0);
   6709 
   6710   return SDValue();
   6711 }
   6712 
   6713 /// CheckForMaskedLoad - Check to see if V is (and load (ptr), imm), where the
   6714 /// load is having specific bytes cleared out.  If so, return the byte size
   6715 /// being masked out and the shift amount.
   6716 static std::pair<unsigned, unsigned>
   6717 CheckForMaskedLoad(SDValue V, SDValue Ptr, SDValue Chain) {
   6718   std::pair<unsigned, unsigned> Result(0, 0);
   6719 
   6720   // Check for the structure we're looking for.
   6721   if (V->getOpcode() != ISD::AND ||
   6722       !isa<ConstantSDNode>(V->getOperand(1)) ||
   6723       !ISD::isNormalLoad(V->getOperand(0).getNode()))
   6724     return Result;
   6725 
   6726   // Check the chain and pointer.
   6727   LoadSDNode *LD = cast<LoadSDNode>(V->getOperand(0));
   6728   if (LD->getBasePtr() != Ptr) return Result;  // Not from same pointer.
   6729 
   6730   // The store should be chained directly to the load or be an operand of a
   6731   // tokenfactor.
   6732   if (LD == Chain.getNode())
   6733     ; // ok.
   6734   else if (Chain->getOpcode() != ISD::TokenFactor)
   6735     return Result; // Fail.
   6736   else {
   6737     bool isOk = false;
   6738     for (unsigned i = 0, e = Chain->getNumOperands(); i != e; ++i)
   6739       if (Chain->getOperand(i).getNode() == LD) {
   6740         isOk = true;
   6741         break;
   6742       }
   6743     if (!isOk) return Result;
   6744   }
   6745 
   6746   // This only handles simple types.
   6747   if (V.getValueType() != MVT::i16 &&
   6748       V.getValueType() != MVT::i32 &&
   6749       V.getValueType() != MVT::i64)
   6750     return Result;
   6751 
   6752   // Check the constant mask.  Invert it so that the bits being masked out are
   6753   // 0 and the bits being kept are 1.  Use getSExtValue so that leading bits
   6754   // follow the sign bit for uniformity.
   6755   uint64_t NotMask = ~cast<ConstantSDNode>(V->getOperand(1))->getSExtValue();
   6756   unsigned NotMaskLZ = CountLeadingZeros_64(NotMask);
   6757   if (NotMaskLZ & 7) return Result;  // Must be multiple of a byte.
   6758   unsigned NotMaskTZ = CountTrailingZeros_64(NotMask);
   6759   if (NotMaskTZ & 7) return Result;  // Must be multiple of a byte.
   6760   if (NotMaskLZ == 64) return Result;  // All zero mask.
   6761 
   6762   // See if we have a continuous run of bits.  If so, we have 0*1+0*
   6763   if (CountTrailingOnes_64(NotMask >> NotMaskTZ)+NotMaskTZ+NotMaskLZ != 64)
   6764     return Result;
   6765 
   6766   // Adjust NotMaskLZ down to be from the actual size of the int instead of i64.
   6767   if (V.getValueType() != MVT::i64 && NotMaskLZ)
   6768     NotMaskLZ -= 64-V.getValueSizeInBits();
   6769 
   6770   unsigned MaskedBytes = (V.getValueSizeInBits()-NotMaskLZ-NotMaskTZ)/8;
   6771   switch (MaskedBytes) {
   6772   case 1:
   6773   case 2:
   6774   case 4: break;
   6775   default: return Result; // All one mask, or 5-byte mask.
   6776   }
   6777 
   6778   // Verify that the first bit starts at a multiple of mask so that the access
   6779   // is aligned the same as the access width.
   6780   if (NotMaskTZ && NotMaskTZ/8 % MaskedBytes) return Result;
   6781 
   6782   Result.first = MaskedBytes;
   6783   Result.second = NotMaskTZ/8;
   6784   return Result;
   6785 }
   6786 
   6787 
   6788 /// ShrinkLoadReplaceStoreWithStore - Check to see if IVal is something that
   6789 /// provides a value as specified by MaskInfo.  If so, replace the specified
   6790 /// store with a narrower store of truncated IVal.
   6791 static SDNode *
   6792 ShrinkLoadReplaceStoreWithStore(const std::pair<unsigned, unsigned> &MaskInfo,
   6793                                 SDValue IVal, StoreSDNode *St,
   6794                                 DAGCombiner *DC) {
   6795   unsigned NumBytes = MaskInfo.first;
   6796   unsigned ByteShift = MaskInfo.second;
   6797   SelectionDAG &DAG = DC->getDAG();
   6798 
   6799   // Check to see if IVal is all zeros in the part being masked in by the 'or'
   6800   // that uses this.  If not, this is not a replacement.
   6801   APInt Mask = ~APInt::getBitsSet(IVal.getValueSizeInBits(),
   6802                                   ByteShift*8, (ByteShift+NumBytes)*8);
   6803   if (!DAG.MaskedValueIsZero(IVal, Mask)) return 0;
   6804 
   6805   // Check that it is legal on the target to do this.  It is legal if the new
   6806   // VT we're shrinking to (i8/i16/i32) is legal or we're still before type
   6807   // legalization.
   6808   MVT VT = MVT::getIntegerVT(NumBytes*8);
   6809   if (!DC->isTypeLegal(VT))
   6810     return 0;
   6811 
   6812   // Okay, we can do this!  Replace the 'St' store with a store of IVal that is
   6813   // shifted by ByteShift and truncated down to NumBytes.
   6814   if (ByteShift)
   6815     IVal = DAG.getNode(ISD::SRL, IVal->getDebugLoc(), IVal.getValueType(), IVal,
   6816                        DAG.getConstant(ByteShift*8,
   6817                                     DC->getShiftAmountTy(IVal.getValueType())));
   6818 
   6819   // Figure out the offset for the store and the alignment of the access.
   6820   unsigned StOffset;
   6821   unsigned NewAlign = St->getAlignment();
   6822 
   6823   if (DAG.getTargetLoweringInfo().isLittleEndian())
   6824     StOffset = ByteShift;
   6825   else
   6826     StOffset = IVal.getValueType().getStoreSize() - ByteShift - NumBytes;
   6827 
   6828   SDValue Ptr = St->getBasePtr();
   6829   if (StOffset) {
   6830     Ptr = DAG.getNode(ISD::ADD, IVal->getDebugLoc(), Ptr.getValueType(),
   6831                       Ptr, DAG.getConstant(StOffset, Ptr.getValueType()));
   6832     NewAlign = MinAlign(NewAlign, StOffset);
   6833   }
   6834 
   6835   // Truncate down to the new size.
   6836   IVal = DAG.getNode(ISD::TRUNCATE, IVal->getDebugLoc(), VT, IVal);
   6837 
   6838   ++OpsNarrowed;
   6839   return DAG.getStore(St->getChain(), St->getDebugLoc(), IVal, Ptr,
   6840                       St->getPointerInfo().getWithOffset(StOffset),
   6841                       false, false, NewAlign).getNode();
   6842 }
   6843 
   6844 
   6845 /// ReduceLoadOpStoreWidth - Look for sequence of load / op / store where op is
   6846 /// one of 'or', 'xor', and 'and' of immediates. If 'op' is only touching some
   6847 /// of the loaded bits, try narrowing the load and store if it would end up
   6848 /// being a win for performance or code size.
   6849 SDValue DAGCombiner::ReduceLoadOpStoreWidth(SDNode *N) {
   6850   StoreSDNode *ST  = cast<StoreSDNode>(N);
   6851   if (ST->isVolatile())
   6852     return SDValue();
   6853 
   6854   SDValue Chain = ST->getChain();
   6855   SDValue Value = ST->getValue();
   6856   SDValue Ptr   = ST->getBasePtr();
   6857   EVT VT = Value.getValueType();
   6858 
   6859   if (ST->isTruncatingStore() || VT.isVector() || !Value.hasOneUse())
   6860     return SDValue();
   6861 
   6862   unsigned Opc = Value.getOpcode();
   6863 
   6864   // If this is "store (or X, Y), P" and X is "(and (load P), cst)", where cst
   6865   // is a byte mask indicating a consecutive number of bytes, check to see if
   6866   // Y is known to provide just those bytes.  If so, we try to replace the
   6867   // load + replace + store sequence with a single (narrower) store, which makes
   6868   // the load dead.
   6869   if (Opc == ISD::OR) {
   6870     std::pair<unsigned, unsigned> MaskedLoad;
   6871     MaskedLoad = CheckForMaskedLoad(Value.getOperand(0), Ptr, Chain);
   6872     if (MaskedLoad.first)
   6873       if (SDNode *NewST = ShrinkLoadReplaceStoreWithStore(MaskedLoad,
   6874                                                   Value.getOperand(1), ST,this))
   6875         return SDValue(NewST, 0);
   6876 
   6877     // Or is commutative, so try swapping X and Y.
   6878     MaskedLoad = CheckForMaskedLoad(Value.getOperand(1), Ptr, Chain);
   6879     if (MaskedLoad.first)
   6880       if (SDNode *NewST = ShrinkLoadReplaceStoreWithStore(MaskedLoad,
   6881                                                   Value.getOperand(0), ST,this))
   6882         return SDValue(NewST, 0);
   6883   }
   6884 
   6885   if ((Opc != ISD::OR && Opc != ISD::XOR && Opc != ISD::AND) ||
   6886       Value.getOperand(1).getOpcode() != ISD::Constant)
   6887     return SDValue();
   6888 
   6889   SDValue N0 = Value.getOperand(0);
   6890   if (ISD::isNormalLoad(N0.getNode()) && N0.hasOneUse() &&
   6891       Chain == SDValue(N0.getNode(), 1)) {
   6892     LoadSDNode *LD = cast<LoadSDNode>(N0);
   6893     if (LD->getBasePtr() != Ptr ||
   6894         LD->getPointerInfo().getAddrSpace() !=
   6895         ST->getPointerInfo().getAddrSpace())
   6896       return SDValue();
   6897 
   6898     // Find the type to narrow it the load / op / store to.
   6899     SDValue N1 = Value.getOperand(1);
   6900     unsigned BitWidth = N1.getValueSizeInBits();
   6901     APInt Imm = cast<ConstantSDNode>(N1)->getAPIntValue();
   6902     if (Opc == ISD::AND)
   6903       Imm ^= APInt::getAllOnesValue(BitWidth);
   6904     if (Imm == 0 || Imm.isAllOnesValue())
   6905       return SDValue();
   6906     unsigned ShAmt = Imm.countTrailingZeros();
   6907     unsigned MSB = BitWidth - Imm.countLeadingZeros() - 1;
   6908     unsigned NewBW = NextPowerOf2(MSB - ShAmt);
   6909     EVT NewVT = EVT::getIntegerVT(*DAG.getContext(), NewBW);
   6910     while (NewBW < BitWidth &&
   6911            !(TLI.isOperationLegalOrCustom(Opc, NewVT) &&
   6912              TLI.isNarrowingProfitable(VT, NewVT))) {
   6913       NewBW = NextPowerOf2(NewBW);
   6914       NewVT = EVT::getIntegerVT(*DAG.getContext(), NewBW);
   6915     }
   6916     if (NewBW >= BitWidth)
   6917       return SDValue();
   6918 
   6919     // If the lsb changed does not start at the type bitwidth boundary,
   6920     // start at the previous one.
   6921     if (ShAmt % NewBW)
   6922       ShAmt = (((ShAmt + NewBW - 1) / NewBW) * NewBW) - NewBW;
   6923     APInt Mask = APInt::getBitsSet(BitWidth, ShAmt, ShAmt + NewBW);
   6924     if ((Imm & Mask) == Imm) {
   6925       APInt NewImm = (Imm & Mask).lshr(ShAmt).trunc(NewBW);
   6926       if (Opc == ISD::AND)
   6927         NewImm ^= APInt::getAllOnesValue(NewBW);
   6928       uint64_t PtrOff = ShAmt / 8;
   6929       // For big endian targets, we need to adjust the offset to the pointer to
   6930       // load the correct bytes.
   6931       if (TLI.isBigEndian())
   6932         PtrOff = (BitWidth + 7 - NewBW) / 8 - PtrOff;
   6933 
   6934       unsigned NewAlign = MinAlign(LD->getAlignment(), PtrOff);
   6935       Type *NewVTTy = NewVT.getTypeForEVT(*DAG.getContext());
   6936       if (NewAlign < TLI.getTargetData()->getABITypeAlignment(NewVTTy))
   6937         return SDValue();
   6938 
   6939       SDValue NewPtr = DAG.getNode(ISD::ADD, LD->getDebugLoc(),
   6940                                    Ptr.getValueType(), Ptr,
   6941                                    DAG.getConstant(PtrOff, Ptr.getValueType()));
   6942       SDValue NewLD = DAG.getLoad(NewVT, N0.getDebugLoc(),
   6943                                   LD->getChain(), NewPtr,
   6944                                   LD->getPointerInfo().getWithOffset(PtrOff),
   6945                                   LD->isVolatile(), LD->isNonTemporal(),
   6946                                   LD->isInvariant(), NewAlign);
   6947       SDValue NewVal = DAG.getNode(Opc, Value.getDebugLoc(), NewVT, NewLD,
   6948                                    DAG.getConstant(NewImm, NewVT));
   6949       SDValue NewST = DAG.getStore(Chain, N->getDebugLoc(),
   6950                                    NewVal, NewPtr,
   6951                                    ST->getPointerInfo().getWithOffset(PtrOff),
   6952                                    false, false, NewAlign);
   6953 
   6954       AddToWorkList(NewPtr.getNode());
   6955       AddToWorkList(NewLD.getNode());
   6956       AddToWorkList(NewVal.getNode());
   6957       WorkListRemover DeadNodes(*this);
   6958       DAG.ReplaceAllUsesOfValueWith(N0.getValue(1), NewLD.getValue(1),
   6959                                     &DeadNodes);
   6960       ++OpsNarrowed;
   6961       return NewST;
   6962     }
   6963   }
   6964 
   6965   return SDValue();
   6966 }
   6967 
   6968 /// TransformFPLoadStorePair - For a given floating point load / store pair,
   6969 /// if the load value isn't used by any other operations, then consider
   6970 /// transforming the pair to integer load / store operations if the target
   6971 /// deems the transformation profitable.
   6972 SDValue DAGCombiner::TransformFPLoadStorePair(SDNode *N) {
   6973   StoreSDNode *ST  = cast<StoreSDNode>(N);
   6974   SDValue Chain = ST->getChain();
   6975   SDValue Value = ST->getValue();
   6976   if (ISD::isNormalStore(ST) && ISD::isNormalLoad(Value.getNode()) &&
   6977       Value.hasOneUse() &&
   6978       Chain == SDValue(Value.getNode(), 1)) {
   6979     LoadSDNode *LD = cast<LoadSDNode>(Value);
   6980     EVT VT = LD->getMemoryVT();
   6981     if (!VT.isFloatingPoint() ||
   6982         VT != ST->getMemoryVT() ||
   6983         LD->isNonTemporal() ||
   6984         ST->isNonTemporal() ||
   6985         LD->getPointerInfo().getAddrSpace() != 0 ||
   6986         ST->getPointerInfo().getAddrSpace() != 0)
   6987       return SDValue();
   6988 
   6989     EVT IntVT = EVT::getIntegerVT(*DAG.getContext(), VT.getSizeInBits());
   6990     if (!TLI.isOperationLegal(ISD::LOAD, IntVT) ||
   6991         !TLI.isOperationLegal(ISD::STORE, IntVT) ||
   6992         !TLI.isDesirableToTransformToIntegerOp(ISD::LOAD, VT) ||
   6993         !TLI.isDesirableToTransformToIntegerOp(ISD::STORE, VT))
   6994       return SDValue();
   6995 
   6996     unsigned LDAlign = LD->getAlignment();
   6997     unsigned STAlign = ST->getAlignment();
   6998     Type *IntVTTy = IntVT.getTypeForEVT(*DAG.getContext());
   6999     unsigned ABIAlign = TLI.getTargetData()->getABITypeAlignment(IntVTTy);
   7000     if (LDAlign < ABIAlign || STAlign < ABIAlign)
   7001       return SDValue();
   7002 
   7003     SDValue NewLD = DAG.getLoad(IntVT, Value.getDebugLoc(),
   7004                                 LD->getChain(), LD->getBasePtr(),
   7005                                 LD->getPointerInfo(),
   7006                                 false, false, false, LDAlign);
   7007 
   7008     SDValue NewST = DAG.getStore(NewLD.getValue(1), N->getDebugLoc(),
   7009                                  NewLD, ST->getBasePtr(),
   7010                                  ST->getPointerInfo(),
   7011                                  false, false, STAlign);
   7012 
   7013     AddToWorkList(NewLD.getNode());
   7014     AddToWorkList(NewST.getNode());
   7015     WorkListRemover DeadNodes(*this);
   7016     DAG.ReplaceAllUsesOfValueWith(Value.getValue(1), NewLD.getValue(1),
   7017                                   &DeadNodes);
   7018     ++LdStFP2Int;
   7019     return NewST;
   7020   }
   7021 
   7022   return SDValue();
   7023 }
   7024 
   7025 SDValue DAGCombiner::visitSTORE(SDNode *N) {
   7026   StoreSDNode *ST  = cast<StoreSDNode>(N);
   7027   SDValue Chain = ST->getChain();
   7028   SDValue Value = ST->getValue();
   7029   SDValue Ptr   = ST->getBasePtr();
   7030 
   7031   // If this is a store of a bit convert, store the input value if the
   7032   // resultant store does not need a higher alignment than the original.
   7033   if (Value.getOpcode() == ISD::BITCAST && !ST->isTruncatingStore() &&
   7034       ST->isUnindexed()) {
   7035     unsigned OrigAlign = ST->getAlignment();
   7036     EVT SVT = Value.getOperand(0).getValueType();
   7037     unsigned Align = TLI.getTargetData()->
   7038       getABITypeAlignment(SVT.getTypeForEVT(*DAG.getContext()));
   7039     if (Align <= OrigAlign &&
   7040         ((!LegalOperations && !ST->isVolatile()) ||
   7041          TLI.isOperationLegalOrCustom(ISD::STORE, SVT)))
   7042       return DAG.getStore(Chain, N->getDebugLoc(), Value.getOperand(0),
   7043                           Ptr, ST->getPointerInfo(), ST->isVolatile(),
   7044                           ST->isNonTemporal(), OrigAlign);
   7045   }
   7046 
   7047   // Turn 'store undef, Ptr' -> nothing.
   7048   if (Value.getOpcode() == ISD::UNDEF && ST->isUnindexed())
   7049     return Chain;
   7050 
   7051   // Turn 'store float 1.0, Ptr' -> 'store int 0x12345678, Ptr'
   7052   if (ConstantFPSDNode *CFP = dyn_cast<ConstantFPSDNode>(Value)) {
   7053     // NOTE: If the original store is volatile, this transform must not increase
   7054     // the number of stores.  For example, on x86-32 an f64 can be stored in one
   7055     // processor operation but an i64 (which is not legal) requires two.  So the
   7056     // transform should not be done in this case.
   7057     if (Value.getOpcode() != ISD::TargetConstantFP) {
   7058       SDValue Tmp;
   7059       switch (CFP->getValueType(0).getSimpleVT().SimpleTy) {
   7060       default: llvm_unreachable("Unknown FP type");
   7061       case MVT::f80:    // We don't do this for these yet.
   7062       case MVT::f128:
   7063       case MVT::ppcf128:
   7064         break;
   7065       case MVT::f32:
   7066         if ((isTypeLegal(MVT::i32) && !LegalOperations && !ST->isVolatile()) ||
   7067             TLI.isOperationLegalOrCustom(ISD::STORE, MVT::i32)) {
   7068           Tmp = DAG.getConstant((uint32_t)CFP->getValueAPF().
   7069                               bitcastToAPInt().getZExtValue(), MVT::i32);
   7070           return DAG.getStore(Chain, N->getDebugLoc(), Tmp,
   7071                               Ptr, ST->getPointerInfo(), ST->isVolatile(),
   7072                               ST->isNonTemporal(), ST->getAlignment());
   7073         }
   7074         break;
   7075       case MVT::f64:
   7076         if ((TLI.isTypeLegal(MVT::i64) && !LegalOperations &&
   7077              !ST->isVolatile()) ||
   7078             TLI.isOperationLegalOrCustom(ISD::STORE, MVT::i64)) {
   7079           Tmp = DAG.getConstant(CFP->getValueAPF().bitcastToAPInt().
   7080                                 getZExtValue(), MVT::i64);
   7081           return DAG.getStore(Chain, N->getDebugLoc(), Tmp,
   7082                               Ptr, ST->getPointerInfo(), ST->isVolatile(),
   7083                               ST->isNonTemporal(), ST->getAlignment());
   7084         }
   7085 
   7086         if (!ST->isVolatile() &&
   7087             TLI.isOperationLegalOrCustom(ISD::STORE, MVT::i32)) {
   7088           // Many FP stores are not made apparent until after legalize, e.g. for
   7089           // argument passing.  Since this is so common, custom legalize the
   7090           // 64-bit integer store into two 32-bit stores.
   7091           uint64_t Val = CFP->getValueAPF().bitcastToAPInt().getZExtValue();
   7092           SDValue Lo = DAG.getConstant(Val & 0xFFFFFFFF, MVT::i32);
   7093           SDValue Hi = DAG.getConstant(Val >> 32, MVT::i32);
   7094           if (TLI.isBigEndian()) std::swap(Lo, Hi);
   7095 
   7096           unsigned Alignment = ST->getAlignment();
   7097           bool isVolatile = ST->isVolatile();
   7098           bool isNonTemporal = ST->isNonTemporal();
   7099 
   7100           SDValue St0 = DAG.getStore(Chain, ST->getDebugLoc(), Lo,
   7101                                      Ptr, ST->getPointerInfo(),
   7102                                      isVolatile, isNonTemporal,
   7103                                      ST->getAlignment());
   7104           Ptr = DAG.getNode(ISD::ADD, N->getDebugLoc(), Ptr.getValueType(), Ptr,
   7105                             DAG.getConstant(4, Ptr.getValueType()));
   7106           Alignment = MinAlign(Alignment, 4U);
   7107           SDValue St1 = DAG.getStore(Chain, ST->getDebugLoc(), Hi,
   7108                                      Ptr, ST->getPointerInfo().getWithOffset(4),
   7109                                      isVolatile, isNonTemporal,
   7110                                      Alignment);
   7111           return DAG.getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other,
   7112                              St0, St1);
   7113         }
   7114 
   7115         break;
   7116       }
   7117     }
   7118   }
   7119 
   7120   // Try to infer better alignment information than the store already has.
   7121   if (OptLevel != CodeGenOpt::None && ST->isUnindexed()) {
   7122     if (unsigned Align = DAG.InferPtrAlignment(Ptr)) {
   7123       if (Align > ST->getAlignment())
   7124         return DAG.getTruncStore(Chain, N->getDebugLoc(), Value,
   7125                                  Ptr, ST->getPointerInfo(), ST->getMemoryVT(),
   7126                                  ST->isVolatile(), ST->isNonTemporal(), Align);
   7127     }
   7128   }
   7129 
   7130   // Try transforming a pair floating point load / store ops to integer
   7131   // load / store ops.
   7132   SDValue NewST = TransformFPLoadStorePair(N);
   7133   if (NewST.getNode())
   7134     return NewST;
   7135 
   7136   if (CombinerAA) {
   7137     // Walk up chain skipping non-aliasing memory nodes.
   7138     SDValue BetterChain = FindBetterChain(N, Chain);
   7139 
   7140     // If there is a better chain.
   7141     if (Chain != BetterChain) {
   7142       SDValue ReplStore;
   7143 
   7144       // Replace the chain to avoid dependency.
   7145       if (ST->isTruncatingStore()) {
   7146         ReplStore = DAG.getTruncStore(BetterChain, N->getDebugLoc(), Value, Ptr,
   7147                                       ST->getPointerInfo(),
   7148                                       ST->getMemoryVT(), ST->isVolatile(),
   7149                                       ST->isNonTemporal(), ST->getAlignment());
   7150       } else {
   7151         ReplStore = DAG.getStore(BetterChain, N->getDebugLoc(), Value, Ptr,
   7152                                  ST->getPointerInfo(),
   7153                                  ST->isVolatile(), ST->isNonTemporal(),
   7154                                  ST->getAlignment());
   7155       }
   7156 
   7157       // Create token to keep both nodes around.
   7158       SDValue Token = DAG.getNode(ISD::TokenFactor, N->getDebugLoc(),
   7159                                   MVT::Other, Chain, ReplStore);
   7160 
   7161       // Make sure the new and old chains are cleaned up.
   7162       AddToWorkList(Token.getNode());
   7163 
   7164       // Don't add users to work list.
   7165       return CombineTo(N, Token, false);
   7166     }
   7167   }
   7168 
   7169   // Try transforming N to an indexed store.
   7170   if (CombineToPreIndexedLoadStore(N) || CombineToPostIndexedLoadStore(N))
   7171     return SDValue(N, 0);
   7172 
   7173   // FIXME: is there such a thing as a truncating indexed store?
   7174   if (ST->isTruncatingStore() && ST->isUnindexed() &&
   7175       Value.getValueType().isInteger()) {
   7176     // See if we can simplify the input to this truncstore with knowledge that
   7177     // only the low bits are being used.  For example:
   7178     // "truncstore (or (shl x, 8), y), i8"  -> "truncstore y, i8"
   7179     SDValue Shorter =
   7180       GetDemandedBits(Value,
   7181                       APInt::getLowBitsSet(
   7182                         Value.getValueType().getScalarType().getSizeInBits(),
   7183                         ST->getMemoryVT().getScalarType().getSizeInBits()));
   7184     AddToWorkList(Value.getNode());
   7185     if (Shorter.getNode())
   7186       return DAG.getTruncStore(Chain, N->getDebugLoc(), Shorter,
   7187                                Ptr, ST->getPointerInfo(), ST->getMemoryVT(),
   7188                                ST->isVolatile(), ST->isNonTemporal(),
   7189                                ST->getAlignment());
   7190 
   7191     // Otherwise, see if we can simplify the operation with
   7192     // SimplifyDemandedBits, which only works if the value has a single use.
   7193     if (SimplifyDemandedBits(Value,
   7194                         APInt::getLowBitsSet(
   7195                           Value.getValueType().getScalarType().getSizeInBits(),
   7196                           ST->getMemoryVT().getScalarType().getSizeInBits())))
   7197       return SDValue(N, 0);
   7198   }
   7199 
   7200   // If this is a load followed by a store to the same location, then the store
   7201   // is dead/noop.
   7202   if (LoadSDNode *Ld = dyn_cast<LoadSDNode>(Value)) {
   7203     if (Ld->getBasePtr() == Ptr && ST->getMemoryVT() == Ld->getMemoryVT() &&
   7204         ST->isUnindexed() && !ST->isVolatile() &&
   7205         // There can't be any side effects between the load and store, such as
   7206         // a call or store.
   7207         Chain.reachesChainWithoutSideEffects(SDValue(Ld, 1))) {
   7208       // The store is dead, remove it.
   7209       return Chain;
   7210     }
   7211   }
   7212 
   7213   // If this is an FP_ROUND or TRUNC followed by a store, fold this into a
   7214   // truncating store.  We can do this even if this is already a truncstore.
   7215   if ((Value.getOpcode() == ISD::FP_ROUND || Value.getOpcode() == ISD::TRUNCATE)
   7216       && Value.getNode()->hasOneUse() && ST->isUnindexed() &&
   7217       TLI.isTruncStoreLegal(Value.getOperand(0).getValueType(),
   7218                             ST->getMemoryVT())) {
   7219     return DAG.getTruncStore(Chain, N->getDebugLoc(), Value.getOperand(0),
   7220                              Ptr, ST->getPointerInfo(), ST->getMemoryVT(),
   7221                              ST->isVolatile(), ST->isNonTemporal(),
   7222                              ST->getAlignment());
   7223   }
   7224 
   7225   return ReduceLoadOpStoreWidth(N);
   7226 }
   7227 
   7228 SDValue DAGCombiner::visitINSERT_VECTOR_ELT(SDNode *N) {
   7229   SDValue InVec = N->getOperand(0);
   7230   SDValue InVal = N->getOperand(1);
   7231   SDValue EltNo = N->getOperand(2);
   7232   DebugLoc dl = N->getDebugLoc();
   7233 
   7234   // If the inserted element is an UNDEF, just use the input vector.
   7235   if (InVal.getOpcode() == ISD::UNDEF)
   7236     return InVec;
   7237 
   7238   EVT VT = InVec.getValueType();
   7239 
   7240   // If we can't generate a legal BUILD_VECTOR, exit
   7241   if (LegalOperations && !TLI.isOperationLegal(ISD::BUILD_VECTOR, VT))
   7242     return SDValue();
   7243 
   7244   // Check that we know which element is being inserted
   7245   if (!isa<ConstantSDNode>(EltNo))
   7246     return SDValue();
   7247   unsigned Elt = cast<ConstantSDNode>(EltNo)->getZExtValue();
   7248 
   7249   // Check that the operand is a BUILD_VECTOR (or UNDEF, which can essentially
   7250   // be converted to a BUILD_VECTOR).  Fill in the Ops vector with the
   7251   // vector elements.
   7252   SmallVector<SDValue, 8> Ops;
   7253   if (InVec.getOpcode() == ISD::BUILD_VECTOR) {
   7254     Ops.append(InVec.getNode()->op_begin(),
   7255                InVec.getNode()->op_end());
   7256   } else if (InVec.getOpcode() == ISD::UNDEF) {
   7257     unsigned NElts = VT.getVectorNumElements();
   7258     Ops.append(NElts, DAG.getUNDEF(InVal.getValueType()));
   7259   } else {
   7260     return SDValue();
   7261   }
   7262 
   7263   // Insert the element
   7264   if (Elt < Ops.size()) {
   7265     // All the operands of BUILD_VECTOR must have the same type;
   7266     // we enforce that here.
   7267     EVT OpVT = Ops[0].getValueType();
   7268     if (InVal.getValueType() != OpVT)
   7269       InVal = OpVT.bitsGT(InVal.getValueType()) ?
   7270                 DAG.getNode(ISD::ANY_EXTEND, dl, OpVT, InVal) :
   7271                 DAG.getNode(ISD::TRUNCATE, dl, OpVT, InVal);
   7272     Ops[Elt] = InVal;
   7273   }
   7274 
   7275   // Return the new vector
   7276   return DAG.getNode(ISD::BUILD_VECTOR, dl,
   7277                      VT, &Ops[0], Ops.size());
   7278 }
   7279 
   7280 SDValue DAGCombiner::visitEXTRACT_VECTOR_ELT(SDNode *N) {
   7281   // (vextract (scalar_to_vector val, 0) -> val
   7282   SDValue InVec = N->getOperand(0);
   7283   EVT VT = InVec.getValueType();
   7284   EVT NVT = N->getValueType(0);
   7285 
   7286   if (InVec.getOpcode() == ISD::SCALAR_TO_VECTOR) {
   7287     // Check if the result type doesn't match the inserted element type. A
   7288     // SCALAR_TO_VECTOR may truncate the inserted element and the
   7289     // EXTRACT_VECTOR_ELT may widen the extracted vector.
   7290     SDValue InOp = InVec.getOperand(0);
   7291     if (InOp.getValueType() != NVT) {
   7292       assert(InOp.getValueType().isInteger() && NVT.isInteger());
   7293       return DAG.getSExtOrTrunc(InOp, InVec.getDebugLoc(), NVT);
   7294     }
   7295     return InOp;
   7296   }
   7297 
   7298   SDValue EltNo = N->getOperand(1);
   7299   bool ConstEltNo = isa<ConstantSDNode>(EltNo);
   7300 
   7301   // Transform: (EXTRACT_VECTOR_ELT( VECTOR_SHUFFLE )) -> EXTRACT_VECTOR_ELT.
   7302   // We only perform this optimization before the op legalization phase because
   7303   // we may introduce new vector instructions which are not backed by TD patterns.
   7304   // For example on AVX, extracting elements from a wide vector without using
   7305   // extract_subvector.
   7306   if (InVec.getOpcode() == ISD::VECTOR_SHUFFLE
   7307       && ConstEltNo && !LegalOperations) {
   7308     int Elt = cast<ConstantSDNode>(EltNo)->getZExtValue();
   7309     int NumElem = VT.getVectorNumElements();
   7310     ShuffleVectorSDNode *SVOp = cast<ShuffleVectorSDNode>(InVec);
   7311     // Find the new index to extract from.
   7312     int OrigElt = SVOp->getMaskElt(Elt);
   7313 
   7314     // Extracting an undef index is undef.
   7315     if (OrigElt == -1)
   7316       return DAG.getUNDEF(NVT);
   7317 
   7318     // Select the right vector half to extract from.
   7319     if (OrigElt < NumElem) {
   7320       InVec = InVec->getOperand(0);
   7321     } else {
   7322       InVec = InVec->getOperand(1);
   7323       OrigElt -= NumElem;
   7324     }
   7325 
   7326     return DAG.getNode(ISD::EXTRACT_VECTOR_ELT, N->getDebugLoc(), NVT,
   7327                        InVec, DAG.getConstant(OrigElt, MVT::i32));
   7328   }
   7329 
   7330   // Perform only after legalization to ensure build_vector / vector_shuffle
   7331   // optimizations have already been done.
   7332   if (!LegalOperations) return SDValue();
   7333 
   7334   // (vextract (v4f32 load $addr), c) -> (f32 load $addr+c*size)
   7335   // (vextract (v4f32 s2v (f32 load $addr)), c) -> (f32 load $addr+c*size)
   7336   // (vextract (v4f32 shuffle (load $addr), <1,u,u,u>), 0) -> (f32 load $addr)
   7337 
   7338   if (ConstEltNo) {
   7339     int Elt = cast<ConstantSDNode>(EltNo)->getZExtValue();
   7340     bool NewLoad = false;
   7341     bool BCNumEltsChanged = false;
   7342     EVT ExtVT = VT.getVectorElementType();
   7343     EVT LVT = ExtVT;
   7344 
   7345     // If the result of load has to be truncated, then it's not necessarily
   7346     // profitable.
   7347     if (NVT.bitsLT(LVT) && !TLI.isTruncateFree(LVT, NVT))
   7348       return SDValue();
   7349 
   7350     if (InVec.getOpcode() == ISD::BITCAST) {
   7351       // Don't duplicate a load with other uses.
   7352       if (!InVec.hasOneUse())
   7353         return SDValue();
   7354 
   7355       EVT BCVT = InVec.getOperand(0).getValueType();
   7356       if (!BCVT.isVector() || ExtVT.bitsGT(BCVT.getVectorElementType()))
   7357         return SDValue();
   7358       if (VT.getVectorNumElements() != BCVT.getVectorNumElements())
   7359         BCNumEltsChanged = true;
   7360       InVec = InVec.getOperand(0);
   7361       ExtVT = BCVT.getVectorElementType();
   7362       NewLoad = true;
   7363     }
   7364 
   7365     LoadSDNode *LN0 = NULL;
   7366     const ShuffleVectorSDNode *SVN = NULL;
   7367     if (ISD::isNormalLoad(InVec.getNode())) {
   7368       LN0 = cast<LoadSDNode>(InVec);
   7369     } else if (InVec.getOpcode() == ISD::SCALAR_TO_VECTOR &&
   7370                InVec.getOperand(0).getValueType() == ExtVT &&
   7371                ISD::isNormalLoad(InVec.getOperand(0).getNode())) {
   7372       // Don't duplicate a load with other uses.
   7373       if (!InVec.hasOneUse())
   7374         return SDValue();
   7375 
   7376       LN0 = cast<LoadSDNode>(InVec.getOperand(0));
   7377     } else if ((SVN = dyn_cast<ShuffleVectorSDNode>(InVec))) {
   7378       // (vextract (vector_shuffle (load $addr), v2, <1, u, u, u>), 1)
   7379       // =>
   7380       // (load $addr+1*size)
   7381 
   7382       // Don't duplicate a load with other uses.
   7383       if (!InVec.hasOneUse())
   7384         return SDValue();
   7385 
   7386       // If the bit convert changed the number of elements, it is unsafe
   7387       // to examine the mask.
   7388       if (BCNumEltsChanged)
   7389         return SDValue();
   7390 
   7391       // Select the input vector, guarding against out of range extract vector.
   7392       unsigned NumElems = VT.getVectorNumElements();
   7393       int Idx = (Elt > (int)NumElems) ? -1 : SVN->getMaskElt(Elt);
   7394       InVec = (Idx < (int)NumElems) ? InVec.getOperand(0) : InVec.getOperand(1);
   7395 
   7396       if (InVec.getOpcode() == ISD::BITCAST) {
   7397         // Don't duplicate a load with other uses.
   7398         if (!InVec.hasOneUse())
   7399           return SDValue();
   7400 
   7401         InVec = InVec.getOperand(0);
   7402       }
   7403       if (ISD::isNormalLoad(InVec.getNode())) {
   7404         LN0 = cast<LoadSDNode>(InVec);
   7405         Elt = (Idx < (int)NumElems) ? Idx : Idx - (int)NumElems;
   7406       }
   7407     }
   7408 
   7409     // Make sure we found a non-volatile load and the extractelement is
   7410     // the only use.
   7411     if (!LN0 || !LN0->hasNUsesOfValue(1,0) || LN0->isVolatile())
   7412       return SDValue();
   7413 
   7414     // If Idx was -1 above, Elt is going to be -1, so just return undef.
   7415     if (Elt == -1)
   7416       return DAG.getUNDEF(LVT);
   7417 
   7418     unsigned Align = LN0->getAlignment();
   7419     if (NewLoad) {
   7420       // Check the resultant load doesn't need a higher alignment than the
   7421       // original load.
   7422       unsigned NewAlign =
   7423         TLI.getTargetData()
   7424             ->getABITypeAlignment(LVT.getTypeForEVT(*DAG.getContext()));
   7425 
   7426       if (NewAlign > Align || !TLI.isOperationLegalOrCustom(ISD::LOAD, LVT))
   7427         return SDValue();
   7428 
   7429       Align = NewAlign;
   7430     }
   7431 
   7432     SDValue NewPtr = LN0->getBasePtr();
   7433     unsigned PtrOff = 0;
   7434 
   7435     if (Elt) {
   7436       PtrOff = LVT.getSizeInBits() * Elt / 8;
   7437       EVT PtrType = NewPtr.getValueType();
   7438       if (TLI.isBigEndian())
   7439         PtrOff = VT.getSizeInBits() / 8 - PtrOff;
   7440       NewPtr = DAG.getNode(ISD::ADD, N->getDebugLoc(), PtrType, NewPtr,
   7441                            DAG.getConstant(PtrOff, PtrType));
   7442     }
   7443 
   7444     // The replacement we need to do here is a little tricky: we need to
   7445     // replace an extractelement of a load with a load.
   7446     // Use ReplaceAllUsesOfValuesWith to do the replacement.
   7447     // Note that this replacement assumes that the extractvalue is the only
   7448     // use of the load; that's okay because we don't want to perform this
   7449     // transformation in other cases anyway.
   7450     SDValue Load;
   7451     SDValue Chain;
   7452     if (NVT.bitsGT(LVT)) {
   7453       // If the result type of vextract is wider than the load, then issue an
   7454       // extending load instead.
   7455       ISD::LoadExtType ExtType = TLI.isLoadExtLegal(ISD::ZEXTLOAD, LVT)
   7456         ? ISD::ZEXTLOAD : ISD::EXTLOAD;
   7457       Load = DAG.getExtLoad(ExtType, N->getDebugLoc(), NVT, LN0->getChain(),
   7458                             NewPtr, LN0->getPointerInfo().getWithOffset(PtrOff),
   7459                             LVT, LN0->isVolatile(), LN0->isNonTemporal(),Align);
   7460       Chain = Load.getValue(1);
   7461     } else {
   7462       Load = DAG.getLoad(LVT, N->getDebugLoc(), LN0->getChain(), NewPtr,
   7463                          LN0->getPointerInfo().getWithOffset(PtrOff),
   7464                          LN0->isVolatile(), LN0->isNonTemporal(),
   7465                          LN0->isInvariant(), Align);
   7466       Chain = Load.getValue(1);
   7467       if (NVT.bitsLT(LVT))
   7468         Load = DAG.getNode(ISD::TRUNCATE, N->getDebugLoc(), NVT, Load);
   7469       else
   7470         Load = DAG.getNode(ISD::BITCAST, N->getDebugLoc(), NVT, Load);
   7471     }
   7472     WorkListRemover DeadNodes(*this);
   7473     SDValue From[] = { SDValue(N, 0), SDValue(LN0,1) };
   7474     SDValue To[] = { Load, Chain };
   7475     DAG.ReplaceAllUsesOfValuesWith(From, To, 2, &DeadNodes);
   7476     // Since we're explcitly calling ReplaceAllUses, add the new node to the
   7477     // worklist explicitly as well.
   7478     AddToWorkList(Load.getNode());
   7479     AddUsersToWorkList(Load.getNode()); // Add users too
   7480     // Make sure to revisit this node to clean it up; it will usually be dead.
   7481     AddToWorkList(N);
   7482     return SDValue(N, 0);
   7483   }
   7484 
   7485   return SDValue();
   7486 }
   7487 
   7488 SDValue DAGCombiner::visitBUILD_VECTOR(SDNode *N) {
   7489   unsigned NumInScalars = N->getNumOperands();
   7490   DebugLoc dl = N->getDebugLoc();
   7491   EVT VT = N->getValueType(0);
   7492   // Check to see if this is a BUILD_VECTOR of a bunch of values
   7493   // which come from any_extend or zero_extend nodes. If so, we can create
   7494   // a new BUILD_VECTOR using bit-casts which may enable other BUILD_VECTOR
   7495   // optimizations. We do not handle sign-extend because we can't fill the sign
   7496   // using shuffles.
   7497   EVT SourceType = MVT::Other;
   7498   bool AllAnyExt = true;
   7499   bool AllUndef = true;
   7500   for (unsigned i = 0; i != NumInScalars; ++i) {
   7501     SDValue In = N->getOperand(i);
   7502     // Ignore undef inputs.
   7503     if (In.getOpcode() == ISD::UNDEF) continue;
   7504     AllUndef = false;
   7505 
   7506     bool AnyExt  = In.getOpcode() == ISD::ANY_EXTEND;
   7507     bool ZeroExt = In.getOpcode() == ISD::ZERO_EXTEND;
   7508 
   7509     // Abort if the element is not an extension.
   7510     if (!ZeroExt && !AnyExt) {
   7511       SourceType = MVT::Other;
   7512       break;
   7513     }
   7514 
   7515     // The input is a ZeroExt or AnyExt. Check the original type.
   7516     EVT InTy = In.getOperand(0).getValueType();
   7517 
   7518     // Check that all of the widened source types are the same.
   7519     if (SourceType == MVT::Other)
   7520       // First time.
   7521       SourceType = InTy;
   7522     else if (InTy != SourceType) {
   7523       // Multiple income types. Abort.
   7524       SourceType = MVT::Other;
   7525       break;
   7526     }
   7527 
   7528     // Check if all of the extends are ANY_EXTENDs.
   7529     AllAnyExt &= AnyExt;
   7530   }
   7531 
   7532   if (AllUndef)
   7533     return DAG.getUNDEF(VT);
   7534 
   7535   // In order to have valid types, all of the inputs must be extended from the
   7536   // same source type and all of the inputs must be any or zero extend.
   7537   // Scalar sizes must be a power of two.
   7538   EVT OutScalarTy = N->getValueType(0).getScalarType();
   7539   bool ValidTypes = SourceType != MVT::Other &&
   7540                  isPowerOf2_32(OutScalarTy.getSizeInBits()) &&
   7541                  isPowerOf2_32(SourceType.getSizeInBits());
   7542 
   7543   // We perform this optimization post type-legalization because
   7544   // the type-legalizer often scalarizes integer-promoted vectors.
   7545   // Performing this optimization before may create bit-casts which
   7546   // will be type-legalized to complex code sequences.
   7547   // We perform this optimization only before the operation legalizer because we
   7548   // may introduce illegal operations.
   7549   // Create a new simpler BUILD_VECTOR sequence which other optimizations can
   7550   // turn into a single shuffle instruction.
   7551   if ((Level == AfterLegalizeVectorOps || Level == AfterLegalizeTypes) &&
   7552       ValidTypes) {
   7553     bool isLE = TLI.isLittleEndian();
   7554     unsigned ElemRatio = OutScalarTy.getSizeInBits()/SourceType.getSizeInBits();
   7555     assert(ElemRatio > 1 && "Invalid element size ratio");
   7556     SDValue Filler = AllAnyExt ? DAG.getUNDEF(SourceType):
   7557                                  DAG.getConstant(0, SourceType);
   7558 
   7559     unsigned NewBVElems = ElemRatio * N->getValueType(0).getVectorNumElements();
   7560     SmallVector<SDValue, 8> Ops(NewBVElems, Filler);
   7561 
   7562     // Populate the new build_vector
   7563     for (unsigned i=0; i < N->getNumOperands(); ++i) {
   7564       SDValue Cast = N->getOperand(i);
   7565       assert((Cast.getOpcode() == ISD::ANY_EXTEND ||
   7566               Cast.getOpcode() == ISD::ZERO_EXTEND ||
   7567               Cast.getOpcode() == ISD::UNDEF) && "Invalid cast opcode");
   7568       SDValue In;
   7569       if (Cast.getOpcode() == ISD::UNDEF)
   7570         In = DAG.getUNDEF(SourceType);
   7571       else
   7572         In = Cast->getOperand(0);
   7573       unsigned Index = isLE ? (i * ElemRatio) :
   7574                               (i * ElemRatio + (ElemRatio - 1));
   7575 
   7576       assert(Index < Ops.size() && "Invalid index");
   7577       Ops[Index] = In;
   7578     }
   7579 
   7580     // The type of the new BUILD_VECTOR node.
   7581     EVT VecVT = EVT::getVectorVT(*DAG.getContext(), SourceType, NewBVElems);
   7582     assert(VecVT.getSizeInBits() == N->getValueType(0).getSizeInBits() &&
   7583            "Invalid vector size");
   7584     // Check if the new vector type is legal.
   7585     if (!isTypeLegal(VecVT)) return SDValue();
   7586 
   7587     // Make the new BUILD_VECTOR.
   7588     SDValue BV = DAG.getNode(ISD::BUILD_VECTOR, N->getDebugLoc(),
   7589                                  VecVT, &Ops[0], Ops.size());
   7590 
   7591     // The new BUILD_VECTOR node has the potential to be further optimized.
   7592     AddToWorkList(BV.getNode());
   7593     // Bitcast to the desired type.
   7594     return DAG.getNode(ISD::BITCAST, dl, N->getValueType(0), BV);
   7595   }
   7596 
   7597   // Check to see if this is a BUILD_VECTOR of a bunch of EXTRACT_VECTOR_ELT
   7598   // operations.  If so, and if the EXTRACT_VECTOR_ELT vector inputs come from
   7599   // at most two distinct vectors, turn this into a shuffle node.
   7600 
   7601   // May only combine to shuffle after legalize if shuffle is legal.
   7602   if (LegalOperations &&
   7603       !TLI.isOperationLegalOrCustom(ISD::VECTOR_SHUFFLE, VT))
   7604     return SDValue();
   7605 
   7606   SDValue VecIn1, VecIn2;
   7607   for (unsigned i = 0; i != NumInScalars; ++i) {
   7608     // Ignore undef inputs.
   7609     if (N->getOperand(i).getOpcode() == ISD::UNDEF) continue;
   7610 
   7611     // If this input is something other than a EXTRACT_VECTOR_ELT with a
   7612     // constant index, bail out.
   7613     if (N->getOperand(i).getOpcode() != ISD::EXTRACT_VECTOR_ELT ||
   7614         !isa<ConstantSDNode>(N->getOperand(i).getOperand(1))) {
   7615       VecIn1 = VecIn2 = SDValue(0, 0);
   7616       break;
   7617     }
   7618 
   7619     // We allow up to two distinct input vectors.
   7620     SDValue ExtractedFromVec = N->getOperand(i).getOperand(0);
   7621     if (ExtractedFromVec == VecIn1 || ExtractedFromVec == VecIn2)
   7622       continue;
   7623 
   7624     if (VecIn1.getNode() == 0) {
   7625       VecIn1 = ExtractedFromVec;
   7626     } else if (VecIn2.getNode() == 0) {
   7627       VecIn2 = ExtractedFromVec;
   7628     } else {
   7629       // Too many inputs.
   7630       VecIn1 = VecIn2 = SDValue(0, 0);
   7631       break;
   7632     }
   7633   }
   7634 
   7635     // If everything is good, we can make a shuffle operation.
   7636   if (VecIn1.getNode()) {
   7637     SmallVector<int, 8> Mask;
   7638     for (unsigned i = 0; i != NumInScalars; ++i) {
   7639       if (N->getOperand(i).getOpcode() == ISD::UNDEF) {
   7640         Mask.push_back(-1);
   7641         continue;
   7642       }
   7643 
   7644       // If extracting from the first vector, just use the index directly.
   7645       SDValue Extract = N->getOperand(i);
   7646       SDValue ExtVal = Extract.getOperand(1);
   7647       if (Extract.getOperand(0) == VecIn1) {
   7648         unsigned ExtIndex = cast<ConstantSDNode>(ExtVal)->getZExtValue();
   7649         if (ExtIndex > VT.getVectorNumElements())
   7650           return SDValue();
   7651 
   7652         Mask.push_back(ExtIndex);
   7653         continue;
   7654       }
   7655 
   7656       // Otherwise, use InIdx + VecSize
   7657       unsigned Idx = cast<ConstantSDNode>(ExtVal)->getZExtValue();
   7658       Mask.push_back(Idx+NumInScalars);
   7659     }
   7660 
   7661     // We can't generate a shuffle node with mismatched input and output types.
   7662     // Attempt to transform a single input vector to the correct type.
   7663     if ((VT != VecIn1.getValueType())) {
   7664       // We don't support shuffeling between TWO values of different types.
   7665       if (VecIn2.getNode() != 0)
   7666         return SDValue();
   7667 
   7668       // We only support widening of vectors which are half the size of the
   7669       // output registers. For example XMM->YMM widening on X86 with AVX.
   7670       if (VecIn1.getValueType().getSizeInBits()*2 != VT.getSizeInBits())
   7671         return SDValue();
   7672 
   7673       // Widen the input vector by adding undef values.
   7674       VecIn1 = DAG.getNode(ISD::CONCAT_VECTORS, N->getDebugLoc(), VT,
   7675                            VecIn1, DAG.getUNDEF(VecIn1.getValueType()));
   7676     }
   7677 
   7678     // If VecIn2 is unused then change it to undef.
   7679     VecIn2 = VecIn2.getNode() ? VecIn2 : DAG.getUNDEF(VT);
   7680 
   7681     // Check that we were able to transform all incoming values to the same type.
   7682     if (VecIn2.getValueType() != VecIn1.getValueType() ||
   7683         VecIn1.getValueType() != VT)
   7684           return SDValue();
   7685 
   7686     // Only type-legal BUILD_VECTOR nodes are converted to shuffle nodes.
   7687     if (!isTypeLegal(VT))
   7688       return SDValue();
   7689 
   7690     // Return the new VECTOR_SHUFFLE node.
   7691     SDValue Ops[2];
   7692     Ops[0] = VecIn1;
   7693     Ops[1] = VecIn2;
   7694     return DAG.getVectorShuffle(VT, N->getDebugLoc(), Ops[0], Ops[1], &Mask[0]);
   7695   }
   7696 
   7697   return SDValue();
   7698 }
   7699 
   7700 SDValue DAGCombiner::visitCONCAT_VECTORS(SDNode *N) {
   7701   // TODO: Check to see if this is a CONCAT_VECTORS of a bunch of
   7702   // EXTRACT_SUBVECTOR operations.  If so, and if the EXTRACT_SUBVECTOR vector
   7703   // inputs come from at most two distinct vectors, turn this into a shuffle
   7704   // node.
   7705 
   7706   // If we only have one input vector, we don't need to do any concatenation.
   7707   if (N->getNumOperands() == 1)
   7708     return N->getOperand(0);
   7709 
   7710   return SDValue();
   7711 }
   7712 
   7713 SDValue DAGCombiner::visitEXTRACT_SUBVECTOR(SDNode* N) {
   7714   EVT NVT = N->getValueType(0);
   7715   SDValue V = N->getOperand(0);
   7716 
   7717   if (V->getOpcode() == ISD::INSERT_SUBVECTOR) {
   7718     // Handle only simple case where vector being inserted and vector
   7719     // being extracted are of same type, and are half size of larger vectors.
   7720     EVT BigVT = V->getOperand(0).getValueType();
   7721     EVT SmallVT = V->getOperand(1).getValueType();
   7722     if (NVT != SmallVT || NVT.getSizeInBits()*2 != BigVT.getSizeInBits())
   7723       return SDValue();
   7724 
   7725     // Only handle cases where both indexes are constants with the same type.
   7726     ConstantSDNode *InsIdx = dyn_cast<ConstantSDNode>(N->getOperand(1));
   7727     ConstantSDNode *ExtIdx = dyn_cast<ConstantSDNode>(V->getOperand(2));
   7728 
   7729     if (InsIdx && ExtIdx &&
   7730         InsIdx->getValueType(0).getSizeInBits() <= 64 &&
   7731         ExtIdx->getValueType(0).getSizeInBits() <= 64) {
   7732       // Combine:
   7733       //    (extract_subvec (insert_subvec V1, V2, InsIdx), ExtIdx)
   7734       // Into:
   7735       //    indices are equal => V1
   7736       //    otherwise => (extract_subvec V1, ExtIdx)
   7737       if (InsIdx->getZExtValue() == ExtIdx->getZExtValue())
   7738         return V->getOperand(1);
   7739       return DAG.getNode(ISD::EXTRACT_SUBVECTOR, N->getDebugLoc(), NVT,
   7740                          V->getOperand(0), N->getOperand(1));
   7741     }
   7742   }
   7743 
   7744   return SDValue();
   7745 }
   7746 
   7747 SDValue DAGCombiner::visitVECTOR_SHUFFLE(SDNode *N) {
   7748   EVT VT = N->getValueType(0);
   7749   unsigned NumElts = VT.getVectorNumElements();
   7750 
   7751   SDValue N0 = N->getOperand(0);
   7752   SDValue N1 = N->getOperand(1);
   7753 
   7754   assert(N0.getValueType() == VT && "Vector shuffle must be normalized in DAG");
   7755 
   7756   // Canonicalize shuffle undef, undef -> undef
   7757   if (N0.getOpcode() == ISD::UNDEF && N1.getOpcode() == ISD::UNDEF)
   7758     return DAG.getUNDEF(VT);
   7759 
   7760   ShuffleVectorSDNode *SVN = cast<ShuffleVectorSDNode>(N);
   7761 
   7762   // Canonicalize shuffle v, v -> v, undef
   7763   if (N0 == N1) {
   7764     SmallVector<int, 8> NewMask;
   7765     for (unsigned i = 0; i != NumElts; ++i) {
   7766       int Idx = SVN->getMaskElt(i);
   7767       if (Idx >= (int)NumElts) Idx -= NumElts;
   7768       NewMask.push_back(Idx);
   7769     }
   7770     return DAG.getVectorShuffle(VT, N->getDebugLoc(), N0, DAG.getUNDEF(VT),
   7771                                 &NewMask[0]);
   7772   }
   7773 
   7774   // Canonicalize shuffle undef, v -> v, undef.  Commute the shuffle mask.
   7775   if (N0.getOpcode() == ISD::UNDEF) {
   7776     SmallVector<int, 8> NewMask;
   7777     for (unsigned i = 0; i != NumElts; ++i) {
   7778       int Idx = SVN->getMaskElt(i);
   7779       if (Idx >= 0) {
   7780         if (Idx < (int)NumElts)
   7781           Idx += NumElts;
   7782         else
   7783           Idx -= NumElts;
   7784       }
   7785       NewMask.push_back(Idx);
   7786     }
   7787     return DAG.getVectorShuffle(VT, N->getDebugLoc(), N1, DAG.getUNDEF(VT),
   7788                                 &NewMask[0]);
   7789   }
   7790 
   7791   // Remove references to rhs if it is undef
   7792   if (N1.getOpcode() == ISD::UNDEF) {
   7793     bool Changed = false;
   7794     SmallVector<int, 8> NewMask;
   7795     for (unsigned i = 0; i != NumElts; ++i) {
   7796       int Idx = SVN->getMaskElt(i);
   7797       if (Idx >= (int)NumElts) {
   7798         Idx = -1;
   7799         Changed = true;
   7800       }
   7801       NewMask.push_back(Idx);
   7802     }
   7803     if (Changed)
   7804       return DAG.getVectorShuffle(VT, N->getDebugLoc(), N0, N1, &NewMask[0]);
   7805   }
   7806 
   7807   // If it is a splat, check if the argument vector is another splat or a
   7808   // build_vector with all scalar elements the same.
   7809   if (SVN->isSplat() && SVN->getSplatIndex() < (int)NumElts) {
   7810     SDNode *V = N0.getNode();
   7811 
   7812     // If this is a bit convert that changes the element type of the vector but
   7813     // not the number of vector elements, look through it.  Be careful not to
   7814     // look though conversions that change things like v4f32 to v2f64.
   7815     if (V->getOpcode() == ISD::BITCAST) {
   7816       SDValue ConvInput = V->getOperand(0);
   7817       if (ConvInput.getValueType().isVector() &&
   7818           ConvInput.getValueType().getVectorNumElements() == NumElts)
   7819         V = ConvInput.getNode();
   7820     }
   7821 
   7822     if (V->getOpcode() == ISD::BUILD_VECTOR) {
   7823       assert(V->getNumOperands() == NumElts &&
   7824              "BUILD_VECTOR has wrong number of operands");
   7825       SDValue Base;
   7826       bool AllSame = true;
   7827       for (unsigned i = 0; i != NumElts; ++i) {
   7828         if (V->getOperand(i).getOpcode() != ISD::UNDEF) {
   7829           Base = V->getOperand(i);
   7830           break;
   7831         }
   7832       }
   7833       // Splat of <u, u, u, u>, return <u, u, u, u>
   7834       if (!Base.getNode())
   7835         return N0;
   7836       for (unsigned i = 0; i != NumElts; ++i) {
   7837         if (V->getOperand(i) != Base) {
   7838           AllSame = false;
   7839           break;
   7840         }
   7841       }
   7842       // Splat of <x, x, x, x>, return <x, x, x, x>
   7843       if (AllSame)
   7844         return N0;
   7845     }
   7846   }
   7847 
   7848   // If this shuffle node is simply a swizzle of another shuffle node,
   7849   // and it reverses the swizzle of the previous shuffle then we can
   7850   // optimize shuffle(shuffle(x, undef), undef) -> x.
   7851   if (N0.getOpcode() == ISD::VECTOR_SHUFFLE && Level < AfterLegalizeDAG &&
   7852       N1.getOpcode() == ISD::UNDEF) {
   7853 
   7854     ShuffleVectorSDNode *OtherSV = cast<ShuffleVectorSDNode>(N0);
   7855 
   7856     // Shuffle nodes can only reverse shuffles with a single non-undef value.
   7857     if (N0.getOperand(1).getOpcode() != ISD::UNDEF)
   7858       return SDValue();
   7859 
   7860     // The incoming shuffle must be of the same type as the result of the
   7861     // current shuffle.
   7862     assert(OtherSV->getOperand(0).getValueType() == VT &&
   7863            "Shuffle types don't match");
   7864 
   7865     for (unsigned i = 0; i != NumElts; ++i) {
   7866       int Idx = SVN->getMaskElt(i);
   7867       assert(Idx < (int)NumElts && "Index references undef operand");
   7868       // Next, this index comes from the first value, which is the incoming
   7869       // shuffle. Adopt the incoming index.
   7870       if (Idx >= 0)
   7871         Idx = OtherSV->getMaskElt(Idx);
   7872 
   7873       // The combined shuffle must map each index to itself.
   7874       if (Idx >= 0 && (unsigned)Idx != i)
   7875         return SDValue();
   7876     }
   7877 
   7878     return OtherSV->getOperand(0);
   7879   }
   7880 
   7881   return SDValue();
   7882 }
   7883 
   7884 SDValue DAGCombiner::visitMEMBARRIER(SDNode* N) {
   7885   if (!TLI.getShouldFoldAtomicFences())
   7886     return SDValue();
   7887 
   7888   SDValue atomic = N->getOperand(0);
   7889   switch (atomic.getOpcode()) {
   7890     case ISD::ATOMIC_CMP_SWAP:
   7891     case ISD::ATOMIC_SWAP:
   7892     case ISD::ATOMIC_LOAD_ADD:
   7893     case ISD::ATOMIC_LOAD_SUB:
   7894     case ISD::ATOMIC_LOAD_AND:
   7895     case ISD::ATOMIC_LOAD_OR:
   7896     case ISD::ATOMIC_LOAD_XOR:
   7897     case ISD::ATOMIC_LOAD_NAND:
   7898     case ISD::ATOMIC_LOAD_MIN:
   7899     case ISD::ATOMIC_LOAD_MAX:
   7900     case ISD::ATOMIC_LOAD_UMIN:
   7901     case ISD::ATOMIC_LOAD_UMAX:
   7902       break;
   7903     default:
   7904       return SDValue();
   7905   }
   7906 
   7907   SDValue fence = atomic.getOperand(0);
   7908   if (fence.getOpcode() != ISD::MEMBARRIER)
   7909     return SDValue();
   7910 
   7911   switch (atomic.getOpcode()) {
   7912     case ISD::ATOMIC_CMP_SWAP:
   7913       return SDValue(DAG.UpdateNodeOperands(atomic.getNode(),
   7914                                     fence.getOperand(0),
   7915                                     atomic.getOperand(1), atomic.getOperand(2),
   7916                                     atomic.getOperand(3)), atomic.getResNo());
   7917     case ISD::ATOMIC_SWAP:
   7918     case ISD::ATOMIC_LOAD_ADD:
   7919     case ISD::ATOMIC_LOAD_SUB:
   7920     case ISD::ATOMIC_LOAD_AND:
   7921     case ISD::ATOMIC_LOAD_OR:
   7922     case ISD::ATOMIC_LOAD_XOR:
   7923     case ISD::ATOMIC_LOAD_NAND:
   7924     case ISD::ATOMIC_LOAD_MIN:
   7925     case ISD::ATOMIC_LOAD_MAX:
   7926     case ISD::ATOMIC_LOAD_UMIN:
   7927     case ISD::ATOMIC_LOAD_UMAX:
   7928       return SDValue(DAG.UpdateNodeOperands(atomic.getNode(),
   7929                                     fence.getOperand(0),
   7930                                     atomic.getOperand(1), atomic.getOperand(2)),
   7931                      atomic.getResNo());
   7932     default:
   7933       return SDValue();
   7934   }
   7935 }
   7936 
   7937 /// XformToShuffleWithZero - Returns a vector_shuffle if it able to transform
   7938 /// an AND to a vector_shuffle with the destination vector and a zero vector.
   7939 /// e.g. AND V, <0xffffffff, 0, 0xffffffff, 0>. ==>
   7940 ///      vector_shuffle V, Zero, <0, 4, 2, 4>
   7941 SDValue DAGCombiner::XformToShuffleWithZero(SDNode *N) {
   7942   EVT VT = N->getValueType(0);
   7943   DebugLoc dl = N->getDebugLoc();
   7944   SDValue LHS = N->getOperand(0);
   7945   SDValue RHS = N->getOperand(1);
   7946   if (N->getOpcode() == ISD::AND) {
   7947     if (RHS.getOpcode() == ISD::BITCAST)
   7948       RHS = RHS.getOperand(0);
   7949     if (RHS.getOpcode() == ISD::BUILD_VECTOR) {
   7950       SmallVector<int, 8> Indices;
   7951       unsigned NumElts = RHS.getNumOperands();
   7952       for (unsigned i = 0; i != NumElts; ++i) {
   7953         SDValue Elt = RHS.getOperand(i);
   7954         if (!isa<ConstantSDNode>(Elt))
   7955           return SDValue();
   7956 
   7957         if (cast<ConstantSDNode>(Elt)->isAllOnesValue())
   7958           Indices.push_back(i);
   7959         else if (cast<ConstantSDNode>(Elt)->isNullValue())
   7960           Indices.push_back(NumElts);
   7961         else
   7962           return SDValue();
   7963       }
   7964 
   7965       // Let's see if the target supports this vector_shuffle.
   7966       EVT RVT = RHS.getValueType();
   7967       if (!TLI.isVectorClearMaskLegal(Indices, RVT))
   7968         return SDValue();
   7969 
   7970       // Return the new VECTOR_SHUFFLE node.
   7971       EVT EltVT = RVT.getVectorElementType();
   7972       SmallVector<SDValue,8> ZeroOps(RVT.getVectorNumElements(),
   7973                                      DAG.getConstant(0, EltVT));
   7974       SDValue Zero = DAG.getNode(ISD::BUILD_VECTOR, N->getDebugLoc(),
   7975                                  RVT, &ZeroOps[0], ZeroOps.size());
   7976       LHS = DAG.getNode(ISD::BITCAST, dl, RVT, LHS);
   7977       SDValue Shuf = DAG.getVectorShuffle(RVT, dl, LHS, Zero, &Indices[0]);
   7978       return DAG.getNode(ISD::BITCAST, dl, VT, Shuf);
   7979     }
   7980   }
   7981 
   7982   return SDValue();
   7983 }
   7984 
   7985 /// SimplifyVBinOp - Visit a binary vector operation, like ADD.
   7986 SDValue DAGCombiner::SimplifyVBinOp(SDNode *N) {
   7987   // After legalize, the target may be depending on adds and other
   7988   // binary ops to provide legal ways to construct constants or other
   7989   // things. Simplifying them may result in a loss of legality.
   7990   if (LegalOperations) return SDValue();
   7991 
   7992   assert(N->getValueType(0).isVector() &&
   7993          "SimplifyVBinOp only works on vectors!");
   7994 
   7995   SDValue LHS = N->getOperand(0);
   7996   SDValue RHS = N->getOperand(1);
   7997   SDValue Shuffle = XformToShuffleWithZero(N);
   7998   if (Shuffle.getNode()) return Shuffle;
   7999 
   8000   // If the LHS and RHS are BUILD_VECTOR nodes, see if we can constant fold
   8001   // this operation.
   8002   if (LHS.getOpcode() == ISD::BUILD_VECTOR &&
   8003       RHS.getOpcode() == ISD::BUILD_VECTOR) {
   8004     SmallVector<SDValue, 8> Ops;
   8005     for (unsigned i = 0, e = LHS.getNumOperands(); i != e; ++i) {
   8006       SDValue LHSOp = LHS.getOperand(i);
   8007       SDValue RHSOp = RHS.getOperand(i);
   8008       // If these two elements can't be folded, bail out.
   8009       if ((LHSOp.getOpcode() != ISD::UNDEF &&
   8010            LHSOp.getOpcode() != ISD::Constant &&
   8011            LHSOp.getOpcode() != ISD::ConstantFP) ||
   8012           (RHSOp.getOpcode() != ISD::UNDEF &&
   8013            RHSOp.getOpcode() != ISD::Constant &&
   8014            RHSOp.getOpcode() != ISD::ConstantFP))
   8015         break;
   8016 
   8017       // Can't fold divide by zero.
   8018       if (N->getOpcode() == ISD::SDIV || N->getOpcode() == ISD::UDIV ||
   8019           N->getOpcode() == ISD::FDIV) {
   8020         if ((RHSOp.getOpcode() == ISD::Constant &&
   8021              cast<ConstantSDNode>(RHSOp.getNode())->isNullValue()) ||
   8022             (RHSOp.getOpcode() == ISD::ConstantFP &&
   8023              cast<ConstantFPSDNode>(RHSOp.getNode())->getValueAPF().isZero()))
   8024           break;
   8025       }
   8026 
   8027       EVT VT = LHSOp.getValueType();
   8028       EVT RVT = RHSOp.getValueType();
   8029       if (RVT != VT) {
   8030         // Integer BUILD_VECTOR operands may have types larger than the element
   8031         // size (e.g., when the element type is not legal).  Prior to type
   8032         // legalization, the types may not match between the two BUILD_VECTORS.
   8033         // Truncate one of the operands to make them match.
   8034         if (RVT.getSizeInBits() > VT.getSizeInBits()) {
   8035           RHSOp = DAG.getNode(ISD::TRUNCATE, N->getDebugLoc(), VT, RHSOp);
   8036         } else {
   8037           LHSOp = DAG.getNode(ISD::TRUNCATE, N->getDebugLoc(), RVT, LHSOp);
   8038           VT = RVT;
   8039         }
   8040       }
   8041       SDValue FoldOp = DAG.getNode(N->getOpcode(), LHS.getDebugLoc(), VT,
   8042                                    LHSOp, RHSOp);
   8043       if (FoldOp.getOpcode() != ISD::UNDEF &&
   8044           FoldOp.getOpcode() != ISD::Constant &&
   8045           FoldOp.getOpcode() != ISD::ConstantFP)
   8046         break;
   8047       Ops.push_back(FoldOp);
   8048       AddToWorkList(FoldOp.getNode());
   8049     }
   8050 
   8051     if (Ops.size() == LHS.getNumOperands())
   8052       return DAG.getNode(ISD::BUILD_VECTOR, N->getDebugLoc(),
   8053                          LHS.getValueType(), &Ops[0], Ops.size());
   8054   }
   8055 
   8056   return SDValue();
   8057 }
   8058 
   8059 SDValue DAGCombiner::SimplifySelect(DebugLoc DL, SDValue N0,
   8060                                     SDValue N1, SDValue N2){
   8061   assert(N0.getOpcode() ==ISD::SETCC && "First argument must be a SetCC node!");
   8062 
   8063   SDValue SCC = SimplifySelectCC(DL, N0.getOperand(0), N0.getOperand(1), N1, N2,
   8064                                  cast<CondCodeSDNode>(N0.getOperand(2))->get());
   8065 
   8066   // If we got a simplified select_cc node back from SimplifySelectCC, then
   8067   // break it down into a new SETCC node, and a new SELECT node, and then return
   8068   // the SELECT node, since we were called with a SELECT node.
   8069   if (SCC.getNode()) {
   8070     // Check to see if we got a select_cc back (to turn into setcc/select).
   8071     // Otherwise, just return whatever node we got back, like fabs.
   8072     if (SCC.getOpcode() == ISD::SELECT_CC) {
   8073       SDValue SETCC = DAG.getNode(ISD::SETCC, N0.getDebugLoc(),
   8074                                   N0.getValueType(),
   8075                                   SCC.getOperand(0), SCC.getOperand(1),
   8076                                   SCC.getOperand(4));
   8077       AddToWorkList(SETCC.getNode());
   8078       return DAG.getNode(ISD::SELECT, SCC.getDebugLoc(), SCC.getValueType(),
   8079                          SCC.getOperand(2), SCC.getOperand(3), SETCC);
   8080     }
   8081 
   8082     return SCC;
   8083   }
   8084   return SDValue();
   8085 }
   8086 
   8087 /// SimplifySelectOps - Given a SELECT or a SELECT_CC node, where LHS and RHS
   8088 /// are the two values being selected between, see if we can simplify the
   8089 /// select.  Callers of this should assume that TheSelect is deleted if this
   8090 /// returns true.  As such, they should return the appropriate thing (e.g. the
   8091 /// node) back to the top-level of the DAG combiner loop to avoid it being
   8092 /// looked at.
   8093 bool DAGCombiner::SimplifySelectOps(SDNode *TheSelect, SDValue LHS,
   8094                                     SDValue RHS) {
   8095 
   8096   // Cannot simplify select with vector condition
   8097   if (TheSelect->getOperand(0).getValueType().isVector()) return false;
   8098 
   8099   // If this is a select from two identical things, try to pull the operation
   8100   // through the select.
   8101   if (LHS.getOpcode() != RHS.getOpcode() ||
   8102       !LHS.hasOneUse() || !RHS.hasOneUse())
   8103     return false;
   8104 
   8105   // If this is a load and the token chain is identical, replace the select
   8106   // of two loads with a load through a select of the address to load from.
   8107   // This triggers in things like "select bool X, 10.0, 123.0" after the FP
   8108   // constants have been dropped into the constant pool.
   8109   if (LHS.getOpcode() == ISD::LOAD) {
   8110     LoadSDNode *LLD = cast<LoadSDNode>(LHS);
   8111     LoadSDNode *RLD = cast<LoadSDNode>(RHS);
   8112 
   8113     // Token chains must be identical.
   8114     if (LHS.getOperand(0) != RHS.getOperand(0) ||
   8115         // Do not let this transformation reduce the number of volatile loads.
   8116         LLD->isVolatile() || RLD->isVolatile() ||
   8117         // If this is an EXTLOAD, the VT's must match.
   8118         LLD->getMemoryVT() != RLD->getMemoryVT() ||
   8119         // If this is an EXTLOAD, the kind of extension must match.
   8120         (LLD->getExtensionType() != RLD->getExtensionType() &&
   8121          // The only exception is if one of the extensions is anyext.
   8122          LLD->getExtensionType() != ISD::EXTLOAD &&
   8123          RLD->getExtensionType() != ISD::EXTLOAD) ||
   8124         // FIXME: this discards src value information.  This is
   8125         // over-conservative. It would be beneficial to be able to remember
   8126         // both potential memory locations.  Since we are discarding
   8127         // src value info, don't do the transformation if the memory
   8128         // locations are not in the default address space.
   8129         LLD->getPointerInfo().getAddrSpace() != 0 ||
   8130         RLD->getPointerInfo().getAddrSpace() != 0)
   8131       return false;
   8132 
   8133     // Check that the select condition doesn't reach either load.  If so,
   8134     // folding this will induce a cycle into the DAG.  If not, this is safe to
   8135     // xform, so create a select of the addresses.
   8136     SDValue Addr;
   8137     if (TheSelect->getOpcode() == ISD::SELECT) {
   8138       SDNode *CondNode = TheSelect->getOperand(0).getNode();
   8139       if ((LLD->hasAnyUseOfValue(1) && LLD->isPredecessorOf(CondNode)) ||
   8140           (RLD->hasAnyUseOfValue(1) && RLD->isPredecessorOf(CondNode)))
   8141         return false;
   8142       Addr = DAG.getNode(ISD::SELECT, TheSelect->getDebugLoc(),
   8143                          LLD->getBasePtr().getValueType(),
   8144                          TheSelect->getOperand(0), LLD->getBasePtr(),
   8145                          RLD->getBasePtr());
   8146     } else {  // Otherwise SELECT_CC
   8147       SDNode *CondLHS = TheSelect->getOperand(0).getNode();
   8148       SDNode *CondRHS = TheSelect->getOperand(1).getNode();
   8149 
   8150       if ((LLD->hasAnyUseOfValue(1) &&
   8151            (LLD->isPredecessorOf(CondLHS) || LLD->isPredecessorOf(CondRHS))) ||
   8152           (RLD->hasAnyUseOfValue(1) &&
   8153            (RLD->isPredecessorOf(CondLHS) || RLD->isPredecessorOf(CondRHS))))
   8154         return false;
   8155 
   8156       Addr = DAG.getNode(ISD::SELECT_CC, TheSelect->getDebugLoc(),
   8157                          LLD->getBasePtr().getValueType(),
   8158                          TheSelect->getOperand(0),
   8159                          TheSelect->getOperand(1),
   8160                          LLD->getBasePtr(), RLD->getBasePtr(),
   8161                          TheSelect->getOperand(4));
   8162     }
   8163 
   8164     SDValue Load;
   8165     if (LLD->getExtensionType() == ISD::NON_EXTLOAD) {
   8166       Load = DAG.getLoad(TheSelect->getValueType(0),
   8167                          TheSelect->getDebugLoc(),
   8168                          // FIXME: Discards pointer info.
   8169                          LLD->getChain(), Addr, MachinePointerInfo(),
   8170                          LLD->isVolatile(), LLD->isNonTemporal(),
   8171                          LLD->isInvariant(), LLD->getAlignment());
   8172     } else {
   8173       Load = DAG.getExtLoad(LLD->getExtensionType() == ISD::EXTLOAD ?
   8174                             RLD->getExtensionType() : LLD->getExtensionType(),
   8175                             TheSelect->getDebugLoc(),
   8176                             TheSelect->getValueType(0),
   8177                             // FIXME: Discards pointer info.
   8178                             LLD->getChain(), Addr, MachinePointerInfo(),
   8179                             LLD->getMemoryVT(), LLD->isVolatile(),
   8180                             LLD->isNonTemporal(), LLD->getAlignment());
   8181     }
   8182 
   8183     // Users of the select now use the result of the load.
   8184     CombineTo(TheSelect, Load);
   8185 
   8186     // Users of the old loads now use the new load's chain.  We know the
   8187     // old-load value is dead now.
   8188     CombineTo(LHS.getNode(), Load.getValue(0), Load.getValue(1));
   8189     CombineTo(RHS.getNode(), Load.getValue(0), Load.getValue(1));
   8190     return true;
   8191   }
   8192 
   8193   return false;
   8194 }
   8195 
   8196 /// SimplifySelectCC - Simplify an expression of the form (N0 cond N1) ? N2 : N3
   8197 /// where 'cond' is the comparison specified by CC.
   8198 SDValue DAGCombiner::SimplifySelectCC(DebugLoc DL, SDValue N0, SDValue N1,
   8199                                       SDValue N2, SDValue N3,
   8200                                       ISD::CondCode CC, bool NotExtCompare) {
   8201   // (x ? y : y) -> y.
   8202   if (N2 == N3) return N2;
   8203 
   8204   EVT VT = N2.getValueType();
   8205   ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1.getNode());
   8206   ConstantSDNode *N2C = dyn_cast<ConstantSDNode>(N2.getNode());
   8207   ConstantSDNode *N3C = dyn_cast<ConstantSDNode>(N3.getNode());
   8208 
   8209   // Determine if the condition we're dealing with is constant
   8210   SDValue SCC = SimplifySetCC(TLI.getSetCCResultType(N0.getValueType()),
   8211                               N0, N1, CC, DL, false);
   8212   if (SCC.getNode()) AddToWorkList(SCC.getNode());
   8213   ConstantSDNode *SCCC = dyn_cast_or_null<ConstantSDNode>(SCC.getNode());
   8214 
   8215   // fold select_cc true, x, y -> x
   8216   if (SCCC && !SCCC->isNullValue())
   8217     return N2;
   8218   // fold select_cc false, x, y -> y
   8219   if (SCCC && SCCC->isNullValue())
   8220     return N3;
   8221 
   8222   // Check to see if we can simplify the select into an fabs node
   8223   if (ConstantFPSDNode *CFP = dyn_cast<ConstantFPSDNode>(N1)) {
   8224     // Allow either -0.0 or 0.0
   8225     if (CFP->getValueAPF().isZero()) {
   8226       // select (setg[te] X, +/-0.0), X, fneg(X) -> fabs
   8227       if ((CC == ISD::SETGE || CC == ISD::SETGT) &&
   8228           N0 == N2 && N3.getOpcode() == ISD::FNEG &&
   8229           N2 == N3.getOperand(0))
   8230         return DAG.getNode(ISD::FABS, DL, VT, N0);
   8231 
   8232       // select (setl[te] X, +/-0.0), fneg(X), X -> fabs
   8233       if ((CC == ISD::SETLT || CC == ISD::SETLE) &&
   8234           N0 == N3 && N2.getOpcode() == ISD::FNEG &&
   8235           N2.getOperand(0) == N3)
   8236         return DAG.getNode(ISD::FABS, DL, VT, N3);
   8237     }
   8238   }
   8239 
   8240   // Turn "(a cond b) ? 1.0f : 2.0f" into "load (tmp + ((a cond b) ? 0 : 4)"
   8241   // where "tmp" is a constant pool entry containing an array with 1.0 and 2.0
   8242   // in it.  This is a win when the constant is not otherwise available because
   8243   // it replaces two constant pool loads with one.  We only do this if the FP
   8244   // type is known to be legal, because if it isn't, then we are before legalize
   8245   // types an we want the other legalization to happen first (e.g. to avoid
   8246   // messing with soft float) and if the ConstantFP is not legal, because if
   8247   // it is legal, we may not need to store the FP constant in a constant pool.
   8248   if (ConstantFPSDNode *TV = dyn_cast<ConstantFPSDNode>(N2))
   8249     if (ConstantFPSDNode *FV = dyn_cast<ConstantFPSDNode>(N3)) {
   8250       if (TLI.isTypeLegal(N2.getValueType()) &&
   8251           (TLI.getOperationAction(ISD::ConstantFP, N2.getValueType()) !=
   8252            TargetLowering::Legal) &&
   8253           // If both constants have multiple uses, then we won't need to do an
   8254           // extra load, they are likely around in registers for other users.
   8255           (TV->hasOneUse() || FV->hasOneUse())) {
   8256         Constant *Elts[] = {
   8257           const_cast<ConstantFP*>(FV->getConstantFPValue()),
   8258           const_cast<ConstantFP*>(TV->getConstantFPValue())
   8259         };
   8260         Type *FPTy = Elts[0]->getType();
   8261         const TargetData &TD = *TLI.getTargetData();
   8262 
   8263         // Create a ConstantArray of the two constants.
   8264         Constant *CA = ConstantArray::get(ArrayType::get(FPTy, 2), Elts);
   8265         SDValue CPIdx = DAG.getConstantPool(CA, TLI.getPointerTy(),
   8266                                             TD.getPrefTypeAlignment(FPTy));
   8267         unsigned Alignment = cast<ConstantPoolSDNode>(CPIdx)->getAlignment();
   8268 
   8269         // Get the offsets to the 0 and 1 element of the array so that we can
   8270         // select between them.
   8271         SDValue Zero = DAG.getIntPtrConstant(0);
   8272         unsigned EltSize = (unsigned)TD.getTypeAllocSize(Elts[0]->getType());
   8273         SDValue One = DAG.getIntPtrConstant(EltSize);
   8274 
   8275         SDValue Cond = DAG.getSetCC(DL,
   8276                                     TLI.getSetCCResultType(N0.getValueType()),
   8277                                     N0, N1, CC);
   8278         AddToWorkList(Cond.getNode());
   8279         SDValue CstOffset = DAG.getNode(ISD::SELECT, DL, Zero.getValueType(),
   8280                                         Cond, One, Zero);
   8281         AddToWorkList(CstOffset.getNode());
   8282         CPIdx = DAG.getNode(ISD::ADD, DL, TLI.getPointerTy(), CPIdx,
   8283                             CstOffset);
   8284         AddToWorkList(CPIdx.getNode());
   8285         return DAG.getLoad(TV->getValueType(0), DL, DAG.getEntryNode(), CPIdx,
   8286                            MachinePointerInfo::getConstantPool(), false,
   8287                            false, false, Alignment);
   8288 
   8289       }
   8290     }
   8291 
   8292   // Check to see if we can perform the "gzip trick", transforming
   8293   // (select_cc setlt X, 0, A, 0) -> (and (sra X, (sub size(X), 1), A)
   8294   if (N1C && N3C && N3C->isNullValue() && CC == ISD::SETLT &&
   8295       (N1C->isNullValue() ||                         // (a < 0) ? b : 0
   8296        (N1C->getAPIntValue() == 1 && N0 == N2))) {   // (a < 1) ? a : 0
   8297     EVT XType = N0.getValueType();
   8298     EVT AType = N2.getValueType();
   8299     if (XType.bitsGE(AType)) {
   8300       // and (sra X, size(X)-1, A) -> "and (srl X, C2), A" iff A is a
   8301       // single-bit constant.
   8302       if (N2C && ((N2C->getAPIntValue() & (N2C->getAPIntValue()-1)) == 0)) {
   8303         unsigned ShCtV = N2C->getAPIntValue().logBase2();
   8304         ShCtV = XType.getSizeInBits()-ShCtV-1;
   8305         SDValue ShCt = DAG.getConstant(ShCtV,
   8306                                        getShiftAmountTy(N0.getValueType()));
   8307         SDValue Shift = DAG.getNode(ISD::SRL, N0.getDebugLoc(),
   8308                                     XType, N0, ShCt);
   8309         AddToWorkList(Shift.getNode());
   8310 
   8311         if (XType.bitsGT(AType)) {
   8312           Shift = DAG.getNode(ISD::TRUNCATE, DL, AType, Shift);
   8313           AddToWorkList(Shift.getNode());
   8314         }
   8315 
   8316         return DAG.getNode(ISD::AND, DL, AType, Shift, N2);
   8317       }
   8318 
   8319       SDValue Shift = DAG.getNode(ISD::SRA, N0.getDebugLoc(),
   8320                                   XType, N0,
   8321                                   DAG.getConstant(XType.getSizeInBits()-1,
   8322                                          getShiftAmountTy(N0.getValueType())));
   8323       AddToWorkList(Shift.getNode());
   8324 
   8325       if (XType.bitsGT(AType)) {
   8326         Shift = DAG.getNode(ISD::TRUNCATE, DL, AType, Shift);
   8327         AddToWorkList(Shift.getNode());
   8328       }
   8329 
   8330       return DAG.getNode(ISD::AND, DL, AType, Shift, N2);
   8331     }
   8332   }
   8333 
   8334   // fold (select_cc seteq (and x, y), 0, 0, A) -> (and (shr (shl x)) A)
   8335   // where y is has a single bit set.
   8336   // A plaintext description would be, we can turn the SELECT_CC into an AND
   8337   // when the condition can be materialized as an all-ones register.  Any
   8338   // single bit-test can be materialized as an all-ones register with
   8339   // shift-left and shift-right-arith.
   8340   if (CC == ISD::SETEQ && N0->getOpcode() == ISD::AND &&
   8341       N0->getValueType(0) == VT &&
   8342       N1C && N1C->isNullValue() &&
   8343       N2C && N2C->isNullValue()) {
   8344     SDValue AndLHS = N0->getOperand(0);
   8345     ConstantSDNode *ConstAndRHS = dyn_cast<ConstantSDNode>(N0->getOperand(1));
   8346     if (ConstAndRHS && ConstAndRHS->getAPIntValue().countPopulation() == 1) {
   8347       // Shift the tested bit over the sign bit.
   8348       APInt AndMask = ConstAndRHS->getAPIntValue();
   8349       SDValue ShlAmt =
   8350         DAG.getConstant(AndMask.countLeadingZeros(),
   8351                         getShiftAmountTy(AndLHS.getValueType()));
   8352       SDValue Shl = DAG.getNode(ISD::SHL, N0.getDebugLoc(), VT, AndLHS, ShlAmt);
   8353 
   8354       // Now arithmetic right shift it all the way over, so the result is either
   8355       // all-ones, or zero.
   8356       SDValue ShrAmt =
   8357         DAG.getConstant(AndMask.getBitWidth()-1,
   8358                         getShiftAmountTy(Shl.getValueType()));
   8359       SDValue Shr = DAG.getNode(ISD::SRA, N0.getDebugLoc(), VT, Shl, ShrAmt);
   8360 
   8361       return DAG.getNode(ISD::AND, DL, VT, Shr, N3);
   8362     }
   8363   }
   8364 
   8365   // fold select C, 16, 0 -> shl C, 4
   8366   if (N2C && N3C && N3C->isNullValue() && N2C->getAPIntValue().isPowerOf2() &&
   8367     TLI.getBooleanContents(N0.getValueType().isVector()) ==
   8368       TargetLowering::ZeroOrOneBooleanContent) {
   8369 
   8370     // If the caller doesn't want us to simplify this into a zext of a compare,
   8371     // don't do it.
   8372     if (NotExtCompare && N2C->getAPIntValue() == 1)
   8373       return SDValue();
   8374 
   8375     // Get a SetCC of the condition
   8376     // FIXME: Should probably make sure that setcc is legal if we ever have a
   8377     // target where it isn't.
   8378     SDValue Temp, SCC;
   8379     // cast from setcc result type to select result type
   8380     if (LegalTypes) {
   8381       SCC  = DAG.getSetCC(DL, TLI.getSetCCResultType(N0.getValueType()),
   8382                           N0, N1, CC);
   8383       if (N2.getValueType().bitsLT(SCC.getValueType()))
   8384         Temp = DAG.getZeroExtendInReg(SCC, N2.getDebugLoc(), N2.getValueType());
   8385       else
   8386         Temp = DAG.getNode(ISD::ZERO_EXTEND, N2.getDebugLoc(),
   8387                            N2.getValueType(), SCC);
   8388     } else {
   8389       SCC  = DAG.getSetCC(N0.getDebugLoc(), MVT::i1, N0, N1, CC);
   8390       Temp = DAG.getNode(ISD::ZERO_EXTEND, N2.getDebugLoc(),
   8391                          N2.getValueType(), SCC);
   8392     }
   8393 
   8394     AddToWorkList(SCC.getNode());
   8395     AddToWorkList(Temp.getNode());
   8396 
   8397     if (N2C->getAPIntValue() == 1)
   8398       return Temp;
   8399 
   8400     // shl setcc result by log2 n2c
   8401     return DAG.getNode(ISD::SHL, DL, N2.getValueType(), Temp,
   8402                        DAG.getConstant(N2C->getAPIntValue().logBase2(),
   8403                                        getShiftAmountTy(Temp.getValueType())));
   8404   }
   8405 
   8406   // Check to see if this is the equivalent of setcc
   8407   // FIXME: Turn all of these into setcc if setcc if setcc is legal
   8408   // otherwise, go ahead with the folds.
   8409   if (0 && N3C && N3C->isNullValue() && N2C && (N2C->getAPIntValue() == 1ULL)) {
   8410     EVT XType = N0.getValueType();
   8411     if (!LegalOperations ||
   8412         TLI.isOperationLegal(ISD::SETCC, TLI.getSetCCResultType(XType))) {
   8413       SDValue Res = DAG.getSetCC(DL, TLI.getSetCCResultType(XType), N0, N1, CC);
   8414       if (Res.getValueType() != VT)
   8415         Res = DAG.getNode(ISD::ZERO_EXTEND, DL, VT, Res);
   8416       return Res;
   8417     }
   8418 
   8419     // fold (seteq X, 0) -> (srl (ctlz X, log2(size(X))))
   8420     if (N1C && N1C->isNullValue() && CC == ISD::SETEQ &&
   8421         (!LegalOperations ||
   8422          TLI.isOperationLegal(ISD::CTLZ, XType))) {
   8423       SDValue Ctlz = DAG.getNode(ISD::CTLZ, N0.getDebugLoc(), XType, N0);
   8424       return DAG.getNode(ISD::SRL, DL, XType, Ctlz,
   8425                          DAG.getConstant(Log2_32(XType.getSizeInBits()),
   8426                                        getShiftAmountTy(Ctlz.getValueType())));
   8427     }
   8428     // fold (setgt X, 0) -> (srl (and (-X, ~X), size(X)-1))
   8429     if (N1C && N1C->isNullValue() && CC == ISD::SETGT) {
   8430       SDValue NegN0 = DAG.getNode(ISD::SUB, N0.getDebugLoc(),
   8431                                   XType, DAG.getConstant(0, XType), N0);
   8432       SDValue NotN0 = DAG.getNOT(N0.getDebugLoc(), N0, XType);
   8433       return DAG.getNode(ISD::SRL, DL, XType,
   8434                          DAG.getNode(ISD::AND, DL, XType, NegN0, NotN0),
   8435                          DAG.getConstant(XType.getSizeInBits()-1,
   8436                                          getShiftAmountTy(XType)));
   8437     }
   8438     // fold (setgt X, -1) -> (xor (srl (X, size(X)-1), 1))
   8439     if (N1C && N1C->isAllOnesValue() && CC == ISD::SETGT) {
   8440       SDValue Sign = DAG.getNode(ISD::SRL, N0.getDebugLoc(), XType, N0,
   8441                                  DAG.getConstant(XType.getSizeInBits()-1,
   8442                                          getShiftAmountTy(N0.getValueType())));
   8443       return DAG.getNode(ISD::XOR, DL, XType, Sign, DAG.getConstant(1, XType));
   8444     }
   8445   }
   8446 
   8447   // Check to see if this is an integer abs.
   8448   // select_cc setg[te] X,  0,  X, -X ->
   8449   // select_cc setgt    X, -1,  X, -X ->
   8450   // select_cc setl[te] X,  0, -X,  X ->
   8451   // select_cc setlt    X,  1, -X,  X ->
   8452   // Y = sra (X, size(X)-1); xor (add (X, Y), Y)
   8453   if (N1C) {
   8454     ConstantSDNode *SubC = NULL;
   8455     if (((N1C->isNullValue() && (CC == ISD::SETGT || CC == ISD::SETGE)) ||
   8456          (N1C->isAllOnesValue() && CC == ISD::SETGT)) &&
   8457         N0 == N2 && N3.getOpcode() == ISD::SUB && N0 == N3.getOperand(1))
   8458       SubC = dyn_cast<ConstantSDNode>(N3.getOperand(0));
   8459     else if (((N1C->isNullValue() && (CC == ISD::SETLT || CC == ISD::SETLE)) ||
   8460               (N1C->isOne() && CC == ISD::SETLT)) &&
   8461              N0 == N3 && N2.getOpcode() == ISD::SUB && N0 == N2.getOperand(1))
   8462       SubC = dyn_cast<ConstantSDNode>(N2.getOperand(0));
   8463 
   8464     EVT XType = N0.getValueType();
   8465     if (SubC && SubC->isNullValue() && XType.isInteger()) {
   8466       SDValue Shift = DAG.getNode(ISD::SRA, N0.getDebugLoc(), XType,
   8467                                   N0,
   8468                                   DAG.getConstant(XType.getSizeInBits()-1,
   8469                                          getShiftAmountTy(N0.getValueType())));
   8470       SDValue Add = DAG.getNode(ISD::ADD, N0.getDebugLoc(),
   8471                                 XType, N0, Shift);
   8472       AddToWorkList(Shift.getNode());
   8473       AddToWorkList(Add.getNode());
   8474       return DAG.getNode(ISD::XOR, DL, XType, Add, Shift);
   8475     }
   8476   }
   8477 
   8478   return SDValue();
   8479 }
   8480 
   8481 /// SimplifySetCC - This is a stub for TargetLowering::SimplifySetCC.
   8482 SDValue DAGCombiner::SimplifySetCC(EVT VT, SDValue N0,
   8483                                    SDValue N1, ISD::CondCode Cond,
   8484                                    DebugLoc DL, bool foldBooleans) {
   8485   TargetLowering::DAGCombinerInfo
   8486     DagCombineInfo(DAG, !LegalTypes, !LegalOperations, false, this);
   8487   return TLI.SimplifySetCC(VT, N0, N1, Cond, foldBooleans, DagCombineInfo, DL);
   8488 }
   8489 
   8490 /// BuildSDIVSequence - Given an ISD::SDIV node expressing a divide by constant,
   8491 /// return a DAG expression to select that will generate the same value by
   8492 /// multiplying by a magic number.  See:
   8493 /// <http://the.wall.riscom.net/books/proc/ppc/cwg/code2.html>
   8494 SDValue DAGCombiner::BuildSDIV(SDNode *N) {
   8495   std::vector<SDNode*> Built;
   8496   SDValue S = TLI.BuildSDIV(N, DAG, LegalOperations, &Built);
   8497 
   8498   for (std::vector<SDNode*>::iterator ii = Built.begin(), ee = Built.end();
   8499        ii != ee; ++ii)
   8500     AddToWorkList(*ii);
   8501   return S;
   8502 }
   8503 
   8504 /// BuildUDIVSequence - Given an ISD::UDIV node expressing a divide by constant,
   8505 /// return a DAG expression to select that will generate the same value by
   8506 /// multiplying by a magic number.  See:
   8507 /// <http://the.wall.riscom.net/books/proc/ppc/cwg/code2.html>
   8508 SDValue DAGCombiner::BuildUDIV(SDNode *N) {
   8509   std::vector<SDNode*> Built;
   8510   SDValue S = TLI.BuildUDIV(N, DAG, LegalOperations, &Built);
   8511 
   8512   for (std::vector<SDNode*>::iterator ii = Built.begin(), ee = Built.end();
   8513        ii != ee; ++ii)
   8514     AddToWorkList(*ii);
   8515   return S;
   8516 }
   8517 
   8518 /// FindBaseOffset - Return true if base is a frame index, which is known not
   8519 // to alias with anything but itself.  Provides base object and offset as
   8520 // results.
   8521 static bool FindBaseOffset(SDValue Ptr, SDValue &Base, int64_t &Offset,
   8522                            const GlobalValue *&GV, void *&CV) {
   8523   // Assume it is a primitive operation.
   8524   Base = Ptr; Offset = 0; GV = 0; CV = 0;
   8525 
   8526   // If it's an adding a simple constant then integrate the offset.
   8527   if (Base.getOpcode() == ISD::ADD) {
   8528     if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Base.getOperand(1))) {
   8529       Base = Base.getOperand(0);
   8530       Offset += C->getZExtValue();
   8531     }
   8532   }
   8533 
   8534   // Return the underlying GlobalValue, and update the Offset.  Return false
   8535   // for GlobalAddressSDNode since the same GlobalAddress may be represented
   8536   // by multiple nodes with different offsets.
   8537   if (GlobalAddressSDNode *G = dyn_cast<GlobalAddressSDNode>(Base)) {
   8538     GV = G->getGlobal();
   8539     Offset += G->getOffset();
   8540     return false;
   8541   }
   8542 
   8543   // Return the underlying Constant value, and update the Offset.  Return false
   8544   // for ConstantSDNodes since the same constant pool entry may be represented
   8545   // by multiple nodes with different offsets.
   8546   if (ConstantPoolSDNode *C = dyn_cast<ConstantPoolSDNode>(Base)) {
   8547     CV = C->isMachineConstantPoolEntry() ? (void *)C->getMachineCPVal()
   8548                                          : (void *)C->getConstVal();
   8549     Offset += C->getOffset();
   8550     return false;
   8551   }
   8552   // If it's any of the following then it can't alias with anything but itself.
   8553   return isa<FrameIndexSDNode>(Base);
   8554 }
   8555 
   8556 /// isAlias - Return true if there is any possibility that the two addresses
   8557 /// overlap.
   8558 bool DAGCombiner::isAlias(SDValue Ptr1, int64_t Size1,
   8559                           const Value *SrcValue1, int SrcValueOffset1,
   8560                           unsigned SrcValueAlign1,
   8561                           const MDNode *TBAAInfo1,
   8562                           SDValue Ptr2, int64_t Size2,
   8563                           const Value *SrcValue2, int SrcValueOffset2,
   8564                           unsigned SrcValueAlign2,
   8565                           const MDNode *TBAAInfo2) const {
   8566   // If they are the same then they must be aliases.
   8567   if (Ptr1 == Ptr2) return true;
   8568 
   8569   // Gather base node and offset information.
   8570   SDValue Base1, Base2;
   8571   int64_t Offset1, Offset2;
   8572   const GlobalValue *GV1, *GV2;
   8573   void *CV1, *CV2;
   8574   bool isFrameIndex1 = FindBaseOffset(Ptr1, Base1, Offset1, GV1, CV1);
   8575   bool isFrameIndex2 = FindBaseOffset(Ptr2, Base2, Offset2, GV2, CV2);
   8576 
   8577   // If they have a same base address then check to see if they overlap.
   8578   if (Base1 == Base2 || (GV1 && (GV1 == GV2)) || (CV1 && (CV1 == CV2)))
   8579     return !((Offset1 + Size1) <= Offset2 || (Offset2 + Size2) <= Offset1);
   8580 
   8581   // It is possible for different frame indices to alias each other, mostly
   8582   // when tail call optimization reuses return address slots for arguments.
   8583   // To catch this case, look up the actual index of frame indices to compute
   8584   // the real alias relationship.
   8585   if (isFrameIndex1 && isFrameIndex2) {
   8586     MachineFrameInfo *MFI = DAG.getMachineFunction().getFrameInfo();
   8587     Offset1 += MFI->getObjectOffset(cast<FrameIndexSDNode>(Base1)->getIndex());
   8588     Offset2 += MFI->getObjectOffset(cast<FrameIndexSDNode>(Base2)->getIndex());
   8589     return !((Offset1 + Size1) <= Offset2 || (Offset2 + Size2) <= Offset1);
   8590   }
   8591 
   8592   // Otherwise, if we know what the bases are, and they aren't identical, then
   8593   // we know they cannot alias.
   8594   if ((isFrameIndex1 || CV1 || GV1) && (isFrameIndex2 || CV2 || GV2))
   8595     return false;
   8596 
   8597   // If we know required SrcValue1 and SrcValue2 have relatively large alignment
   8598   // compared to the size and offset of the access, we may be able to prove they
   8599   // do not alias.  This check is conservative for now to catch cases created by
   8600   // splitting vector types.
   8601   if ((SrcValueAlign1 == SrcValueAlign2) &&
   8602       (SrcValueOffset1 != SrcValueOffset2) &&
   8603       (Size1 == Size2) && (SrcValueAlign1 > Size1)) {
   8604     int64_t OffAlign1 = SrcValueOffset1 % SrcValueAlign1;
   8605     int64_t OffAlign2 = SrcValueOffset2 % SrcValueAlign1;
   8606 
   8607     // There is no overlap between these relatively aligned accesses of similar
   8608     // size, return no alias.
   8609     if ((OffAlign1 + Size1) <= OffAlign2 || (OffAlign2 + Size2) <= OffAlign1)
   8610       return false;
   8611   }
   8612 
   8613   if (CombinerGlobalAA) {
   8614     // Use alias analysis information.
   8615     int64_t MinOffset = std::min(SrcValueOffset1, SrcValueOffset2);
   8616     int64_t Overlap1 = Size1 + SrcValueOffset1 - MinOffset;
   8617     int64_t Overlap2 = Size2 + SrcValueOffset2 - MinOffset;
   8618     AliasAnalysis::AliasResult AAResult =
   8619       AA.alias(AliasAnalysis::Location(SrcValue1, Overlap1, TBAAInfo1),
   8620                AliasAnalysis::Location(SrcValue2, Overlap2, TBAAInfo2));
   8621     if (AAResult == AliasAnalysis::NoAlias)
   8622       return false;
   8623   }
   8624 
   8625   // Otherwise we have to assume they alias.
   8626   return true;
   8627 }
   8628 
   8629 /// FindAliasInfo - Extracts the relevant alias information from the memory
   8630 /// node.  Returns true if the operand was a load.
   8631 bool DAGCombiner::FindAliasInfo(SDNode *N,
   8632                                 SDValue &Ptr, int64_t &Size,
   8633                                 const Value *&SrcValue,
   8634                                 int &SrcValueOffset,
   8635                                 unsigned &SrcValueAlign,
   8636                                 const MDNode *&TBAAInfo) const {
   8637   LSBaseSDNode *LS = cast<LSBaseSDNode>(N);
   8638 
   8639   Ptr = LS->getBasePtr();
   8640   Size = LS->getMemoryVT().getSizeInBits() >> 3;
   8641   SrcValue = LS->getSrcValue();
   8642   SrcValueOffset = LS->getSrcValueOffset();
   8643   SrcValueAlign = LS->getOriginalAlignment();
   8644   TBAAInfo = LS->getTBAAInfo();
   8645   return isa<LoadSDNode>(LS);
   8646 }
   8647 
   8648 /// GatherAllAliases - Walk up chain skipping non-aliasing memory nodes,
   8649 /// looking for aliasing nodes and adding them to the Aliases vector.
   8650 void DAGCombiner::GatherAllAliases(SDNode *N, SDValue OriginalChain,
   8651                                    SmallVector<SDValue, 8> &Aliases) {
   8652   SmallVector<SDValue, 8> Chains;     // List of chains to visit.
   8653   SmallPtrSet<SDNode *, 16> Visited;  // Visited node set.
   8654 
   8655   // Get alias information for node.
   8656   SDValue Ptr;
   8657   int64_t Size;
   8658   const Value *SrcValue;
   8659   int SrcValueOffset;
   8660   unsigned SrcValueAlign;
   8661   const MDNode *SrcTBAAInfo;
   8662   bool IsLoad = FindAliasInfo(N, Ptr, Size, SrcValue, SrcValueOffset,
   8663                               SrcValueAlign, SrcTBAAInfo);
   8664 
   8665   // Starting off.
   8666   Chains.push_back(OriginalChain);
   8667   unsigned Depth = 0;
   8668 
   8669   // Look at each chain and determine if it is an alias.  If so, add it to the
   8670   // aliases list.  If not, then continue up the chain looking for the next
   8671   // candidate.
   8672   while (!Chains.empty()) {
   8673     SDValue Chain = Chains.back();
   8674     Chains.pop_back();
   8675 
   8676     // For TokenFactor nodes, look at each operand and only continue up the
   8677     // chain until we find two aliases.  If we've seen two aliases, assume we'll
   8678     // find more and revert to original chain since the xform is unlikely to be
   8679     // profitable.
   8680     //
   8681     // FIXME: The depth check could be made to return the last non-aliasing
   8682     // chain we found before we hit a tokenfactor rather than the original
   8683     // chain.
   8684     if (Depth > 6 || Aliases.size() == 2) {
   8685       Aliases.clear();
   8686       Aliases.push_back(OriginalChain);
   8687       break;
   8688     }
   8689 
   8690     // Don't bother if we've been before.
   8691     if (!Visited.insert(Chain.getNode()))
   8692       continue;
   8693 
   8694     switch (Chain.getOpcode()) {
   8695     case ISD::EntryToken:
   8696       // Entry token is ideal chain operand, but handled in FindBetterChain.
   8697       break;
   8698 
   8699     case ISD::LOAD:
   8700     case ISD::STORE: {
   8701       // Get alias information for Chain.
   8702       SDValue OpPtr;
   8703       int64_t OpSize;
   8704       const Value *OpSrcValue;
   8705       int OpSrcValueOffset;
   8706       unsigned OpSrcValueAlign;
   8707       const MDNode *OpSrcTBAAInfo;
   8708       bool IsOpLoad = FindAliasInfo(Chain.getNode(), OpPtr, OpSize,
   8709                                     OpSrcValue, OpSrcValueOffset,
   8710                                     OpSrcValueAlign,
   8711                                     OpSrcTBAAInfo);
   8712 
   8713       // If chain is alias then stop here.
   8714       if (!(IsLoad && IsOpLoad) &&
   8715           isAlias(Ptr, Size, SrcValue, SrcValueOffset, SrcValueAlign,
   8716                   SrcTBAAInfo,
   8717                   OpPtr, OpSize, OpSrcValue, OpSrcValueOffset,
   8718                   OpSrcValueAlign, OpSrcTBAAInfo)) {
   8719         Aliases.push_back(Chain);
   8720       } else {
   8721         // Look further up the chain.
   8722         Chains.push_back(Chain.getOperand(0));
   8723         ++Depth;
   8724       }
   8725       break;
   8726     }
   8727 
   8728     case ISD::TokenFactor:
   8729       // We have to check each of the operands of the token factor for "small"
   8730       // token factors, so we queue them up.  Adding the operands to the queue
   8731       // (stack) in reverse order maintains the original order and increases the
   8732       // likelihood that getNode will find a matching token factor (CSE.)
   8733       if (Chain.getNumOperands() > 16) {
   8734         Aliases.push_back(Chain);
   8735         break;
   8736       }
   8737       for (unsigned n = Chain.getNumOperands(); n;)
   8738         Chains.push_back(Chain.getOperand(--n));
   8739       ++Depth;
   8740       break;
   8741 
   8742     default:
   8743       // For all other instructions we will just have to take what we can get.
   8744       Aliases.push_back(Chain);
   8745       break;
   8746     }
   8747   }
   8748 }
   8749 
   8750 /// FindBetterChain - Walk up chain skipping non-aliasing memory nodes, looking
   8751 /// for a better chain (aliasing node.)
   8752 SDValue DAGCombiner::FindBetterChain(SDNode *N, SDValue OldChain) {
   8753   SmallVector<SDValue, 8> Aliases;  // Ops for replacing token factor.
   8754 
   8755   // Accumulate all the aliases to this node.
   8756   GatherAllAliases(N, OldChain, Aliases);
   8757 
   8758   // If no operands then chain to entry token.
   8759   if (Aliases.size() == 0)
   8760     return DAG.getEntryNode();
   8761 
   8762   // If a single operand then chain to it.  We don't need to revisit it.
   8763   if (Aliases.size() == 1)
   8764     return Aliases[0];
   8765 
   8766   // Construct a custom tailored token factor.
   8767   return DAG.getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other,
   8768                      &Aliases[0], Aliases.size());
   8769 }
   8770 
   8771 // SelectionDAG::Combine - This is the entry point for the file.
   8772 //
   8773 void SelectionDAG::Combine(CombineLevel Level, AliasAnalysis &AA,
   8774                            CodeGenOpt::Level OptLevel) {
   8775   /// run - This is the main entry point to this class.
   8776   ///
   8777   DAGCombiner(*this, AA, OptLevel).Run(Level);
   8778 }
   8779