Home | History | Annotate | Download | only in SelectionDAG
      1 //===-- SelectionDAGISel.cpp - Implement the SelectionDAGISel class -------===//
      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 implements the SelectionDAGISel class.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #include "llvm/CodeGen/SelectionDAGISel.h"
     15 #include "ScheduleDAGSDNodes.h"
     16 #include "SelectionDAGBuilder.h"
     17 #include "llvm/ADT/PostOrderIterator.h"
     18 #include "llvm/ADT/Statistic.h"
     19 #include "llvm/Analysis/AliasAnalysis.h"
     20 #include "llvm/Analysis/BranchProbabilityInfo.h"
     21 #include "llvm/Analysis/CFG.h"
     22 #include "llvm/CodeGen/FastISel.h"
     23 #include "llvm/CodeGen/FunctionLoweringInfo.h"
     24 #include "llvm/CodeGen/GCMetadata.h"
     25 #include "llvm/CodeGen/GCStrategy.h"
     26 #include "llvm/CodeGen/MachineFrameInfo.h"
     27 #include "llvm/CodeGen/MachineFunction.h"
     28 #include "llvm/CodeGen/MachineInstrBuilder.h"
     29 #include "llvm/CodeGen/MachineModuleInfo.h"
     30 #include "llvm/CodeGen/MachineRegisterInfo.h"
     31 #include "llvm/CodeGen/ScheduleHazardRecognizer.h"
     32 #include "llvm/CodeGen/SchedulerRegistry.h"
     33 #include "llvm/CodeGen/SelectionDAG.h"
     34 #include "llvm/IR/Constants.h"
     35 #include "llvm/IR/DebugInfo.h"
     36 #include "llvm/IR/Function.h"
     37 #include "llvm/IR/InlineAsm.h"
     38 #include "llvm/IR/Instructions.h"
     39 #include "llvm/IR/IntrinsicInst.h"
     40 #include "llvm/IR/Intrinsics.h"
     41 #include "llvm/IR/LLVMContext.h"
     42 #include "llvm/IR/Module.h"
     43 #include "llvm/Support/Compiler.h"
     44 #include "llvm/Support/Debug.h"
     45 #include "llvm/Support/ErrorHandling.h"
     46 #include "llvm/Support/Timer.h"
     47 #include "llvm/Support/raw_ostream.h"
     48 #include "llvm/Target/TargetInstrInfo.h"
     49 #include "llvm/Target/TargetIntrinsicInfo.h"
     50 #include "llvm/Target/TargetLibraryInfo.h"
     51 #include "llvm/Target/TargetLowering.h"
     52 #include "llvm/Target/TargetMachine.h"
     53 #include "llvm/Target/TargetOptions.h"
     54 #include "llvm/Target/TargetRegisterInfo.h"
     55 #include "llvm/Target/TargetSubtargetInfo.h"
     56 #include "llvm/Transforms/Utils/BasicBlockUtils.h"
     57 #include <algorithm>
     58 using namespace llvm;
     59 
     60 #define DEBUG_TYPE "isel"
     61 
     62 STATISTIC(NumFastIselFailures, "Number of instructions fast isel failed on");
     63 STATISTIC(NumFastIselSuccess, "Number of instructions fast isel selected");
     64 STATISTIC(NumFastIselBlocks, "Number of blocks selected entirely by fast isel");
     65 STATISTIC(NumDAGBlocks, "Number of blocks selected using DAG");
     66 STATISTIC(NumDAGIselRetries,"Number of times dag isel has to try another path");
     67 STATISTIC(NumEntryBlocks, "Number of entry blocks encountered");
     68 STATISTIC(NumFastIselFailLowerArguments,
     69           "Number of entry blocks where fast isel failed to lower arguments");
     70 
     71 #ifndef NDEBUG
     72 static cl::opt<bool>
     73 EnableFastISelVerbose2("fast-isel-verbose2", cl::Hidden,
     74           cl::desc("Enable extra verbose messages in the \"fast\" "
     75                    "instruction selector"));
     76 
     77   // Terminators
     78 STATISTIC(NumFastIselFailRet,"Fast isel fails on Ret");
     79 STATISTIC(NumFastIselFailBr,"Fast isel fails on Br");
     80 STATISTIC(NumFastIselFailSwitch,"Fast isel fails on Switch");
     81 STATISTIC(NumFastIselFailIndirectBr,"Fast isel fails on IndirectBr");
     82 STATISTIC(NumFastIselFailInvoke,"Fast isel fails on Invoke");
     83 STATISTIC(NumFastIselFailResume,"Fast isel fails on Resume");
     84 STATISTIC(NumFastIselFailUnreachable,"Fast isel fails on Unreachable");
     85 
     86   // Standard binary operators...
     87 STATISTIC(NumFastIselFailAdd,"Fast isel fails on Add");
     88 STATISTIC(NumFastIselFailFAdd,"Fast isel fails on FAdd");
     89 STATISTIC(NumFastIselFailSub,"Fast isel fails on Sub");
     90 STATISTIC(NumFastIselFailFSub,"Fast isel fails on FSub");
     91 STATISTIC(NumFastIselFailMul,"Fast isel fails on Mul");
     92 STATISTIC(NumFastIselFailFMul,"Fast isel fails on FMul");
     93 STATISTIC(NumFastIselFailUDiv,"Fast isel fails on UDiv");
     94 STATISTIC(NumFastIselFailSDiv,"Fast isel fails on SDiv");
     95 STATISTIC(NumFastIselFailFDiv,"Fast isel fails on FDiv");
     96 STATISTIC(NumFastIselFailURem,"Fast isel fails on URem");
     97 STATISTIC(NumFastIselFailSRem,"Fast isel fails on SRem");
     98 STATISTIC(NumFastIselFailFRem,"Fast isel fails on FRem");
     99 
    100   // Logical operators...
    101 STATISTIC(NumFastIselFailAnd,"Fast isel fails on And");
    102 STATISTIC(NumFastIselFailOr,"Fast isel fails on Or");
    103 STATISTIC(NumFastIselFailXor,"Fast isel fails on Xor");
    104 
    105   // Memory instructions...
    106 STATISTIC(NumFastIselFailAlloca,"Fast isel fails on Alloca");
    107 STATISTIC(NumFastIselFailLoad,"Fast isel fails on Load");
    108 STATISTIC(NumFastIselFailStore,"Fast isel fails on Store");
    109 STATISTIC(NumFastIselFailAtomicCmpXchg,"Fast isel fails on AtomicCmpXchg");
    110 STATISTIC(NumFastIselFailAtomicRMW,"Fast isel fails on AtomicRWM");
    111 STATISTIC(NumFastIselFailFence,"Fast isel fails on Frence");
    112 STATISTIC(NumFastIselFailGetElementPtr,"Fast isel fails on GetElementPtr");
    113 
    114   // Convert instructions...
    115 STATISTIC(NumFastIselFailTrunc,"Fast isel fails on Trunc");
    116 STATISTIC(NumFastIselFailZExt,"Fast isel fails on ZExt");
    117 STATISTIC(NumFastIselFailSExt,"Fast isel fails on SExt");
    118 STATISTIC(NumFastIselFailFPTrunc,"Fast isel fails on FPTrunc");
    119 STATISTIC(NumFastIselFailFPExt,"Fast isel fails on FPExt");
    120 STATISTIC(NumFastIselFailFPToUI,"Fast isel fails on FPToUI");
    121 STATISTIC(NumFastIselFailFPToSI,"Fast isel fails on FPToSI");
    122 STATISTIC(NumFastIselFailUIToFP,"Fast isel fails on UIToFP");
    123 STATISTIC(NumFastIselFailSIToFP,"Fast isel fails on SIToFP");
    124 STATISTIC(NumFastIselFailIntToPtr,"Fast isel fails on IntToPtr");
    125 STATISTIC(NumFastIselFailPtrToInt,"Fast isel fails on PtrToInt");
    126 STATISTIC(NumFastIselFailBitCast,"Fast isel fails on BitCast");
    127 
    128   // Other instructions...
    129 STATISTIC(NumFastIselFailICmp,"Fast isel fails on ICmp");
    130 STATISTIC(NumFastIselFailFCmp,"Fast isel fails on FCmp");
    131 STATISTIC(NumFastIselFailPHI,"Fast isel fails on PHI");
    132 STATISTIC(NumFastIselFailSelect,"Fast isel fails on Select");
    133 STATISTIC(NumFastIselFailCall,"Fast isel fails on Call");
    134 STATISTIC(NumFastIselFailShl,"Fast isel fails on Shl");
    135 STATISTIC(NumFastIselFailLShr,"Fast isel fails on LShr");
    136 STATISTIC(NumFastIselFailAShr,"Fast isel fails on AShr");
    137 STATISTIC(NumFastIselFailVAArg,"Fast isel fails on VAArg");
    138 STATISTIC(NumFastIselFailExtractElement,"Fast isel fails on ExtractElement");
    139 STATISTIC(NumFastIselFailInsertElement,"Fast isel fails on InsertElement");
    140 STATISTIC(NumFastIselFailShuffleVector,"Fast isel fails on ShuffleVector");
    141 STATISTIC(NumFastIselFailExtractValue,"Fast isel fails on ExtractValue");
    142 STATISTIC(NumFastIselFailInsertValue,"Fast isel fails on InsertValue");
    143 STATISTIC(NumFastIselFailLandingPad,"Fast isel fails on LandingPad");
    144 
    145 // Intrinsic instructions...
    146 STATISTIC(NumFastIselFailIntrinsicCall, "Fast isel fails on Intrinsic call");
    147 STATISTIC(NumFastIselFailSAddWithOverflow,
    148           "Fast isel fails on sadd.with.overflow");
    149 STATISTIC(NumFastIselFailUAddWithOverflow,
    150           "Fast isel fails on uadd.with.overflow");
    151 STATISTIC(NumFastIselFailSSubWithOverflow,
    152           "Fast isel fails on ssub.with.overflow");
    153 STATISTIC(NumFastIselFailUSubWithOverflow,
    154           "Fast isel fails on usub.with.overflow");
    155 STATISTIC(NumFastIselFailSMulWithOverflow,
    156           "Fast isel fails on smul.with.overflow");
    157 STATISTIC(NumFastIselFailUMulWithOverflow,
    158           "Fast isel fails on umul.with.overflow");
    159 STATISTIC(NumFastIselFailFrameaddress, "Fast isel fails on Frameaddress");
    160 STATISTIC(NumFastIselFailSqrt, "Fast isel fails on sqrt call");
    161 STATISTIC(NumFastIselFailStackMap, "Fast isel fails on StackMap call");
    162 STATISTIC(NumFastIselFailPatchPoint, "Fast isel fails on PatchPoint call");
    163 #endif
    164 
    165 static cl::opt<bool>
    166 EnableFastISelVerbose("fast-isel-verbose", cl::Hidden,
    167           cl::desc("Enable verbose messages in the \"fast\" "
    168                    "instruction selector"));
    169 static cl::opt<bool>
    170 EnableFastISelAbort("fast-isel-abort", cl::Hidden,
    171           cl::desc("Enable abort calls when \"fast\" instruction selection "
    172                    "fails to lower an instruction"));
    173 static cl::opt<bool>
    174 EnableFastISelAbortArgs("fast-isel-abort-args", cl::Hidden,
    175           cl::desc("Enable abort calls when \"fast\" instruction selection "
    176                    "fails to lower a formal argument"));
    177 
    178 static cl::opt<bool>
    179 UseMBPI("use-mbpi",
    180         cl::desc("use Machine Branch Probability Info"),
    181         cl::init(true), cl::Hidden);
    182 
    183 #ifndef NDEBUG
    184 static cl::opt<bool>
    185 ViewDAGCombine1("view-dag-combine1-dags", cl::Hidden,
    186           cl::desc("Pop up a window to show dags before the first "
    187                    "dag combine pass"));
    188 static cl::opt<bool>
    189 ViewLegalizeTypesDAGs("view-legalize-types-dags", cl::Hidden,
    190           cl::desc("Pop up a window to show dags before legalize types"));
    191 static cl::opt<bool>
    192 ViewLegalizeDAGs("view-legalize-dags", cl::Hidden,
    193           cl::desc("Pop up a window to show dags before legalize"));
    194 static cl::opt<bool>
    195 ViewDAGCombine2("view-dag-combine2-dags", cl::Hidden,
    196           cl::desc("Pop up a window to show dags before the second "
    197                    "dag combine pass"));
    198 static cl::opt<bool>
    199 ViewDAGCombineLT("view-dag-combine-lt-dags", cl::Hidden,
    200           cl::desc("Pop up a window to show dags before the post legalize types"
    201                    " dag combine pass"));
    202 static cl::opt<bool>
    203 ViewISelDAGs("view-isel-dags", cl::Hidden,
    204           cl::desc("Pop up a window to show isel dags as they are selected"));
    205 static cl::opt<bool>
    206 ViewSchedDAGs("view-sched-dags", cl::Hidden,
    207           cl::desc("Pop up a window to show sched dags as they are processed"));
    208 static cl::opt<bool>
    209 ViewSUnitDAGs("view-sunit-dags", cl::Hidden,
    210       cl::desc("Pop up a window to show SUnit dags after they are processed"));
    211 #else
    212 static const bool ViewDAGCombine1 = false,
    213                   ViewLegalizeTypesDAGs = false, ViewLegalizeDAGs = false,
    214                   ViewDAGCombine2 = false,
    215                   ViewDAGCombineLT = false,
    216                   ViewISelDAGs = false, ViewSchedDAGs = false,
    217                   ViewSUnitDAGs = false;
    218 #endif
    219 
    220 //===---------------------------------------------------------------------===//
    221 ///
    222 /// RegisterScheduler class - Track the registration of instruction schedulers.
    223 ///
    224 //===---------------------------------------------------------------------===//
    225 MachinePassRegistry RegisterScheduler::Registry;
    226 
    227 //===---------------------------------------------------------------------===//
    228 ///
    229 /// ISHeuristic command line option for instruction schedulers.
    230 ///
    231 //===---------------------------------------------------------------------===//
    232 static cl::opt<RegisterScheduler::FunctionPassCtor, false,
    233                RegisterPassParser<RegisterScheduler> >
    234 ISHeuristic("pre-RA-sched",
    235             cl::init(&createDefaultScheduler), cl::Hidden,
    236             cl::desc("Instruction schedulers available (before register"
    237                      " allocation):"));
    238 
    239 static RegisterScheduler
    240 defaultListDAGScheduler("default", "Best scheduler for the target",
    241                         createDefaultScheduler);
    242 
    243 namespace llvm {
    244   //===--------------------------------------------------------------------===//
    245   /// \brief This class is used by SelectionDAGISel to temporarily override
    246   /// the optimization level on a per-function basis.
    247   class OptLevelChanger {
    248     SelectionDAGISel &IS;
    249     CodeGenOpt::Level SavedOptLevel;
    250     bool SavedFastISel;
    251 
    252   public:
    253     OptLevelChanger(SelectionDAGISel &ISel,
    254                     CodeGenOpt::Level NewOptLevel) : IS(ISel) {
    255       SavedOptLevel = IS.OptLevel;
    256       if (NewOptLevel == SavedOptLevel)
    257         return;
    258       IS.OptLevel = NewOptLevel;
    259       IS.TM.setOptLevel(NewOptLevel);
    260       SavedFastISel = IS.TM.Options.EnableFastISel;
    261       if (NewOptLevel == CodeGenOpt::None)
    262         IS.TM.setFastISel(true);
    263       DEBUG(dbgs() << "\nChanging optimization level for Function "
    264             << IS.MF->getFunction()->getName() << "\n");
    265       DEBUG(dbgs() << "\tBefore: -O" << SavedOptLevel
    266             << " ; After: -O" << NewOptLevel << "\n");
    267     }
    268 
    269     ~OptLevelChanger() {
    270       if (IS.OptLevel == SavedOptLevel)
    271         return;
    272       DEBUG(dbgs() << "\nRestoring optimization level for Function "
    273             << IS.MF->getFunction()->getName() << "\n");
    274       DEBUG(dbgs() << "\tBefore: -O" << IS.OptLevel
    275             << " ; After: -O" << SavedOptLevel << "\n");
    276       IS.OptLevel = SavedOptLevel;
    277       IS.TM.setOptLevel(SavedOptLevel);
    278       IS.TM.setFastISel(SavedFastISel);
    279     }
    280   };
    281 
    282   //===--------------------------------------------------------------------===//
    283   /// createDefaultScheduler - This creates an instruction scheduler appropriate
    284   /// for the target.
    285   ScheduleDAGSDNodes* createDefaultScheduler(SelectionDAGISel *IS,
    286                                              CodeGenOpt::Level OptLevel) {
    287     const TargetLowering *TLI = IS->getTargetLowering();
    288     const TargetSubtargetInfo &ST = IS->TM.getSubtarget<TargetSubtargetInfo>();
    289 
    290     if (OptLevel == CodeGenOpt::None || ST.useMachineScheduler() ||
    291         TLI->getSchedulingPreference() == Sched::Source)
    292       return createSourceListDAGScheduler(IS, OptLevel);
    293     if (TLI->getSchedulingPreference() == Sched::RegPressure)
    294       return createBURRListDAGScheduler(IS, OptLevel);
    295     if (TLI->getSchedulingPreference() == Sched::Hybrid)
    296       return createHybridListDAGScheduler(IS, OptLevel);
    297     if (TLI->getSchedulingPreference() == Sched::VLIW)
    298       return createVLIWDAGScheduler(IS, OptLevel);
    299     assert(TLI->getSchedulingPreference() == Sched::ILP &&
    300            "Unknown sched type!");
    301     return createILPListDAGScheduler(IS, OptLevel);
    302   }
    303 }
    304 
    305 // EmitInstrWithCustomInserter - This method should be implemented by targets
    306 // that mark instructions with the 'usesCustomInserter' flag.  These
    307 // instructions are special in various ways, which require special support to
    308 // insert.  The specified MachineInstr is created but not inserted into any
    309 // basic blocks, and this method is called to expand it into a sequence of
    310 // instructions, potentially also creating new basic blocks and control flow.
    311 // When new basic blocks are inserted and the edges from MBB to its successors
    312 // are modified, the method should insert pairs of <OldSucc, NewSucc> into the
    313 // DenseMap.
    314 MachineBasicBlock *
    315 TargetLowering::EmitInstrWithCustomInserter(MachineInstr *MI,
    316                                             MachineBasicBlock *MBB) const {
    317 #ifndef NDEBUG
    318   dbgs() << "If a target marks an instruction with "
    319           "'usesCustomInserter', it must implement "
    320           "TargetLowering::EmitInstrWithCustomInserter!";
    321 #endif
    322   llvm_unreachable(nullptr);
    323 }
    324 
    325 void TargetLowering::AdjustInstrPostInstrSelection(MachineInstr *MI,
    326                                                    SDNode *Node) const {
    327   assert(!MI->hasPostISelHook() &&
    328          "If a target marks an instruction with 'hasPostISelHook', "
    329          "it must implement TargetLowering::AdjustInstrPostInstrSelection!");
    330 }
    331 
    332 //===----------------------------------------------------------------------===//
    333 // SelectionDAGISel code
    334 //===----------------------------------------------------------------------===//
    335 
    336 SelectionDAGISel::SelectionDAGISel(TargetMachine &tm,
    337                                    CodeGenOpt::Level OL) :
    338   MachineFunctionPass(ID), TM(tm),
    339   FuncInfo(new FunctionLoweringInfo(TM)),
    340   CurDAG(new SelectionDAG(tm, OL)),
    341   SDB(new SelectionDAGBuilder(*CurDAG, *FuncInfo, OL)),
    342   GFI(),
    343   OptLevel(OL),
    344   DAGSize(0) {
    345     initializeGCModuleInfoPass(*PassRegistry::getPassRegistry());
    346     initializeAliasAnalysisAnalysisGroup(*PassRegistry::getPassRegistry());
    347     initializeBranchProbabilityInfoPass(*PassRegistry::getPassRegistry());
    348     initializeTargetLibraryInfoPass(*PassRegistry::getPassRegistry());
    349   }
    350 
    351 SelectionDAGISel::~SelectionDAGISel() {
    352   delete SDB;
    353   delete CurDAG;
    354   delete FuncInfo;
    355 }
    356 
    357 void SelectionDAGISel::getAnalysisUsage(AnalysisUsage &AU) const {
    358   AU.addRequired<AliasAnalysis>();
    359   AU.addPreserved<AliasAnalysis>();
    360   AU.addRequired<GCModuleInfo>();
    361   AU.addPreserved<GCModuleInfo>();
    362   AU.addRequired<TargetLibraryInfo>();
    363   if (UseMBPI && OptLevel != CodeGenOpt::None)
    364     AU.addRequired<BranchProbabilityInfo>();
    365   MachineFunctionPass::getAnalysisUsage(AU);
    366 }
    367 
    368 /// SplitCriticalSideEffectEdges - Look for critical edges with a PHI value that
    369 /// may trap on it.  In this case we have to split the edge so that the path
    370 /// through the predecessor block that doesn't go to the phi block doesn't
    371 /// execute the possibly trapping instruction.
    372 ///
    373 /// This is required for correctness, so it must be done at -O0.
    374 ///
    375 static void SplitCriticalSideEffectEdges(Function &Fn, Pass *SDISel) {
    376   // Loop for blocks with phi nodes.
    377   for (Function::iterator BB = Fn.begin(), E = Fn.end(); BB != E; ++BB) {
    378     PHINode *PN = dyn_cast<PHINode>(BB->begin());
    379     if (!PN) continue;
    380 
    381   ReprocessBlock:
    382     // For each block with a PHI node, check to see if any of the input values
    383     // are potentially trapping constant expressions.  Constant expressions are
    384     // the only potentially trapping value that can occur as the argument to a
    385     // PHI.
    386     for (BasicBlock::iterator I = BB->begin(); (PN = dyn_cast<PHINode>(I)); ++I)
    387       for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
    388         ConstantExpr *CE = dyn_cast<ConstantExpr>(PN->getIncomingValue(i));
    389         if (!CE || !CE->canTrap()) continue;
    390 
    391         // The only case we have to worry about is when the edge is critical.
    392         // Since this block has a PHI Node, we assume it has multiple input
    393         // edges: check to see if the pred has multiple successors.
    394         BasicBlock *Pred = PN->getIncomingBlock(i);
    395         if (Pred->getTerminator()->getNumSuccessors() == 1)
    396           continue;
    397 
    398         // Okay, we have to split this edge.
    399         SplitCriticalEdge(Pred->getTerminator(),
    400                           GetSuccessorNumber(Pred, BB), SDISel, true);
    401         goto ReprocessBlock;
    402       }
    403   }
    404 }
    405 
    406 bool SelectionDAGISel::runOnMachineFunction(MachineFunction &mf) {
    407   // Do some sanity-checking on the command-line options.
    408   assert((!EnableFastISelVerbose || TM.Options.EnableFastISel) &&
    409          "-fast-isel-verbose requires -fast-isel");
    410   assert((!EnableFastISelAbort || TM.Options.EnableFastISel) &&
    411          "-fast-isel-abort requires -fast-isel");
    412 
    413   const Function &Fn = *mf.getFunction();
    414   const TargetInstrInfo &TII = *TM.getInstrInfo();
    415   const TargetRegisterInfo &TRI = *TM.getRegisterInfo();
    416   const TargetLowering *TLI = TM.getTargetLowering();
    417 
    418   MF = &mf;
    419   RegInfo = &MF->getRegInfo();
    420   AA = &getAnalysis<AliasAnalysis>();
    421   LibInfo = &getAnalysis<TargetLibraryInfo>();
    422   GFI = Fn.hasGC() ? &getAnalysis<GCModuleInfo>().getFunctionInfo(Fn) : nullptr;
    423 
    424   TargetSubtargetInfo &ST =
    425     const_cast<TargetSubtargetInfo&>(TM.getSubtarget<TargetSubtargetInfo>());
    426   ST.resetSubtargetFeatures(MF);
    427   TM.resetTargetOptions(MF);
    428 
    429   // Reset OptLevel to None for optnone functions.
    430   CodeGenOpt::Level NewOptLevel = OptLevel;
    431   if (Fn.hasFnAttribute(Attribute::OptimizeNone))
    432     NewOptLevel = CodeGenOpt::None;
    433   OptLevelChanger OLC(*this, NewOptLevel);
    434 
    435   DEBUG(dbgs() << "\n\n\n=== " << Fn.getName() << "\n");
    436 
    437   SplitCriticalSideEffectEdges(const_cast<Function&>(Fn), this);
    438 
    439   CurDAG->init(*MF, TLI);
    440   FuncInfo->set(Fn, *MF, CurDAG);
    441 
    442   if (UseMBPI && OptLevel != CodeGenOpt::None)
    443     FuncInfo->BPI = &getAnalysis<BranchProbabilityInfo>();
    444   else
    445     FuncInfo->BPI = nullptr;
    446 
    447   SDB->init(GFI, *AA, LibInfo);
    448 
    449   MF->setHasInlineAsm(false);
    450 
    451   SelectAllBasicBlocks(Fn);
    452 
    453   // If the first basic block in the function has live ins that need to be
    454   // copied into vregs, emit the copies into the top of the block before
    455   // emitting the code for the block.
    456   MachineBasicBlock *EntryMBB = MF->begin();
    457   RegInfo->EmitLiveInCopies(EntryMBB, TRI, TII);
    458 
    459   DenseMap<unsigned, unsigned> LiveInMap;
    460   if (!FuncInfo->ArgDbgValues.empty())
    461     for (MachineRegisterInfo::livein_iterator LI = RegInfo->livein_begin(),
    462            E = RegInfo->livein_end(); LI != E; ++LI)
    463       if (LI->second)
    464         LiveInMap.insert(std::make_pair(LI->first, LI->second));
    465 
    466   // Insert DBG_VALUE instructions for function arguments to the entry block.
    467   for (unsigned i = 0, e = FuncInfo->ArgDbgValues.size(); i != e; ++i) {
    468     MachineInstr *MI = FuncInfo->ArgDbgValues[e-i-1];
    469     bool hasFI = MI->getOperand(0).isFI();
    470     unsigned Reg =
    471         hasFI ? TRI.getFrameRegister(*MF) : MI->getOperand(0).getReg();
    472     if (TargetRegisterInfo::isPhysicalRegister(Reg))
    473       EntryMBB->insert(EntryMBB->begin(), MI);
    474     else {
    475       MachineInstr *Def = RegInfo->getVRegDef(Reg);
    476       if (Def) {
    477         MachineBasicBlock::iterator InsertPos = Def;
    478         // FIXME: VR def may not be in entry block.
    479         Def->getParent()->insert(std::next(InsertPos), MI);
    480       } else
    481         DEBUG(dbgs() << "Dropping debug info for dead vreg"
    482               << TargetRegisterInfo::virtReg2Index(Reg) << "\n");
    483     }
    484 
    485     // If Reg is live-in then update debug info to track its copy in a vreg.
    486     DenseMap<unsigned, unsigned>::iterator LDI = LiveInMap.find(Reg);
    487     if (LDI != LiveInMap.end()) {
    488       assert(!hasFI && "There's no handling of frame pointer updating here yet "
    489                        "- add if needed");
    490       MachineInstr *Def = RegInfo->getVRegDef(LDI->second);
    491       MachineBasicBlock::iterator InsertPos = Def;
    492       const MDNode *Variable =
    493         MI->getOperand(MI->getNumOperands()-1).getMetadata();
    494       bool IsIndirect = MI->isIndirectDebugValue();
    495       unsigned Offset = IsIndirect ? MI->getOperand(1).getImm() : 0;
    496       // Def is never a terminator here, so it is ok to increment InsertPos.
    497       BuildMI(*EntryMBB, ++InsertPos, MI->getDebugLoc(),
    498               TII.get(TargetOpcode::DBG_VALUE),
    499               IsIndirect,
    500               LDI->second, Offset, Variable);
    501 
    502       // If this vreg is directly copied into an exported register then
    503       // that COPY instructions also need DBG_VALUE, if it is the only
    504       // user of LDI->second.
    505       MachineInstr *CopyUseMI = nullptr;
    506       for (MachineRegisterInfo::use_instr_iterator
    507            UI = RegInfo->use_instr_begin(LDI->second),
    508            E = RegInfo->use_instr_end(); UI != E; ) {
    509         MachineInstr *UseMI = &*(UI++);
    510         if (UseMI->isDebugValue()) continue;
    511         if (UseMI->isCopy() && !CopyUseMI && UseMI->getParent() == EntryMBB) {
    512           CopyUseMI = UseMI; continue;
    513         }
    514         // Otherwise this is another use or second copy use.
    515         CopyUseMI = nullptr; break;
    516       }
    517       if (CopyUseMI) {
    518         MachineInstr *NewMI =
    519           BuildMI(*MF, CopyUseMI->getDebugLoc(),
    520                   TII.get(TargetOpcode::DBG_VALUE),
    521                   IsIndirect,
    522                   CopyUseMI->getOperand(0).getReg(),
    523                   Offset, Variable);
    524         MachineBasicBlock::iterator Pos = CopyUseMI;
    525         EntryMBB->insertAfter(Pos, NewMI);
    526       }
    527     }
    528   }
    529 
    530   // Determine if there are any calls in this machine function.
    531   MachineFrameInfo *MFI = MF->getFrameInfo();
    532   for (const auto &MBB : *MF) {
    533     if (MFI->hasCalls() && MF->hasInlineAsm())
    534       break;
    535 
    536     for (const auto &MI : MBB) {
    537       const MCInstrDesc &MCID = TM.getInstrInfo()->get(MI.getOpcode());
    538       if ((MCID.isCall() && !MCID.isReturn()) ||
    539           MI.isStackAligningInlineAsm()) {
    540         MFI->setHasCalls(true);
    541       }
    542       if (MI.isInlineAsm()) {
    543         MF->setHasInlineAsm(true);
    544       }
    545     }
    546   }
    547 
    548   // Determine if there is a call to setjmp in the machine function.
    549   MF->setExposesReturnsTwice(Fn.callsFunctionThatReturnsTwice());
    550 
    551   // Replace forward-declared registers with the registers containing
    552   // the desired value.
    553   MachineRegisterInfo &MRI = MF->getRegInfo();
    554   for (DenseMap<unsigned, unsigned>::iterator
    555        I = FuncInfo->RegFixups.begin(), E = FuncInfo->RegFixups.end();
    556        I != E; ++I) {
    557     unsigned From = I->first;
    558     unsigned To = I->second;
    559     // If To is also scheduled to be replaced, find what its ultimate
    560     // replacement is.
    561     for (;;) {
    562       DenseMap<unsigned, unsigned>::iterator J = FuncInfo->RegFixups.find(To);
    563       if (J == E) break;
    564       To = J->second;
    565     }
    566     // Make sure the new register has a sufficiently constrained register class.
    567     if (TargetRegisterInfo::isVirtualRegister(From) &&
    568         TargetRegisterInfo::isVirtualRegister(To))
    569       MRI.constrainRegClass(To, MRI.getRegClass(From));
    570     // Replace it.
    571     MRI.replaceRegWith(From, To);
    572   }
    573 
    574   // Freeze the set of reserved registers now that MachineFrameInfo has been
    575   // set up. All the information required by getReservedRegs() should be
    576   // available now.
    577   MRI.freezeReservedRegs(*MF);
    578 
    579   // Release function-specific state. SDB and CurDAG are already cleared
    580   // at this point.
    581   FuncInfo->clear();
    582 
    583   DEBUG(dbgs() << "*** MachineFunction at end of ISel ***\n");
    584   DEBUG(MF->print(dbgs()));
    585 
    586   return true;
    587 }
    588 
    589 void SelectionDAGISel::SelectBasicBlock(BasicBlock::const_iterator Begin,
    590                                         BasicBlock::const_iterator End,
    591                                         bool &HadTailCall) {
    592   // Lower all of the non-terminator instructions. If a call is emitted
    593   // as a tail call, cease emitting nodes for this block. Terminators
    594   // are handled below.
    595   for (BasicBlock::const_iterator I = Begin; I != End && !SDB->HasTailCall; ++I)
    596     SDB->visit(*I);
    597 
    598   // Make sure the root of the DAG is up-to-date.
    599   CurDAG->setRoot(SDB->getControlRoot());
    600   HadTailCall = SDB->HasTailCall;
    601   SDB->clear();
    602 
    603   // Final step, emit the lowered DAG as machine code.
    604   CodeGenAndEmitDAG();
    605 }
    606 
    607 void SelectionDAGISel::ComputeLiveOutVRegInfo() {
    608   SmallPtrSet<SDNode*, 128> VisitedNodes;
    609   SmallVector<SDNode*, 128> Worklist;
    610 
    611   Worklist.push_back(CurDAG->getRoot().getNode());
    612 
    613   APInt KnownZero;
    614   APInt KnownOne;
    615 
    616   do {
    617     SDNode *N = Worklist.pop_back_val();
    618 
    619     // If we've already seen this node, ignore it.
    620     if (!VisitedNodes.insert(N))
    621       continue;
    622 
    623     // Otherwise, add all chain operands to the worklist.
    624     for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i)
    625       if (N->getOperand(i).getValueType() == MVT::Other)
    626         Worklist.push_back(N->getOperand(i).getNode());
    627 
    628     // If this is a CopyToReg with a vreg dest, process it.
    629     if (N->getOpcode() != ISD::CopyToReg)
    630       continue;
    631 
    632     unsigned DestReg = cast<RegisterSDNode>(N->getOperand(1))->getReg();
    633     if (!TargetRegisterInfo::isVirtualRegister(DestReg))
    634       continue;
    635 
    636     // Ignore non-scalar or non-integer values.
    637     SDValue Src = N->getOperand(2);
    638     EVT SrcVT = Src.getValueType();
    639     if (!SrcVT.isInteger() || SrcVT.isVector())
    640       continue;
    641 
    642     unsigned NumSignBits = CurDAG->ComputeNumSignBits(Src);
    643     CurDAG->computeKnownBits(Src, KnownZero, KnownOne);
    644     FuncInfo->AddLiveOutRegInfo(DestReg, NumSignBits, KnownZero, KnownOne);
    645   } while (!Worklist.empty());
    646 }
    647 
    648 void SelectionDAGISel::CodeGenAndEmitDAG() {
    649   std::string GroupName;
    650   if (TimePassesIsEnabled)
    651     GroupName = "Instruction Selection and Scheduling";
    652   std::string BlockName;
    653   int BlockNumber = -1;
    654   (void)BlockNumber;
    655 #ifdef NDEBUG
    656   if (ViewDAGCombine1 || ViewLegalizeTypesDAGs || ViewLegalizeDAGs ||
    657       ViewDAGCombine2 || ViewDAGCombineLT || ViewISelDAGs || ViewSchedDAGs ||
    658       ViewSUnitDAGs)
    659 #endif
    660   {
    661     BlockNumber = FuncInfo->MBB->getNumber();
    662     BlockName = MF->getName().str() + ":" +
    663                 FuncInfo->MBB->getBasicBlock()->getName().str();
    664   }
    665   DEBUG(dbgs() << "Initial selection DAG: BB#" << BlockNumber
    666         << " '" << BlockName << "'\n"; CurDAG->dump());
    667 
    668   if (ViewDAGCombine1) CurDAG->viewGraph("dag-combine1 input for " + BlockName);
    669 
    670   // Run the DAG combiner in pre-legalize mode.
    671   {
    672     NamedRegionTimer T("DAG Combining 1", GroupName, TimePassesIsEnabled);
    673     CurDAG->Combine(BeforeLegalizeTypes, *AA, OptLevel);
    674   }
    675 
    676   DEBUG(dbgs() << "Optimized lowered selection DAG: BB#" << BlockNumber
    677         << " '" << BlockName << "'\n"; CurDAG->dump());
    678 
    679   // Second step, hack on the DAG until it only uses operations and types that
    680   // the target supports.
    681   if (ViewLegalizeTypesDAGs) CurDAG->viewGraph("legalize-types input for " +
    682                                                BlockName);
    683 
    684   bool Changed;
    685   {
    686     NamedRegionTimer T("Type Legalization", GroupName, TimePassesIsEnabled);
    687     Changed = CurDAG->LegalizeTypes();
    688   }
    689 
    690   DEBUG(dbgs() << "Type-legalized selection DAG: BB#" << BlockNumber
    691         << " '" << BlockName << "'\n"; CurDAG->dump());
    692 
    693   CurDAG->NewNodesMustHaveLegalTypes = true;
    694 
    695   if (Changed) {
    696     if (ViewDAGCombineLT)
    697       CurDAG->viewGraph("dag-combine-lt input for " + BlockName);
    698 
    699     // Run the DAG combiner in post-type-legalize mode.
    700     {
    701       NamedRegionTimer T("DAG Combining after legalize types", GroupName,
    702                          TimePassesIsEnabled);
    703       CurDAG->Combine(AfterLegalizeTypes, *AA, OptLevel);
    704     }
    705 
    706     DEBUG(dbgs() << "Optimized type-legalized selection DAG: BB#" << BlockNumber
    707           << " '" << BlockName << "'\n"; CurDAG->dump());
    708 
    709   }
    710 
    711   {
    712     NamedRegionTimer T("Vector Legalization", GroupName, TimePassesIsEnabled);
    713     Changed = CurDAG->LegalizeVectors();
    714   }
    715 
    716   if (Changed) {
    717     {
    718       NamedRegionTimer T("Type Legalization 2", GroupName, TimePassesIsEnabled);
    719       CurDAG->LegalizeTypes();
    720     }
    721 
    722     if (ViewDAGCombineLT)
    723       CurDAG->viewGraph("dag-combine-lv input for " + BlockName);
    724 
    725     // Run the DAG combiner in post-type-legalize mode.
    726     {
    727       NamedRegionTimer T("DAG Combining after legalize vectors", GroupName,
    728                          TimePassesIsEnabled);
    729       CurDAG->Combine(AfterLegalizeVectorOps, *AA, OptLevel);
    730     }
    731 
    732     DEBUG(dbgs() << "Optimized vector-legalized selection DAG: BB#"
    733           << BlockNumber << " '" << BlockName << "'\n"; CurDAG->dump());
    734   }
    735 
    736   if (ViewLegalizeDAGs) CurDAG->viewGraph("legalize input for " + BlockName);
    737 
    738   {
    739     NamedRegionTimer T("DAG Legalization", GroupName, TimePassesIsEnabled);
    740     CurDAG->Legalize();
    741   }
    742 
    743   DEBUG(dbgs() << "Legalized selection DAG: BB#" << BlockNumber
    744         << " '" << BlockName << "'\n"; CurDAG->dump());
    745 
    746   if (ViewDAGCombine2) CurDAG->viewGraph("dag-combine2 input for " + BlockName);
    747 
    748   // Run the DAG combiner in post-legalize mode.
    749   {
    750     NamedRegionTimer T("DAG Combining 2", GroupName, TimePassesIsEnabled);
    751     CurDAG->Combine(AfterLegalizeDAG, *AA, OptLevel);
    752   }
    753 
    754   DEBUG(dbgs() << "Optimized legalized selection DAG: BB#" << BlockNumber
    755         << " '" << BlockName << "'\n"; CurDAG->dump());
    756 
    757   if (OptLevel != CodeGenOpt::None)
    758     ComputeLiveOutVRegInfo();
    759 
    760   if (ViewISelDAGs) CurDAG->viewGraph("isel input for " + BlockName);
    761 
    762   // Third, instruction select all of the operations to machine code, adding the
    763   // code to the MachineBasicBlock.
    764   {
    765     NamedRegionTimer T("Instruction Selection", GroupName, TimePassesIsEnabled);
    766     DoInstructionSelection();
    767   }
    768 
    769   DEBUG(dbgs() << "Selected selection DAG: BB#" << BlockNumber
    770         << " '" << BlockName << "'\n"; CurDAG->dump());
    771 
    772   if (ViewSchedDAGs) CurDAG->viewGraph("scheduler input for " + BlockName);
    773 
    774   // Schedule machine code.
    775   ScheduleDAGSDNodes *Scheduler = CreateScheduler();
    776   {
    777     NamedRegionTimer T("Instruction Scheduling", GroupName,
    778                        TimePassesIsEnabled);
    779     Scheduler->Run(CurDAG, FuncInfo->MBB);
    780   }
    781 
    782   if (ViewSUnitDAGs) Scheduler->viewGraph();
    783 
    784   // Emit machine code to BB.  This can change 'BB' to the last block being
    785   // inserted into.
    786   MachineBasicBlock *FirstMBB = FuncInfo->MBB, *LastMBB;
    787   {
    788     NamedRegionTimer T("Instruction Creation", GroupName, TimePassesIsEnabled);
    789 
    790     // FuncInfo->InsertPt is passed by reference and set to the end of the
    791     // scheduled instructions.
    792     LastMBB = FuncInfo->MBB = Scheduler->EmitSchedule(FuncInfo->InsertPt);
    793   }
    794 
    795   // If the block was split, make sure we update any references that are used to
    796   // update PHI nodes later on.
    797   if (FirstMBB != LastMBB)
    798     SDB->UpdateSplitBlock(FirstMBB, LastMBB);
    799 
    800   // Free the scheduler state.
    801   {
    802     NamedRegionTimer T("Instruction Scheduling Cleanup", GroupName,
    803                        TimePassesIsEnabled);
    804     delete Scheduler;
    805   }
    806 
    807   // Free the SelectionDAG state, now that we're finished with it.
    808   CurDAG->clear();
    809 }
    810 
    811 namespace {
    812 /// ISelUpdater - helper class to handle updates of the instruction selection
    813 /// graph.
    814 class ISelUpdater : public SelectionDAG::DAGUpdateListener {
    815   SelectionDAG::allnodes_iterator &ISelPosition;
    816 public:
    817   ISelUpdater(SelectionDAG &DAG, SelectionDAG::allnodes_iterator &isp)
    818     : SelectionDAG::DAGUpdateListener(DAG), ISelPosition(isp) {}
    819 
    820   /// NodeDeleted - Handle nodes deleted from the graph. If the node being
    821   /// deleted is the current ISelPosition node, update ISelPosition.
    822   ///
    823   void NodeDeleted(SDNode *N, SDNode *E) override {
    824     if (ISelPosition == SelectionDAG::allnodes_iterator(N))
    825       ++ISelPosition;
    826   }
    827 };
    828 } // end anonymous namespace
    829 
    830 void SelectionDAGISel::DoInstructionSelection() {
    831   DEBUG(dbgs() << "===== Instruction selection begins: BB#"
    832         << FuncInfo->MBB->getNumber()
    833         << " '" << FuncInfo->MBB->getName() << "'\n");
    834 
    835   PreprocessISelDAG();
    836 
    837   // Select target instructions for the DAG.
    838   {
    839     // Number all nodes with a topological order and set DAGSize.
    840     DAGSize = CurDAG->AssignTopologicalOrder();
    841 
    842     // Create a dummy node (which is not added to allnodes), that adds
    843     // a reference to the root node, preventing it from being deleted,
    844     // and tracking any changes of the root.
    845     HandleSDNode Dummy(CurDAG->getRoot());
    846     SelectionDAG::allnodes_iterator ISelPosition (CurDAG->getRoot().getNode());
    847     ++ISelPosition;
    848 
    849     // Make sure that ISelPosition gets properly updated when nodes are deleted
    850     // in calls made from this function.
    851     ISelUpdater ISU(*CurDAG, ISelPosition);
    852 
    853     // The AllNodes list is now topological-sorted. Visit the
    854     // nodes by starting at the end of the list (the root of the
    855     // graph) and preceding back toward the beginning (the entry
    856     // node).
    857     while (ISelPosition != CurDAG->allnodes_begin()) {
    858       SDNode *Node = --ISelPosition;
    859       // Skip dead nodes. DAGCombiner is expected to eliminate all dead nodes,
    860       // but there are currently some corner cases that it misses. Also, this
    861       // makes it theoretically possible to disable the DAGCombiner.
    862       if (Node->use_empty())
    863         continue;
    864 
    865       SDNode *ResNode = Select(Node);
    866 
    867       // FIXME: This is pretty gross.  'Select' should be changed to not return
    868       // anything at all and this code should be nuked with a tactical strike.
    869 
    870       // If node should not be replaced, continue with the next one.
    871       if (ResNode == Node || Node->getOpcode() == ISD::DELETED_NODE)
    872         continue;
    873       // Replace node.
    874       if (ResNode) {
    875         ReplaceUses(Node, ResNode);
    876       }
    877 
    878       // If after the replacement this node is not used any more,
    879       // remove this dead node.
    880       if (Node->use_empty()) // Don't delete EntryToken, etc.
    881         CurDAG->RemoveDeadNode(Node);
    882     }
    883 
    884     CurDAG->setRoot(Dummy.getValue());
    885   }
    886 
    887   DEBUG(dbgs() << "===== Instruction selection ends:\n");
    888 
    889   PostprocessISelDAG();
    890 }
    891 
    892 /// PrepareEHLandingPad - Emit an EH_LABEL, set up live-in registers, and
    893 /// do other setup for EH landing-pad blocks.
    894 void SelectionDAGISel::PrepareEHLandingPad() {
    895   MachineBasicBlock *MBB = FuncInfo->MBB;
    896 
    897   // Add a label to mark the beginning of the landing pad.  Deletion of the
    898   // landing pad can thus be detected via the MachineModuleInfo.
    899   MCSymbol *Label = MF->getMMI().addLandingPad(MBB);
    900 
    901   // Assign the call site to the landing pad's begin label.
    902   MF->getMMI().setCallSiteLandingPad(Label, SDB->LPadToCallSiteMap[MBB]);
    903 
    904   const MCInstrDesc &II = TM.getInstrInfo()->get(TargetOpcode::EH_LABEL);
    905   BuildMI(*MBB, FuncInfo->InsertPt, SDB->getCurDebugLoc(), II)
    906     .addSym(Label);
    907 
    908   // Mark exception register as live in.
    909   const TargetLowering *TLI = getTargetLowering();
    910   const TargetRegisterClass *PtrRC = TLI->getRegClassFor(TLI->getPointerTy());
    911   if (unsigned Reg = TLI->getExceptionPointerRegister())
    912     FuncInfo->ExceptionPointerVirtReg = MBB->addLiveIn(Reg, PtrRC);
    913 
    914   // Mark exception selector register as live in.
    915   if (unsigned Reg = TLI->getExceptionSelectorRegister())
    916     FuncInfo->ExceptionSelectorVirtReg = MBB->addLiveIn(Reg, PtrRC);
    917 }
    918 
    919 /// isFoldedOrDeadInstruction - Return true if the specified instruction is
    920 /// side-effect free and is either dead or folded into a generated instruction.
    921 /// Return false if it needs to be emitted.
    922 static bool isFoldedOrDeadInstruction(const Instruction *I,
    923                                       FunctionLoweringInfo *FuncInfo) {
    924   return !I->mayWriteToMemory() && // Side-effecting instructions aren't folded.
    925          !isa<TerminatorInst>(I) && // Terminators aren't folded.
    926          !isa<DbgInfoIntrinsic>(I) &&  // Debug instructions aren't folded.
    927          !isa<LandingPadInst>(I) &&    // Landingpad instructions aren't folded.
    928          !FuncInfo->isExportedInst(I); // Exported instrs must be computed.
    929 }
    930 
    931 #ifndef NDEBUG
    932 // Collect per Instruction statistics for fast-isel misses.  Only those
    933 // instructions that cause the bail are accounted for.  It does not account for
    934 // instructions higher in the block.  Thus, summing the per instructions stats
    935 // will not add up to what is reported by NumFastIselFailures.
    936 static void collectFailStats(const Instruction *I) {
    937   switch (I->getOpcode()) {
    938   default: assert (0 && "<Invalid operator> ");
    939 
    940   // Terminators
    941   case Instruction::Ret:         NumFastIselFailRet++; return;
    942   case Instruction::Br:          NumFastIselFailBr++; return;
    943   case Instruction::Switch:      NumFastIselFailSwitch++; return;
    944   case Instruction::IndirectBr:  NumFastIselFailIndirectBr++; return;
    945   case Instruction::Invoke:      NumFastIselFailInvoke++; return;
    946   case Instruction::Resume:      NumFastIselFailResume++; return;
    947   case Instruction::Unreachable: NumFastIselFailUnreachable++; return;
    948 
    949   // Standard binary operators...
    950   case Instruction::Add:  NumFastIselFailAdd++; return;
    951   case Instruction::FAdd: NumFastIselFailFAdd++; return;
    952   case Instruction::Sub:  NumFastIselFailSub++; return;
    953   case Instruction::FSub: NumFastIselFailFSub++; return;
    954   case Instruction::Mul:  NumFastIselFailMul++; return;
    955   case Instruction::FMul: NumFastIselFailFMul++; return;
    956   case Instruction::UDiv: NumFastIselFailUDiv++; return;
    957   case Instruction::SDiv: NumFastIselFailSDiv++; return;
    958   case Instruction::FDiv: NumFastIselFailFDiv++; return;
    959   case Instruction::URem: NumFastIselFailURem++; return;
    960   case Instruction::SRem: NumFastIselFailSRem++; return;
    961   case Instruction::FRem: NumFastIselFailFRem++; return;
    962 
    963   // Logical operators...
    964   case Instruction::And: NumFastIselFailAnd++; return;
    965   case Instruction::Or:  NumFastIselFailOr++; return;
    966   case Instruction::Xor: NumFastIselFailXor++; return;
    967 
    968   // Memory instructions...
    969   case Instruction::Alloca:        NumFastIselFailAlloca++; return;
    970   case Instruction::Load:          NumFastIselFailLoad++; return;
    971   case Instruction::Store:         NumFastIselFailStore++; return;
    972   case Instruction::AtomicCmpXchg: NumFastIselFailAtomicCmpXchg++; return;
    973   case Instruction::AtomicRMW:     NumFastIselFailAtomicRMW++; return;
    974   case Instruction::Fence:         NumFastIselFailFence++; return;
    975   case Instruction::GetElementPtr: NumFastIselFailGetElementPtr++; return;
    976 
    977   // Convert instructions...
    978   case Instruction::Trunc:    NumFastIselFailTrunc++; return;
    979   case Instruction::ZExt:     NumFastIselFailZExt++; return;
    980   case Instruction::SExt:     NumFastIselFailSExt++; return;
    981   case Instruction::FPTrunc:  NumFastIselFailFPTrunc++; return;
    982   case Instruction::FPExt:    NumFastIselFailFPExt++; return;
    983   case Instruction::FPToUI:   NumFastIselFailFPToUI++; return;
    984   case Instruction::FPToSI:   NumFastIselFailFPToSI++; return;
    985   case Instruction::UIToFP:   NumFastIselFailUIToFP++; return;
    986   case Instruction::SIToFP:   NumFastIselFailSIToFP++; return;
    987   case Instruction::IntToPtr: NumFastIselFailIntToPtr++; return;
    988   case Instruction::PtrToInt: NumFastIselFailPtrToInt++; return;
    989   case Instruction::BitCast:  NumFastIselFailBitCast++; return;
    990 
    991   // Other instructions...
    992   case Instruction::ICmp:           NumFastIselFailICmp++; return;
    993   case Instruction::FCmp:           NumFastIselFailFCmp++; return;
    994   case Instruction::PHI:            NumFastIselFailPHI++; return;
    995   case Instruction::Select:         NumFastIselFailSelect++; return;
    996   case Instruction::Call: {
    997     if (auto const *Intrinsic = dyn_cast<IntrinsicInst>(I)) {
    998       switch (Intrinsic->getIntrinsicID()) {
    999       default:
   1000         NumFastIselFailIntrinsicCall++; return;
   1001       case Intrinsic::sadd_with_overflow:
   1002         NumFastIselFailSAddWithOverflow++; return;
   1003       case Intrinsic::uadd_with_overflow:
   1004         NumFastIselFailUAddWithOverflow++; return;
   1005       case Intrinsic::ssub_with_overflow:
   1006         NumFastIselFailSSubWithOverflow++; return;
   1007       case Intrinsic::usub_with_overflow:
   1008         NumFastIselFailUSubWithOverflow++; return;
   1009       case Intrinsic::smul_with_overflow:
   1010         NumFastIselFailSMulWithOverflow++; return;
   1011       case Intrinsic::umul_with_overflow:
   1012         NumFastIselFailUMulWithOverflow++; return;
   1013       case Intrinsic::frameaddress:
   1014         NumFastIselFailFrameaddress++; return;
   1015       case Intrinsic::sqrt:
   1016           NumFastIselFailSqrt++; return;
   1017       case Intrinsic::experimental_stackmap:
   1018         NumFastIselFailStackMap++; return;
   1019       case Intrinsic::experimental_patchpoint_void: // fall-through
   1020       case Intrinsic::experimental_patchpoint_i64:
   1021         NumFastIselFailPatchPoint++; return;
   1022       }
   1023     }
   1024     NumFastIselFailCall++;
   1025     return;
   1026   }
   1027   case Instruction::Shl:            NumFastIselFailShl++; return;
   1028   case Instruction::LShr:           NumFastIselFailLShr++; return;
   1029   case Instruction::AShr:           NumFastIselFailAShr++; return;
   1030   case Instruction::VAArg:          NumFastIselFailVAArg++; return;
   1031   case Instruction::ExtractElement: NumFastIselFailExtractElement++; return;
   1032   case Instruction::InsertElement:  NumFastIselFailInsertElement++; return;
   1033   case Instruction::ShuffleVector:  NumFastIselFailShuffleVector++; return;
   1034   case Instruction::ExtractValue:   NumFastIselFailExtractValue++; return;
   1035   case Instruction::InsertValue:    NumFastIselFailInsertValue++; return;
   1036   case Instruction::LandingPad:     NumFastIselFailLandingPad++; return;
   1037   }
   1038 }
   1039 #endif
   1040 
   1041 void SelectionDAGISel::SelectAllBasicBlocks(const Function &Fn) {
   1042   // Initialize the Fast-ISel state, if needed.
   1043   FastISel *FastIS = nullptr;
   1044   if (TM.Options.EnableFastISel)
   1045     FastIS = getTargetLowering()->createFastISel(*FuncInfo, LibInfo);
   1046 
   1047   // Iterate over all basic blocks in the function.
   1048   ReversePostOrderTraversal<const Function*> RPOT(&Fn);
   1049   for (ReversePostOrderTraversal<const Function*>::rpo_iterator
   1050        I = RPOT.begin(), E = RPOT.end(); I != E; ++I) {
   1051     const BasicBlock *LLVMBB = *I;
   1052 
   1053     if (OptLevel != CodeGenOpt::None) {
   1054       bool AllPredsVisited = true;
   1055       for (const_pred_iterator PI = pred_begin(LLVMBB), PE = pred_end(LLVMBB);
   1056            PI != PE; ++PI) {
   1057         if (!FuncInfo->VisitedBBs.count(*PI)) {
   1058           AllPredsVisited = false;
   1059           break;
   1060         }
   1061       }
   1062 
   1063       if (AllPredsVisited) {
   1064         for (BasicBlock::const_iterator I = LLVMBB->begin();
   1065              const PHINode *PN = dyn_cast<PHINode>(I); ++I)
   1066           FuncInfo->ComputePHILiveOutRegInfo(PN);
   1067       } else {
   1068         for (BasicBlock::const_iterator I = LLVMBB->begin();
   1069              const PHINode *PN = dyn_cast<PHINode>(I); ++I)
   1070           FuncInfo->InvalidatePHILiveOutRegInfo(PN);
   1071       }
   1072 
   1073       FuncInfo->VisitedBBs.insert(LLVMBB);
   1074     }
   1075 
   1076     BasicBlock::const_iterator const Begin = LLVMBB->getFirstNonPHI();
   1077     BasicBlock::const_iterator const End = LLVMBB->end();
   1078     BasicBlock::const_iterator BI = End;
   1079 
   1080     FuncInfo->MBB = FuncInfo->MBBMap[LLVMBB];
   1081     FuncInfo->InsertPt = FuncInfo->MBB->getFirstNonPHI();
   1082 
   1083     // Setup an EH landing-pad block.
   1084     FuncInfo->ExceptionPointerVirtReg = 0;
   1085     FuncInfo->ExceptionSelectorVirtReg = 0;
   1086     if (FuncInfo->MBB->isLandingPad())
   1087       PrepareEHLandingPad();
   1088 
   1089     // Before doing SelectionDAG ISel, see if FastISel has been requested.
   1090     if (FastIS) {
   1091       FastIS->startNewBlock();
   1092 
   1093       // Emit code for any incoming arguments. This must happen before
   1094       // beginning FastISel on the entry block.
   1095       if (LLVMBB == &Fn.getEntryBlock()) {
   1096         ++NumEntryBlocks;
   1097 
   1098         // Lower any arguments needed in this block if this is the entry block.
   1099         if (!FastIS->LowerArguments()) {
   1100           // Fast isel failed to lower these arguments
   1101           ++NumFastIselFailLowerArguments;
   1102           if (EnableFastISelAbortArgs)
   1103             llvm_unreachable("FastISel didn't lower all arguments");
   1104 
   1105           // Use SelectionDAG argument lowering
   1106           LowerArguments(Fn);
   1107           CurDAG->setRoot(SDB->getControlRoot());
   1108           SDB->clear();
   1109           CodeGenAndEmitDAG();
   1110         }
   1111 
   1112         // If we inserted any instructions at the beginning, make a note of
   1113         // where they are, so we can be sure to emit subsequent instructions
   1114         // after them.
   1115         if (FuncInfo->InsertPt != FuncInfo->MBB->begin())
   1116           FastIS->setLastLocalValue(std::prev(FuncInfo->InsertPt));
   1117         else
   1118           FastIS->setLastLocalValue(nullptr);
   1119       }
   1120 
   1121       unsigned NumFastIselRemaining = std::distance(Begin, End);
   1122       // Do FastISel on as many instructions as possible.
   1123       for (; BI != Begin; --BI) {
   1124         const Instruction *Inst = std::prev(BI);
   1125 
   1126         // If we no longer require this instruction, skip it.
   1127         if (isFoldedOrDeadInstruction(Inst, FuncInfo)) {
   1128           --NumFastIselRemaining;
   1129           continue;
   1130         }
   1131 
   1132         // Bottom-up: reset the insert pos at the top, after any local-value
   1133         // instructions.
   1134         FastIS->recomputeInsertPt();
   1135 
   1136         // Try to select the instruction with FastISel.
   1137         if (FastIS->SelectInstruction(Inst)) {
   1138           --NumFastIselRemaining;
   1139           ++NumFastIselSuccess;
   1140           // If fast isel succeeded, skip over all the folded instructions, and
   1141           // then see if there is a load right before the selected instructions.
   1142           // Try to fold the load if so.
   1143           const Instruction *BeforeInst = Inst;
   1144           while (BeforeInst != Begin) {
   1145             BeforeInst = std::prev(BasicBlock::const_iterator(BeforeInst));
   1146             if (!isFoldedOrDeadInstruction(BeforeInst, FuncInfo))
   1147               break;
   1148           }
   1149           if (BeforeInst != Inst && isa<LoadInst>(BeforeInst) &&
   1150               BeforeInst->hasOneUse() &&
   1151               FastIS->tryToFoldLoad(cast<LoadInst>(BeforeInst), Inst)) {
   1152             // If we succeeded, don't re-select the load.
   1153             BI = std::next(BasicBlock::const_iterator(BeforeInst));
   1154             --NumFastIselRemaining;
   1155             ++NumFastIselSuccess;
   1156           }
   1157           continue;
   1158         }
   1159 
   1160 #ifndef NDEBUG
   1161         if (EnableFastISelVerbose2)
   1162           collectFailStats(Inst);
   1163 #endif
   1164 
   1165         // Then handle certain instructions as single-LLVM-Instruction blocks.
   1166         if (isa<CallInst>(Inst)) {
   1167 
   1168           if (EnableFastISelVerbose || EnableFastISelAbort) {
   1169             dbgs() << "FastISel missed call: ";
   1170             Inst->dump();
   1171           }
   1172 
   1173           if (!Inst->getType()->isVoidTy() && !Inst->use_empty()) {
   1174             unsigned &R = FuncInfo->ValueMap[Inst];
   1175             if (!R)
   1176               R = FuncInfo->CreateRegs(Inst->getType());
   1177           }
   1178 
   1179           bool HadTailCall = false;
   1180           MachineBasicBlock::iterator SavedInsertPt = FuncInfo->InsertPt;
   1181           SelectBasicBlock(Inst, BI, HadTailCall);
   1182 
   1183           // If the call was emitted as a tail call, we're done with the block.
   1184           // We also need to delete any previously emitted instructions.
   1185           if (HadTailCall) {
   1186             FastIS->removeDeadCode(SavedInsertPt, FuncInfo->MBB->end());
   1187             --BI;
   1188             break;
   1189           }
   1190 
   1191           // Recompute NumFastIselRemaining as Selection DAG instruction
   1192           // selection may have handled the call, input args, etc.
   1193           unsigned RemainingNow = std::distance(Begin, BI);
   1194           NumFastIselFailures += NumFastIselRemaining - RemainingNow;
   1195           NumFastIselRemaining = RemainingNow;
   1196           continue;
   1197         }
   1198 
   1199         if (isa<TerminatorInst>(Inst) && !isa<BranchInst>(Inst)) {
   1200           // Don't abort, and use a different message for terminator misses.
   1201           NumFastIselFailures += NumFastIselRemaining;
   1202           if (EnableFastISelVerbose || EnableFastISelAbort) {
   1203             dbgs() << "FastISel missed terminator: ";
   1204             Inst->dump();
   1205           }
   1206         } else {
   1207           NumFastIselFailures += NumFastIselRemaining;
   1208           if (EnableFastISelVerbose || EnableFastISelAbort) {
   1209             dbgs() << "FastISel miss: ";
   1210             Inst->dump();
   1211           }
   1212           if (EnableFastISelAbort)
   1213             // The "fast" selector couldn't handle something and bailed.
   1214             // For the purpose of debugging, just abort.
   1215             llvm_unreachable("FastISel didn't select the entire block");
   1216         }
   1217         break;
   1218       }
   1219 
   1220       FastIS->recomputeInsertPt();
   1221     } else {
   1222       // Lower any arguments needed in this block if this is the entry block.
   1223       if (LLVMBB == &Fn.getEntryBlock()) {
   1224         ++NumEntryBlocks;
   1225         LowerArguments(Fn);
   1226       }
   1227     }
   1228 
   1229     if (Begin != BI)
   1230       ++NumDAGBlocks;
   1231     else
   1232       ++NumFastIselBlocks;
   1233 
   1234     if (Begin != BI) {
   1235       // Run SelectionDAG instruction selection on the remainder of the block
   1236       // not handled by FastISel. If FastISel is not run, this is the entire
   1237       // block.
   1238       bool HadTailCall;
   1239       SelectBasicBlock(Begin, BI, HadTailCall);
   1240     }
   1241 
   1242     FinishBasicBlock();
   1243     FuncInfo->PHINodesToUpdate.clear();
   1244   }
   1245 
   1246   delete FastIS;
   1247   SDB->clearDanglingDebugInfo();
   1248   SDB->SPDescriptor.resetPerFunctionState();
   1249 }
   1250 
   1251 /// Given that the input MI is before a partial terminator sequence TSeq, return
   1252 /// true if M + TSeq also a partial terminator sequence.
   1253 ///
   1254 /// A Terminator sequence is a sequence of MachineInstrs which at this point in
   1255 /// lowering copy vregs into physical registers, which are then passed into
   1256 /// terminator instructors so we can satisfy ABI constraints. A partial
   1257 /// terminator sequence is an improper subset of a terminator sequence (i.e. it
   1258 /// may be the whole terminator sequence).
   1259 static bool MIIsInTerminatorSequence(const MachineInstr *MI) {
   1260   // If we do not have a copy or an implicit def, we return true if and only if
   1261   // MI is a debug value.
   1262   if (!MI->isCopy() && !MI->isImplicitDef())
   1263     // Sometimes DBG_VALUE MI sneak in between the copies from the vregs to the
   1264     // physical registers if there is debug info associated with the terminator
   1265     // of our mbb. We want to include said debug info in our terminator
   1266     // sequence, so we return true in that case.
   1267     return MI->isDebugValue();
   1268 
   1269   // We have left the terminator sequence if we are not doing one of the
   1270   // following:
   1271   //
   1272   // 1. Copying a vreg into a physical register.
   1273   // 2. Copying a vreg into a vreg.
   1274   // 3. Defining a register via an implicit def.
   1275 
   1276   // OPI should always be a register definition...
   1277   MachineInstr::const_mop_iterator OPI = MI->operands_begin();
   1278   if (!OPI->isReg() || !OPI->isDef())
   1279     return false;
   1280 
   1281   // Defining any register via an implicit def is always ok.
   1282   if (MI->isImplicitDef())
   1283     return true;
   1284 
   1285   // Grab the copy source...
   1286   MachineInstr::const_mop_iterator OPI2 = OPI;
   1287   ++OPI2;
   1288   assert(OPI2 != MI->operands_end()
   1289          && "Should have a copy implying we should have 2 arguments.");
   1290 
   1291   // Make sure that the copy dest is not a vreg when the copy source is a
   1292   // physical register.
   1293   if (!OPI2->isReg() ||
   1294       (!TargetRegisterInfo::isPhysicalRegister(OPI->getReg()) &&
   1295        TargetRegisterInfo::isPhysicalRegister(OPI2->getReg())))
   1296     return false;
   1297 
   1298   return true;
   1299 }
   1300 
   1301 /// Find the split point at which to splice the end of BB into its success stack
   1302 /// protector check machine basic block.
   1303 ///
   1304 /// On many platforms, due to ABI constraints, terminators, even before register
   1305 /// allocation, use physical registers. This creates an issue for us since
   1306 /// physical registers at this point can not travel across basic
   1307 /// blocks. Luckily, selectiondag always moves physical registers into vregs
   1308 /// when they enter functions and moves them through a sequence of copies back
   1309 /// into the physical registers right before the terminator creating a
   1310 /// ``Terminator Sequence''. This function is searching for the beginning of the
   1311 /// terminator sequence so that we can ensure that we splice off not just the
   1312 /// terminator, but additionally the copies that move the vregs into the
   1313 /// physical registers.
   1314 static MachineBasicBlock::iterator
   1315 FindSplitPointForStackProtector(MachineBasicBlock *BB, DebugLoc DL) {
   1316   MachineBasicBlock::iterator SplitPoint = BB->getFirstTerminator();
   1317   //
   1318   if (SplitPoint == BB->begin())
   1319     return SplitPoint;
   1320 
   1321   MachineBasicBlock::iterator Start = BB->begin();
   1322   MachineBasicBlock::iterator Previous = SplitPoint;
   1323   --Previous;
   1324 
   1325   while (MIIsInTerminatorSequence(Previous)) {
   1326     SplitPoint = Previous;
   1327     if (Previous == Start)
   1328       break;
   1329     --Previous;
   1330   }
   1331 
   1332   return SplitPoint;
   1333 }
   1334 
   1335 void
   1336 SelectionDAGISel::FinishBasicBlock() {
   1337 
   1338   DEBUG(dbgs() << "Total amount of phi nodes to update: "
   1339                << FuncInfo->PHINodesToUpdate.size() << "\n";
   1340         for (unsigned i = 0, e = FuncInfo->PHINodesToUpdate.size(); i != e; ++i)
   1341           dbgs() << "Node " << i << " : ("
   1342                  << FuncInfo->PHINodesToUpdate[i].first
   1343                  << ", " << FuncInfo->PHINodesToUpdate[i].second << ")\n");
   1344 
   1345   const bool MustUpdatePHINodes = SDB->SwitchCases.empty() &&
   1346                                   SDB->JTCases.empty() &&
   1347                                   SDB->BitTestCases.empty();
   1348 
   1349   // Next, now that we know what the last MBB the LLVM BB expanded is, update
   1350   // PHI nodes in successors.
   1351   if (MustUpdatePHINodes) {
   1352     for (unsigned i = 0, e = FuncInfo->PHINodesToUpdate.size(); i != e; ++i) {
   1353       MachineInstrBuilder PHI(*MF, FuncInfo->PHINodesToUpdate[i].first);
   1354       assert(PHI->isPHI() &&
   1355              "This is not a machine PHI node that we are updating!");
   1356       if (!FuncInfo->MBB->isSuccessor(PHI->getParent()))
   1357         continue;
   1358       PHI.addReg(FuncInfo->PHINodesToUpdate[i].second).addMBB(FuncInfo->MBB);
   1359     }
   1360   }
   1361 
   1362   // Handle stack protector.
   1363   if (SDB->SPDescriptor.shouldEmitStackProtector()) {
   1364     MachineBasicBlock *ParentMBB = SDB->SPDescriptor.getParentMBB();
   1365     MachineBasicBlock *SuccessMBB = SDB->SPDescriptor.getSuccessMBB();
   1366 
   1367     // Find the split point to split the parent mbb. At the same time copy all
   1368     // physical registers used in the tail of parent mbb into virtual registers
   1369     // before the split point and back into physical registers after the split
   1370     // point. This prevents us needing to deal with Live-ins and many other
   1371     // register allocation issues caused by us splitting the parent mbb. The
   1372     // register allocator will clean up said virtual copies later on.
   1373     MachineBasicBlock::iterator SplitPoint =
   1374       FindSplitPointForStackProtector(ParentMBB, SDB->getCurDebugLoc());
   1375 
   1376     // Splice the terminator of ParentMBB into SuccessMBB.
   1377     SuccessMBB->splice(SuccessMBB->end(), ParentMBB,
   1378                        SplitPoint,
   1379                        ParentMBB->end());
   1380 
   1381     // Add compare/jump on neq/jump to the parent BB.
   1382     FuncInfo->MBB = ParentMBB;
   1383     FuncInfo->InsertPt = ParentMBB->end();
   1384     SDB->visitSPDescriptorParent(SDB->SPDescriptor, ParentMBB);
   1385     CurDAG->setRoot(SDB->getRoot());
   1386     SDB->clear();
   1387     CodeGenAndEmitDAG();
   1388 
   1389     // CodeGen Failure MBB if we have not codegened it yet.
   1390     MachineBasicBlock *FailureMBB = SDB->SPDescriptor.getFailureMBB();
   1391     if (!FailureMBB->size()) {
   1392       FuncInfo->MBB = FailureMBB;
   1393       FuncInfo->InsertPt = FailureMBB->end();
   1394       SDB->visitSPDescriptorFailure(SDB->SPDescriptor);
   1395       CurDAG->setRoot(SDB->getRoot());
   1396       SDB->clear();
   1397       CodeGenAndEmitDAG();
   1398     }
   1399 
   1400     // Clear the Per-BB State.
   1401     SDB->SPDescriptor.resetPerBBState();
   1402   }
   1403 
   1404   // If we updated PHI Nodes, return early.
   1405   if (MustUpdatePHINodes)
   1406     return;
   1407 
   1408   for (unsigned i = 0, e = SDB->BitTestCases.size(); i != e; ++i) {
   1409     // Lower header first, if it wasn't already lowered
   1410     if (!SDB->BitTestCases[i].Emitted) {
   1411       // Set the current basic block to the mbb we wish to insert the code into
   1412       FuncInfo->MBB = SDB->BitTestCases[i].Parent;
   1413       FuncInfo->InsertPt = FuncInfo->MBB->end();
   1414       // Emit the code
   1415       SDB->visitBitTestHeader(SDB->BitTestCases[i], FuncInfo->MBB);
   1416       CurDAG->setRoot(SDB->getRoot());
   1417       SDB->clear();
   1418       CodeGenAndEmitDAG();
   1419     }
   1420 
   1421     uint32_t UnhandledWeight = 0;
   1422     for (unsigned j = 0, ej = SDB->BitTestCases[i].Cases.size(); j != ej; ++j)
   1423       UnhandledWeight += SDB->BitTestCases[i].Cases[j].ExtraWeight;
   1424 
   1425     for (unsigned j = 0, ej = SDB->BitTestCases[i].Cases.size(); j != ej; ++j) {
   1426       UnhandledWeight -= SDB->BitTestCases[i].Cases[j].ExtraWeight;
   1427       // Set the current basic block to the mbb we wish to insert the code into
   1428       FuncInfo->MBB = SDB->BitTestCases[i].Cases[j].ThisBB;
   1429       FuncInfo->InsertPt = FuncInfo->MBB->end();
   1430       // Emit the code
   1431       if (j+1 != ej)
   1432         SDB->visitBitTestCase(SDB->BitTestCases[i],
   1433                               SDB->BitTestCases[i].Cases[j+1].ThisBB,
   1434                               UnhandledWeight,
   1435                               SDB->BitTestCases[i].Reg,
   1436                               SDB->BitTestCases[i].Cases[j],
   1437                               FuncInfo->MBB);
   1438       else
   1439         SDB->visitBitTestCase(SDB->BitTestCases[i],
   1440                               SDB->BitTestCases[i].Default,
   1441                               UnhandledWeight,
   1442                               SDB->BitTestCases[i].Reg,
   1443                               SDB->BitTestCases[i].Cases[j],
   1444                               FuncInfo->MBB);
   1445 
   1446 
   1447       CurDAG->setRoot(SDB->getRoot());
   1448       SDB->clear();
   1449       CodeGenAndEmitDAG();
   1450     }
   1451 
   1452     // Update PHI Nodes
   1453     for (unsigned pi = 0, pe = FuncInfo->PHINodesToUpdate.size();
   1454          pi != pe; ++pi) {
   1455       MachineInstrBuilder PHI(*MF, FuncInfo->PHINodesToUpdate[pi].first);
   1456       MachineBasicBlock *PHIBB = PHI->getParent();
   1457       assert(PHI->isPHI() &&
   1458              "This is not a machine PHI node that we are updating!");
   1459       // This is "default" BB. We have two jumps to it. From "header" BB and
   1460       // from last "case" BB.
   1461       if (PHIBB == SDB->BitTestCases[i].Default)
   1462         PHI.addReg(FuncInfo->PHINodesToUpdate[pi].second)
   1463            .addMBB(SDB->BitTestCases[i].Parent)
   1464            .addReg(FuncInfo->PHINodesToUpdate[pi].second)
   1465            .addMBB(SDB->BitTestCases[i].Cases.back().ThisBB);
   1466       // One of "cases" BB.
   1467       for (unsigned j = 0, ej = SDB->BitTestCases[i].Cases.size();
   1468            j != ej; ++j) {
   1469         MachineBasicBlock* cBB = SDB->BitTestCases[i].Cases[j].ThisBB;
   1470         if (cBB->isSuccessor(PHIBB))
   1471           PHI.addReg(FuncInfo->PHINodesToUpdate[pi].second).addMBB(cBB);
   1472       }
   1473     }
   1474   }
   1475   SDB->BitTestCases.clear();
   1476 
   1477   // If the JumpTable record is filled in, then we need to emit a jump table.
   1478   // Updating the PHI nodes is tricky in this case, since we need to determine
   1479   // whether the PHI is a successor of the range check MBB or the jump table MBB
   1480   for (unsigned i = 0, e = SDB->JTCases.size(); i != e; ++i) {
   1481     // Lower header first, if it wasn't already lowered
   1482     if (!SDB->JTCases[i].first.Emitted) {
   1483       // Set the current basic block to the mbb we wish to insert the code into
   1484       FuncInfo->MBB = SDB->JTCases[i].first.HeaderBB;
   1485       FuncInfo->InsertPt = FuncInfo->MBB->end();
   1486       // Emit the code
   1487       SDB->visitJumpTableHeader(SDB->JTCases[i].second, SDB->JTCases[i].first,
   1488                                 FuncInfo->MBB);
   1489       CurDAG->setRoot(SDB->getRoot());
   1490       SDB->clear();
   1491       CodeGenAndEmitDAG();
   1492     }
   1493 
   1494     // Set the current basic block to the mbb we wish to insert the code into
   1495     FuncInfo->MBB = SDB->JTCases[i].second.MBB;
   1496     FuncInfo->InsertPt = FuncInfo->MBB->end();
   1497     // Emit the code
   1498     SDB->visitJumpTable(SDB->JTCases[i].second);
   1499     CurDAG->setRoot(SDB->getRoot());
   1500     SDB->clear();
   1501     CodeGenAndEmitDAG();
   1502 
   1503     // Update PHI Nodes
   1504     for (unsigned pi = 0, pe = FuncInfo->PHINodesToUpdate.size();
   1505          pi != pe; ++pi) {
   1506       MachineInstrBuilder PHI(*MF, FuncInfo->PHINodesToUpdate[pi].first);
   1507       MachineBasicBlock *PHIBB = PHI->getParent();
   1508       assert(PHI->isPHI() &&
   1509              "This is not a machine PHI node that we are updating!");
   1510       // "default" BB. We can go there only from header BB.
   1511       if (PHIBB == SDB->JTCases[i].second.Default)
   1512         PHI.addReg(FuncInfo->PHINodesToUpdate[pi].second)
   1513            .addMBB(SDB->JTCases[i].first.HeaderBB);
   1514       // JT BB. Just iterate over successors here
   1515       if (FuncInfo->MBB->isSuccessor(PHIBB))
   1516         PHI.addReg(FuncInfo->PHINodesToUpdate[pi].second).addMBB(FuncInfo->MBB);
   1517     }
   1518   }
   1519   SDB->JTCases.clear();
   1520 
   1521   // If the switch block involved a branch to one of the actual successors, we
   1522   // need to update PHI nodes in that block.
   1523   for (unsigned i = 0, e = FuncInfo->PHINodesToUpdate.size(); i != e; ++i) {
   1524     MachineInstrBuilder PHI(*MF, FuncInfo->PHINodesToUpdate[i].first);
   1525     assert(PHI->isPHI() &&
   1526            "This is not a machine PHI node that we are updating!");
   1527     if (FuncInfo->MBB->isSuccessor(PHI->getParent()))
   1528       PHI.addReg(FuncInfo->PHINodesToUpdate[i].second).addMBB(FuncInfo->MBB);
   1529   }
   1530 
   1531   // If we generated any switch lowering information, build and codegen any
   1532   // additional DAGs necessary.
   1533   for (unsigned i = 0, e = SDB->SwitchCases.size(); i != e; ++i) {
   1534     // Set the current basic block to the mbb we wish to insert the code into
   1535     FuncInfo->MBB = SDB->SwitchCases[i].ThisBB;
   1536     FuncInfo->InsertPt = FuncInfo->MBB->end();
   1537 
   1538     // Determine the unique successors.
   1539     SmallVector<MachineBasicBlock *, 2> Succs;
   1540     Succs.push_back(SDB->SwitchCases[i].TrueBB);
   1541     if (SDB->SwitchCases[i].TrueBB != SDB->SwitchCases[i].FalseBB)
   1542       Succs.push_back(SDB->SwitchCases[i].FalseBB);
   1543 
   1544     // Emit the code. Note that this could result in FuncInfo->MBB being split.
   1545     SDB->visitSwitchCase(SDB->SwitchCases[i], FuncInfo->MBB);
   1546     CurDAG->setRoot(SDB->getRoot());
   1547     SDB->clear();
   1548     CodeGenAndEmitDAG();
   1549 
   1550     // Remember the last block, now that any splitting is done, for use in
   1551     // populating PHI nodes in successors.
   1552     MachineBasicBlock *ThisBB = FuncInfo->MBB;
   1553 
   1554     // Handle any PHI nodes in successors of this chunk, as if we were coming
   1555     // from the original BB before switch expansion.  Note that PHI nodes can
   1556     // occur multiple times in PHINodesToUpdate.  We have to be very careful to
   1557     // handle them the right number of times.
   1558     for (unsigned i = 0, e = Succs.size(); i != e; ++i) {
   1559       FuncInfo->MBB = Succs[i];
   1560       FuncInfo->InsertPt = FuncInfo->MBB->end();
   1561       // FuncInfo->MBB may have been removed from the CFG if a branch was
   1562       // constant folded.
   1563       if (ThisBB->isSuccessor(FuncInfo->MBB)) {
   1564         for (MachineBasicBlock::iterator
   1565              MBBI = FuncInfo->MBB->begin(), MBBE = FuncInfo->MBB->end();
   1566              MBBI != MBBE && MBBI->isPHI(); ++MBBI) {
   1567           MachineInstrBuilder PHI(*MF, MBBI);
   1568           // This value for this PHI node is recorded in PHINodesToUpdate.
   1569           for (unsigned pn = 0; ; ++pn) {
   1570             assert(pn != FuncInfo->PHINodesToUpdate.size() &&
   1571                    "Didn't find PHI entry!");
   1572             if (FuncInfo->PHINodesToUpdate[pn].first == PHI) {
   1573               PHI.addReg(FuncInfo->PHINodesToUpdate[pn].second).addMBB(ThisBB);
   1574               break;
   1575             }
   1576           }
   1577         }
   1578       }
   1579     }
   1580   }
   1581   SDB->SwitchCases.clear();
   1582 }
   1583 
   1584 
   1585 /// Create the scheduler. If a specific scheduler was specified
   1586 /// via the SchedulerRegistry, use it, otherwise select the
   1587 /// one preferred by the target.
   1588 ///
   1589 ScheduleDAGSDNodes *SelectionDAGISel::CreateScheduler() {
   1590   RegisterScheduler::FunctionPassCtor Ctor = RegisterScheduler::getDefault();
   1591 
   1592   if (!Ctor) {
   1593     Ctor = ISHeuristic;
   1594     RegisterScheduler::setDefault(Ctor);
   1595   }
   1596 
   1597   return Ctor(this, OptLevel);
   1598 }
   1599 
   1600 //===----------------------------------------------------------------------===//
   1601 // Helper functions used by the generated instruction selector.
   1602 //===----------------------------------------------------------------------===//
   1603 // Calls to these methods are generated by tblgen.
   1604 
   1605 /// CheckAndMask - The isel is trying to match something like (and X, 255).  If
   1606 /// the dag combiner simplified the 255, we still want to match.  RHS is the
   1607 /// actual value in the DAG on the RHS of an AND, and DesiredMaskS is the value
   1608 /// specified in the .td file (e.g. 255).
   1609 bool SelectionDAGISel::CheckAndMask(SDValue LHS, ConstantSDNode *RHS,
   1610                                     int64_t DesiredMaskS) const {
   1611   const APInt &ActualMask = RHS->getAPIntValue();
   1612   const APInt &DesiredMask = APInt(LHS.getValueSizeInBits(), DesiredMaskS);
   1613 
   1614   // If the actual mask exactly matches, success!
   1615   if (ActualMask == DesiredMask)
   1616     return true;
   1617 
   1618   // If the actual AND mask is allowing unallowed bits, this doesn't match.
   1619   if (ActualMask.intersects(~DesiredMask))
   1620     return false;
   1621 
   1622   // Otherwise, the DAG Combiner may have proven that the value coming in is
   1623   // either already zero or is not demanded.  Check for known zero input bits.
   1624   APInt NeededMask = DesiredMask & ~ActualMask;
   1625   if (CurDAG->MaskedValueIsZero(LHS, NeededMask))
   1626     return true;
   1627 
   1628   // TODO: check to see if missing bits are just not demanded.
   1629 
   1630   // Otherwise, this pattern doesn't match.
   1631   return false;
   1632 }
   1633 
   1634 /// CheckOrMask - The isel is trying to match something like (or X, 255).  If
   1635 /// the dag combiner simplified the 255, we still want to match.  RHS is the
   1636 /// actual value in the DAG on the RHS of an OR, and DesiredMaskS is the value
   1637 /// specified in the .td file (e.g. 255).
   1638 bool SelectionDAGISel::CheckOrMask(SDValue LHS, ConstantSDNode *RHS,
   1639                                    int64_t DesiredMaskS) const {
   1640   const APInt &ActualMask = RHS->getAPIntValue();
   1641   const APInt &DesiredMask = APInt(LHS.getValueSizeInBits(), DesiredMaskS);
   1642 
   1643   // If the actual mask exactly matches, success!
   1644   if (ActualMask == DesiredMask)
   1645     return true;
   1646 
   1647   // If the actual AND mask is allowing unallowed bits, this doesn't match.
   1648   if (ActualMask.intersects(~DesiredMask))
   1649     return false;
   1650 
   1651   // Otherwise, the DAG Combiner may have proven that the value coming in is
   1652   // either already zero or is not demanded.  Check for known zero input bits.
   1653   APInt NeededMask = DesiredMask & ~ActualMask;
   1654 
   1655   APInt KnownZero, KnownOne;
   1656   CurDAG->computeKnownBits(LHS, KnownZero, KnownOne);
   1657 
   1658   // If all the missing bits in the or are already known to be set, match!
   1659   if ((NeededMask & KnownOne) == NeededMask)
   1660     return true;
   1661 
   1662   // TODO: check to see if missing bits are just not demanded.
   1663 
   1664   // Otherwise, this pattern doesn't match.
   1665   return false;
   1666 }
   1667 
   1668 
   1669 /// SelectInlineAsmMemoryOperands - Calls to this are automatically generated
   1670 /// by tblgen.  Others should not call it.
   1671 void SelectionDAGISel::
   1672 SelectInlineAsmMemoryOperands(std::vector<SDValue> &Ops) {
   1673   std::vector<SDValue> InOps;
   1674   std::swap(InOps, Ops);
   1675 
   1676   Ops.push_back(InOps[InlineAsm::Op_InputChain]); // 0
   1677   Ops.push_back(InOps[InlineAsm::Op_AsmString]);  // 1
   1678   Ops.push_back(InOps[InlineAsm::Op_MDNode]);     // 2, !srcloc
   1679   Ops.push_back(InOps[InlineAsm::Op_ExtraInfo]);  // 3 (SideEffect, AlignStack)
   1680 
   1681   unsigned i = InlineAsm::Op_FirstOperand, e = InOps.size();
   1682   if (InOps[e-1].getValueType() == MVT::Glue)
   1683     --e;  // Don't process a glue operand if it is here.
   1684 
   1685   while (i != e) {
   1686     unsigned Flags = cast<ConstantSDNode>(InOps[i])->getZExtValue();
   1687     if (!InlineAsm::isMemKind(Flags)) {
   1688       // Just skip over this operand, copying the operands verbatim.
   1689       Ops.insert(Ops.end(), InOps.begin()+i,
   1690                  InOps.begin()+i+InlineAsm::getNumOperandRegisters(Flags) + 1);
   1691       i += InlineAsm::getNumOperandRegisters(Flags) + 1;
   1692     } else {
   1693       assert(InlineAsm::getNumOperandRegisters(Flags) == 1 &&
   1694              "Memory operand with multiple values?");
   1695       // Otherwise, this is a memory operand.  Ask the target to select it.
   1696       std::vector<SDValue> SelOps;
   1697       if (SelectInlineAsmMemoryOperand(InOps[i+1], 'm', SelOps))
   1698         report_fatal_error("Could not match memory address.  Inline asm"
   1699                            " failure!");
   1700 
   1701       // Add this to the output node.
   1702       unsigned NewFlags =
   1703         InlineAsm::getFlagWord(InlineAsm::Kind_Mem, SelOps.size());
   1704       Ops.push_back(CurDAG->getTargetConstant(NewFlags, MVT::i32));
   1705       Ops.insert(Ops.end(), SelOps.begin(), SelOps.end());
   1706       i += 2;
   1707     }
   1708   }
   1709 
   1710   // Add the glue input back if present.
   1711   if (e != InOps.size())
   1712     Ops.push_back(InOps.back());
   1713 }
   1714 
   1715 /// findGlueUse - Return use of MVT::Glue value produced by the specified
   1716 /// SDNode.
   1717 ///
   1718 static SDNode *findGlueUse(SDNode *N) {
   1719   unsigned FlagResNo = N->getNumValues()-1;
   1720   for (SDNode::use_iterator I = N->use_begin(), E = N->use_end(); I != E; ++I) {
   1721     SDUse &Use = I.getUse();
   1722     if (Use.getResNo() == FlagResNo)
   1723       return Use.getUser();
   1724   }
   1725   return nullptr;
   1726 }
   1727 
   1728 /// findNonImmUse - Return true if "Use" is a non-immediate use of "Def".
   1729 /// This function recursively traverses up the operand chain, ignoring
   1730 /// certain nodes.
   1731 static bool findNonImmUse(SDNode *Use, SDNode* Def, SDNode *ImmedUse,
   1732                           SDNode *Root, SmallPtrSet<SDNode*, 16> &Visited,
   1733                           bool IgnoreChains) {
   1734   // The NodeID's are given uniques ID's where a node ID is guaranteed to be
   1735   // greater than all of its (recursive) operands.  If we scan to a point where
   1736   // 'use' is smaller than the node we're scanning for, then we know we will
   1737   // never find it.
   1738   //
   1739   // The Use may be -1 (unassigned) if it is a newly allocated node.  This can
   1740   // happen because we scan down to newly selected nodes in the case of glue
   1741   // uses.
   1742   if ((Use->getNodeId() < Def->getNodeId() && Use->getNodeId() != -1))
   1743     return false;
   1744 
   1745   // Don't revisit nodes if we already scanned it and didn't fail, we know we
   1746   // won't fail if we scan it again.
   1747   if (!Visited.insert(Use))
   1748     return false;
   1749 
   1750   for (unsigned i = 0, e = Use->getNumOperands(); i != e; ++i) {
   1751     // Ignore chain uses, they are validated by HandleMergeInputChains.
   1752     if (Use->getOperand(i).getValueType() == MVT::Other && IgnoreChains)
   1753       continue;
   1754 
   1755     SDNode *N = Use->getOperand(i).getNode();
   1756     if (N == Def) {
   1757       if (Use == ImmedUse || Use == Root)
   1758         continue;  // We are not looking for immediate use.
   1759       assert(N != Root);
   1760       return true;
   1761     }
   1762 
   1763     // Traverse up the operand chain.
   1764     if (findNonImmUse(N, Def, ImmedUse, Root, Visited, IgnoreChains))
   1765       return true;
   1766   }
   1767   return false;
   1768 }
   1769 
   1770 /// IsProfitableToFold - Returns true if it's profitable to fold the specific
   1771 /// operand node N of U during instruction selection that starts at Root.
   1772 bool SelectionDAGISel::IsProfitableToFold(SDValue N, SDNode *U,
   1773                                           SDNode *Root) const {
   1774   if (OptLevel == CodeGenOpt::None) return false;
   1775   return N.hasOneUse();
   1776 }
   1777 
   1778 /// IsLegalToFold - Returns true if the specific operand node N of
   1779 /// U can be folded during instruction selection that starts at Root.
   1780 bool SelectionDAGISel::IsLegalToFold(SDValue N, SDNode *U, SDNode *Root,
   1781                                      CodeGenOpt::Level OptLevel,
   1782                                      bool IgnoreChains) {
   1783   if (OptLevel == CodeGenOpt::None) return false;
   1784 
   1785   // If Root use can somehow reach N through a path that that doesn't contain
   1786   // U then folding N would create a cycle. e.g. In the following
   1787   // diagram, Root can reach N through X. If N is folded into into Root, then
   1788   // X is both a predecessor and a successor of U.
   1789   //
   1790   //          [N*]           //
   1791   //         ^   ^           //
   1792   //        /     \          //
   1793   //      [U*]    [X]?       //
   1794   //        ^     ^          //
   1795   //         \   /           //
   1796   //          \ /            //
   1797   //         [Root*]         //
   1798   //
   1799   // * indicates nodes to be folded together.
   1800   //
   1801   // If Root produces glue, then it gets (even more) interesting. Since it
   1802   // will be "glued" together with its glue use in the scheduler, we need to
   1803   // check if it might reach N.
   1804   //
   1805   //          [N*]           //
   1806   //         ^   ^           //
   1807   //        /     \          //
   1808   //      [U*]    [X]?       //
   1809   //        ^       ^        //
   1810   //         \       \       //
   1811   //          \      |       //
   1812   //         [Root*] |       //
   1813   //          ^      |       //
   1814   //          f      |       //
   1815   //          |      /       //
   1816   //         [Y]    /        //
   1817   //           ^   /         //
   1818   //           f  /          //
   1819   //           | /           //
   1820   //          [GU]           //
   1821   //
   1822   // If GU (glue use) indirectly reaches N (the load), and Root folds N
   1823   // (call it Fold), then X is a predecessor of GU and a successor of
   1824   // Fold. But since Fold and GU are glued together, this will create
   1825   // a cycle in the scheduling graph.
   1826 
   1827   // If the node has glue, walk down the graph to the "lowest" node in the
   1828   // glueged set.
   1829   EVT VT = Root->getValueType(Root->getNumValues()-1);
   1830   while (VT == MVT::Glue) {
   1831     SDNode *GU = findGlueUse(Root);
   1832     if (!GU)
   1833       break;
   1834     Root = GU;
   1835     VT = Root->getValueType(Root->getNumValues()-1);
   1836 
   1837     // If our query node has a glue result with a use, we've walked up it.  If
   1838     // the user (which has already been selected) has a chain or indirectly uses
   1839     // the chain, our WalkChainUsers predicate will not consider it.  Because of
   1840     // this, we cannot ignore chains in this predicate.
   1841     IgnoreChains = false;
   1842   }
   1843 
   1844 
   1845   SmallPtrSet<SDNode*, 16> Visited;
   1846   return !findNonImmUse(Root, N.getNode(), U, Root, Visited, IgnoreChains);
   1847 }
   1848 
   1849 SDNode *SelectionDAGISel::Select_INLINEASM(SDNode *N) {
   1850   std::vector<SDValue> Ops(N->op_begin(), N->op_end());
   1851   SelectInlineAsmMemoryOperands(Ops);
   1852 
   1853   EVT VTs[] = { MVT::Other, MVT::Glue };
   1854   SDValue New = CurDAG->getNode(ISD::INLINEASM, SDLoc(N), VTs, Ops);
   1855   New->setNodeId(-1);
   1856   return New.getNode();
   1857 }
   1858 
   1859 SDNode
   1860 *SelectionDAGISel::Select_READ_REGISTER(SDNode *Op) {
   1861   SDLoc dl(Op);
   1862   MDNodeSDNode *MD = dyn_cast<MDNodeSDNode>(Op->getOperand(0));
   1863   const MDString *RegStr = dyn_cast<MDString>(MD->getMD()->getOperand(0));
   1864   unsigned Reg = getTargetLowering()->getRegisterByName(
   1865                  RegStr->getString().data(), Op->getValueType(0));
   1866   SDValue New = CurDAG->getCopyFromReg(
   1867                         CurDAG->getEntryNode(), dl, Reg, Op->getValueType(0));
   1868   New->setNodeId(-1);
   1869   return New.getNode();
   1870 }
   1871 
   1872 SDNode
   1873 *SelectionDAGISel::Select_WRITE_REGISTER(SDNode *Op) {
   1874   SDLoc dl(Op);
   1875   MDNodeSDNode *MD = dyn_cast<MDNodeSDNode>(Op->getOperand(1));
   1876   const MDString *RegStr = dyn_cast<MDString>(MD->getMD()->getOperand(0));
   1877   unsigned Reg = getTargetLowering()->getRegisterByName(
   1878                  RegStr->getString().data(), Op->getOperand(2).getValueType());
   1879   SDValue New = CurDAG->getCopyToReg(
   1880                         CurDAG->getEntryNode(), dl, Reg, Op->getOperand(2));
   1881   New->setNodeId(-1);
   1882   return New.getNode();
   1883 }
   1884 
   1885 
   1886 
   1887 SDNode *SelectionDAGISel::Select_UNDEF(SDNode *N) {
   1888   return CurDAG->SelectNodeTo(N, TargetOpcode::IMPLICIT_DEF,N->getValueType(0));
   1889 }
   1890 
   1891 /// GetVBR - decode a vbr encoding whose top bit is set.
   1892 LLVM_ATTRIBUTE_ALWAYS_INLINE static uint64_t
   1893 GetVBR(uint64_t Val, const unsigned char *MatcherTable, unsigned &Idx) {
   1894   assert(Val >= 128 && "Not a VBR");
   1895   Val &= 127;  // Remove first vbr bit.
   1896 
   1897   unsigned Shift = 7;
   1898   uint64_t NextBits;
   1899   do {
   1900     NextBits = MatcherTable[Idx++];
   1901     Val |= (NextBits&127) << Shift;
   1902     Shift += 7;
   1903   } while (NextBits & 128);
   1904 
   1905   return Val;
   1906 }
   1907 
   1908 
   1909 /// UpdateChainsAndGlue - When a match is complete, this method updates uses of
   1910 /// interior glue and chain results to use the new glue and chain results.
   1911 void SelectionDAGISel::
   1912 UpdateChainsAndGlue(SDNode *NodeToMatch, SDValue InputChain,
   1913                     const SmallVectorImpl<SDNode*> &ChainNodesMatched,
   1914                     SDValue InputGlue,
   1915                     const SmallVectorImpl<SDNode*> &GlueResultNodesMatched,
   1916                     bool isMorphNodeTo) {
   1917   SmallVector<SDNode*, 4> NowDeadNodes;
   1918 
   1919   // Now that all the normal results are replaced, we replace the chain and
   1920   // glue results if present.
   1921   if (!ChainNodesMatched.empty()) {
   1922     assert(InputChain.getNode() &&
   1923            "Matched input chains but didn't produce a chain");
   1924     // Loop over all of the nodes we matched that produced a chain result.
   1925     // Replace all the chain results with the final chain we ended up with.
   1926     for (unsigned i = 0, e = ChainNodesMatched.size(); i != e; ++i) {
   1927       SDNode *ChainNode = ChainNodesMatched[i];
   1928 
   1929       // If this node was already deleted, don't look at it.
   1930       if (ChainNode->getOpcode() == ISD::DELETED_NODE)
   1931         continue;
   1932 
   1933       // Don't replace the results of the root node if we're doing a
   1934       // MorphNodeTo.
   1935       if (ChainNode == NodeToMatch && isMorphNodeTo)
   1936         continue;
   1937 
   1938       SDValue ChainVal = SDValue(ChainNode, ChainNode->getNumValues()-1);
   1939       if (ChainVal.getValueType() == MVT::Glue)
   1940         ChainVal = ChainVal.getValue(ChainVal->getNumValues()-2);
   1941       assert(ChainVal.getValueType() == MVT::Other && "Not a chain?");
   1942       CurDAG->ReplaceAllUsesOfValueWith(ChainVal, InputChain);
   1943 
   1944       // If the node became dead and we haven't already seen it, delete it.
   1945       if (ChainNode->use_empty() &&
   1946           !std::count(NowDeadNodes.begin(), NowDeadNodes.end(), ChainNode))
   1947         NowDeadNodes.push_back(ChainNode);
   1948     }
   1949   }
   1950 
   1951   // If the result produces glue, update any glue results in the matched
   1952   // pattern with the glue result.
   1953   if (InputGlue.getNode()) {
   1954     // Handle any interior nodes explicitly marked.
   1955     for (unsigned i = 0, e = GlueResultNodesMatched.size(); i != e; ++i) {
   1956       SDNode *FRN = GlueResultNodesMatched[i];
   1957 
   1958       // If this node was already deleted, don't look at it.
   1959       if (FRN->getOpcode() == ISD::DELETED_NODE)
   1960         continue;
   1961 
   1962       assert(FRN->getValueType(FRN->getNumValues()-1) == MVT::Glue &&
   1963              "Doesn't have a glue result");
   1964       CurDAG->ReplaceAllUsesOfValueWith(SDValue(FRN, FRN->getNumValues()-1),
   1965                                         InputGlue);
   1966 
   1967       // If the node became dead and we haven't already seen it, delete it.
   1968       if (FRN->use_empty() &&
   1969           !std::count(NowDeadNodes.begin(), NowDeadNodes.end(), FRN))
   1970         NowDeadNodes.push_back(FRN);
   1971     }
   1972   }
   1973 
   1974   if (!NowDeadNodes.empty())
   1975     CurDAG->RemoveDeadNodes(NowDeadNodes);
   1976 
   1977   DEBUG(dbgs() << "ISEL: Match complete!\n");
   1978 }
   1979 
   1980 enum ChainResult {
   1981   CR_Simple,
   1982   CR_InducesCycle,
   1983   CR_LeadsToInteriorNode
   1984 };
   1985 
   1986 /// WalkChainUsers - Walk down the users of the specified chained node that is
   1987 /// part of the pattern we're matching, looking at all of the users we find.
   1988 /// This determines whether something is an interior node, whether we have a
   1989 /// non-pattern node in between two pattern nodes (which prevent folding because
   1990 /// it would induce a cycle) and whether we have a TokenFactor node sandwiched
   1991 /// between pattern nodes (in which case the TF becomes part of the pattern).
   1992 ///
   1993 /// The walk we do here is guaranteed to be small because we quickly get down to
   1994 /// already selected nodes "below" us.
   1995 static ChainResult
   1996 WalkChainUsers(const SDNode *ChainedNode,
   1997                SmallVectorImpl<SDNode*> &ChainedNodesInPattern,
   1998                SmallVectorImpl<SDNode*> &InteriorChainedNodes) {
   1999   ChainResult Result = CR_Simple;
   2000 
   2001   for (SDNode::use_iterator UI = ChainedNode->use_begin(),
   2002          E = ChainedNode->use_end(); UI != E; ++UI) {
   2003     // Make sure the use is of the chain, not some other value we produce.
   2004     if (UI.getUse().getValueType() != MVT::Other) continue;
   2005 
   2006     SDNode *User = *UI;
   2007 
   2008     if (User->getOpcode() == ISD::HANDLENODE)  // Root of the graph.
   2009       continue;
   2010 
   2011     // If we see an already-selected machine node, then we've gone beyond the
   2012     // pattern that we're selecting down into the already selected chunk of the
   2013     // DAG.
   2014     unsigned UserOpcode = User->getOpcode();
   2015     if (User->isMachineOpcode() ||
   2016         UserOpcode == ISD::CopyToReg ||
   2017         UserOpcode == ISD::CopyFromReg ||
   2018         UserOpcode == ISD::INLINEASM ||
   2019         UserOpcode == ISD::EH_LABEL ||
   2020         UserOpcode == ISD::LIFETIME_START ||
   2021         UserOpcode == ISD::LIFETIME_END) {
   2022       // If their node ID got reset to -1 then they've already been selected.
   2023       // Treat them like a MachineOpcode.
   2024       if (User->getNodeId() == -1)
   2025         continue;
   2026     }
   2027 
   2028     // If we have a TokenFactor, we handle it specially.
   2029     if (User->getOpcode() != ISD::TokenFactor) {
   2030       // If the node isn't a token factor and isn't part of our pattern, then it
   2031       // must be a random chained node in between two nodes we're selecting.
   2032       // This happens when we have something like:
   2033       //   x = load ptr
   2034       //   call
   2035       //   y = x+4
   2036       //   store y -> ptr
   2037       // Because we structurally match the load/store as a read/modify/write,
   2038       // but the call is chained between them.  We cannot fold in this case
   2039       // because it would induce a cycle in the graph.
   2040       if (!std::count(ChainedNodesInPattern.begin(),
   2041                       ChainedNodesInPattern.end(), User))
   2042         return CR_InducesCycle;
   2043 
   2044       // Otherwise we found a node that is part of our pattern.  For example in:
   2045       //   x = load ptr
   2046       //   y = x+4
   2047       //   store y -> ptr
   2048       // This would happen when we're scanning down from the load and see the
   2049       // store as a user.  Record that there is a use of ChainedNode that is
   2050       // part of the pattern and keep scanning uses.
   2051       Result = CR_LeadsToInteriorNode;
   2052       InteriorChainedNodes.push_back(User);
   2053       continue;
   2054     }
   2055 
   2056     // If we found a TokenFactor, there are two cases to consider: first if the
   2057     // TokenFactor is just hanging "below" the pattern we're matching (i.e. no
   2058     // uses of the TF are in our pattern) we just want to ignore it.  Second,
   2059     // the TokenFactor can be sandwiched in between two chained nodes, like so:
   2060     //     [Load chain]
   2061     //         ^
   2062     //         |
   2063     //       [Load]
   2064     //       ^    ^
   2065     //       |    \                    DAG's like cheese
   2066     //      /       \                       do you?
   2067     //     /         |
   2068     // [TokenFactor] [Op]
   2069     //     ^          ^
   2070     //     |          |
   2071     //      \        /
   2072     //       \      /
   2073     //       [Store]
   2074     //
   2075     // In this case, the TokenFactor becomes part of our match and we rewrite it
   2076     // as a new TokenFactor.
   2077     //
   2078     // To distinguish these two cases, do a recursive walk down the uses.
   2079     switch (WalkChainUsers(User, ChainedNodesInPattern, InteriorChainedNodes)) {
   2080     case CR_Simple:
   2081       // If the uses of the TokenFactor are just already-selected nodes, ignore
   2082       // it, it is "below" our pattern.
   2083       continue;
   2084     case CR_InducesCycle:
   2085       // If the uses of the TokenFactor lead to nodes that are not part of our
   2086       // pattern that are not selected, folding would turn this into a cycle,
   2087       // bail out now.
   2088       return CR_InducesCycle;
   2089     case CR_LeadsToInteriorNode:
   2090       break;  // Otherwise, keep processing.
   2091     }
   2092 
   2093     // Okay, we know we're in the interesting interior case.  The TokenFactor
   2094     // is now going to be considered part of the pattern so that we rewrite its
   2095     // uses (it may have uses that are not part of the pattern) with the
   2096     // ultimate chain result of the generated code.  We will also add its chain
   2097     // inputs as inputs to the ultimate TokenFactor we create.
   2098     Result = CR_LeadsToInteriorNode;
   2099     ChainedNodesInPattern.push_back(User);
   2100     InteriorChainedNodes.push_back(User);
   2101     continue;
   2102   }
   2103 
   2104   return Result;
   2105 }
   2106 
   2107 /// HandleMergeInputChains - This implements the OPC_EmitMergeInputChains
   2108 /// operation for when the pattern matched at least one node with a chains.  The
   2109 /// input vector contains a list of all of the chained nodes that we match.  We
   2110 /// must determine if this is a valid thing to cover (i.e. matching it won't
   2111 /// induce cycles in the DAG) and if so, creating a TokenFactor node. that will
   2112 /// be used as the input node chain for the generated nodes.
   2113 static SDValue
   2114 HandleMergeInputChains(SmallVectorImpl<SDNode*> &ChainNodesMatched,
   2115                        SelectionDAG *CurDAG) {
   2116   // Walk all of the chained nodes we've matched, recursively scanning down the
   2117   // users of the chain result. This adds any TokenFactor nodes that are caught
   2118   // in between chained nodes to the chained and interior nodes list.
   2119   SmallVector<SDNode*, 3> InteriorChainedNodes;
   2120   for (unsigned i = 0, e = ChainNodesMatched.size(); i != e; ++i) {
   2121     if (WalkChainUsers(ChainNodesMatched[i], ChainNodesMatched,
   2122                        InteriorChainedNodes) == CR_InducesCycle)
   2123       return SDValue(); // Would induce a cycle.
   2124   }
   2125 
   2126   // Okay, we have walked all the matched nodes and collected TokenFactor nodes
   2127   // that we are interested in.  Form our input TokenFactor node.
   2128   SmallVector<SDValue, 3> InputChains;
   2129   for (unsigned i = 0, e = ChainNodesMatched.size(); i != e; ++i) {
   2130     // Add the input chain of this node to the InputChains list (which will be
   2131     // the operands of the generated TokenFactor) if it's not an interior node.
   2132     SDNode *N = ChainNodesMatched[i];
   2133     if (N->getOpcode() != ISD::TokenFactor) {
   2134       if (std::count(InteriorChainedNodes.begin(),InteriorChainedNodes.end(),N))
   2135         continue;
   2136 
   2137       // Otherwise, add the input chain.
   2138       SDValue InChain = ChainNodesMatched[i]->getOperand(0);
   2139       assert(InChain.getValueType() == MVT::Other && "Not a chain");
   2140       InputChains.push_back(InChain);
   2141       continue;
   2142     }
   2143 
   2144     // If we have a token factor, we want to add all inputs of the token factor
   2145     // that are not part of the pattern we're matching.
   2146     for (unsigned op = 0, e = N->getNumOperands(); op != e; ++op) {
   2147       if (!std::count(ChainNodesMatched.begin(), ChainNodesMatched.end(),
   2148                       N->getOperand(op).getNode()))
   2149         InputChains.push_back(N->getOperand(op));
   2150     }
   2151   }
   2152 
   2153   if (InputChains.size() == 1)
   2154     return InputChains[0];
   2155   return CurDAG->getNode(ISD::TokenFactor, SDLoc(ChainNodesMatched[0]),
   2156                          MVT::Other, InputChains);
   2157 }
   2158 
   2159 /// MorphNode - Handle morphing a node in place for the selector.
   2160 SDNode *SelectionDAGISel::
   2161 MorphNode(SDNode *Node, unsigned TargetOpc, SDVTList VTList,
   2162           ArrayRef<SDValue> Ops, unsigned EmitNodeInfo) {
   2163   // It is possible we're using MorphNodeTo to replace a node with no
   2164   // normal results with one that has a normal result (or we could be
   2165   // adding a chain) and the input could have glue and chains as well.
   2166   // In this case we need to shift the operands down.
   2167   // FIXME: This is a horrible hack and broken in obscure cases, no worse
   2168   // than the old isel though.
   2169   int OldGlueResultNo = -1, OldChainResultNo = -1;
   2170 
   2171   unsigned NTMNumResults = Node->getNumValues();
   2172   if (Node->getValueType(NTMNumResults-1) == MVT::Glue) {
   2173     OldGlueResultNo = NTMNumResults-1;
   2174     if (NTMNumResults != 1 &&
   2175         Node->getValueType(NTMNumResults-2) == MVT::Other)
   2176       OldChainResultNo = NTMNumResults-2;
   2177   } else if (Node->getValueType(NTMNumResults-1) == MVT::Other)
   2178     OldChainResultNo = NTMNumResults-1;
   2179 
   2180   // Call the underlying SelectionDAG routine to do the transmogrification. Note
   2181   // that this deletes operands of the old node that become dead.
   2182   SDNode *Res = CurDAG->MorphNodeTo(Node, ~TargetOpc, VTList, Ops);
   2183 
   2184   // MorphNodeTo can operate in two ways: if an existing node with the
   2185   // specified operands exists, it can just return it.  Otherwise, it
   2186   // updates the node in place to have the requested operands.
   2187   if (Res == Node) {
   2188     // If we updated the node in place, reset the node ID.  To the isel,
   2189     // this should be just like a newly allocated machine node.
   2190     Res->setNodeId(-1);
   2191   }
   2192 
   2193   unsigned ResNumResults = Res->getNumValues();
   2194   // Move the glue if needed.
   2195   if ((EmitNodeInfo & OPFL_GlueOutput) && OldGlueResultNo != -1 &&
   2196       (unsigned)OldGlueResultNo != ResNumResults-1)
   2197     CurDAG->ReplaceAllUsesOfValueWith(SDValue(Node, OldGlueResultNo),
   2198                                       SDValue(Res, ResNumResults-1));
   2199 
   2200   if ((EmitNodeInfo & OPFL_GlueOutput) != 0)
   2201     --ResNumResults;
   2202 
   2203   // Move the chain reference if needed.
   2204   if ((EmitNodeInfo & OPFL_Chain) && OldChainResultNo != -1 &&
   2205       (unsigned)OldChainResultNo != ResNumResults-1)
   2206     CurDAG->ReplaceAllUsesOfValueWith(SDValue(Node, OldChainResultNo),
   2207                                       SDValue(Res, ResNumResults-1));
   2208 
   2209   // Otherwise, no replacement happened because the node already exists. Replace
   2210   // Uses of the old node with the new one.
   2211   if (Res != Node)
   2212     CurDAG->ReplaceAllUsesWith(Node, Res);
   2213 
   2214   return Res;
   2215 }
   2216 
   2217 /// CheckSame - Implements OP_CheckSame.
   2218 LLVM_ATTRIBUTE_ALWAYS_INLINE static bool
   2219 CheckSame(const unsigned char *MatcherTable, unsigned &MatcherIndex,
   2220           SDValue N,
   2221           const SmallVectorImpl<std::pair<SDValue, SDNode*> > &RecordedNodes) {
   2222   // Accept if it is exactly the same as a previously recorded node.
   2223   unsigned RecNo = MatcherTable[MatcherIndex++];
   2224   assert(RecNo < RecordedNodes.size() && "Invalid CheckSame");
   2225   return N == RecordedNodes[RecNo].first;
   2226 }
   2227 
   2228 /// CheckChildSame - Implements OP_CheckChildXSame.
   2229 LLVM_ATTRIBUTE_ALWAYS_INLINE static bool
   2230 CheckChildSame(const unsigned char *MatcherTable, unsigned &MatcherIndex,
   2231              SDValue N,
   2232              const SmallVectorImpl<std::pair<SDValue, SDNode*> > &RecordedNodes,
   2233              unsigned ChildNo) {
   2234   if (ChildNo >= N.getNumOperands())
   2235     return false;  // Match fails if out of range child #.
   2236   return ::CheckSame(MatcherTable, MatcherIndex, N.getOperand(ChildNo),
   2237                      RecordedNodes);
   2238 }
   2239 
   2240 /// CheckPatternPredicate - Implements OP_CheckPatternPredicate.
   2241 LLVM_ATTRIBUTE_ALWAYS_INLINE static bool
   2242 CheckPatternPredicate(const unsigned char *MatcherTable, unsigned &MatcherIndex,
   2243                       const SelectionDAGISel &SDISel) {
   2244   return SDISel.CheckPatternPredicate(MatcherTable[MatcherIndex++]);
   2245 }
   2246 
   2247 /// CheckNodePredicate - Implements OP_CheckNodePredicate.
   2248 LLVM_ATTRIBUTE_ALWAYS_INLINE static bool
   2249 CheckNodePredicate(const unsigned char *MatcherTable, unsigned &MatcherIndex,
   2250                    const SelectionDAGISel &SDISel, SDNode *N) {
   2251   return SDISel.CheckNodePredicate(N, MatcherTable[MatcherIndex++]);
   2252 }
   2253 
   2254 LLVM_ATTRIBUTE_ALWAYS_INLINE static bool
   2255 CheckOpcode(const unsigned char *MatcherTable, unsigned &MatcherIndex,
   2256             SDNode *N) {
   2257   uint16_t Opc = MatcherTable[MatcherIndex++];
   2258   Opc |= (unsigned short)MatcherTable[MatcherIndex++] << 8;
   2259   return N->getOpcode() == Opc;
   2260 }
   2261 
   2262 LLVM_ATTRIBUTE_ALWAYS_INLINE static bool
   2263 CheckType(const unsigned char *MatcherTable, unsigned &MatcherIndex,
   2264           SDValue N, const TargetLowering *TLI) {
   2265   MVT::SimpleValueType VT = (MVT::SimpleValueType)MatcherTable[MatcherIndex++];
   2266   if (N.getValueType() == VT) return true;
   2267 
   2268   // Handle the case when VT is iPTR.
   2269   return VT == MVT::iPTR && N.getValueType() == TLI->getPointerTy();
   2270 }
   2271 
   2272 LLVM_ATTRIBUTE_ALWAYS_INLINE static bool
   2273 CheckChildType(const unsigned char *MatcherTable, unsigned &MatcherIndex,
   2274                SDValue N, const TargetLowering *TLI, unsigned ChildNo) {
   2275   if (ChildNo >= N.getNumOperands())
   2276     return false;  // Match fails if out of range child #.
   2277   return ::CheckType(MatcherTable, MatcherIndex, N.getOperand(ChildNo), TLI);
   2278 }
   2279 
   2280 LLVM_ATTRIBUTE_ALWAYS_INLINE static bool
   2281 CheckCondCode(const unsigned char *MatcherTable, unsigned &MatcherIndex,
   2282               SDValue N) {
   2283   return cast<CondCodeSDNode>(N)->get() ==
   2284       (ISD::CondCode)MatcherTable[MatcherIndex++];
   2285 }
   2286 
   2287 LLVM_ATTRIBUTE_ALWAYS_INLINE static bool
   2288 CheckValueType(const unsigned char *MatcherTable, unsigned &MatcherIndex,
   2289                SDValue N, const TargetLowering *TLI) {
   2290   MVT::SimpleValueType VT = (MVT::SimpleValueType)MatcherTable[MatcherIndex++];
   2291   if (cast<VTSDNode>(N)->getVT() == VT)
   2292     return true;
   2293 
   2294   // Handle the case when VT is iPTR.
   2295   return VT == MVT::iPTR && cast<VTSDNode>(N)->getVT() == TLI->getPointerTy();
   2296 }
   2297 
   2298 LLVM_ATTRIBUTE_ALWAYS_INLINE static bool
   2299 CheckInteger(const unsigned char *MatcherTable, unsigned &MatcherIndex,
   2300              SDValue N) {
   2301   int64_t Val = MatcherTable[MatcherIndex++];
   2302   if (Val & 128)
   2303     Val = GetVBR(Val, MatcherTable, MatcherIndex);
   2304 
   2305   ConstantSDNode *C = dyn_cast<ConstantSDNode>(N);
   2306   return C && C->getSExtValue() == Val;
   2307 }
   2308 
   2309 LLVM_ATTRIBUTE_ALWAYS_INLINE static bool
   2310 CheckChildInteger(const unsigned char *MatcherTable, unsigned &MatcherIndex,
   2311                   SDValue N, unsigned ChildNo) {
   2312   if (ChildNo >= N.getNumOperands())
   2313     return false;  // Match fails if out of range child #.
   2314   return ::CheckInteger(MatcherTable, MatcherIndex, N.getOperand(ChildNo));
   2315 }
   2316 
   2317 LLVM_ATTRIBUTE_ALWAYS_INLINE static bool
   2318 CheckAndImm(const unsigned char *MatcherTable, unsigned &MatcherIndex,
   2319             SDValue N, const SelectionDAGISel &SDISel) {
   2320   int64_t Val = MatcherTable[MatcherIndex++];
   2321   if (Val & 128)
   2322     Val = GetVBR(Val, MatcherTable, MatcherIndex);
   2323 
   2324   if (N->getOpcode() != ISD::AND) return false;
   2325 
   2326   ConstantSDNode *C = dyn_cast<ConstantSDNode>(N->getOperand(1));
   2327   return C && SDISel.CheckAndMask(N.getOperand(0), C, Val);
   2328 }
   2329 
   2330 LLVM_ATTRIBUTE_ALWAYS_INLINE static bool
   2331 CheckOrImm(const unsigned char *MatcherTable, unsigned &MatcherIndex,
   2332            SDValue N, const SelectionDAGISel &SDISel) {
   2333   int64_t Val = MatcherTable[MatcherIndex++];
   2334   if (Val & 128)
   2335     Val = GetVBR(Val, MatcherTable, MatcherIndex);
   2336 
   2337   if (N->getOpcode() != ISD::OR) return false;
   2338 
   2339   ConstantSDNode *C = dyn_cast<ConstantSDNode>(N->getOperand(1));
   2340   return C && SDISel.CheckOrMask(N.getOperand(0), C, Val);
   2341 }
   2342 
   2343 /// IsPredicateKnownToFail - If we know how and can do so without pushing a
   2344 /// scope, evaluate the current node.  If the current predicate is known to
   2345 /// fail, set Result=true and return anything.  If the current predicate is
   2346 /// known to pass, set Result=false and return the MatcherIndex to continue
   2347 /// with.  If the current predicate is unknown, set Result=false and return the
   2348 /// MatcherIndex to continue with.
   2349 static unsigned IsPredicateKnownToFail(const unsigned char *Table,
   2350                                        unsigned Index, SDValue N,
   2351                                        bool &Result,
   2352                                        const SelectionDAGISel &SDISel,
   2353                  SmallVectorImpl<std::pair<SDValue, SDNode*> > &RecordedNodes) {
   2354   switch (Table[Index++]) {
   2355   default:
   2356     Result = false;
   2357     return Index-1;  // Could not evaluate this predicate.
   2358   case SelectionDAGISel::OPC_CheckSame:
   2359     Result = !::CheckSame(Table, Index, N, RecordedNodes);
   2360     return Index;
   2361   case SelectionDAGISel::OPC_CheckChild0Same:
   2362   case SelectionDAGISel::OPC_CheckChild1Same:
   2363   case SelectionDAGISel::OPC_CheckChild2Same:
   2364   case SelectionDAGISel::OPC_CheckChild3Same:
   2365     Result = !::CheckChildSame(Table, Index, N, RecordedNodes,
   2366                         Table[Index-1] - SelectionDAGISel::OPC_CheckChild0Same);
   2367     return Index;
   2368   case SelectionDAGISel::OPC_CheckPatternPredicate:
   2369     Result = !::CheckPatternPredicate(Table, Index, SDISel);
   2370     return Index;
   2371   case SelectionDAGISel::OPC_CheckPredicate:
   2372     Result = !::CheckNodePredicate(Table, Index, SDISel, N.getNode());
   2373     return Index;
   2374   case SelectionDAGISel::OPC_CheckOpcode:
   2375     Result = !::CheckOpcode(Table, Index, N.getNode());
   2376     return Index;
   2377   case SelectionDAGISel::OPC_CheckType:
   2378     Result = !::CheckType(Table, Index, N, SDISel.getTargetLowering());
   2379     return Index;
   2380   case SelectionDAGISel::OPC_CheckChild0Type:
   2381   case SelectionDAGISel::OPC_CheckChild1Type:
   2382   case SelectionDAGISel::OPC_CheckChild2Type:
   2383   case SelectionDAGISel::OPC_CheckChild3Type:
   2384   case SelectionDAGISel::OPC_CheckChild4Type:
   2385   case SelectionDAGISel::OPC_CheckChild5Type:
   2386   case SelectionDAGISel::OPC_CheckChild6Type:
   2387   case SelectionDAGISel::OPC_CheckChild7Type:
   2388     Result = !::CheckChildType(Table, Index, N, SDISel.getTargetLowering(),
   2389                         Table[Index-1] - SelectionDAGISel::OPC_CheckChild0Type);
   2390     return Index;
   2391   case SelectionDAGISel::OPC_CheckCondCode:
   2392     Result = !::CheckCondCode(Table, Index, N);
   2393     return Index;
   2394   case SelectionDAGISel::OPC_CheckValueType:
   2395     Result = !::CheckValueType(Table, Index, N, SDISel.getTargetLowering());
   2396     return Index;
   2397   case SelectionDAGISel::OPC_CheckInteger:
   2398     Result = !::CheckInteger(Table, Index, N);
   2399     return Index;
   2400   case SelectionDAGISel::OPC_CheckChild0Integer:
   2401   case SelectionDAGISel::OPC_CheckChild1Integer:
   2402   case SelectionDAGISel::OPC_CheckChild2Integer:
   2403   case SelectionDAGISel::OPC_CheckChild3Integer:
   2404   case SelectionDAGISel::OPC_CheckChild4Integer:
   2405     Result = !::CheckChildInteger(Table, Index, N,
   2406                      Table[Index-1] - SelectionDAGISel::OPC_CheckChild0Integer);
   2407     return Index;
   2408   case SelectionDAGISel::OPC_CheckAndImm:
   2409     Result = !::CheckAndImm(Table, Index, N, SDISel);
   2410     return Index;
   2411   case SelectionDAGISel::OPC_CheckOrImm:
   2412     Result = !::CheckOrImm(Table, Index, N, SDISel);
   2413     return Index;
   2414   }
   2415 }
   2416 
   2417 namespace {
   2418 
   2419 struct MatchScope {
   2420   /// FailIndex - If this match fails, this is the index to continue with.
   2421   unsigned FailIndex;
   2422 
   2423   /// NodeStack - The node stack when the scope was formed.
   2424   SmallVector<SDValue, 4> NodeStack;
   2425 
   2426   /// NumRecordedNodes - The number of recorded nodes when the scope was formed.
   2427   unsigned NumRecordedNodes;
   2428 
   2429   /// NumMatchedMemRefs - The number of matched memref entries.
   2430   unsigned NumMatchedMemRefs;
   2431 
   2432   /// InputChain/InputGlue - The current chain/glue
   2433   SDValue InputChain, InputGlue;
   2434 
   2435   /// HasChainNodesMatched - True if the ChainNodesMatched list is non-empty.
   2436   bool HasChainNodesMatched, HasGlueResultNodesMatched;
   2437 };
   2438 
   2439 }
   2440 
   2441 SDNode *SelectionDAGISel::
   2442 SelectCodeCommon(SDNode *NodeToMatch, const unsigned char *MatcherTable,
   2443                  unsigned TableSize) {
   2444   // FIXME: Should these even be selected?  Handle these cases in the caller?
   2445   switch (NodeToMatch->getOpcode()) {
   2446   default:
   2447     break;
   2448   case ISD::EntryToken:       // These nodes remain the same.
   2449   case ISD::BasicBlock:
   2450   case ISD::Register:
   2451   case ISD::RegisterMask:
   2452   //case ISD::VALUETYPE:
   2453   //case ISD::CONDCODE:
   2454   case ISD::HANDLENODE:
   2455   case ISD::MDNODE_SDNODE:
   2456   case ISD::TargetConstant:
   2457   case ISD::TargetConstantFP:
   2458   case ISD::TargetConstantPool:
   2459   case ISD::TargetFrameIndex:
   2460   case ISD::TargetExternalSymbol:
   2461   case ISD::TargetBlockAddress:
   2462   case ISD::TargetJumpTable:
   2463   case ISD::TargetGlobalTLSAddress:
   2464   case ISD::TargetGlobalAddress:
   2465   case ISD::TokenFactor:
   2466   case ISD::CopyFromReg:
   2467   case ISD::CopyToReg:
   2468   case ISD::EH_LABEL:
   2469   case ISD::LIFETIME_START:
   2470   case ISD::LIFETIME_END:
   2471     NodeToMatch->setNodeId(-1); // Mark selected.
   2472     return nullptr;
   2473   case ISD::AssertSext:
   2474   case ISD::AssertZext:
   2475     CurDAG->ReplaceAllUsesOfValueWith(SDValue(NodeToMatch, 0),
   2476                                       NodeToMatch->getOperand(0));
   2477     return nullptr;
   2478   case ISD::INLINEASM: return Select_INLINEASM(NodeToMatch);
   2479   case ISD::READ_REGISTER: return Select_READ_REGISTER(NodeToMatch);
   2480   case ISD::WRITE_REGISTER: return Select_WRITE_REGISTER(NodeToMatch);
   2481   case ISD::UNDEF:     return Select_UNDEF(NodeToMatch);
   2482   }
   2483 
   2484   assert(!NodeToMatch->isMachineOpcode() && "Node already selected!");
   2485 
   2486   // Set up the node stack with NodeToMatch as the only node on the stack.
   2487   SmallVector<SDValue, 8> NodeStack;
   2488   SDValue N = SDValue(NodeToMatch, 0);
   2489   NodeStack.push_back(N);
   2490 
   2491   // MatchScopes - Scopes used when matching, if a match failure happens, this
   2492   // indicates where to continue checking.
   2493   SmallVector<MatchScope, 8> MatchScopes;
   2494 
   2495   // RecordedNodes - This is the set of nodes that have been recorded by the
   2496   // state machine.  The second value is the parent of the node, or null if the
   2497   // root is recorded.
   2498   SmallVector<std::pair<SDValue, SDNode*>, 8> RecordedNodes;
   2499 
   2500   // MatchedMemRefs - This is the set of MemRef's we've seen in the input
   2501   // pattern.
   2502   SmallVector<MachineMemOperand*, 2> MatchedMemRefs;
   2503 
   2504   // These are the current input chain and glue for use when generating nodes.
   2505   // Various Emit operations change these.  For example, emitting a copytoreg
   2506   // uses and updates these.
   2507   SDValue InputChain, InputGlue;
   2508 
   2509   // ChainNodesMatched - If a pattern matches nodes that have input/output
   2510   // chains, the OPC_EmitMergeInputChains operation is emitted which indicates
   2511   // which ones they are.  The result is captured into this list so that we can
   2512   // update the chain results when the pattern is complete.
   2513   SmallVector<SDNode*, 3> ChainNodesMatched;
   2514   SmallVector<SDNode*, 3> GlueResultNodesMatched;
   2515 
   2516   DEBUG(dbgs() << "ISEL: Starting pattern match on root node: ";
   2517         NodeToMatch->dump(CurDAG);
   2518         dbgs() << '\n');
   2519 
   2520   // Determine where to start the interpreter.  Normally we start at opcode #0,
   2521   // but if the state machine starts with an OPC_SwitchOpcode, then we
   2522   // accelerate the first lookup (which is guaranteed to be hot) with the
   2523   // OpcodeOffset table.
   2524   unsigned MatcherIndex = 0;
   2525 
   2526   if (!OpcodeOffset.empty()) {
   2527     // Already computed the OpcodeOffset table, just index into it.
   2528     if (N.getOpcode() < OpcodeOffset.size())
   2529       MatcherIndex = OpcodeOffset[N.getOpcode()];
   2530     DEBUG(dbgs() << "  Initial Opcode index to " << MatcherIndex << "\n");
   2531 
   2532   } else if (MatcherTable[0] == OPC_SwitchOpcode) {
   2533     // Otherwise, the table isn't computed, but the state machine does start
   2534     // with an OPC_SwitchOpcode instruction.  Populate the table now, since this
   2535     // is the first time we're selecting an instruction.
   2536     unsigned Idx = 1;
   2537     while (1) {
   2538       // Get the size of this case.
   2539       unsigned CaseSize = MatcherTable[Idx++];
   2540       if (CaseSize & 128)
   2541         CaseSize = GetVBR(CaseSize, MatcherTable, Idx);
   2542       if (CaseSize == 0) break;
   2543 
   2544       // Get the opcode, add the index to the table.
   2545       uint16_t Opc = MatcherTable[Idx++];
   2546       Opc |= (unsigned short)MatcherTable[Idx++] << 8;
   2547       if (Opc >= OpcodeOffset.size())
   2548         OpcodeOffset.resize((Opc+1)*2);
   2549       OpcodeOffset[Opc] = Idx;
   2550       Idx += CaseSize;
   2551     }
   2552 
   2553     // Okay, do the lookup for the first opcode.
   2554     if (N.getOpcode() < OpcodeOffset.size())
   2555       MatcherIndex = OpcodeOffset[N.getOpcode()];
   2556   }
   2557 
   2558   while (1) {
   2559     assert(MatcherIndex < TableSize && "Invalid index");
   2560 #ifndef NDEBUG
   2561     unsigned CurrentOpcodeIndex = MatcherIndex;
   2562 #endif
   2563     BuiltinOpcodes Opcode = (BuiltinOpcodes)MatcherTable[MatcherIndex++];
   2564     switch (Opcode) {
   2565     case OPC_Scope: {
   2566       // Okay, the semantics of this operation are that we should push a scope
   2567       // then evaluate the first child.  However, pushing a scope only to have
   2568       // the first check fail (which then pops it) is inefficient.  If we can
   2569       // determine immediately that the first check (or first several) will
   2570       // immediately fail, don't even bother pushing a scope for them.
   2571       unsigned FailIndex;
   2572 
   2573       while (1) {
   2574         unsigned NumToSkip = MatcherTable[MatcherIndex++];
   2575         if (NumToSkip & 128)
   2576           NumToSkip = GetVBR(NumToSkip, MatcherTable, MatcherIndex);
   2577         // Found the end of the scope with no match.
   2578         if (NumToSkip == 0) {
   2579           FailIndex = 0;
   2580           break;
   2581         }
   2582 
   2583         FailIndex = MatcherIndex+NumToSkip;
   2584 
   2585         unsigned MatcherIndexOfPredicate = MatcherIndex;
   2586         (void)MatcherIndexOfPredicate; // silence warning.
   2587 
   2588         // If we can't evaluate this predicate without pushing a scope (e.g. if
   2589         // it is a 'MoveParent') or if the predicate succeeds on this node, we
   2590         // push the scope and evaluate the full predicate chain.
   2591         bool Result;
   2592         MatcherIndex = IsPredicateKnownToFail(MatcherTable, MatcherIndex, N,
   2593                                               Result, *this, RecordedNodes);
   2594         if (!Result)
   2595           break;
   2596 
   2597         DEBUG(dbgs() << "  Skipped scope entry (due to false predicate) at "
   2598                      << "index " << MatcherIndexOfPredicate
   2599                      << ", continuing at " << FailIndex << "\n");
   2600         ++NumDAGIselRetries;
   2601 
   2602         // Otherwise, we know that this case of the Scope is guaranteed to fail,
   2603         // move to the next case.
   2604         MatcherIndex = FailIndex;
   2605       }
   2606 
   2607       // If the whole scope failed to match, bail.
   2608       if (FailIndex == 0) break;
   2609 
   2610       // Push a MatchScope which indicates where to go if the first child fails
   2611       // to match.
   2612       MatchScope NewEntry;
   2613       NewEntry.FailIndex = FailIndex;
   2614       NewEntry.NodeStack.append(NodeStack.begin(), NodeStack.end());
   2615       NewEntry.NumRecordedNodes = RecordedNodes.size();
   2616       NewEntry.NumMatchedMemRefs = MatchedMemRefs.size();
   2617       NewEntry.InputChain = InputChain;
   2618       NewEntry.InputGlue = InputGlue;
   2619       NewEntry.HasChainNodesMatched = !ChainNodesMatched.empty();
   2620       NewEntry.HasGlueResultNodesMatched = !GlueResultNodesMatched.empty();
   2621       MatchScopes.push_back(NewEntry);
   2622       continue;
   2623     }
   2624     case OPC_RecordNode: {
   2625       // Remember this node, it may end up being an operand in the pattern.
   2626       SDNode *Parent = nullptr;
   2627       if (NodeStack.size() > 1)
   2628         Parent = NodeStack[NodeStack.size()-2].getNode();
   2629       RecordedNodes.push_back(std::make_pair(N, Parent));
   2630       continue;
   2631     }
   2632 
   2633     case OPC_RecordChild0: case OPC_RecordChild1:
   2634     case OPC_RecordChild2: case OPC_RecordChild3:
   2635     case OPC_RecordChild4: case OPC_RecordChild5:
   2636     case OPC_RecordChild6: case OPC_RecordChild7: {
   2637       unsigned ChildNo = Opcode-OPC_RecordChild0;
   2638       if (ChildNo >= N.getNumOperands())
   2639         break;  // Match fails if out of range child #.
   2640 
   2641       RecordedNodes.push_back(std::make_pair(N->getOperand(ChildNo),
   2642                                              N.getNode()));
   2643       continue;
   2644     }
   2645     case OPC_RecordMemRef:
   2646       MatchedMemRefs.push_back(cast<MemSDNode>(N)->getMemOperand());
   2647       continue;
   2648 
   2649     case OPC_CaptureGlueInput:
   2650       // If the current node has an input glue, capture it in InputGlue.
   2651       if (N->getNumOperands() != 0 &&
   2652           N->getOperand(N->getNumOperands()-1).getValueType() == MVT::Glue)
   2653         InputGlue = N->getOperand(N->getNumOperands()-1);
   2654       continue;
   2655 
   2656     case OPC_MoveChild: {
   2657       unsigned ChildNo = MatcherTable[MatcherIndex++];
   2658       if (ChildNo >= N.getNumOperands())
   2659         break;  // Match fails if out of range child #.
   2660       N = N.getOperand(ChildNo);
   2661       NodeStack.push_back(N);
   2662       continue;
   2663     }
   2664 
   2665     case OPC_MoveParent:
   2666       // Pop the current node off the NodeStack.
   2667       NodeStack.pop_back();
   2668       assert(!NodeStack.empty() && "Node stack imbalance!");
   2669       N = NodeStack.back();
   2670       continue;
   2671 
   2672     case OPC_CheckSame:
   2673       if (!::CheckSame(MatcherTable, MatcherIndex, N, RecordedNodes)) break;
   2674       continue;
   2675 
   2676     case OPC_CheckChild0Same: case OPC_CheckChild1Same:
   2677     case OPC_CheckChild2Same: case OPC_CheckChild3Same:
   2678       if (!::CheckChildSame(MatcherTable, MatcherIndex, N, RecordedNodes,
   2679                             Opcode-OPC_CheckChild0Same))
   2680         break;
   2681       continue;
   2682 
   2683     case OPC_CheckPatternPredicate:
   2684       if (!::CheckPatternPredicate(MatcherTable, MatcherIndex, *this)) break;
   2685       continue;
   2686     case OPC_CheckPredicate:
   2687       if (!::CheckNodePredicate(MatcherTable, MatcherIndex, *this,
   2688                                 N.getNode()))
   2689         break;
   2690       continue;
   2691     case OPC_CheckComplexPat: {
   2692       unsigned CPNum = MatcherTable[MatcherIndex++];
   2693       unsigned RecNo = MatcherTable[MatcherIndex++];
   2694       assert(RecNo < RecordedNodes.size() && "Invalid CheckComplexPat");
   2695       if (!CheckComplexPattern(NodeToMatch, RecordedNodes[RecNo].second,
   2696                                RecordedNodes[RecNo].first, CPNum,
   2697                                RecordedNodes))
   2698         break;
   2699       continue;
   2700     }
   2701     case OPC_CheckOpcode:
   2702       if (!::CheckOpcode(MatcherTable, MatcherIndex, N.getNode())) break;
   2703       continue;
   2704 
   2705     case OPC_CheckType:
   2706       if (!::CheckType(MatcherTable, MatcherIndex, N, getTargetLowering()))
   2707         break;
   2708       continue;
   2709 
   2710     case OPC_SwitchOpcode: {
   2711       unsigned CurNodeOpcode = N.getOpcode();
   2712       unsigned SwitchStart = MatcherIndex-1; (void)SwitchStart;
   2713       unsigned CaseSize;
   2714       while (1) {
   2715         // Get the size of this case.
   2716         CaseSize = MatcherTable[MatcherIndex++];
   2717         if (CaseSize & 128)
   2718           CaseSize = GetVBR(CaseSize, MatcherTable, MatcherIndex);
   2719         if (CaseSize == 0) break;
   2720 
   2721         uint16_t Opc = MatcherTable[MatcherIndex++];
   2722         Opc |= (unsigned short)MatcherTable[MatcherIndex++] << 8;
   2723 
   2724         // If the opcode matches, then we will execute this case.
   2725         if (CurNodeOpcode == Opc)
   2726           break;
   2727 
   2728         // Otherwise, skip over this case.
   2729         MatcherIndex += CaseSize;
   2730       }
   2731 
   2732       // If no cases matched, bail out.
   2733       if (CaseSize == 0) break;
   2734 
   2735       // Otherwise, execute the case we found.
   2736       DEBUG(dbgs() << "  OpcodeSwitch from " << SwitchStart
   2737                    << " to " << MatcherIndex << "\n");
   2738       continue;
   2739     }
   2740 
   2741     case OPC_SwitchType: {
   2742       MVT CurNodeVT = N.getSimpleValueType();
   2743       unsigned SwitchStart = MatcherIndex-1; (void)SwitchStart;
   2744       unsigned CaseSize;
   2745       while (1) {
   2746         // Get the size of this case.
   2747         CaseSize = MatcherTable[MatcherIndex++];
   2748         if (CaseSize & 128)
   2749           CaseSize = GetVBR(CaseSize, MatcherTable, MatcherIndex);
   2750         if (CaseSize == 0) break;
   2751 
   2752         MVT CaseVT = (MVT::SimpleValueType)MatcherTable[MatcherIndex++];
   2753         if (CaseVT == MVT::iPTR)
   2754           CaseVT = getTargetLowering()->getPointerTy();
   2755 
   2756         // If the VT matches, then we will execute this case.
   2757         if (CurNodeVT == CaseVT)
   2758           break;
   2759 
   2760         // Otherwise, skip over this case.
   2761         MatcherIndex += CaseSize;
   2762       }
   2763 
   2764       // If no cases matched, bail out.
   2765       if (CaseSize == 0) break;
   2766 
   2767       // Otherwise, execute the case we found.
   2768       DEBUG(dbgs() << "  TypeSwitch[" << EVT(CurNodeVT).getEVTString()
   2769                    << "] from " << SwitchStart << " to " << MatcherIndex<<'\n');
   2770       continue;
   2771     }
   2772     case OPC_CheckChild0Type: case OPC_CheckChild1Type:
   2773     case OPC_CheckChild2Type: case OPC_CheckChild3Type:
   2774     case OPC_CheckChild4Type: case OPC_CheckChild5Type:
   2775     case OPC_CheckChild6Type: case OPC_CheckChild7Type:
   2776       if (!::CheckChildType(MatcherTable, MatcherIndex, N, getTargetLowering(),
   2777                             Opcode-OPC_CheckChild0Type))
   2778         break;
   2779       continue;
   2780     case OPC_CheckCondCode:
   2781       if (!::CheckCondCode(MatcherTable, MatcherIndex, N)) break;
   2782       continue;
   2783     case OPC_CheckValueType:
   2784       if (!::CheckValueType(MatcherTable, MatcherIndex, N, getTargetLowering()))
   2785         break;
   2786       continue;
   2787     case OPC_CheckInteger:
   2788       if (!::CheckInteger(MatcherTable, MatcherIndex, N)) break;
   2789       continue;
   2790     case OPC_CheckChild0Integer: case OPC_CheckChild1Integer:
   2791     case OPC_CheckChild2Integer: case OPC_CheckChild3Integer:
   2792     case OPC_CheckChild4Integer:
   2793       if (!::CheckChildInteger(MatcherTable, MatcherIndex, N,
   2794                                Opcode-OPC_CheckChild0Integer)) break;
   2795       continue;
   2796     case OPC_CheckAndImm:
   2797       if (!::CheckAndImm(MatcherTable, MatcherIndex, N, *this)) break;
   2798       continue;
   2799     case OPC_CheckOrImm:
   2800       if (!::CheckOrImm(MatcherTable, MatcherIndex, N, *this)) break;
   2801       continue;
   2802 
   2803     case OPC_CheckFoldableChainNode: {
   2804       assert(NodeStack.size() != 1 && "No parent node");
   2805       // Verify that all intermediate nodes between the root and this one have
   2806       // a single use.
   2807       bool HasMultipleUses = false;
   2808       for (unsigned i = 1, e = NodeStack.size()-1; i != e; ++i)
   2809         if (!NodeStack[i].hasOneUse()) {
   2810           HasMultipleUses = true;
   2811           break;
   2812         }
   2813       if (HasMultipleUses) break;
   2814 
   2815       // Check to see that the target thinks this is profitable to fold and that
   2816       // we can fold it without inducing cycles in the graph.
   2817       if (!IsProfitableToFold(N, NodeStack[NodeStack.size()-2].getNode(),
   2818                               NodeToMatch) ||
   2819           !IsLegalToFold(N, NodeStack[NodeStack.size()-2].getNode(),
   2820                          NodeToMatch, OptLevel,
   2821                          true/*We validate our own chains*/))
   2822         break;
   2823 
   2824       continue;
   2825     }
   2826     case OPC_EmitInteger: {
   2827       MVT::SimpleValueType VT =
   2828         (MVT::SimpleValueType)MatcherTable[MatcherIndex++];
   2829       int64_t Val = MatcherTable[MatcherIndex++];
   2830       if (Val & 128)
   2831         Val = GetVBR(Val, MatcherTable, MatcherIndex);
   2832       RecordedNodes.push_back(std::pair<SDValue, SDNode*>(
   2833                               CurDAG->getTargetConstant(Val, VT), nullptr));
   2834       continue;
   2835     }
   2836     case OPC_EmitRegister: {
   2837       MVT::SimpleValueType VT =
   2838         (MVT::SimpleValueType)MatcherTable[MatcherIndex++];
   2839       unsigned RegNo = MatcherTable[MatcherIndex++];
   2840       RecordedNodes.push_back(std::pair<SDValue, SDNode*>(
   2841                               CurDAG->getRegister(RegNo, VT), nullptr));
   2842       continue;
   2843     }
   2844     case OPC_EmitRegister2: {
   2845       // For targets w/ more than 256 register names, the register enum
   2846       // values are stored in two bytes in the matcher table (just like
   2847       // opcodes).
   2848       MVT::SimpleValueType VT =
   2849         (MVT::SimpleValueType)MatcherTable[MatcherIndex++];
   2850       unsigned RegNo = MatcherTable[MatcherIndex++];
   2851       RegNo |= MatcherTable[MatcherIndex++] << 8;
   2852       RecordedNodes.push_back(std::pair<SDValue, SDNode*>(
   2853                               CurDAG->getRegister(RegNo, VT), nullptr));
   2854       continue;
   2855     }
   2856 
   2857     case OPC_EmitConvertToTarget:  {
   2858       // Convert from IMM/FPIMM to target version.
   2859       unsigned RecNo = MatcherTable[MatcherIndex++];
   2860       assert(RecNo < RecordedNodes.size() && "Invalid EmitConvertToTarget");
   2861       SDValue Imm = RecordedNodes[RecNo].first;
   2862 
   2863       if (Imm->getOpcode() == ISD::Constant) {
   2864         const ConstantInt *Val=cast<ConstantSDNode>(Imm)->getConstantIntValue();
   2865         Imm = CurDAG->getConstant(*Val, Imm.getValueType(), true);
   2866       } else if (Imm->getOpcode() == ISD::ConstantFP) {
   2867         const ConstantFP *Val=cast<ConstantFPSDNode>(Imm)->getConstantFPValue();
   2868         Imm = CurDAG->getConstantFP(*Val, Imm.getValueType(), true);
   2869       }
   2870 
   2871       RecordedNodes.push_back(std::make_pair(Imm, RecordedNodes[RecNo].second));
   2872       continue;
   2873     }
   2874 
   2875     case OPC_EmitMergeInputChains1_0:    // OPC_EmitMergeInputChains, 1, 0
   2876     case OPC_EmitMergeInputChains1_1: {  // OPC_EmitMergeInputChains, 1, 1
   2877       // These are space-optimized forms of OPC_EmitMergeInputChains.
   2878       assert(!InputChain.getNode() &&
   2879              "EmitMergeInputChains should be the first chain producing node");
   2880       assert(ChainNodesMatched.empty() &&
   2881              "Should only have one EmitMergeInputChains per match");
   2882 
   2883       // Read all of the chained nodes.
   2884       unsigned RecNo = Opcode == OPC_EmitMergeInputChains1_1;
   2885       assert(RecNo < RecordedNodes.size() && "Invalid EmitMergeInputChains");
   2886       ChainNodesMatched.push_back(RecordedNodes[RecNo].first.getNode());
   2887 
   2888       // FIXME: What if other value results of the node have uses not matched
   2889       // by this pattern?
   2890       if (ChainNodesMatched.back() != NodeToMatch &&
   2891           !RecordedNodes[RecNo].first.hasOneUse()) {
   2892         ChainNodesMatched.clear();
   2893         break;
   2894       }
   2895 
   2896       // Merge the input chains if they are not intra-pattern references.
   2897       InputChain = HandleMergeInputChains(ChainNodesMatched, CurDAG);
   2898 
   2899       if (!InputChain.getNode())
   2900         break;  // Failed to merge.
   2901       continue;
   2902     }
   2903 
   2904     case OPC_EmitMergeInputChains: {
   2905       assert(!InputChain.getNode() &&
   2906              "EmitMergeInputChains should be the first chain producing node");
   2907       // This node gets a list of nodes we matched in the input that have
   2908       // chains.  We want to token factor all of the input chains to these nodes
   2909       // together.  However, if any of the input chains is actually one of the
   2910       // nodes matched in this pattern, then we have an intra-match reference.
   2911       // Ignore these because the newly token factored chain should not refer to
   2912       // the old nodes.
   2913       unsigned NumChains = MatcherTable[MatcherIndex++];
   2914       assert(NumChains != 0 && "Can't TF zero chains");
   2915 
   2916       assert(ChainNodesMatched.empty() &&
   2917              "Should only have one EmitMergeInputChains per match");
   2918 
   2919       // Read all of the chained nodes.
   2920       for (unsigned i = 0; i != NumChains; ++i) {
   2921         unsigned RecNo = MatcherTable[MatcherIndex++];
   2922         assert(RecNo < RecordedNodes.size() && "Invalid EmitMergeInputChains");
   2923         ChainNodesMatched.push_back(RecordedNodes[RecNo].first.getNode());
   2924 
   2925         // FIXME: What if other value results of the node have uses not matched
   2926         // by this pattern?
   2927         if (ChainNodesMatched.back() != NodeToMatch &&
   2928             !RecordedNodes[RecNo].first.hasOneUse()) {
   2929           ChainNodesMatched.clear();
   2930           break;
   2931         }
   2932       }
   2933 
   2934       // If the inner loop broke out, the match fails.
   2935       if (ChainNodesMatched.empty())
   2936         break;
   2937 
   2938       // Merge the input chains if they are not intra-pattern references.
   2939       InputChain = HandleMergeInputChains(ChainNodesMatched, CurDAG);
   2940 
   2941       if (!InputChain.getNode())
   2942         break;  // Failed to merge.
   2943 
   2944       continue;
   2945     }
   2946 
   2947     case OPC_EmitCopyToReg: {
   2948       unsigned RecNo = MatcherTable[MatcherIndex++];
   2949       assert(RecNo < RecordedNodes.size() && "Invalid EmitCopyToReg");
   2950       unsigned DestPhysReg = MatcherTable[MatcherIndex++];
   2951 
   2952       if (!InputChain.getNode())
   2953         InputChain = CurDAG->getEntryNode();
   2954 
   2955       InputChain = CurDAG->getCopyToReg(InputChain, SDLoc(NodeToMatch),
   2956                                         DestPhysReg, RecordedNodes[RecNo].first,
   2957                                         InputGlue);
   2958 
   2959       InputGlue = InputChain.getValue(1);
   2960       continue;
   2961     }
   2962 
   2963     case OPC_EmitNodeXForm: {
   2964       unsigned XFormNo = MatcherTable[MatcherIndex++];
   2965       unsigned RecNo = MatcherTable[MatcherIndex++];
   2966       assert(RecNo < RecordedNodes.size() && "Invalid EmitNodeXForm");
   2967       SDValue Res = RunSDNodeXForm(RecordedNodes[RecNo].first, XFormNo);
   2968       RecordedNodes.push_back(std::pair<SDValue,SDNode*>(Res, nullptr));
   2969       continue;
   2970     }
   2971 
   2972     case OPC_EmitNode:
   2973     case OPC_MorphNodeTo: {
   2974       uint16_t TargetOpc = MatcherTable[MatcherIndex++];
   2975       TargetOpc |= (unsigned short)MatcherTable[MatcherIndex++] << 8;
   2976       unsigned EmitNodeInfo = MatcherTable[MatcherIndex++];
   2977       // Get the result VT list.
   2978       unsigned NumVTs = MatcherTable[MatcherIndex++];
   2979       SmallVector<EVT, 4> VTs;
   2980       for (unsigned i = 0; i != NumVTs; ++i) {
   2981         MVT::SimpleValueType VT =
   2982           (MVT::SimpleValueType)MatcherTable[MatcherIndex++];
   2983         if (VT == MVT::iPTR) VT = getTargetLowering()->getPointerTy().SimpleTy;
   2984         VTs.push_back(VT);
   2985       }
   2986 
   2987       if (EmitNodeInfo & OPFL_Chain)
   2988         VTs.push_back(MVT::Other);
   2989       if (EmitNodeInfo & OPFL_GlueOutput)
   2990         VTs.push_back(MVT::Glue);
   2991 
   2992       // This is hot code, so optimize the two most common cases of 1 and 2
   2993       // results.
   2994       SDVTList VTList;
   2995       if (VTs.size() == 1)
   2996         VTList = CurDAG->getVTList(VTs[0]);
   2997       else if (VTs.size() == 2)
   2998         VTList = CurDAG->getVTList(VTs[0], VTs[1]);
   2999       else
   3000         VTList = CurDAG->getVTList(VTs);
   3001 
   3002       // Get the operand list.
   3003       unsigned NumOps = MatcherTable[MatcherIndex++];
   3004       SmallVector<SDValue, 8> Ops;
   3005       for (unsigned i = 0; i != NumOps; ++i) {
   3006         unsigned RecNo = MatcherTable[MatcherIndex++];
   3007         if (RecNo & 128)
   3008           RecNo = GetVBR(RecNo, MatcherTable, MatcherIndex);
   3009 
   3010         assert(RecNo < RecordedNodes.size() && "Invalid EmitNode");
   3011         Ops.push_back(RecordedNodes[RecNo].first);
   3012       }
   3013 
   3014       // If there are variadic operands to add, handle them now.
   3015       if (EmitNodeInfo & OPFL_VariadicInfo) {
   3016         // Determine the start index to copy from.
   3017         unsigned FirstOpToCopy = getNumFixedFromVariadicInfo(EmitNodeInfo);
   3018         FirstOpToCopy += (EmitNodeInfo & OPFL_Chain) ? 1 : 0;
   3019         assert(NodeToMatch->getNumOperands() >= FirstOpToCopy &&
   3020                "Invalid variadic node");
   3021         // Copy all of the variadic operands, not including a potential glue
   3022         // input.
   3023         for (unsigned i = FirstOpToCopy, e = NodeToMatch->getNumOperands();
   3024              i != e; ++i) {
   3025           SDValue V = NodeToMatch->getOperand(i);
   3026           if (V.getValueType() == MVT::Glue) break;
   3027           Ops.push_back(V);
   3028         }
   3029       }
   3030 
   3031       // If this has chain/glue inputs, add them.
   3032       if (EmitNodeInfo & OPFL_Chain)
   3033         Ops.push_back(InputChain);
   3034       if ((EmitNodeInfo & OPFL_GlueInput) && InputGlue.getNode() != nullptr)
   3035         Ops.push_back(InputGlue);
   3036 
   3037       // Create the node.
   3038       SDNode *Res = nullptr;
   3039       if (Opcode != OPC_MorphNodeTo) {
   3040         // If this is a normal EmitNode command, just create the new node and
   3041         // add the results to the RecordedNodes list.
   3042         Res = CurDAG->getMachineNode(TargetOpc, SDLoc(NodeToMatch),
   3043                                      VTList, Ops);
   3044 
   3045         // Add all the non-glue/non-chain results to the RecordedNodes list.
   3046         for (unsigned i = 0, e = VTs.size(); i != e; ++i) {
   3047           if (VTs[i] == MVT::Other || VTs[i] == MVT::Glue) break;
   3048           RecordedNodes.push_back(std::pair<SDValue,SDNode*>(SDValue(Res, i),
   3049                                                              nullptr));
   3050         }
   3051 
   3052       } else if (NodeToMatch->getOpcode() != ISD::DELETED_NODE) {
   3053         Res = MorphNode(NodeToMatch, TargetOpc, VTList, Ops, EmitNodeInfo);
   3054       } else {
   3055         // NodeToMatch was eliminated by CSE when the target changed the DAG.
   3056         // We will visit the equivalent node later.
   3057         DEBUG(dbgs() << "Node was eliminated by CSE\n");
   3058         return nullptr;
   3059       }
   3060 
   3061       // If the node had chain/glue results, update our notion of the current
   3062       // chain and glue.
   3063       if (EmitNodeInfo & OPFL_GlueOutput) {
   3064         InputGlue = SDValue(Res, VTs.size()-1);
   3065         if (EmitNodeInfo & OPFL_Chain)
   3066           InputChain = SDValue(Res, VTs.size()-2);
   3067       } else if (EmitNodeInfo & OPFL_Chain)
   3068         InputChain = SDValue(Res, VTs.size()-1);
   3069 
   3070       // If the OPFL_MemRefs glue is set on this node, slap all of the
   3071       // accumulated memrefs onto it.
   3072       //
   3073       // FIXME: This is vastly incorrect for patterns with multiple outputs
   3074       // instructions that access memory and for ComplexPatterns that match
   3075       // loads.
   3076       if (EmitNodeInfo & OPFL_MemRefs) {
   3077         // Only attach load or store memory operands if the generated
   3078         // instruction may load or store.
   3079         const MCInstrDesc &MCID = TM.getInstrInfo()->get(TargetOpc);
   3080         bool mayLoad = MCID.mayLoad();
   3081         bool mayStore = MCID.mayStore();
   3082 
   3083         unsigned NumMemRefs = 0;
   3084         for (SmallVectorImpl<MachineMemOperand *>::const_iterator I =
   3085                MatchedMemRefs.begin(), E = MatchedMemRefs.end(); I != E; ++I) {
   3086           if ((*I)->isLoad()) {
   3087             if (mayLoad)
   3088               ++NumMemRefs;
   3089           } else if ((*I)->isStore()) {
   3090             if (mayStore)
   3091               ++NumMemRefs;
   3092           } else {
   3093             ++NumMemRefs;
   3094           }
   3095         }
   3096 
   3097         MachineSDNode::mmo_iterator MemRefs =
   3098           MF->allocateMemRefsArray(NumMemRefs);
   3099 
   3100         MachineSDNode::mmo_iterator MemRefsPos = MemRefs;
   3101         for (SmallVectorImpl<MachineMemOperand *>::const_iterator I =
   3102                MatchedMemRefs.begin(), E = MatchedMemRefs.end(); I != E; ++I) {
   3103           if ((*I)->isLoad()) {
   3104             if (mayLoad)
   3105               *MemRefsPos++ = *I;
   3106           } else if ((*I)->isStore()) {
   3107             if (mayStore)
   3108               *MemRefsPos++ = *I;
   3109           } else {
   3110             *MemRefsPos++ = *I;
   3111           }
   3112         }
   3113 
   3114         cast<MachineSDNode>(Res)
   3115           ->setMemRefs(MemRefs, MemRefs + NumMemRefs);
   3116       }
   3117 
   3118       DEBUG(dbgs() << "  "
   3119                    << (Opcode == OPC_MorphNodeTo ? "Morphed" : "Created")
   3120                    << " node: "; Res->dump(CurDAG); dbgs() << "\n");
   3121 
   3122       // If this was a MorphNodeTo then we're completely done!
   3123       if (Opcode == OPC_MorphNodeTo) {
   3124         // Update chain and glue uses.
   3125         UpdateChainsAndGlue(NodeToMatch, InputChain, ChainNodesMatched,
   3126                             InputGlue, GlueResultNodesMatched, true);
   3127         return Res;
   3128       }
   3129 
   3130       continue;
   3131     }
   3132 
   3133     case OPC_MarkGlueResults: {
   3134       unsigned NumNodes = MatcherTable[MatcherIndex++];
   3135 
   3136       // Read and remember all the glue-result nodes.
   3137       for (unsigned i = 0; i != NumNodes; ++i) {
   3138         unsigned RecNo = MatcherTable[MatcherIndex++];
   3139         if (RecNo & 128)
   3140           RecNo = GetVBR(RecNo, MatcherTable, MatcherIndex);
   3141 
   3142         assert(RecNo < RecordedNodes.size() && "Invalid MarkGlueResults");
   3143         GlueResultNodesMatched.push_back(RecordedNodes[RecNo].first.getNode());
   3144       }
   3145       continue;
   3146     }
   3147 
   3148     case OPC_CompleteMatch: {
   3149       // The match has been completed, and any new nodes (if any) have been
   3150       // created.  Patch up references to the matched dag to use the newly
   3151       // created nodes.
   3152       unsigned NumResults = MatcherTable[MatcherIndex++];
   3153 
   3154       for (unsigned i = 0; i != NumResults; ++i) {
   3155         unsigned ResSlot = MatcherTable[MatcherIndex++];
   3156         if (ResSlot & 128)
   3157           ResSlot = GetVBR(ResSlot, MatcherTable, MatcherIndex);
   3158 
   3159         assert(ResSlot < RecordedNodes.size() && "Invalid CompleteMatch");
   3160         SDValue Res = RecordedNodes[ResSlot].first;
   3161 
   3162         assert(i < NodeToMatch->getNumValues() &&
   3163                NodeToMatch->getValueType(i) != MVT::Other &&
   3164                NodeToMatch->getValueType(i) != MVT::Glue &&
   3165                "Invalid number of results to complete!");
   3166         assert((NodeToMatch->getValueType(i) == Res.getValueType() ||
   3167                 NodeToMatch->getValueType(i) == MVT::iPTR ||
   3168                 Res.getValueType() == MVT::iPTR ||
   3169                 NodeToMatch->getValueType(i).getSizeInBits() ==
   3170                     Res.getValueType().getSizeInBits()) &&
   3171                "invalid replacement");
   3172         CurDAG->ReplaceAllUsesOfValueWith(SDValue(NodeToMatch, i), Res);
   3173       }
   3174 
   3175       // If the root node defines glue, add it to the glue nodes to update list.
   3176       if (NodeToMatch->getValueType(NodeToMatch->getNumValues()-1) == MVT::Glue)
   3177         GlueResultNodesMatched.push_back(NodeToMatch);
   3178 
   3179       // Update chain and glue uses.
   3180       UpdateChainsAndGlue(NodeToMatch, InputChain, ChainNodesMatched,
   3181                           InputGlue, GlueResultNodesMatched, false);
   3182 
   3183       assert(NodeToMatch->use_empty() &&
   3184              "Didn't replace all uses of the node?");
   3185 
   3186       // FIXME: We just return here, which interacts correctly with SelectRoot
   3187       // above.  We should fix this to not return an SDNode* anymore.
   3188       return nullptr;
   3189     }
   3190     }
   3191 
   3192     // If the code reached this point, then the match failed.  See if there is
   3193     // another child to try in the current 'Scope', otherwise pop it until we
   3194     // find a case to check.
   3195     DEBUG(dbgs() << "  Match failed at index " << CurrentOpcodeIndex << "\n");
   3196     ++NumDAGIselRetries;
   3197     while (1) {
   3198       if (MatchScopes.empty()) {
   3199         CannotYetSelect(NodeToMatch);
   3200         return nullptr;
   3201       }
   3202 
   3203       // Restore the interpreter state back to the point where the scope was
   3204       // formed.
   3205       MatchScope &LastScope = MatchScopes.back();
   3206       RecordedNodes.resize(LastScope.NumRecordedNodes);
   3207       NodeStack.clear();
   3208       NodeStack.append(LastScope.NodeStack.begin(), LastScope.NodeStack.end());
   3209       N = NodeStack.back();
   3210 
   3211       if (LastScope.NumMatchedMemRefs != MatchedMemRefs.size())
   3212         MatchedMemRefs.resize(LastScope.NumMatchedMemRefs);
   3213       MatcherIndex = LastScope.FailIndex;
   3214 
   3215       DEBUG(dbgs() << "  Continuing at " << MatcherIndex << "\n");
   3216 
   3217       InputChain = LastScope.InputChain;
   3218       InputGlue = LastScope.InputGlue;
   3219       if (!LastScope.HasChainNodesMatched)
   3220         ChainNodesMatched.clear();
   3221       if (!LastScope.HasGlueResultNodesMatched)
   3222         GlueResultNodesMatched.clear();
   3223 
   3224       // Check to see what the offset is at the new MatcherIndex.  If it is zero
   3225       // we have reached the end of this scope, otherwise we have another child
   3226       // in the current scope to try.
   3227       unsigned NumToSkip = MatcherTable[MatcherIndex++];
   3228       if (NumToSkip & 128)
   3229         NumToSkip = GetVBR(NumToSkip, MatcherTable, MatcherIndex);
   3230 
   3231       // If we have another child in this scope to match, update FailIndex and
   3232       // try it.
   3233       if (NumToSkip != 0) {
   3234         LastScope.FailIndex = MatcherIndex+NumToSkip;
   3235         break;
   3236       }
   3237 
   3238       // End of this scope, pop it and try the next child in the containing
   3239       // scope.
   3240       MatchScopes.pop_back();
   3241     }
   3242   }
   3243 }
   3244 
   3245 
   3246 
   3247 void SelectionDAGISel::CannotYetSelect(SDNode *N) {
   3248   std::string msg;
   3249   raw_string_ostream Msg(msg);
   3250   Msg << "Cannot select: ";
   3251 
   3252   if (N->getOpcode() != ISD::INTRINSIC_W_CHAIN &&
   3253       N->getOpcode() != ISD::INTRINSIC_WO_CHAIN &&
   3254       N->getOpcode() != ISD::INTRINSIC_VOID) {
   3255     N->printrFull(Msg, CurDAG);
   3256     Msg << "\nIn function: " << MF->getName();
   3257   } else {
   3258     bool HasInputChain = N->getOperand(0).getValueType() == MVT::Other;
   3259     unsigned iid =
   3260       cast<ConstantSDNode>(N->getOperand(HasInputChain))->getZExtValue();
   3261     if (iid < Intrinsic::num_intrinsics)
   3262       Msg << "intrinsic %" << Intrinsic::getName((Intrinsic::ID)iid);
   3263     else if (const TargetIntrinsicInfo *TII = TM.getIntrinsicInfo())
   3264       Msg << "target intrinsic %" << TII->getName(iid);
   3265     else
   3266       Msg << "unknown intrinsic #" << iid;
   3267   }
   3268   report_fatal_error(Msg.str());
   3269 }
   3270 
   3271 char SelectionDAGISel::ID = 0;
   3272