422cb7aaafc73a73f6eee06926db7f74f0733c26
[oota-llvm.git] / lib / CodeGen / SelectionDAG / SelectionDAGISel.cpp
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 #define DEBUG_TYPE "isel"
15 #include "ScheduleDAGSDNodes.h"
16 #include "SelectionDAGBuilder.h"
17 #include "FunctionLoweringInfo.h"
18 #include "llvm/CodeGen/SelectionDAGISel.h"
19 #include "llvm/Analysis/AliasAnalysis.h"
20 #include "llvm/Analysis/DebugInfo.h"
21 #include "llvm/Constants.h"
22 #include "llvm/Function.h"
23 #include "llvm/InlineAsm.h"
24 #include "llvm/Instructions.h"
25 #include "llvm/Intrinsics.h"
26 #include "llvm/IntrinsicInst.h"
27 #include "llvm/LLVMContext.h"
28 #include "llvm/CodeGen/FastISel.h"
29 #include "llvm/CodeGen/GCStrategy.h"
30 #include "llvm/CodeGen/GCMetadata.h"
31 #include "llvm/CodeGen/MachineFunction.h"
32 #include "llvm/CodeGen/MachineInstrBuilder.h"
33 #include "llvm/CodeGen/MachineModuleInfo.h"
34 #include "llvm/CodeGen/MachineRegisterInfo.h"
35 #include "llvm/CodeGen/ScheduleHazardRecognizer.h"
36 #include "llvm/CodeGen/SchedulerRegistry.h"
37 #include "llvm/CodeGen/SelectionDAG.h"
38 #include "llvm/Target/TargetRegisterInfo.h"
39 #include "llvm/Target/TargetIntrinsicInfo.h"
40 #include "llvm/Target/TargetInstrInfo.h"
41 #include "llvm/Target/TargetLowering.h"
42 #include "llvm/Target/TargetMachine.h"
43 #include "llvm/Target/TargetOptions.h"
44 #include "llvm/Support/Compiler.h"
45 #include "llvm/Support/Debug.h"
46 #include "llvm/Support/ErrorHandling.h"
47 #include "llvm/Support/Timer.h"
48 #include "llvm/Support/raw_ostream.h"
49 #include "llvm/ADT/Statistic.h"
50 #include <algorithm>
51 using namespace llvm;
52
53 STATISTIC(NumFastIselFailures, "Number of instructions fast isel failed on");
54 STATISTIC(NumDAGIselRetries,"Number of times dag isel has to try another path");
55
56 static cl::opt<bool>
57 EnableFastISelVerbose("fast-isel-verbose", cl::Hidden,
58           cl::desc("Enable verbose messages in the \"fast\" "
59                    "instruction selector"));
60 static cl::opt<bool>
61 EnableFastISelAbort("fast-isel-abort", cl::Hidden,
62           cl::desc("Enable abort calls when \"fast\" instruction fails"));
63
64 #ifndef NDEBUG
65 static cl::opt<bool>
66 ViewDAGCombine1("view-dag-combine1-dags", cl::Hidden,
67           cl::desc("Pop up a window to show dags before the first "
68                    "dag combine pass"));
69 static cl::opt<bool>
70 ViewLegalizeTypesDAGs("view-legalize-types-dags", cl::Hidden,
71           cl::desc("Pop up a window to show dags before legalize types"));
72 static cl::opt<bool>
73 ViewLegalizeDAGs("view-legalize-dags", cl::Hidden,
74           cl::desc("Pop up a window to show dags before legalize"));
75 static cl::opt<bool>
76 ViewDAGCombine2("view-dag-combine2-dags", cl::Hidden,
77           cl::desc("Pop up a window to show dags before the second "
78                    "dag combine pass"));
79 static cl::opt<bool>
80 ViewDAGCombineLT("view-dag-combine-lt-dags", cl::Hidden,
81           cl::desc("Pop up a window to show dags before the post legalize types"
82                    " dag combine pass"));
83 static cl::opt<bool>
84 ViewISelDAGs("view-isel-dags", cl::Hidden,
85           cl::desc("Pop up a window to show isel dags as they are selected"));
86 static cl::opt<bool>
87 ViewSchedDAGs("view-sched-dags", cl::Hidden,
88           cl::desc("Pop up a window to show sched dags as they are processed"));
89 static cl::opt<bool>
90 ViewSUnitDAGs("view-sunit-dags", cl::Hidden,
91       cl::desc("Pop up a window to show SUnit dags after they are processed"));
92 #else
93 static const bool ViewDAGCombine1 = false,
94                   ViewLegalizeTypesDAGs = false, ViewLegalizeDAGs = false,
95                   ViewDAGCombine2 = false,
96                   ViewDAGCombineLT = false,
97                   ViewISelDAGs = false, ViewSchedDAGs = false,
98                   ViewSUnitDAGs = false;
99 #endif
100
101 //===---------------------------------------------------------------------===//
102 ///
103 /// RegisterScheduler class - Track the registration of instruction schedulers.
104 ///
105 //===---------------------------------------------------------------------===//
106 MachinePassRegistry RegisterScheduler::Registry;
107
108 //===---------------------------------------------------------------------===//
109 ///
110 /// ISHeuristic command line option for instruction schedulers.
111 ///
112 //===---------------------------------------------------------------------===//
113 static cl::opt<RegisterScheduler::FunctionPassCtor, false,
114                RegisterPassParser<RegisterScheduler> >
115 ISHeuristic("pre-RA-sched",
116             cl::init(&createDefaultScheduler),
117             cl::desc("Instruction schedulers available (before register"
118                      " allocation):"));
119
120 static RegisterScheduler
121 defaultListDAGScheduler("default", "Best scheduler for the target",
122                         createDefaultScheduler);
123
124 namespace llvm {
125   //===--------------------------------------------------------------------===//
126   /// createDefaultScheduler - This creates an instruction scheduler appropriate
127   /// for the target.
128   ScheduleDAGSDNodes* createDefaultScheduler(SelectionDAGISel *IS,
129                                              CodeGenOpt::Level OptLevel) {
130     const TargetLowering &TLI = IS->getTargetLowering();
131
132     if (OptLevel == CodeGenOpt::None)
133       return createFastDAGScheduler(IS, OptLevel);
134     if (TLI.getSchedulingPreference() == TargetLowering::SchedulingForLatency)
135       return createTDListDAGScheduler(IS, OptLevel);
136     assert(TLI.getSchedulingPreference() ==
137            TargetLowering::SchedulingForRegPressure && "Unknown sched type!");
138     return createBURRListDAGScheduler(IS, OptLevel);
139   }
140 }
141
142 // EmitInstrWithCustomInserter - This method should be implemented by targets
143 // that mark instructions with the 'usesCustomInserter' flag.  These
144 // instructions are special in various ways, which require special support to
145 // insert.  The specified MachineInstr is created but not inserted into any
146 // basic blocks, and this method is called to expand it into a sequence of
147 // instructions, potentially also creating new basic blocks and control flow.
148 // When new basic blocks are inserted and the edges from MBB to its successors
149 // are modified, the method should insert pairs of <OldSucc, NewSucc> into the
150 // DenseMap.
151 MachineBasicBlock *
152 TargetLowering::EmitInstrWithCustomInserter(MachineInstr *MI,
153                                             MachineBasicBlock *MBB) const {
154 #ifndef NDEBUG
155   dbgs() << "If a target marks an instruction with "
156           "'usesCustomInserter', it must implement "
157           "TargetLowering::EmitInstrWithCustomInserter!";
158 #endif
159   llvm_unreachable(0);
160   return 0;
161 }
162
163 //===----------------------------------------------------------------------===//
164 // SelectionDAGISel code
165 //===----------------------------------------------------------------------===//
166
167 SelectionDAGISel::SelectionDAGISel(const TargetMachine &tm, CodeGenOpt::Level OL) :
168   MachineFunctionPass(&ID), TM(tm), TLI(*tm.getTargetLowering()),
169   FuncInfo(new FunctionLoweringInfo(TLI)),
170   CurDAG(new SelectionDAG(tm, *FuncInfo)),
171   SDB(new SelectionDAGBuilder(*CurDAG, *FuncInfo, OL)),
172   GFI(),
173   OptLevel(OL),
174   DAGSize(0)
175 {}
176
177 SelectionDAGISel::~SelectionDAGISel() {
178   delete SDB;
179   delete CurDAG;
180   delete FuncInfo;
181 }
182
183 void SelectionDAGISel::getAnalysisUsage(AnalysisUsage &AU) const {
184   AU.addRequired<AliasAnalysis>();
185   AU.addPreserved<AliasAnalysis>();
186   AU.addRequired<GCModuleInfo>();
187   AU.addPreserved<GCModuleInfo>();
188   MachineFunctionPass::getAnalysisUsage(AU);
189 }
190
191 bool SelectionDAGISel::runOnMachineFunction(MachineFunction &mf) {
192   // Do some sanity-checking on the command-line options.
193   assert((!EnableFastISelVerbose || EnableFastISel) &&
194          "-fast-isel-verbose requires -fast-isel");
195   assert((!EnableFastISelAbort || EnableFastISel) &&
196          "-fast-isel-abort requires -fast-isel");
197
198   const Function &Fn = *mf.getFunction();
199   const TargetInstrInfo &TII = *TM.getInstrInfo();
200   const TargetRegisterInfo &TRI = *TM.getRegisterInfo();
201
202   MF = &mf;
203   RegInfo = &MF->getRegInfo();
204   AA = &getAnalysis<AliasAnalysis>();
205   GFI = Fn.hasGC() ? &getAnalysis<GCModuleInfo>().getFunctionInfo(Fn) : 0;
206
207   DEBUG(dbgs() << "\n\n\n=== " << Fn.getName() << "\n");
208
209   CurDAG->init(*MF);
210   FuncInfo->set(Fn, *MF, EnableFastISel);
211   SDB->init(GFI, *AA);
212
213   SelectAllBasicBlocks(Fn);
214
215   // If the first basic block in the function has live ins that need to be
216   // copied into vregs, emit the copies into the top of the block before
217   // emitting the code for the block.
218   MachineBasicBlock *EntryMBB = MF->begin();
219   RegInfo->EmitLiveInCopies(EntryMBB, TRI, TII);
220
221   // Insert DBG_VALUE instructions for function arguments to the entry block.
222   for (unsigned i = 0, e = FuncInfo->ArgDbgValues.size(); i != e; ++i) {
223     MachineInstr *MI = FuncInfo->ArgDbgValues[e-i-1];
224     unsigned Reg = MI->getOperand(0).getReg();
225     if (TargetRegisterInfo::isPhysicalRegister(Reg))
226       EntryMBB->insert(EntryMBB->begin(), MI);
227     else {
228       MachineInstr *Def = RegInfo->getVRegDef(Reg);
229       MachineBasicBlock::iterator InsertPos = Def;
230       // FIXME: VR def may not be in entry block.
231       Def->getParent()->insert(llvm::next(InsertPos), MI);
232     }
233   }
234
235   // Release function-specific state. SDB and CurDAG are already cleared
236   // at this point.
237   FuncInfo->clear();
238
239   return true;
240 }
241
242 MachineBasicBlock *
243 SelectionDAGISel::SelectBasicBlock(MachineBasicBlock *BB,
244                                    const BasicBlock *LLVMBB,
245                                    BasicBlock::const_iterator Begin,
246                                    BasicBlock::const_iterator End,
247                                    bool &HadTailCall) {
248   // Lower all of the non-terminator instructions. If a call is emitted
249   // as a tail call, cease emitting nodes for this block. Terminators
250   // are handled below.
251   for (BasicBlock::const_iterator I = Begin; I != End && !SDB->HasTailCall; ++I)
252     SDB->visit(*I);
253
254   // Make sure the root of the DAG is up-to-date.
255   CurDAG->setRoot(SDB->getControlRoot());
256   HadTailCall = SDB->HasTailCall;
257   SDB->clear();
258
259   // Final step, emit the lowered DAG as machine code.
260   return CodeGenAndEmitDAG(BB);
261 }
262
263 namespace {
264 /// WorkListRemover - This class is a DAGUpdateListener that removes any deleted
265 /// nodes from the worklist.
266 class SDOPsWorkListRemover : public SelectionDAG::DAGUpdateListener {
267   SmallVector<SDNode*, 128> &Worklist;
268   SmallPtrSet<SDNode*, 128> &InWorklist;
269 public:
270   SDOPsWorkListRemover(SmallVector<SDNode*, 128> &wl,
271                        SmallPtrSet<SDNode*, 128> &inwl)
272     : Worklist(wl), InWorklist(inwl) {}
273
274   void RemoveFromWorklist(SDNode *N) {
275     if (!InWorklist.erase(N)) return;
276     
277     SmallVector<SDNode*, 128>::iterator I =
278     std::find(Worklist.begin(), Worklist.end(), N);
279     assert(I != Worklist.end() && "Not in worklist");
280     
281     *I = Worklist.back();
282     Worklist.pop_back();
283   }
284   
285   virtual void NodeDeleted(SDNode *N, SDNode *E) {
286     RemoveFromWorklist(N);
287   }
288
289   virtual void NodeUpdated(SDNode *N) {
290     // Ignore updates.
291   }
292 };
293 }
294
295 /// TrivialTruncElim - Eliminate some trivial nops that can result from
296 /// ShrinkDemandedOps: (trunc (ext n)) -> n.
297 static bool TrivialTruncElim(SDValue Op,
298                              TargetLowering::TargetLoweringOpt &TLO) {
299   SDValue N0 = Op.getOperand(0);
300   EVT VT = Op.getValueType();
301   if ((N0.getOpcode() == ISD::ZERO_EXTEND ||
302        N0.getOpcode() == ISD::SIGN_EXTEND ||
303        N0.getOpcode() == ISD::ANY_EXTEND) &&
304       N0.getOperand(0).getValueType() == VT) {
305     return TLO.CombineTo(Op, N0.getOperand(0));
306   }
307   return false;
308 }
309
310 /// ShrinkDemandedOps - A late transformation pass that shrink expressions
311 /// using TargetLowering::TargetLoweringOpt::ShrinkDemandedOp. It converts
312 /// x+y to (VT)((SmallVT)x+(SmallVT)y) if the casts are free.
313 void SelectionDAGISel::ShrinkDemandedOps() {
314   SmallVector<SDNode*, 128> Worklist;
315   SmallPtrSet<SDNode*, 128> InWorklist;
316
317   // Add all the dag nodes to the worklist.
318   Worklist.reserve(CurDAG->allnodes_size());
319   for (SelectionDAG::allnodes_iterator I = CurDAG->allnodes_begin(),
320        E = CurDAG->allnodes_end(); I != E; ++I) {
321     Worklist.push_back(I);
322     InWorklist.insert(I);
323   }
324
325   TargetLowering::TargetLoweringOpt TLO(*CurDAG, true, true, true);
326   while (!Worklist.empty()) {
327     SDNode *N = Worklist.pop_back_val();
328     InWorklist.erase(N);
329
330     if (N->use_empty() && N != CurDAG->getRoot().getNode()) {
331       // Deleting this node may make its operands dead, add them to the worklist
332       // if they aren't already there.
333       for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i)
334         if (InWorklist.insert(N->getOperand(i).getNode()))
335           Worklist.push_back(N->getOperand(i).getNode());
336       
337       CurDAG->DeleteNode(N);
338       continue;
339     }
340
341     // Run ShrinkDemandedOp on scalar binary operations.
342     if (N->getNumValues() != 1 ||
343         !N->getValueType(0).isSimple() || !N->getValueType(0).isInteger())
344       continue;
345     
346     unsigned BitWidth = N->getValueType(0).getScalarType().getSizeInBits();
347     APInt Demanded = APInt::getAllOnesValue(BitWidth);
348     APInt KnownZero, KnownOne;
349     if (!TLI.SimplifyDemandedBits(SDValue(N, 0), Demanded,
350                                   KnownZero, KnownOne, TLO) &&
351         (N->getOpcode() != ISD::TRUNCATE ||
352          !TrivialTruncElim(SDValue(N, 0), TLO)))
353       continue;
354     
355     // Revisit the node.
356     assert(!InWorklist.count(N) && "Already in worklist");
357     Worklist.push_back(N);
358     InWorklist.insert(N);
359
360     // Replace the old value with the new one.
361     DEBUG(errs() << "\nShrinkDemandedOps replacing "; 
362           TLO.Old.getNode()->dump(CurDAG);
363           errs() << "\nWith: ";
364           TLO.New.getNode()->dump(CurDAG);
365           errs() << '\n');
366
367     if (InWorklist.insert(TLO.New.getNode()))
368       Worklist.push_back(TLO.New.getNode());
369
370     SDOPsWorkListRemover DeadNodes(Worklist, InWorklist);
371     CurDAG->ReplaceAllUsesOfValueWith(TLO.Old, TLO.New, &DeadNodes);
372
373     if (!TLO.Old.getNode()->use_empty()) continue;
374         
375     for (unsigned i = 0, e = TLO.Old.getNode()->getNumOperands();
376          i != e; ++i) {
377       SDNode *OpNode = TLO.Old.getNode()->getOperand(i).getNode(); 
378       if (OpNode->hasOneUse()) {
379         // Add OpNode to the end of the list to revisit.
380         DeadNodes.RemoveFromWorklist(OpNode);
381         Worklist.push_back(OpNode);
382         InWorklist.insert(OpNode);
383       }
384     }
385
386     DeadNodes.RemoveFromWorklist(TLO.Old.getNode());
387     CurDAG->DeleteNode(TLO.Old.getNode());
388   }
389 }
390
391 void SelectionDAGISel::ComputeLiveOutVRegInfo() {
392   SmallPtrSet<SDNode*, 128> VisitedNodes;
393   SmallVector<SDNode*, 128> Worklist;
394
395   Worklist.push_back(CurDAG->getRoot().getNode());
396
397   APInt Mask;
398   APInt KnownZero;
399   APInt KnownOne;
400
401   do {
402     SDNode *N = Worklist.pop_back_val();
403
404     // If we've already seen this node, ignore it.
405     if (!VisitedNodes.insert(N))
406       continue;
407
408     // Otherwise, add all chain operands to the worklist.
409     for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i)
410       if (N->getOperand(i).getValueType() == MVT::Other)
411         Worklist.push_back(N->getOperand(i).getNode());
412
413     // If this is a CopyToReg with a vreg dest, process it.
414     if (N->getOpcode() != ISD::CopyToReg)
415       continue;
416
417     unsigned DestReg = cast<RegisterSDNode>(N->getOperand(1))->getReg();
418     if (!TargetRegisterInfo::isVirtualRegister(DestReg))
419       continue;
420
421     // Ignore non-scalar or non-integer values.
422     SDValue Src = N->getOperand(2);
423     EVT SrcVT = Src.getValueType();
424     if (!SrcVT.isInteger() || SrcVT.isVector())
425       continue;
426
427     unsigned NumSignBits = CurDAG->ComputeNumSignBits(Src);
428     Mask = APInt::getAllOnesValue(SrcVT.getSizeInBits());
429     CurDAG->ComputeMaskedBits(Src, Mask, KnownZero, KnownOne);
430
431     // Only install this information if it tells us something.
432     if (NumSignBits != 1 || KnownZero != 0 || KnownOne != 0) {
433       DestReg -= TargetRegisterInfo::FirstVirtualRegister;
434       if (DestReg >= FuncInfo->LiveOutRegInfo.size())
435         FuncInfo->LiveOutRegInfo.resize(DestReg+1);
436       FunctionLoweringInfo::LiveOutInfo &LOI =
437         FuncInfo->LiveOutRegInfo[DestReg];
438       LOI.NumSignBits = NumSignBits;
439       LOI.KnownOne = KnownOne;
440       LOI.KnownZero = KnownZero;
441     }
442   } while (!Worklist.empty());
443 }
444
445 MachineBasicBlock *SelectionDAGISel::CodeGenAndEmitDAG(MachineBasicBlock *BB) {
446   std::string GroupName;
447   if (TimePassesIsEnabled)
448     GroupName = "Instruction Selection and Scheduling";
449   std::string BlockName;
450   if (ViewDAGCombine1 || ViewLegalizeTypesDAGs || ViewLegalizeDAGs ||
451       ViewDAGCombine2 || ViewDAGCombineLT || ViewISelDAGs || ViewSchedDAGs ||
452       ViewSUnitDAGs)
453     BlockName = MF->getFunction()->getNameStr() + ":" +
454                 BB->getBasicBlock()->getNameStr();
455
456   DEBUG(dbgs() << "Initial selection DAG:\n");
457   DEBUG(CurDAG->dump());
458
459   if (ViewDAGCombine1) CurDAG->viewGraph("dag-combine1 input for " + BlockName);
460
461   // Run the DAG combiner in pre-legalize mode.
462   if (TimePassesIsEnabled) {
463     NamedRegionTimer T("DAG Combining 1", GroupName);
464     CurDAG->Combine(Unrestricted, *AA, OptLevel);
465   } else {
466     CurDAG->Combine(Unrestricted, *AA, OptLevel);
467   }
468
469   DEBUG(dbgs() << "Optimized lowered selection DAG:\n");
470   DEBUG(CurDAG->dump());
471
472   // Second step, hack on the DAG until it only uses operations and types that
473   // the target supports.
474   if (ViewLegalizeTypesDAGs) CurDAG->viewGraph("legalize-types input for " +
475                                                BlockName);
476
477   bool Changed;
478   if (TimePassesIsEnabled) {
479     NamedRegionTimer T("Type Legalization", GroupName);
480     Changed = CurDAG->LegalizeTypes();
481   } else {
482     Changed = CurDAG->LegalizeTypes();
483   }
484
485   DEBUG(dbgs() << "Type-legalized selection DAG:\n");
486   DEBUG(CurDAG->dump());
487
488   if (Changed) {
489     if (ViewDAGCombineLT)
490       CurDAG->viewGraph("dag-combine-lt input for " + BlockName);
491
492     // Run the DAG combiner in post-type-legalize mode.
493     if (TimePassesIsEnabled) {
494       NamedRegionTimer T("DAG Combining after legalize types", GroupName);
495       CurDAG->Combine(NoIllegalTypes, *AA, OptLevel);
496     } else {
497       CurDAG->Combine(NoIllegalTypes, *AA, OptLevel);
498     }
499
500     DEBUG(dbgs() << "Optimized type-legalized selection DAG:\n");
501     DEBUG(CurDAG->dump());
502   }
503
504   if (TimePassesIsEnabled) {
505     NamedRegionTimer T("Vector Legalization", GroupName);
506     Changed = CurDAG->LegalizeVectors();
507   } else {
508     Changed = CurDAG->LegalizeVectors();
509   }
510
511   if (Changed) {
512     if (TimePassesIsEnabled) {
513       NamedRegionTimer T("Type Legalization 2", GroupName);
514       CurDAG->LegalizeTypes();
515     } else {
516       CurDAG->LegalizeTypes();
517     }
518
519     if (ViewDAGCombineLT)
520       CurDAG->viewGraph("dag-combine-lv input for " + BlockName);
521
522     // Run the DAG combiner in post-type-legalize mode.
523     if (TimePassesIsEnabled) {
524       NamedRegionTimer T("DAG Combining after legalize vectors", GroupName);
525       CurDAG->Combine(NoIllegalOperations, *AA, OptLevel);
526     } else {
527       CurDAG->Combine(NoIllegalOperations, *AA, OptLevel);
528     }
529
530     DEBUG(dbgs() << "Optimized vector-legalized selection DAG:\n");
531     DEBUG(CurDAG->dump());
532   }
533
534   if (ViewLegalizeDAGs) CurDAG->viewGraph("legalize input for " + BlockName);
535
536   if (TimePassesIsEnabled) {
537     NamedRegionTimer T("DAG Legalization", GroupName);
538     CurDAG->Legalize(OptLevel);
539   } else {
540     CurDAG->Legalize(OptLevel);
541   }
542
543   DEBUG(dbgs() << "Legalized selection DAG:\n");
544   DEBUG(CurDAG->dump());
545
546   if (ViewDAGCombine2) CurDAG->viewGraph("dag-combine2 input for " + BlockName);
547
548   // Run the DAG combiner in post-legalize mode.
549   if (TimePassesIsEnabled) {
550     NamedRegionTimer T("DAG Combining 2", GroupName);
551     CurDAG->Combine(NoIllegalOperations, *AA, OptLevel);
552   } else {
553     CurDAG->Combine(NoIllegalOperations, *AA, OptLevel);
554   }
555
556   DEBUG(dbgs() << "Optimized legalized selection DAG:\n");
557   DEBUG(CurDAG->dump());
558
559   if (OptLevel != CodeGenOpt::None) {
560     ShrinkDemandedOps();
561     ComputeLiveOutVRegInfo();
562   }
563
564   if (ViewISelDAGs) CurDAG->viewGraph("isel input for " + BlockName);
565
566   // Third, instruction select all of the operations to machine code, adding the
567   // code to the MachineBasicBlock.
568   if (TimePassesIsEnabled) {
569     NamedRegionTimer T("Instruction Selection", GroupName);
570     DoInstructionSelection();
571   } else {
572     DoInstructionSelection();
573   }
574
575   DEBUG(dbgs() << "Selected selection DAG:\n");
576   DEBUG(CurDAG->dump());
577
578   if (ViewSchedDAGs) CurDAG->viewGraph("scheduler input for " + BlockName);
579
580   // Schedule machine code.
581   ScheduleDAGSDNodes *Scheduler = CreateScheduler();
582   if (TimePassesIsEnabled) {
583     NamedRegionTimer T("Instruction Scheduling", GroupName);
584     Scheduler->Run(CurDAG, BB, BB->end());
585   } else {
586     Scheduler->Run(CurDAG, BB, BB->end());
587   }
588
589   if (ViewSUnitDAGs) Scheduler->viewGraph();
590
591   // Emit machine code to BB.  This can change 'BB' to the last block being
592   // inserted into.
593   if (TimePassesIsEnabled) {
594     NamedRegionTimer T("Instruction Creation", GroupName);
595     BB = Scheduler->EmitSchedule();
596   } else {
597     BB = Scheduler->EmitSchedule();
598   }
599
600   // Free the scheduler state.
601   if (TimePassesIsEnabled) {
602     NamedRegionTimer T("Instruction Scheduling Cleanup", GroupName);
603     delete Scheduler;
604   } else {
605     delete Scheduler;
606   }
607
608   // Free the SelectionDAG state, now that we're finished with it.
609   CurDAG->clear();
610
611   return BB;
612 }
613
614 void SelectionDAGISel::DoInstructionSelection() {
615   DEBUG(errs() << "===== Instruction selection begins:\n");
616
617   PreprocessISelDAG();
618   
619   // Select target instructions for the DAG.
620   {
621     // Number all nodes with a topological order and set DAGSize.
622     DAGSize = CurDAG->AssignTopologicalOrder();
623     
624     // Create a dummy node (which is not added to allnodes), that adds
625     // a reference to the root node, preventing it from being deleted,
626     // and tracking any changes of the root.
627     HandleSDNode Dummy(CurDAG->getRoot());
628     ISelPosition = SelectionDAG::allnodes_iterator(CurDAG->getRoot().getNode());
629     ++ISelPosition;
630     
631     // The AllNodes list is now topological-sorted. Visit the
632     // nodes by starting at the end of the list (the root of the
633     // graph) and preceding back toward the beginning (the entry
634     // node).
635     while (ISelPosition != CurDAG->allnodes_begin()) {
636       SDNode *Node = --ISelPosition;
637       // Skip dead nodes. DAGCombiner is expected to eliminate all dead nodes,
638       // but there are currently some corner cases that it misses. Also, this
639       // makes it theoretically possible to disable the DAGCombiner.
640       if (Node->use_empty())
641         continue;
642       
643       SDNode *ResNode = Select(Node);
644       
645       // FIXME: This is pretty gross.  'Select' should be changed to not return
646       // anything at all and this code should be nuked with a tactical strike.
647       
648       // If node should not be replaced, continue with the next one.
649       if (ResNode == Node || Node->getOpcode() == ISD::DELETED_NODE)
650         continue;
651       // Replace node.
652       if (ResNode)
653         ReplaceUses(Node, ResNode);
654       
655       // If after the replacement this node is not used any more,
656       // remove this dead node.
657       if (Node->use_empty()) { // Don't delete EntryToken, etc.
658         ISelUpdater ISU(ISelPosition);
659         CurDAG->RemoveDeadNode(Node, &ISU);
660       }
661     }
662     
663     CurDAG->setRoot(Dummy.getValue());
664   }    
665   DEBUG(errs() << "===== Instruction selection ends:\n");
666
667   PostprocessISelDAG();
668 }
669
670 /// PrepareEHLandingPad - Emit an EH_LABEL, set up live-in registers, and
671 /// do other setup for EH landing-pad blocks.
672 void SelectionDAGISel::PrepareEHLandingPad(MachineBasicBlock *BB) {
673   // Add a label to mark the beginning of the landing pad.  Deletion of the
674   // landing pad can thus be detected via the MachineModuleInfo.
675   MCSymbol *Label = MF->getMMI().addLandingPad(BB);
676
677   const TargetInstrDesc &II = TM.getInstrInfo()->get(TargetOpcode::EH_LABEL);
678   BuildMI(BB, SDB->getCurDebugLoc(), II).addSym(Label);
679
680   // Mark exception register as live in.
681   unsigned Reg = TLI.getExceptionAddressRegister();
682   if (Reg) BB->addLiveIn(Reg);
683
684   // Mark exception selector register as live in.
685   Reg = TLI.getExceptionSelectorRegister();
686   if (Reg) BB->addLiveIn(Reg);
687
688   // FIXME: Hack around an exception handling flaw (PR1508): the personality
689   // function and list of typeids logically belong to the invoke (or, if you
690   // like, the basic block containing the invoke), and need to be associated
691   // with it in the dwarf exception handling tables.  Currently however the
692   // information is provided by an intrinsic (eh.selector) that can be moved
693   // to unexpected places by the optimizers: if the unwind edge is critical,
694   // then breaking it can result in the intrinsics being in the successor of
695   // the landing pad, not the landing pad itself.  This results
696   // in exceptions not being caught because no typeids are associated with
697   // the invoke.  This may not be the only way things can go wrong, but it
698   // is the only way we try to work around for the moment.
699   const BasicBlock *LLVMBB = BB->getBasicBlock();
700   const BranchInst *Br = dyn_cast<BranchInst>(LLVMBB->getTerminator());
701
702   if (Br && Br->isUnconditional()) { // Critical edge?
703     BasicBlock::const_iterator I, E;
704     for (I = LLVMBB->begin(), E = --LLVMBB->end(); I != E; ++I)
705       if (isa<EHSelectorInst>(I))
706         break;
707
708     if (I == E)
709       // No catch info found - try to extract some from the successor.
710       CopyCatchInfo(Br->getSuccessor(0), LLVMBB, &MF->getMMI(), *FuncInfo);
711   }
712 }
713
714 void SelectionDAGISel::SelectAllBasicBlocks(const Function &Fn) {
715   // Initialize the Fast-ISel state, if needed.
716   FastISel *FastIS = 0;
717   if (EnableFastISel)
718     FastIS = TLI.createFastISel(*MF, FuncInfo->ValueMap, FuncInfo->MBBMap,
719                                 FuncInfo->StaticAllocaMap,
720                                 FuncInfo->PHINodesToUpdate
721 #ifndef NDEBUG
722                                 , FuncInfo->CatchInfoLost
723 #endif
724                                 );
725
726   // Iterate over all basic blocks in the function.
727   for (Function::const_iterator I = Fn.begin(), E = Fn.end(); I != E; ++I) {
728     const BasicBlock *LLVMBB = &*I;
729     MachineBasicBlock *BB = FuncInfo->MBBMap[LLVMBB];
730
731     BasicBlock::const_iterator const Begin = LLVMBB->getFirstNonPHI();
732     BasicBlock::const_iterator const End = LLVMBB->end();
733     BasicBlock::const_iterator BI = Begin;
734
735     // Lower any arguments needed in this block if this is the entry block.
736     if (LLVMBB == &Fn.getEntryBlock())
737       LowerArguments(LLVMBB);
738
739     // Setup an EH landing-pad block.
740     if (BB->isLandingPad())
741       PrepareEHLandingPad(BB);
742     
743     // Before doing SelectionDAG ISel, see if FastISel has been requested.
744     if (FastIS) {
745       // Emit code for any incoming arguments. This must happen before
746       // beginning FastISel on the entry block.
747       if (LLVMBB == &Fn.getEntryBlock()) {
748         CurDAG->setRoot(SDB->getControlRoot());
749         SDB->clear();
750         BB = CodeGenAndEmitDAG(BB);
751       }
752       FastIS->startNewBlock(BB);
753       // Do FastISel on as many instructions as possible.
754       for (; BI != End; ++BI) {
755         // Try to select the instruction with FastISel.
756         if (FastIS->SelectInstruction(BI))
757           continue;
758
759         // Then handle certain instructions as single-LLVM-Instruction blocks.
760         if (isa<CallInst>(BI)) {
761           ++NumFastIselFailures;
762           if (EnableFastISelVerbose || EnableFastISelAbort) {
763             dbgs() << "FastISel missed call: ";
764             BI->dump();
765           }
766
767           if (!BI->getType()->isVoidTy() && !BI->use_empty()) {
768             unsigned &R = FuncInfo->ValueMap[BI];
769             if (!R)
770               R = FuncInfo->CreateRegForValue(BI);
771           }
772
773           bool HadTailCall = false;
774           BB = SelectBasicBlock(BB, LLVMBB, BI, llvm::next(BI), HadTailCall);
775
776           // If the call was emitted as a tail call, we're done with the block.
777           if (HadTailCall) {
778             BI = End;
779             break;
780           }
781
782           // If the instruction was codegen'd with multiple blocks,
783           // inform the FastISel object where to resume inserting.
784           FastIS->setCurrentBlock(BB);
785           continue;
786         }
787
788         // Otherwise, give up on FastISel for the rest of the block.
789         // For now, be a little lenient about non-branch terminators.
790         if (!isa<TerminatorInst>(BI) || isa<BranchInst>(BI)) {
791           ++NumFastIselFailures;
792           if (EnableFastISelVerbose || EnableFastISelAbort) {
793             dbgs() << "FastISel miss: ";
794             BI->dump();
795           }
796           if (EnableFastISelAbort)
797             // The "fast" selector couldn't handle something and bailed.
798             // For the purpose of debugging, just abort.
799             llvm_unreachable("FastISel didn't select the entire block");
800         }
801         break;
802       }
803     }
804
805     // Run SelectionDAG instruction selection on the remainder of the block
806     // not handled by FastISel. If FastISel is not run, this is the entire
807     // block.
808     if (BI != End) {
809       bool HadTailCall;
810       BB = SelectBasicBlock(BB, LLVMBB, BI, End, HadTailCall);
811     }
812
813     FinishBasicBlock(BB);
814     FuncInfo->PHINodesToUpdate.clear();
815   }
816
817   delete FastIS;
818 }
819
820 void
821 SelectionDAGISel::FinishBasicBlock(MachineBasicBlock *BB) {
822
823   DEBUG(dbgs() << "Total amount of phi nodes to update: "
824                << FuncInfo->PHINodesToUpdate.size() << "\n");
825   DEBUG(for (unsigned i = 0, e = FuncInfo->PHINodesToUpdate.size(); i != e; ++i)
826           dbgs() << "Node " << i << " : ("
827                  << FuncInfo->PHINodesToUpdate[i].first
828                  << ", " << FuncInfo->PHINodesToUpdate[i].second << ")\n");
829
830   // Next, now that we know what the last MBB the LLVM BB expanded is, update
831   // PHI nodes in successors.
832   if (SDB->SwitchCases.empty() &&
833       SDB->JTCases.empty() &&
834       SDB->BitTestCases.empty()) {
835     for (unsigned i = 0, e = FuncInfo->PHINodesToUpdate.size(); i != e; ++i) {
836       MachineInstr *PHI = FuncInfo->PHINodesToUpdate[i].first;
837       assert(PHI->isPHI() &&
838              "This is not a machine PHI node that we are updating!");
839       if (!BB->isSuccessor(PHI->getParent()))
840         continue;
841       PHI->addOperand(
842         MachineOperand::CreateReg(FuncInfo->PHINodesToUpdate[i].second, false));
843       PHI->addOperand(MachineOperand::CreateMBB(BB));
844     }
845     return;
846   }
847
848   for (unsigned i = 0, e = SDB->BitTestCases.size(); i != e; ++i) {
849     // Lower header first, if it wasn't already lowered
850     if (!SDB->BitTestCases[i].Emitted) {
851       // Set the current basic block to the mbb we wish to insert the code into
852       BB = SDB->BitTestCases[i].Parent;
853       // Emit the code
854       SDB->visitBitTestHeader(SDB->BitTestCases[i], BB);
855       CurDAG->setRoot(SDB->getRoot());
856       SDB->clear();
857       BB = CodeGenAndEmitDAG(BB);
858     }
859
860     for (unsigned j = 0, ej = SDB->BitTestCases[i].Cases.size(); j != ej; ++j) {
861       // Set the current basic block to the mbb we wish to insert the code into
862       BB = SDB->BitTestCases[i].Cases[j].ThisBB;
863       // Emit the code
864       if (j+1 != ej)
865         SDB->visitBitTestCase(SDB->BitTestCases[i].Cases[j+1].ThisBB,
866                               SDB->BitTestCases[i].Reg,
867                               SDB->BitTestCases[i].Cases[j],
868                               BB);
869       else
870         SDB->visitBitTestCase(SDB->BitTestCases[i].Default,
871                               SDB->BitTestCases[i].Reg,
872                               SDB->BitTestCases[i].Cases[j],
873                               BB);
874
875
876       CurDAG->setRoot(SDB->getRoot());
877       SDB->clear();
878       BB = CodeGenAndEmitDAG(BB);
879     }
880
881     // Update PHI Nodes
882     for (unsigned pi = 0, pe = FuncInfo->PHINodesToUpdate.size();
883          pi != pe; ++pi) {
884       MachineInstr *PHI = FuncInfo->PHINodesToUpdate[pi].first;
885       MachineBasicBlock *PHIBB = PHI->getParent();
886       assert(PHI->isPHI() &&
887              "This is not a machine PHI node that we are updating!");
888       // This is "default" BB. We have two jumps to it. From "header" BB and
889       // from last "case" BB.
890       if (PHIBB == SDB->BitTestCases[i].Default) {
891         PHI->addOperand(MachineOperand::
892                         CreateReg(FuncInfo->PHINodesToUpdate[pi].second,
893                                   false));
894         PHI->addOperand(MachineOperand::CreateMBB(SDB->BitTestCases[i].Parent));
895         PHI->addOperand(MachineOperand::
896                         CreateReg(FuncInfo->PHINodesToUpdate[pi].second,
897                                   false));
898         PHI->addOperand(MachineOperand::CreateMBB(SDB->BitTestCases[i].Cases.
899                                                   back().ThisBB));
900       }
901       // One of "cases" BB.
902       for (unsigned j = 0, ej = SDB->BitTestCases[i].Cases.size();
903            j != ej; ++j) {
904         MachineBasicBlock* cBB = SDB->BitTestCases[i].Cases[j].ThisBB;
905         if (cBB->isSuccessor(PHIBB)) {
906           PHI->addOperand(MachineOperand::
907                           CreateReg(FuncInfo->PHINodesToUpdate[pi].second,
908                                     false));
909           PHI->addOperand(MachineOperand::CreateMBB(cBB));
910         }
911       }
912     }
913   }
914   SDB->BitTestCases.clear();
915
916   // If the JumpTable record is filled in, then we need to emit a jump table.
917   // Updating the PHI nodes is tricky in this case, since we need to determine
918   // whether the PHI is a successor of the range check MBB or the jump table MBB
919   for (unsigned i = 0, e = SDB->JTCases.size(); i != e; ++i) {
920     // Lower header first, if it wasn't already lowered
921     if (!SDB->JTCases[i].first.Emitted) {
922       // Set the current basic block to the mbb we wish to insert the code into
923       BB = SDB->JTCases[i].first.HeaderBB;
924       // Emit the code
925       SDB->visitJumpTableHeader(SDB->JTCases[i].second, SDB->JTCases[i].first,
926                                 BB);
927       CurDAG->setRoot(SDB->getRoot());
928       SDB->clear();
929       BB = CodeGenAndEmitDAG(BB);
930     }
931
932     // Set the current basic block to the mbb we wish to insert the code into
933     BB = SDB->JTCases[i].second.MBB;
934     // Emit the code
935     SDB->visitJumpTable(SDB->JTCases[i].second);
936     CurDAG->setRoot(SDB->getRoot());
937     SDB->clear();
938     BB = CodeGenAndEmitDAG(BB);
939
940     // Update PHI Nodes
941     for (unsigned pi = 0, pe = FuncInfo->PHINodesToUpdate.size();
942          pi != pe; ++pi) {
943       MachineInstr *PHI = FuncInfo->PHINodesToUpdate[pi].first;
944       MachineBasicBlock *PHIBB = PHI->getParent();
945       assert(PHI->isPHI() &&
946              "This is not a machine PHI node that we are updating!");
947       // "default" BB. We can go there only from header BB.
948       if (PHIBB == SDB->JTCases[i].second.Default) {
949         PHI->addOperand
950           (MachineOperand::CreateReg(FuncInfo->PHINodesToUpdate[pi].second,
951                                      false));
952         PHI->addOperand
953           (MachineOperand::CreateMBB(SDB->JTCases[i].first.HeaderBB));
954       }
955       // JT BB. Just iterate over successors here
956       if (BB->isSuccessor(PHIBB)) {
957         PHI->addOperand
958           (MachineOperand::CreateReg(FuncInfo->PHINodesToUpdate[pi].second,
959                                      false));
960         PHI->addOperand(MachineOperand::CreateMBB(BB));
961       }
962     }
963   }
964   SDB->JTCases.clear();
965
966   // If the switch block involved a branch to one of the actual successors, we
967   // need to update PHI nodes in that block.
968   for (unsigned i = 0, e = FuncInfo->PHINodesToUpdate.size(); i != e; ++i) {
969     MachineInstr *PHI = FuncInfo->PHINodesToUpdate[i].first;
970     assert(PHI->isPHI() &&
971            "This is not a machine PHI node that we are updating!");
972     if (BB->isSuccessor(PHI->getParent())) {
973       PHI->addOperand(
974         MachineOperand::CreateReg(FuncInfo->PHINodesToUpdate[i].second, false));
975       PHI->addOperand(MachineOperand::CreateMBB(BB));
976     }
977   }
978
979   // If we generated any switch lowering information, build and codegen any
980   // additional DAGs necessary.
981   for (unsigned i = 0, e = SDB->SwitchCases.size(); i != e; ++i) {
982     // Set the current basic block to the mbb we wish to insert the code into
983     MachineBasicBlock *ThisBB = BB = SDB->SwitchCases[i].ThisBB;
984
985     // Determine the unique successors.
986     SmallVector<MachineBasicBlock *, 2> Succs;
987     Succs.push_back(SDB->SwitchCases[i].TrueBB);
988     if (SDB->SwitchCases[i].TrueBB != SDB->SwitchCases[i].FalseBB)
989       Succs.push_back(SDB->SwitchCases[i].FalseBB);
990
991     // Emit the code. Note that this could result in ThisBB being split, so
992     // we need to check for updates.
993     SDB->visitSwitchCase(SDB->SwitchCases[i], BB);
994     CurDAG->setRoot(SDB->getRoot());
995     SDB->clear();
996     ThisBB = CodeGenAndEmitDAG(BB);
997
998     // Handle any PHI nodes in successors of this chunk, as if we were coming
999     // from the original BB before switch expansion.  Note that PHI nodes can
1000     // occur multiple times in PHINodesToUpdate.  We have to be very careful to
1001     // handle them the right number of times.
1002     for (unsigned i = 0, e = Succs.size(); i != e; ++i) {
1003       BB = Succs[i];
1004       // BB may have been removed from the CFG if a branch was constant folded.
1005       if (ThisBB->isSuccessor(BB)) {
1006         for (MachineBasicBlock::iterator Phi = BB->begin();
1007              Phi != BB->end() && Phi->isPHI();
1008              ++Phi) {
1009           // This value for this PHI node is recorded in PHINodesToUpdate.
1010           for (unsigned pn = 0; ; ++pn) {
1011             assert(pn != FuncInfo->PHINodesToUpdate.size() &&
1012                    "Didn't find PHI entry!");
1013             if (FuncInfo->PHINodesToUpdate[pn].first == Phi) {
1014               Phi->addOperand(MachineOperand::
1015                               CreateReg(FuncInfo->PHINodesToUpdate[pn].second,
1016                                         false));
1017               Phi->addOperand(MachineOperand::CreateMBB(ThisBB));
1018               break;
1019             }
1020           }
1021         }
1022       }
1023     }
1024   }
1025   SDB->SwitchCases.clear();
1026 }
1027
1028
1029 /// Create the scheduler. If a specific scheduler was specified
1030 /// via the SchedulerRegistry, use it, otherwise select the
1031 /// one preferred by the target.
1032 ///
1033 ScheduleDAGSDNodes *SelectionDAGISel::CreateScheduler() {
1034   RegisterScheduler::FunctionPassCtor Ctor = RegisterScheduler::getDefault();
1035
1036   if (!Ctor) {
1037     Ctor = ISHeuristic;
1038     RegisterScheduler::setDefault(Ctor);
1039   }
1040
1041   return Ctor(this, OptLevel);
1042 }
1043
1044 ScheduleHazardRecognizer *SelectionDAGISel::CreateTargetHazardRecognizer() {
1045   return new ScheduleHazardRecognizer();
1046 }
1047
1048 //===----------------------------------------------------------------------===//
1049 // Helper functions used by the generated instruction selector.
1050 //===----------------------------------------------------------------------===//
1051 // Calls to these methods are generated by tblgen.
1052
1053 /// CheckAndMask - The isel is trying to match something like (and X, 255).  If
1054 /// the dag combiner simplified the 255, we still want to match.  RHS is the
1055 /// actual value in the DAG on the RHS of an AND, and DesiredMaskS is the value
1056 /// specified in the .td file (e.g. 255).
1057 bool SelectionDAGISel::CheckAndMask(SDValue LHS, ConstantSDNode *RHS,
1058                                     int64_t DesiredMaskS) const {
1059   const APInt &ActualMask = RHS->getAPIntValue();
1060   const APInt &DesiredMask = APInt(LHS.getValueSizeInBits(), DesiredMaskS);
1061
1062   // If the actual mask exactly matches, success!
1063   if (ActualMask == DesiredMask)
1064     return true;
1065
1066   // If the actual AND mask is allowing unallowed bits, this doesn't match.
1067   if (ActualMask.intersects(~DesiredMask))
1068     return false;
1069
1070   // Otherwise, the DAG Combiner may have proven that the value coming in is
1071   // either already zero or is not demanded.  Check for known zero input bits.
1072   APInt NeededMask = DesiredMask & ~ActualMask;
1073   if (CurDAG->MaskedValueIsZero(LHS, NeededMask))
1074     return true;
1075
1076   // TODO: check to see if missing bits are just not demanded.
1077
1078   // Otherwise, this pattern doesn't match.
1079   return false;
1080 }
1081
1082 /// CheckOrMask - The isel is trying to match something like (or X, 255).  If
1083 /// the dag combiner simplified the 255, we still want to match.  RHS is the
1084 /// actual value in the DAG on the RHS of an OR, and DesiredMaskS is the value
1085 /// specified in the .td file (e.g. 255).
1086 bool SelectionDAGISel::CheckOrMask(SDValue LHS, ConstantSDNode *RHS,
1087                                    int64_t DesiredMaskS) const {
1088   const APInt &ActualMask = RHS->getAPIntValue();
1089   const APInt &DesiredMask = APInt(LHS.getValueSizeInBits(), DesiredMaskS);
1090
1091   // If the actual mask exactly matches, success!
1092   if (ActualMask == DesiredMask)
1093     return true;
1094
1095   // If the actual AND mask is allowing unallowed bits, this doesn't match.
1096   if (ActualMask.intersects(~DesiredMask))
1097     return false;
1098
1099   // Otherwise, the DAG Combiner may have proven that the value coming in is
1100   // either already zero or is not demanded.  Check for known zero input bits.
1101   APInt NeededMask = DesiredMask & ~ActualMask;
1102
1103   APInt KnownZero, KnownOne;
1104   CurDAG->ComputeMaskedBits(LHS, NeededMask, KnownZero, KnownOne);
1105
1106   // If all the missing bits in the or are already known to be set, match!
1107   if ((NeededMask & KnownOne) == NeededMask)
1108     return true;
1109
1110   // TODO: check to see if missing bits are just not demanded.
1111
1112   // Otherwise, this pattern doesn't match.
1113   return false;
1114 }
1115
1116
1117 /// SelectInlineAsmMemoryOperands - Calls to this are automatically generated
1118 /// by tblgen.  Others should not call it.
1119 void SelectionDAGISel::
1120 SelectInlineAsmMemoryOperands(std::vector<SDValue> &Ops) {
1121   std::vector<SDValue> InOps;
1122   std::swap(InOps, Ops);
1123
1124   Ops.push_back(InOps[InlineAsm::Op_InputChain]); // 0
1125   Ops.push_back(InOps[InlineAsm::Op_AsmString]);  // 1
1126   Ops.push_back(InOps[InlineAsm::Op_MDNode]);     // 2, !srcloc
1127
1128   unsigned i = InlineAsm::Op_FirstOperand, e = InOps.size();
1129   if (InOps[e-1].getValueType() == MVT::Flag)
1130     --e;  // Don't process a flag operand if it is here.
1131
1132   while (i != e) {
1133     unsigned Flags = cast<ConstantSDNode>(InOps[i])->getZExtValue();
1134     if (!InlineAsm::isMemKind(Flags)) {
1135       // Just skip over this operand, copying the operands verbatim.
1136       Ops.insert(Ops.end(), InOps.begin()+i,
1137                  InOps.begin()+i+InlineAsm::getNumOperandRegisters(Flags) + 1);
1138       i += InlineAsm::getNumOperandRegisters(Flags) + 1;
1139     } else {
1140       assert(InlineAsm::getNumOperandRegisters(Flags) == 1 &&
1141              "Memory operand with multiple values?");
1142       // Otherwise, this is a memory operand.  Ask the target to select it.
1143       std::vector<SDValue> SelOps;
1144       if (SelectInlineAsmMemoryOperand(InOps[i+1], 'm', SelOps))
1145         report_fatal_error("Could not match memory address.  Inline asm"
1146                            " failure!");
1147
1148       // Add this to the output node.
1149       unsigned NewFlags =
1150         InlineAsm::getFlagWord(InlineAsm::Kind_Mem, SelOps.size());
1151       Ops.push_back(CurDAG->getTargetConstant(NewFlags, MVT::i32));
1152       Ops.insert(Ops.end(), SelOps.begin(), SelOps.end());
1153       i += 2;
1154     }
1155   }
1156
1157   // Add the flag input back if present.
1158   if (e != InOps.size())
1159     Ops.push_back(InOps.back());
1160 }
1161
1162 /// findFlagUse - Return use of EVT::Flag value produced by the specified
1163 /// SDNode.
1164 ///
1165 static SDNode *findFlagUse(SDNode *N) {
1166   unsigned FlagResNo = N->getNumValues()-1;
1167   for (SDNode::use_iterator I = N->use_begin(), E = N->use_end(); I != E; ++I) {
1168     SDUse &Use = I.getUse();
1169     if (Use.getResNo() == FlagResNo)
1170       return Use.getUser();
1171   }
1172   return NULL;
1173 }
1174
1175 /// findNonImmUse - Return true if "Use" is a non-immediate use of "Def".
1176 /// This function recursively traverses up the operand chain, ignoring
1177 /// certain nodes.
1178 static bool findNonImmUse(SDNode *Use, SDNode* Def, SDNode *ImmedUse,
1179                           SDNode *Root, SmallPtrSet<SDNode*, 16> &Visited,
1180                           bool IgnoreChains) {
1181   // The NodeID's are given uniques ID's where a node ID is guaranteed to be
1182   // greater than all of its (recursive) operands.  If we scan to a point where
1183   // 'use' is smaller than the node we're scanning for, then we know we will
1184   // never find it.
1185   //
1186   // The Use may be -1 (unassigned) if it is a newly allocated node.  This can
1187   // happen because we scan down to newly selected nodes in the case of flag
1188   // uses.
1189   if ((Use->getNodeId() < Def->getNodeId() && Use->getNodeId() != -1))
1190     return false;
1191   
1192   // Don't revisit nodes if we already scanned it and didn't fail, we know we
1193   // won't fail if we scan it again.
1194   if (!Visited.insert(Use))
1195     return false;
1196
1197   for (unsigned i = 0, e = Use->getNumOperands(); i != e; ++i) {
1198     // Ignore chain uses, they are validated by HandleMergeInputChains.
1199     if (Use->getOperand(i).getValueType() == MVT::Other && IgnoreChains)
1200       continue;
1201     
1202     SDNode *N = Use->getOperand(i).getNode();
1203     if (N == Def) {
1204       if (Use == ImmedUse || Use == Root)
1205         continue;  // We are not looking for immediate use.
1206       assert(N != Root);
1207       return true;
1208     }
1209
1210     // Traverse up the operand chain.
1211     if (findNonImmUse(N, Def, ImmedUse, Root, Visited, IgnoreChains))
1212       return true;
1213   }
1214   return false;
1215 }
1216
1217 /// IsProfitableToFold - Returns true if it's profitable to fold the specific
1218 /// operand node N of U during instruction selection that starts at Root.
1219 bool SelectionDAGISel::IsProfitableToFold(SDValue N, SDNode *U,
1220                                           SDNode *Root) const {
1221   if (OptLevel == CodeGenOpt::None) return false;
1222   return N.hasOneUse();
1223 }
1224
1225 /// IsLegalToFold - Returns true if the specific operand node N of
1226 /// U can be folded during instruction selection that starts at Root.
1227 bool SelectionDAGISel::IsLegalToFold(SDValue N, SDNode *U, SDNode *Root,
1228                                      CodeGenOpt::Level OptLevel,
1229                                      bool IgnoreChains) {
1230   if (OptLevel == CodeGenOpt::None) return false;
1231
1232   // If Root use can somehow reach N through a path that that doesn't contain
1233   // U then folding N would create a cycle. e.g. In the following
1234   // diagram, Root can reach N through X. If N is folded into into Root, then
1235   // X is both a predecessor and a successor of U.
1236   //
1237   //          [N*]           //
1238   //         ^   ^           //
1239   //        /     \          //
1240   //      [U*]    [X]?       //
1241   //        ^     ^          //
1242   //         \   /           //
1243   //          \ /            //
1244   //         [Root*]         //
1245   //
1246   // * indicates nodes to be folded together.
1247   //
1248   // If Root produces a flag, then it gets (even more) interesting. Since it
1249   // will be "glued" together with its flag use in the scheduler, we need to
1250   // check if it might reach N.
1251   //
1252   //          [N*]           //
1253   //         ^   ^           //
1254   //        /     \          //
1255   //      [U*]    [X]?       //
1256   //        ^       ^        //
1257   //         \       \       //
1258   //          \      |       //
1259   //         [Root*] |       //
1260   //          ^      |       //
1261   //          f      |       //
1262   //          |      /       //
1263   //         [Y]    /        //
1264   //           ^   /         //
1265   //           f  /          //
1266   //           | /           //
1267   //          [FU]           //
1268   //
1269   // If FU (flag use) indirectly reaches N (the load), and Root folds N
1270   // (call it Fold), then X is a predecessor of FU and a successor of
1271   // Fold. But since Fold and FU are flagged together, this will create
1272   // a cycle in the scheduling graph.
1273
1274   // If the node has flags, walk down the graph to the "lowest" node in the
1275   // flagged set.
1276   EVT VT = Root->getValueType(Root->getNumValues()-1);
1277   while (VT == MVT::Flag) {
1278     SDNode *FU = findFlagUse(Root);
1279     if (FU == NULL)
1280       break;
1281     Root = FU;
1282     VT = Root->getValueType(Root->getNumValues()-1);
1283     
1284     // If our query node has a flag result with a use, we've walked up it.  If
1285     // the user (which has already been selected) has a chain or indirectly uses
1286     // the chain, our WalkChainUsers predicate will not consider it.  Because of
1287     // this, we cannot ignore chains in this predicate.
1288     IgnoreChains = false;
1289   }
1290   
1291
1292   SmallPtrSet<SDNode*, 16> Visited;
1293   return !findNonImmUse(Root, N.getNode(), U, Root, Visited, IgnoreChains);
1294 }
1295
1296 SDNode *SelectionDAGISel::Select_INLINEASM(SDNode *N) {
1297   std::vector<SDValue> Ops(N->op_begin(), N->op_end());
1298   SelectInlineAsmMemoryOperands(Ops);
1299     
1300   std::vector<EVT> VTs;
1301   VTs.push_back(MVT::Other);
1302   VTs.push_back(MVT::Flag);
1303   SDValue New = CurDAG->getNode(ISD::INLINEASM, N->getDebugLoc(),
1304                                 VTs, &Ops[0], Ops.size());
1305   New->setNodeId(-1);
1306   return New.getNode();
1307 }
1308
1309 SDNode *SelectionDAGISel::Select_UNDEF(SDNode *N) {
1310   return CurDAG->SelectNodeTo(N, TargetOpcode::IMPLICIT_DEF,N->getValueType(0));
1311 }
1312
1313 /// GetVBR - decode a vbr encoding whose top bit is set.
1314 ALWAYS_INLINE static uint64_t
1315 GetVBR(uint64_t Val, const unsigned char *MatcherTable, unsigned &Idx) {
1316   assert(Val >= 128 && "Not a VBR");
1317   Val &= 127;  // Remove first vbr bit.
1318   
1319   unsigned Shift = 7;
1320   uint64_t NextBits;
1321   do {
1322     NextBits = MatcherTable[Idx++];
1323     Val |= (NextBits&127) << Shift;
1324     Shift += 7;
1325   } while (NextBits & 128);
1326   
1327   return Val;
1328 }
1329
1330
1331 /// UpdateChainsAndFlags - When a match is complete, this method updates uses of
1332 /// interior flag and chain results to use the new flag and chain results.
1333 void SelectionDAGISel::
1334 UpdateChainsAndFlags(SDNode *NodeToMatch, SDValue InputChain,
1335                      const SmallVectorImpl<SDNode*> &ChainNodesMatched,
1336                      SDValue InputFlag,
1337                      const SmallVectorImpl<SDNode*> &FlagResultNodesMatched,
1338                      bool isMorphNodeTo) {
1339   SmallVector<SDNode*, 4> NowDeadNodes;
1340   
1341   ISelUpdater ISU(ISelPosition);
1342
1343   // Now that all the normal results are replaced, we replace the chain and
1344   // flag results if present.
1345   if (!ChainNodesMatched.empty()) {
1346     assert(InputChain.getNode() != 0 &&
1347            "Matched input chains but didn't produce a chain");
1348     // Loop over all of the nodes we matched that produced a chain result.
1349     // Replace all the chain results with the final chain we ended up with.
1350     for (unsigned i = 0, e = ChainNodesMatched.size(); i != e; ++i) {
1351       SDNode *ChainNode = ChainNodesMatched[i];
1352       
1353       // If this node was already deleted, don't look at it.
1354       if (ChainNode->getOpcode() == ISD::DELETED_NODE)
1355         continue;
1356       
1357       // Don't replace the results of the root node if we're doing a
1358       // MorphNodeTo.
1359       if (ChainNode == NodeToMatch && isMorphNodeTo)
1360         continue;
1361       
1362       SDValue ChainVal = SDValue(ChainNode, ChainNode->getNumValues()-1);
1363       if (ChainVal.getValueType() == MVT::Flag)
1364         ChainVal = ChainVal.getValue(ChainVal->getNumValues()-2);
1365       assert(ChainVal.getValueType() == MVT::Other && "Not a chain?");
1366       CurDAG->ReplaceAllUsesOfValueWith(ChainVal, InputChain, &ISU);
1367       
1368       // If the node became dead and we haven't already seen it, delete it.
1369       if (ChainNode->use_empty() &&
1370           !std::count(NowDeadNodes.begin(), NowDeadNodes.end(), ChainNode))
1371         NowDeadNodes.push_back(ChainNode);
1372     }
1373   }
1374   
1375   // If the result produces a flag, update any flag results in the matched
1376   // pattern with the flag result.
1377   if (InputFlag.getNode() != 0) {
1378     // Handle any interior nodes explicitly marked.
1379     for (unsigned i = 0, e = FlagResultNodesMatched.size(); i != e; ++i) {
1380       SDNode *FRN = FlagResultNodesMatched[i];
1381       
1382       // If this node was already deleted, don't look at it.
1383       if (FRN->getOpcode() == ISD::DELETED_NODE)
1384         continue;
1385       
1386       assert(FRN->getValueType(FRN->getNumValues()-1) == MVT::Flag &&
1387              "Doesn't have a flag result");
1388       CurDAG->ReplaceAllUsesOfValueWith(SDValue(FRN, FRN->getNumValues()-1),
1389                                         InputFlag, &ISU);
1390       
1391       // If the node became dead and we haven't already seen it, delete it.
1392       if (FRN->use_empty() &&
1393           !std::count(NowDeadNodes.begin(), NowDeadNodes.end(), FRN))
1394         NowDeadNodes.push_back(FRN);
1395     }
1396   }
1397   
1398   if (!NowDeadNodes.empty())
1399     CurDAG->RemoveDeadNodes(NowDeadNodes, &ISU);
1400   
1401   DEBUG(errs() << "ISEL: Match complete!\n");
1402 }
1403
1404 enum ChainResult {
1405   CR_Simple,
1406   CR_InducesCycle,
1407   CR_LeadsToInteriorNode
1408 };
1409
1410 /// WalkChainUsers - Walk down the users of the specified chained node that is
1411 /// part of the pattern we're matching, looking at all of the users we find.
1412 /// This determines whether something is an interior node, whether we have a
1413 /// non-pattern node in between two pattern nodes (which prevent folding because
1414 /// it would induce a cycle) and whether we have a TokenFactor node sandwiched
1415 /// between pattern nodes (in which case the TF becomes part of the pattern).
1416 ///
1417 /// The walk we do here is guaranteed to be small because we quickly get down to
1418 /// already selected nodes "below" us.
1419 static ChainResult 
1420 WalkChainUsers(SDNode *ChainedNode,
1421                SmallVectorImpl<SDNode*> &ChainedNodesInPattern,
1422                SmallVectorImpl<SDNode*> &InteriorChainedNodes) {
1423   ChainResult Result = CR_Simple;
1424   
1425   for (SDNode::use_iterator UI = ChainedNode->use_begin(),
1426          E = ChainedNode->use_end(); UI != E; ++UI) {
1427     // Make sure the use is of the chain, not some other value we produce.
1428     if (UI.getUse().getValueType() != MVT::Other) continue;
1429     
1430     SDNode *User = *UI;
1431
1432     // If we see an already-selected machine node, then we've gone beyond the
1433     // pattern that we're selecting down into the already selected chunk of the
1434     // DAG.
1435     if (User->isMachineOpcode() ||
1436         User->getOpcode() == ISD::HANDLENODE)  // Root of the graph.
1437       continue;
1438     
1439     if (User->getOpcode() == ISD::CopyToReg ||
1440         User->getOpcode() == ISD::CopyFromReg ||
1441         User->getOpcode() == ISD::INLINEASM ||
1442         User->getOpcode() == ISD::EH_LABEL) {
1443       // If their node ID got reset to -1 then they've already been selected.
1444       // Treat them like a MachineOpcode.
1445       if (User->getNodeId() == -1)
1446         continue;
1447     }
1448
1449     // If we have a TokenFactor, we handle it specially.
1450     if (User->getOpcode() != ISD::TokenFactor) {
1451       // If the node isn't a token factor and isn't part of our pattern, then it
1452       // must be a random chained node in between two nodes we're selecting.
1453       // This happens when we have something like:
1454       //   x = load ptr
1455       //   call
1456       //   y = x+4
1457       //   store y -> ptr
1458       // Because we structurally match the load/store as a read/modify/write,
1459       // but the call is chained between them.  We cannot fold in this case
1460       // because it would induce a cycle in the graph.
1461       if (!std::count(ChainedNodesInPattern.begin(),
1462                       ChainedNodesInPattern.end(), User))
1463         return CR_InducesCycle;
1464       
1465       // Otherwise we found a node that is part of our pattern.  For example in:
1466       //   x = load ptr
1467       //   y = x+4
1468       //   store y -> ptr
1469       // This would happen when we're scanning down from the load and see the
1470       // store as a user.  Record that there is a use of ChainedNode that is
1471       // part of the pattern and keep scanning uses.
1472       Result = CR_LeadsToInteriorNode;
1473       InteriorChainedNodes.push_back(User);
1474       continue;
1475     }
1476     
1477     // If we found a TokenFactor, there are two cases to consider: first if the
1478     // TokenFactor is just hanging "below" the pattern we're matching (i.e. no
1479     // uses of the TF are in our pattern) we just want to ignore it.  Second,
1480     // the TokenFactor can be sandwiched in between two chained nodes, like so:
1481     //     [Load chain]
1482     //         ^
1483     //         |
1484     //       [Load]
1485     //       ^    ^
1486     //       |    \                    DAG's like cheese
1487     //      /       \                       do you?
1488     //     /         |
1489     // [TokenFactor] [Op]
1490     //     ^          ^
1491     //     |          |
1492     //      \        /
1493     //       \      /
1494     //       [Store]
1495     //
1496     // In this case, the TokenFactor becomes part of our match and we rewrite it
1497     // as a new TokenFactor.
1498     //
1499     // To distinguish these two cases, do a recursive walk down the uses.
1500     switch (WalkChainUsers(User, ChainedNodesInPattern, InteriorChainedNodes)) {
1501     case CR_Simple:
1502       // If the uses of the TokenFactor are just already-selected nodes, ignore
1503       // it, it is "below" our pattern.
1504       continue;
1505     case CR_InducesCycle:
1506       // If the uses of the TokenFactor lead to nodes that are not part of our
1507       // pattern that are not selected, folding would turn this into a cycle,
1508       // bail out now.
1509       return CR_InducesCycle;
1510     case CR_LeadsToInteriorNode:
1511       break;  // Otherwise, keep processing.
1512     }
1513     
1514     // Okay, we know we're in the interesting interior case.  The TokenFactor
1515     // is now going to be considered part of the pattern so that we rewrite its
1516     // uses (it may have uses that are not part of the pattern) with the
1517     // ultimate chain result of the generated code.  We will also add its chain
1518     // inputs as inputs to the ultimate TokenFactor we create.
1519     Result = CR_LeadsToInteriorNode;
1520     ChainedNodesInPattern.push_back(User);
1521     InteriorChainedNodes.push_back(User);
1522     continue;
1523   }
1524   
1525   return Result;
1526 }
1527
1528 /// HandleMergeInputChains - This implements the OPC_EmitMergeInputChains
1529 /// operation for when the pattern matched at least one node with a chains.  The
1530 /// input vector contains a list of all of the chained nodes that we match.  We
1531 /// must determine if this is a valid thing to cover (i.e. matching it won't
1532 /// induce cycles in the DAG) and if so, creating a TokenFactor node. that will
1533 /// be used as the input node chain for the generated nodes.
1534 static SDValue
1535 HandleMergeInputChains(SmallVectorImpl<SDNode*> &ChainNodesMatched,
1536                        SelectionDAG *CurDAG) {
1537   // Walk all of the chained nodes we've matched, recursively scanning down the
1538   // users of the chain result. This adds any TokenFactor nodes that are caught
1539   // in between chained nodes to the chained and interior nodes list.
1540   SmallVector<SDNode*, 3> InteriorChainedNodes;
1541   for (unsigned i = 0, e = ChainNodesMatched.size(); i != e; ++i) {
1542     if (WalkChainUsers(ChainNodesMatched[i], ChainNodesMatched,
1543                        InteriorChainedNodes) == CR_InducesCycle)
1544       return SDValue(); // Would induce a cycle.
1545   }
1546   
1547   // Okay, we have walked all the matched nodes and collected TokenFactor nodes
1548   // that we are interested in.  Form our input TokenFactor node.
1549   SmallVector<SDValue, 3> InputChains;
1550   for (unsigned i = 0, e = ChainNodesMatched.size(); i != e; ++i) {
1551     // Add the input chain of this node to the InputChains list (which will be
1552     // the operands of the generated TokenFactor) if it's not an interior node.
1553     SDNode *N = ChainNodesMatched[i];
1554     if (N->getOpcode() != ISD::TokenFactor) {
1555       if (std::count(InteriorChainedNodes.begin(),InteriorChainedNodes.end(),N))
1556         continue;
1557       
1558       // Otherwise, add the input chain.
1559       SDValue InChain = ChainNodesMatched[i]->getOperand(0);
1560       assert(InChain.getValueType() == MVT::Other && "Not a chain");
1561       InputChains.push_back(InChain);
1562       continue;
1563     }
1564     
1565     // If we have a token factor, we want to add all inputs of the token factor
1566     // that are not part of the pattern we're matching.
1567     for (unsigned op = 0, e = N->getNumOperands(); op != e; ++op) {
1568       if (!std::count(ChainNodesMatched.begin(), ChainNodesMatched.end(),
1569                       N->getOperand(op).getNode()))
1570         InputChains.push_back(N->getOperand(op));
1571     }
1572   }
1573   
1574   SDValue Res;
1575   if (InputChains.size() == 1)
1576     return InputChains[0];
1577   return CurDAG->getNode(ISD::TokenFactor, ChainNodesMatched[0]->getDebugLoc(),
1578                          MVT::Other, &InputChains[0], InputChains.size());
1579 }  
1580
1581 /// MorphNode - Handle morphing a node in place for the selector.
1582 SDNode *SelectionDAGISel::
1583 MorphNode(SDNode *Node, unsigned TargetOpc, SDVTList VTList,
1584           const SDValue *Ops, unsigned NumOps, unsigned EmitNodeInfo) {
1585   // It is possible we're using MorphNodeTo to replace a node with no
1586   // normal results with one that has a normal result (or we could be
1587   // adding a chain) and the input could have flags and chains as well.
1588   // In this case we need to shift the operands down.
1589   // FIXME: This is a horrible hack and broken in obscure cases, no worse
1590   // than the old isel though.
1591   int OldFlagResultNo = -1, OldChainResultNo = -1;
1592
1593   unsigned NTMNumResults = Node->getNumValues();
1594   if (Node->getValueType(NTMNumResults-1) == MVT::Flag) {
1595     OldFlagResultNo = NTMNumResults-1;
1596     if (NTMNumResults != 1 &&
1597         Node->getValueType(NTMNumResults-2) == MVT::Other)
1598       OldChainResultNo = NTMNumResults-2;
1599   } else if (Node->getValueType(NTMNumResults-1) == MVT::Other)
1600     OldChainResultNo = NTMNumResults-1;
1601
1602   // Call the underlying SelectionDAG routine to do the transmogrification. Note
1603   // that this deletes operands of the old node that become dead.
1604   SDNode *Res = CurDAG->MorphNodeTo(Node, ~TargetOpc, VTList, Ops, NumOps);
1605
1606   // MorphNodeTo can operate in two ways: if an existing node with the
1607   // specified operands exists, it can just return it.  Otherwise, it
1608   // updates the node in place to have the requested operands.
1609   if (Res == Node) {
1610     // If we updated the node in place, reset the node ID.  To the isel,
1611     // this should be just like a newly allocated machine node.
1612     Res->setNodeId(-1);
1613   }
1614
1615   unsigned ResNumResults = Res->getNumValues();
1616   // Move the flag if needed.
1617   if ((EmitNodeInfo & OPFL_FlagOutput) && OldFlagResultNo != -1 &&
1618       (unsigned)OldFlagResultNo != ResNumResults-1)
1619     CurDAG->ReplaceAllUsesOfValueWith(SDValue(Node, OldFlagResultNo), 
1620                                       SDValue(Res, ResNumResults-1));
1621
1622   if ((EmitNodeInfo & OPFL_FlagOutput) != 0)
1623   --ResNumResults;
1624
1625   // Move the chain reference if needed.
1626   if ((EmitNodeInfo & OPFL_Chain) && OldChainResultNo != -1 &&
1627       (unsigned)OldChainResultNo != ResNumResults-1)
1628     CurDAG->ReplaceAllUsesOfValueWith(SDValue(Node, OldChainResultNo), 
1629                                       SDValue(Res, ResNumResults-1));
1630
1631   // Otherwise, no replacement happened because the node already exists. Replace
1632   // Uses of the old node with the new one.
1633   if (Res != Node)
1634     CurDAG->ReplaceAllUsesWith(Node, Res);
1635   
1636   return Res;
1637 }
1638
1639 /// CheckPatternPredicate - Implements OP_CheckPatternPredicate.
1640 ALWAYS_INLINE static bool
1641 CheckSame(const unsigned char *MatcherTable, unsigned &MatcherIndex,
1642           SDValue N, const SmallVectorImpl<SDValue> &RecordedNodes) {
1643   // Accept if it is exactly the same as a previously recorded node.
1644   unsigned RecNo = MatcherTable[MatcherIndex++];
1645   assert(RecNo < RecordedNodes.size() && "Invalid CheckSame");
1646   return N == RecordedNodes[RecNo];
1647 }
1648   
1649 /// CheckPatternPredicate - Implements OP_CheckPatternPredicate.
1650 ALWAYS_INLINE static bool
1651 CheckPatternPredicate(const unsigned char *MatcherTable, unsigned &MatcherIndex,
1652                       SelectionDAGISel &SDISel) {
1653   return SDISel.CheckPatternPredicate(MatcherTable[MatcherIndex++]);
1654 }
1655
1656 /// CheckNodePredicate - Implements OP_CheckNodePredicate.
1657 ALWAYS_INLINE static bool
1658 CheckNodePredicate(const unsigned char *MatcherTable, unsigned &MatcherIndex,
1659                    SelectionDAGISel &SDISel, SDNode *N) {
1660   return SDISel.CheckNodePredicate(N, MatcherTable[MatcherIndex++]);
1661 }
1662
1663 ALWAYS_INLINE static bool
1664 CheckOpcode(const unsigned char *MatcherTable, unsigned &MatcherIndex,
1665             SDNode *N) {
1666   uint16_t Opc = MatcherTable[MatcherIndex++];
1667   Opc |= (unsigned short)MatcherTable[MatcherIndex++] << 8;
1668   return N->getOpcode() == Opc;
1669 }
1670
1671 ALWAYS_INLINE static bool
1672 CheckType(const unsigned char *MatcherTable, unsigned &MatcherIndex,
1673           SDValue N, const TargetLowering &TLI) {
1674   MVT::SimpleValueType VT = (MVT::SimpleValueType)MatcherTable[MatcherIndex++];
1675   if (N.getValueType() == VT) return true;
1676   
1677   // Handle the case when VT is iPTR.
1678   return VT == MVT::iPTR && N.getValueType() == TLI.getPointerTy();
1679 }
1680
1681 ALWAYS_INLINE static bool
1682 CheckChildType(const unsigned char *MatcherTable, unsigned &MatcherIndex,
1683                SDValue N, const TargetLowering &TLI,
1684                unsigned ChildNo) {
1685   if (ChildNo >= N.getNumOperands())
1686     return false;  // Match fails if out of range child #.
1687   return ::CheckType(MatcherTable, MatcherIndex, N.getOperand(ChildNo), TLI);
1688 }
1689
1690
1691 ALWAYS_INLINE static bool
1692 CheckCondCode(const unsigned char *MatcherTable, unsigned &MatcherIndex,
1693               SDValue N) {
1694   return cast<CondCodeSDNode>(N)->get() ==
1695       (ISD::CondCode)MatcherTable[MatcherIndex++];
1696 }
1697
1698 ALWAYS_INLINE static bool
1699 CheckValueType(const unsigned char *MatcherTable, unsigned &MatcherIndex,
1700                SDValue N, const TargetLowering &TLI) {
1701   MVT::SimpleValueType VT = (MVT::SimpleValueType)MatcherTable[MatcherIndex++];
1702   if (cast<VTSDNode>(N)->getVT() == VT)
1703     return true;
1704   
1705   // Handle the case when VT is iPTR.
1706   return VT == MVT::iPTR && cast<VTSDNode>(N)->getVT() == TLI.getPointerTy();
1707 }
1708
1709 ALWAYS_INLINE static bool
1710 CheckInteger(const unsigned char *MatcherTable, unsigned &MatcherIndex,
1711              SDValue N) {
1712   int64_t Val = MatcherTable[MatcherIndex++];
1713   if (Val & 128)
1714     Val = GetVBR(Val, MatcherTable, MatcherIndex);
1715   
1716   ConstantSDNode *C = dyn_cast<ConstantSDNode>(N);
1717   return C != 0 && C->getSExtValue() == Val;
1718 }
1719
1720 ALWAYS_INLINE static bool
1721 CheckAndImm(const unsigned char *MatcherTable, unsigned &MatcherIndex,
1722             SDValue N, SelectionDAGISel &SDISel) {
1723   int64_t Val = MatcherTable[MatcherIndex++];
1724   if (Val & 128)
1725     Val = GetVBR(Val, MatcherTable, MatcherIndex);
1726   
1727   if (N->getOpcode() != ISD::AND) return false;
1728   
1729   ConstantSDNode *C = dyn_cast<ConstantSDNode>(N->getOperand(1));
1730   return C != 0 && SDISel.CheckAndMask(N.getOperand(0), C, Val);
1731 }
1732
1733 ALWAYS_INLINE static bool
1734 CheckOrImm(const unsigned char *MatcherTable, unsigned &MatcherIndex,
1735            SDValue N, SelectionDAGISel &SDISel) {
1736   int64_t Val = MatcherTable[MatcherIndex++];
1737   if (Val & 128)
1738     Val = GetVBR(Val, MatcherTable, MatcherIndex);
1739   
1740   if (N->getOpcode() != ISD::OR) return false;
1741   
1742   ConstantSDNode *C = dyn_cast<ConstantSDNode>(N->getOperand(1));
1743   return C != 0 && SDISel.CheckOrMask(N.getOperand(0), C, Val);
1744 }
1745
1746 /// IsPredicateKnownToFail - If we know how and can do so without pushing a
1747 /// scope, evaluate the current node.  If the current predicate is known to
1748 /// fail, set Result=true and return anything.  If the current predicate is
1749 /// known to pass, set Result=false and return the MatcherIndex to continue
1750 /// with.  If the current predicate is unknown, set Result=false and return the
1751 /// MatcherIndex to continue with. 
1752 static unsigned IsPredicateKnownToFail(const unsigned char *Table,
1753                                        unsigned Index, SDValue N,
1754                                        bool &Result, SelectionDAGISel &SDISel,
1755                                        SmallVectorImpl<SDValue> &RecordedNodes){
1756   switch (Table[Index++]) {
1757   default:
1758     Result = false;
1759     return Index-1;  // Could not evaluate this predicate.
1760   case SelectionDAGISel::OPC_CheckSame:
1761     Result = !::CheckSame(Table, Index, N, RecordedNodes);
1762     return Index;
1763   case SelectionDAGISel::OPC_CheckPatternPredicate:
1764     Result = !::CheckPatternPredicate(Table, Index, SDISel);
1765     return Index;
1766   case SelectionDAGISel::OPC_CheckPredicate:
1767     Result = !::CheckNodePredicate(Table, Index, SDISel, N.getNode());
1768     return Index;
1769   case SelectionDAGISel::OPC_CheckOpcode:
1770     Result = !::CheckOpcode(Table, Index, N.getNode());
1771     return Index;
1772   case SelectionDAGISel::OPC_CheckType:
1773     Result = !::CheckType(Table, Index, N, SDISel.TLI);
1774     return Index;
1775   case SelectionDAGISel::OPC_CheckChild0Type:
1776   case SelectionDAGISel::OPC_CheckChild1Type:
1777   case SelectionDAGISel::OPC_CheckChild2Type:
1778   case SelectionDAGISel::OPC_CheckChild3Type:
1779   case SelectionDAGISel::OPC_CheckChild4Type:
1780   case SelectionDAGISel::OPC_CheckChild5Type:
1781   case SelectionDAGISel::OPC_CheckChild6Type:
1782   case SelectionDAGISel::OPC_CheckChild7Type:
1783     Result = !::CheckChildType(Table, Index, N, SDISel.TLI,
1784                         Table[Index-1] - SelectionDAGISel::OPC_CheckChild0Type);
1785     return Index;
1786   case SelectionDAGISel::OPC_CheckCondCode:
1787     Result = !::CheckCondCode(Table, Index, N);
1788     return Index;
1789   case SelectionDAGISel::OPC_CheckValueType:
1790     Result = !::CheckValueType(Table, Index, N, SDISel.TLI);
1791     return Index;
1792   case SelectionDAGISel::OPC_CheckInteger:
1793     Result = !::CheckInteger(Table, Index, N);
1794     return Index;
1795   case SelectionDAGISel::OPC_CheckAndImm:
1796     Result = !::CheckAndImm(Table, Index, N, SDISel);
1797     return Index;
1798   case SelectionDAGISel::OPC_CheckOrImm:
1799     Result = !::CheckOrImm(Table, Index, N, SDISel);
1800     return Index;
1801   }
1802 }
1803
1804 namespace {
1805
1806 struct MatchScope {
1807   /// FailIndex - If this match fails, this is the index to continue with.
1808   unsigned FailIndex;
1809   
1810   /// NodeStack - The node stack when the scope was formed.
1811   SmallVector<SDValue, 4> NodeStack;
1812   
1813   /// NumRecordedNodes - The number of recorded nodes when the scope was formed.
1814   unsigned NumRecordedNodes;
1815   
1816   /// NumMatchedMemRefs - The number of matched memref entries.
1817   unsigned NumMatchedMemRefs;
1818   
1819   /// InputChain/InputFlag - The current chain/flag 
1820   SDValue InputChain, InputFlag;
1821
1822   /// HasChainNodesMatched - True if the ChainNodesMatched list is non-empty.
1823   bool HasChainNodesMatched, HasFlagResultNodesMatched;
1824 };
1825
1826 }
1827
1828 SDNode *SelectionDAGISel::
1829 SelectCodeCommon(SDNode *NodeToMatch, const unsigned char *MatcherTable,
1830                  unsigned TableSize) {
1831   // FIXME: Should these even be selected?  Handle these cases in the caller?
1832   switch (NodeToMatch->getOpcode()) {
1833   default:
1834     break;
1835   case ISD::EntryToken:       // These nodes remain the same.
1836   case ISD::BasicBlock:
1837   case ISD::Register:
1838   //case ISD::VALUETYPE:
1839   //case ISD::CONDCODE:
1840   case ISD::HANDLENODE:
1841   case ISD::MDNODE_SDNODE:
1842   case ISD::TargetConstant:
1843   case ISD::TargetConstantFP:
1844   case ISD::TargetConstantPool:
1845   case ISD::TargetFrameIndex:
1846   case ISD::TargetExternalSymbol:
1847   case ISD::TargetBlockAddress:
1848   case ISD::TargetJumpTable:
1849   case ISD::TargetGlobalTLSAddress:
1850   case ISD::TargetGlobalAddress:
1851   case ISD::TokenFactor:
1852   case ISD::CopyFromReg:
1853   case ISD::CopyToReg:
1854   case ISD::EH_LABEL:
1855     NodeToMatch->setNodeId(-1); // Mark selected.
1856     return 0;
1857   case ISD::AssertSext:
1858   case ISD::AssertZext:
1859     CurDAG->ReplaceAllUsesOfValueWith(SDValue(NodeToMatch, 0),
1860                                       NodeToMatch->getOperand(0));
1861     return 0;
1862   case ISD::INLINEASM: return Select_INLINEASM(NodeToMatch);
1863   case ISD::UNDEF:     return Select_UNDEF(NodeToMatch);
1864   }
1865   
1866   assert(!NodeToMatch->isMachineOpcode() && "Node already selected!");
1867
1868   // Set up the node stack with NodeToMatch as the only node on the stack.
1869   SmallVector<SDValue, 8> NodeStack;
1870   SDValue N = SDValue(NodeToMatch, 0);
1871   NodeStack.push_back(N);
1872
1873   // MatchScopes - Scopes used when matching, if a match failure happens, this
1874   // indicates where to continue checking.
1875   SmallVector<MatchScope, 8> MatchScopes;
1876   
1877   // RecordedNodes - This is the set of nodes that have been recorded by the
1878   // state machine.
1879   SmallVector<SDValue, 8> RecordedNodes;
1880   
1881   // MatchedMemRefs - This is the set of MemRef's we've seen in the input
1882   // pattern.
1883   SmallVector<MachineMemOperand*, 2> MatchedMemRefs;
1884   
1885   // These are the current input chain and flag for use when generating nodes.
1886   // Various Emit operations change these.  For example, emitting a copytoreg
1887   // uses and updates these.
1888   SDValue InputChain, InputFlag;
1889   
1890   // ChainNodesMatched - If a pattern matches nodes that have input/output
1891   // chains, the OPC_EmitMergeInputChains operation is emitted which indicates
1892   // which ones they are.  The result is captured into this list so that we can
1893   // update the chain results when the pattern is complete.
1894   SmallVector<SDNode*, 3> ChainNodesMatched;
1895   SmallVector<SDNode*, 3> FlagResultNodesMatched;
1896   
1897   DEBUG(errs() << "ISEL: Starting pattern match on root node: ";
1898         NodeToMatch->dump(CurDAG);
1899         errs() << '\n');
1900   
1901   // Determine where to start the interpreter.  Normally we start at opcode #0,
1902   // but if the state machine starts with an OPC_SwitchOpcode, then we
1903   // accelerate the first lookup (which is guaranteed to be hot) with the
1904   // OpcodeOffset table.
1905   unsigned MatcherIndex = 0;
1906   
1907   if (!OpcodeOffset.empty()) {
1908     // Already computed the OpcodeOffset table, just index into it.
1909     if (N.getOpcode() < OpcodeOffset.size())
1910       MatcherIndex = OpcodeOffset[N.getOpcode()];
1911     DEBUG(errs() << "  Initial Opcode index to " << MatcherIndex << "\n");
1912
1913   } else if (MatcherTable[0] == OPC_SwitchOpcode) {
1914     // Otherwise, the table isn't computed, but the state machine does start
1915     // with an OPC_SwitchOpcode instruction.  Populate the table now, since this
1916     // is the first time we're selecting an instruction.
1917     unsigned Idx = 1;
1918     while (1) {
1919       // Get the size of this case.
1920       unsigned CaseSize = MatcherTable[Idx++];
1921       if (CaseSize & 128)
1922         CaseSize = GetVBR(CaseSize, MatcherTable, Idx);
1923       if (CaseSize == 0) break;
1924
1925       // Get the opcode, add the index to the table.
1926       uint16_t Opc = MatcherTable[Idx++];
1927       Opc |= (unsigned short)MatcherTable[Idx++] << 8;
1928       if (Opc >= OpcodeOffset.size())
1929         OpcodeOffset.resize((Opc+1)*2);
1930       OpcodeOffset[Opc] = Idx;
1931       Idx += CaseSize;
1932     }
1933
1934     // Okay, do the lookup for the first opcode.
1935     if (N.getOpcode() < OpcodeOffset.size())
1936       MatcherIndex = OpcodeOffset[N.getOpcode()];
1937   }
1938   
1939   while (1) {
1940     assert(MatcherIndex < TableSize && "Invalid index");
1941 #ifndef NDEBUG
1942     unsigned CurrentOpcodeIndex = MatcherIndex;
1943 #endif
1944     BuiltinOpcodes Opcode = (BuiltinOpcodes)MatcherTable[MatcherIndex++];
1945     switch (Opcode) {
1946     case OPC_Scope: {
1947       // Okay, the semantics of this operation are that we should push a scope
1948       // then evaluate the first child.  However, pushing a scope only to have
1949       // the first check fail (which then pops it) is inefficient.  If we can
1950       // determine immediately that the first check (or first several) will
1951       // immediately fail, don't even bother pushing a scope for them.
1952       unsigned FailIndex;
1953       
1954       while (1) {
1955         unsigned NumToSkip = MatcherTable[MatcherIndex++];
1956         if (NumToSkip & 128)
1957           NumToSkip = GetVBR(NumToSkip, MatcherTable, MatcherIndex);
1958         // Found the end of the scope with no match.
1959         if (NumToSkip == 0) {
1960           FailIndex = 0;
1961           break;
1962         }
1963         
1964         FailIndex = MatcherIndex+NumToSkip;
1965         
1966         unsigned MatcherIndexOfPredicate = MatcherIndex;
1967         (void)MatcherIndexOfPredicate; // silence warning.
1968         
1969         // If we can't evaluate this predicate without pushing a scope (e.g. if
1970         // it is a 'MoveParent') or if the predicate succeeds on this node, we
1971         // push the scope and evaluate the full predicate chain.
1972         bool Result;
1973         MatcherIndex = IsPredicateKnownToFail(MatcherTable, MatcherIndex, N,
1974                                               Result, *this, RecordedNodes);
1975         if (!Result)
1976           break;
1977         
1978         DEBUG(errs() << "  Skipped scope entry (due to false predicate) at "
1979                      << "index " << MatcherIndexOfPredicate
1980                      << ", continuing at " << FailIndex << "\n");
1981         ++NumDAGIselRetries;
1982         
1983         // Otherwise, we know that this case of the Scope is guaranteed to fail,
1984         // move to the next case.
1985         MatcherIndex = FailIndex;
1986       }
1987       
1988       // If the whole scope failed to match, bail.
1989       if (FailIndex == 0) break;
1990       
1991       // Push a MatchScope which indicates where to go if the first child fails
1992       // to match.
1993       MatchScope NewEntry;
1994       NewEntry.FailIndex = FailIndex;
1995       NewEntry.NodeStack.append(NodeStack.begin(), NodeStack.end());
1996       NewEntry.NumRecordedNodes = RecordedNodes.size();
1997       NewEntry.NumMatchedMemRefs = MatchedMemRefs.size();
1998       NewEntry.InputChain = InputChain;
1999       NewEntry.InputFlag = InputFlag;
2000       NewEntry.HasChainNodesMatched = !ChainNodesMatched.empty();
2001       NewEntry.HasFlagResultNodesMatched = !FlagResultNodesMatched.empty();
2002       MatchScopes.push_back(NewEntry);
2003       continue;
2004     }
2005     case OPC_RecordNode:
2006       // Remember this node, it may end up being an operand in the pattern.
2007       RecordedNodes.push_back(N);
2008       continue;
2009         
2010     case OPC_RecordChild0: case OPC_RecordChild1:
2011     case OPC_RecordChild2: case OPC_RecordChild3:
2012     case OPC_RecordChild4: case OPC_RecordChild5:
2013     case OPC_RecordChild6: case OPC_RecordChild7: {
2014       unsigned ChildNo = Opcode-OPC_RecordChild0;
2015       if (ChildNo >= N.getNumOperands())
2016         break;  // Match fails if out of range child #.
2017
2018       RecordedNodes.push_back(N->getOperand(ChildNo));
2019       continue;
2020     }
2021     case OPC_RecordMemRef:
2022       MatchedMemRefs.push_back(cast<MemSDNode>(N)->getMemOperand());
2023       continue;
2024         
2025     case OPC_CaptureFlagInput:
2026       // If the current node has an input flag, capture it in InputFlag.
2027       if (N->getNumOperands() != 0 &&
2028           N->getOperand(N->getNumOperands()-1).getValueType() == MVT::Flag)
2029         InputFlag = N->getOperand(N->getNumOperands()-1);
2030       continue;
2031         
2032     case OPC_MoveChild: {
2033       unsigned ChildNo = MatcherTable[MatcherIndex++];
2034       if (ChildNo >= N.getNumOperands())
2035         break;  // Match fails if out of range child #.
2036       N = N.getOperand(ChildNo);
2037       NodeStack.push_back(N);
2038       continue;
2039     }
2040         
2041     case OPC_MoveParent:
2042       // Pop the current node off the NodeStack.
2043       NodeStack.pop_back();
2044       assert(!NodeStack.empty() && "Node stack imbalance!");
2045       N = NodeStack.back();  
2046       continue;
2047      
2048     case OPC_CheckSame:
2049       if (!::CheckSame(MatcherTable, MatcherIndex, N, RecordedNodes)) break;
2050       continue;
2051     case OPC_CheckPatternPredicate:
2052       if (!::CheckPatternPredicate(MatcherTable, MatcherIndex, *this)) break;
2053       continue;
2054     case OPC_CheckPredicate:
2055       if (!::CheckNodePredicate(MatcherTable, MatcherIndex, *this,
2056                                 N.getNode()))
2057         break;
2058       continue;
2059     case OPC_CheckComplexPat: {
2060       unsigned CPNum = MatcherTable[MatcherIndex++];
2061       unsigned RecNo = MatcherTable[MatcherIndex++];
2062       assert(RecNo < RecordedNodes.size() && "Invalid CheckComplexPat");
2063       if (!CheckComplexPattern(NodeToMatch, RecordedNodes[RecNo], CPNum,
2064                                RecordedNodes))
2065         break;
2066       continue;
2067     }
2068     case OPC_CheckOpcode:
2069       if (!::CheckOpcode(MatcherTable, MatcherIndex, N.getNode())) break;
2070       continue;
2071         
2072     case OPC_CheckType:
2073       if (!::CheckType(MatcherTable, MatcherIndex, N, TLI)) break;
2074       continue;
2075         
2076     case OPC_SwitchOpcode: {
2077       unsigned CurNodeOpcode = N.getOpcode();
2078       unsigned SwitchStart = MatcherIndex-1; (void)SwitchStart;
2079       unsigned CaseSize;
2080       while (1) {
2081         // Get the size of this case.
2082         CaseSize = MatcherTable[MatcherIndex++];
2083         if (CaseSize & 128)
2084           CaseSize = GetVBR(CaseSize, MatcherTable, MatcherIndex);
2085         if (CaseSize == 0) break;
2086
2087         uint16_t Opc = MatcherTable[MatcherIndex++];
2088         Opc |= (unsigned short)MatcherTable[MatcherIndex++] << 8;
2089
2090         // If the opcode matches, then we will execute this case.
2091         if (CurNodeOpcode == Opc)
2092           break;
2093       
2094         // Otherwise, skip over this case.
2095         MatcherIndex += CaseSize;
2096       }
2097       
2098       // If no cases matched, bail out.
2099       if (CaseSize == 0) break;
2100       
2101       // Otherwise, execute the case we found.
2102       DEBUG(errs() << "  OpcodeSwitch from " << SwitchStart
2103                    << " to " << MatcherIndex << "\n");
2104       continue;
2105     }
2106         
2107     case OPC_SwitchType: {
2108       MVT::SimpleValueType CurNodeVT = N.getValueType().getSimpleVT().SimpleTy;
2109       unsigned SwitchStart = MatcherIndex-1; (void)SwitchStart;
2110       unsigned CaseSize;
2111       while (1) {
2112         // Get the size of this case.
2113         CaseSize = MatcherTable[MatcherIndex++];
2114         if (CaseSize & 128)
2115           CaseSize = GetVBR(CaseSize, MatcherTable, MatcherIndex);
2116         if (CaseSize == 0) break;
2117         
2118         MVT::SimpleValueType CaseVT =
2119           (MVT::SimpleValueType)MatcherTable[MatcherIndex++];
2120         if (CaseVT == MVT::iPTR)
2121           CaseVT = TLI.getPointerTy().SimpleTy;
2122         
2123         // If the VT matches, then we will execute this case.
2124         if (CurNodeVT == CaseVT)
2125           break;
2126         
2127         // Otherwise, skip over this case.
2128         MatcherIndex += CaseSize;
2129       }
2130       
2131       // If no cases matched, bail out.
2132       if (CaseSize == 0) break;
2133       
2134       // Otherwise, execute the case we found.
2135       DEBUG(errs() << "  TypeSwitch[" << EVT(CurNodeVT).getEVTString()
2136                    << "] from " << SwitchStart << " to " << MatcherIndex<<'\n');
2137       continue;
2138     }
2139     case OPC_CheckChild0Type: case OPC_CheckChild1Type:
2140     case OPC_CheckChild2Type: case OPC_CheckChild3Type:
2141     case OPC_CheckChild4Type: case OPC_CheckChild5Type:
2142     case OPC_CheckChild6Type: case OPC_CheckChild7Type:
2143       if (!::CheckChildType(MatcherTable, MatcherIndex, N, TLI,
2144                             Opcode-OPC_CheckChild0Type))
2145         break;
2146       continue;
2147     case OPC_CheckCondCode:
2148       if (!::CheckCondCode(MatcherTable, MatcherIndex, N)) break;
2149       continue;
2150     case OPC_CheckValueType:
2151       if (!::CheckValueType(MatcherTable, MatcherIndex, N, TLI)) break;
2152       continue;
2153     case OPC_CheckInteger:
2154       if (!::CheckInteger(MatcherTable, MatcherIndex, N)) break;
2155       continue;
2156     case OPC_CheckAndImm:
2157       if (!::CheckAndImm(MatcherTable, MatcherIndex, N, *this)) break;
2158       continue;
2159     case OPC_CheckOrImm:
2160       if (!::CheckOrImm(MatcherTable, MatcherIndex, N, *this)) break;
2161       continue;
2162         
2163     case OPC_CheckFoldableChainNode: {
2164       assert(NodeStack.size() != 1 && "No parent node");
2165       // Verify that all intermediate nodes between the root and this one have
2166       // a single use.
2167       bool HasMultipleUses = false;
2168       for (unsigned i = 1, e = NodeStack.size()-1; i != e; ++i)
2169         if (!NodeStack[i].hasOneUse()) {
2170           HasMultipleUses = true;
2171           break;
2172         }
2173       if (HasMultipleUses) break;
2174
2175       // Check to see that the target thinks this is profitable to fold and that
2176       // we can fold it without inducing cycles in the graph.
2177       if (!IsProfitableToFold(N, NodeStack[NodeStack.size()-2].getNode(),
2178                               NodeToMatch) ||
2179           !IsLegalToFold(N, NodeStack[NodeStack.size()-2].getNode(),
2180                          NodeToMatch, OptLevel,
2181                          true/*We validate our own chains*/))
2182         break;
2183       
2184       continue;
2185     }
2186     case OPC_EmitInteger: {
2187       MVT::SimpleValueType VT =
2188         (MVT::SimpleValueType)MatcherTable[MatcherIndex++];
2189       int64_t Val = MatcherTable[MatcherIndex++];
2190       if (Val & 128)
2191         Val = GetVBR(Val, MatcherTable, MatcherIndex);
2192       RecordedNodes.push_back(CurDAG->getTargetConstant(Val, VT));
2193       continue;
2194     }
2195     case OPC_EmitRegister: {
2196       MVT::SimpleValueType VT =
2197         (MVT::SimpleValueType)MatcherTable[MatcherIndex++];
2198       unsigned RegNo = MatcherTable[MatcherIndex++];
2199       RecordedNodes.push_back(CurDAG->getRegister(RegNo, VT));
2200       continue;
2201     }
2202         
2203     case OPC_EmitConvertToTarget:  {
2204       // Convert from IMM/FPIMM to target version.
2205       unsigned RecNo = MatcherTable[MatcherIndex++];
2206       assert(RecNo < RecordedNodes.size() && "Invalid CheckSame");
2207       SDValue Imm = RecordedNodes[RecNo];
2208
2209       if (Imm->getOpcode() == ISD::Constant) {
2210         int64_t Val = cast<ConstantSDNode>(Imm)->getZExtValue();
2211         Imm = CurDAG->getTargetConstant(Val, Imm.getValueType());
2212       } else if (Imm->getOpcode() == ISD::ConstantFP) {
2213         const ConstantFP *Val=cast<ConstantFPSDNode>(Imm)->getConstantFPValue();
2214         Imm = CurDAG->getTargetConstantFP(*Val, Imm.getValueType());
2215       }
2216       
2217       RecordedNodes.push_back(Imm);
2218       continue;
2219     }
2220         
2221     case OPC_EmitMergeInputChains1_0:    // OPC_EmitMergeInputChains, 1, 0
2222     case OPC_EmitMergeInputChains1_1: {  // OPC_EmitMergeInputChains, 1, 1
2223       // These are space-optimized forms of OPC_EmitMergeInputChains.
2224       assert(InputChain.getNode() == 0 &&
2225              "EmitMergeInputChains should be the first chain producing node");
2226       assert(ChainNodesMatched.empty() &&
2227              "Should only have one EmitMergeInputChains per match");
2228       
2229       // Read all of the chained nodes.
2230       unsigned RecNo = Opcode == OPC_EmitMergeInputChains1_1;
2231       assert(RecNo < RecordedNodes.size() && "Invalid CheckSame");
2232       ChainNodesMatched.push_back(RecordedNodes[RecNo].getNode());
2233         
2234       // FIXME: What if other value results of the node have uses not matched
2235       // by this pattern?
2236       if (ChainNodesMatched.back() != NodeToMatch &&
2237           !RecordedNodes[RecNo].hasOneUse()) {
2238         ChainNodesMatched.clear();
2239         break;
2240       }
2241       
2242       // Merge the input chains if they are not intra-pattern references.
2243       InputChain = HandleMergeInputChains(ChainNodesMatched, CurDAG);
2244       
2245       if (InputChain.getNode() == 0)
2246         break;  // Failed to merge.
2247       continue;
2248     }
2249         
2250     case OPC_EmitMergeInputChains: {
2251       assert(InputChain.getNode() == 0 &&
2252              "EmitMergeInputChains should be the first chain producing node");
2253       // This node gets a list of nodes we matched in the input that have
2254       // chains.  We want to token factor all of the input chains to these nodes
2255       // together.  However, if any of the input chains is actually one of the
2256       // nodes matched in this pattern, then we have an intra-match reference.
2257       // Ignore these because the newly token factored chain should not refer to
2258       // the old nodes.
2259       unsigned NumChains = MatcherTable[MatcherIndex++];
2260       assert(NumChains != 0 && "Can't TF zero chains");
2261
2262       assert(ChainNodesMatched.empty() &&
2263              "Should only have one EmitMergeInputChains per match");
2264
2265       // Read all of the chained nodes.
2266       for (unsigned i = 0; i != NumChains; ++i) {
2267         unsigned RecNo = MatcherTable[MatcherIndex++];
2268         assert(RecNo < RecordedNodes.size() && "Invalid CheckSame");
2269         ChainNodesMatched.push_back(RecordedNodes[RecNo].getNode());
2270         
2271         // FIXME: What if other value results of the node have uses not matched
2272         // by this pattern?
2273         if (ChainNodesMatched.back() != NodeToMatch &&
2274             !RecordedNodes[RecNo].hasOneUse()) {
2275           ChainNodesMatched.clear();
2276           break;
2277         }
2278       }
2279       
2280       // If the inner loop broke out, the match fails.
2281       if (ChainNodesMatched.empty())
2282         break;
2283
2284       // Merge the input chains if they are not intra-pattern references.
2285       InputChain = HandleMergeInputChains(ChainNodesMatched, CurDAG);
2286       
2287       if (InputChain.getNode() == 0)
2288         break;  // Failed to merge.
2289
2290       continue;
2291     }
2292         
2293     case OPC_EmitCopyToReg: {
2294       unsigned RecNo = MatcherTable[MatcherIndex++];
2295       assert(RecNo < RecordedNodes.size() && "Invalid CheckSame");
2296       unsigned DestPhysReg = MatcherTable[MatcherIndex++];
2297       
2298       if (InputChain.getNode() == 0)
2299         InputChain = CurDAG->getEntryNode();
2300       
2301       InputChain = CurDAG->getCopyToReg(InputChain, NodeToMatch->getDebugLoc(),
2302                                         DestPhysReg, RecordedNodes[RecNo],
2303                                         InputFlag);
2304       
2305       InputFlag = InputChain.getValue(1);
2306       continue;
2307     }
2308         
2309     case OPC_EmitNodeXForm: {
2310       unsigned XFormNo = MatcherTable[MatcherIndex++];
2311       unsigned RecNo = MatcherTable[MatcherIndex++];
2312       assert(RecNo < RecordedNodes.size() && "Invalid CheckSame");
2313       RecordedNodes.push_back(RunSDNodeXForm(RecordedNodes[RecNo], XFormNo));
2314       continue;
2315     }
2316         
2317     case OPC_EmitNode:
2318     case OPC_MorphNodeTo: {
2319       uint16_t TargetOpc = MatcherTable[MatcherIndex++];
2320       TargetOpc |= (unsigned short)MatcherTable[MatcherIndex++] << 8;
2321       unsigned EmitNodeInfo = MatcherTable[MatcherIndex++];
2322       // Get the result VT list.
2323       unsigned NumVTs = MatcherTable[MatcherIndex++];
2324       SmallVector<EVT, 4> VTs;
2325       for (unsigned i = 0; i != NumVTs; ++i) {
2326         MVT::SimpleValueType VT =
2327           (MVT::SimpleValueType)MatcherTable[MatcherIndex++];
2328         if (VT == MVT::iPTR) VT = TLI.getPointerTy().SimpleTy;
2329         VTs.push_back(VT);
2330       }
2331       
2332       if (EmitNodeInfo & OPFL_Chain)
2333         VTs.push_back(MVT::Other);
2334       if (EmitNodeInfo & OPFL_FlagOutput)
2335         VTs.push_back(MVT::Flag);
2336       
2337       // This is hot code, so optimize the two most common cases of 1 and 2
2338       // results.
2339       SDVTList VTList;
2340       if (VTs.size() == 1)
2341         VTList = CurDAG->getVTList(VTs[0]);
2342       else if (VTs.size() == 2)
2343         VTList = CurDAG->getVTList(VTs[0], VTs[1]);
2344       else
2345         VTList = CurDAG->getVTList(VTs.data(), VTs.size());
2346
2347       // Get the operand list.
2348       unsigned NumOps = MatcherTable[MatcherIndex++];
2349       SmallVector<SDValue, 8> Ops;
2350       for (unsigned i = 0; i != NumOps; ++i) {
2351         unsigned RecNo = MatcherTable[MatcherIndex++];
2352         if (RecNo & 128)
2353           RecNo = GetVBR(RecNo, MatcherTable, MatcherIndex);
2354         
2355         assert(RecNo < RecordedNodes.size() && "Invalid EmitNode");
2356         Ops.push_back(RecordedNodes[RecNo]);
2357       }
2358       
2359       // If there are variadic operands to add, handle them now.
2360       if (EmitNodeInfo & OPFL_VariadicInfo) {
2361         // Determine the start index to copy from.
2362         unsigned FirstOpToCopy = getNumFixedFromVariadicInfo(EmitNodeInfo);
2363         FirstOpToCopy += (EmitNodeInfo & OPFL_Chain) ? 1 : 0;
2364         assert(NodeToMatch->getNumOperands() >= FirstOpToCopy &&
2365                "Invalid variadic node");
2366         // Copy all of the variadic operands, not including a potential flag
2367         // input.
2368         for (unsigned i = FirstOpToCopy, e = NodeToMatch->getNumOperands();
2369              i != e; ++i) {
2370           SDValue V = NodeToMatch->getOperand(i);
2371           if (V.getValueType() == MVT::Flag) break;
2372           Ops.push_back(V);
2373         }
2374       }
2375       
2376       // If this has chain/flag inputs, add them.
2377       if (EmitNodeInfo & OPFL_Chain)
2378         Ops.push_back(InputChain);
2379       if ((EmitNodeInfo & OPFL_FlagInput) && InputFlag.getNode() != 0)
2380         Ops.push_back(InputFlag);
2381       
2382       // Create the node.
2383       SDNode *Res = 0;
2384       if (Opcode != OPC_MorphNodeTo) {
2385         // If this is a normal EmitNode command, just create the new node and
2386         // add the results to the RecordedNodes list.
2387         Res = CurDAG->getMachineNode(TargetOpc, NodeToMatch->getDebugLoc(),
2388                                      VTList, Ops.data(), Ops.size());
2389         
2390         // Add all the non-flag/non-chain results to the RecordedNodes list.
2391         for (unsigned i = 0, e = VTs.size(); i != e; ++i) {
2392           if (VTs[i] == MVT::Other || VTs[i] == MVT::Flag) break;
2393           RecordedNodes.push_back(SDValue(Res, i));
2394         }
2395         
2396       } else {
2397         Res = MorphNode(NodeToMatch, TargetOpc, VTList, Ops.data(), Ops.size(),
2398                         EmitNodeInfo);
2399       }
2400       
2401       // If the node had chain/flag results, update our notion of the current
2402       // chain and flag.
2403       if (EmitNodeInfo & OPFL_FlagOutput) {
2404         InputFlag = SDValue(Res, VTs.size()-1);
2405         if (EmitNodeInfo & OPFL_Chain)
2406           InputChain = SDValue(Res, VTs.size()-2);
2407       } else if (EmitNodeInfo & OPFL_Chain)
2408         InputChain = SDValue(Res, VTs.size()-1);
2409
2410       // If the OPFL_MemRefs flag is set on this node, slap all of the
2411       // accumulated memrefs onto it.
2412       //
2413       // FIXME: This is vastly incorrect for patterns with multiple outputs
2414       // instructions that access memory and for ComplexPatterns that match
2415       // loads.
2416       if (EmitNodeInfo & OPFL_MemRefs) {
2417         MachineSDNode::mmo_iterator MemRefs =
2418           MF->allocateMemRefsArray(MatchedMemRefs.size());
2419         std::copy(MatchedMemRefs.begin(), MatchedMemRefs.end(), MemRefs);
2420         cast<MachineSDNode>(Res)
2421           ->setMemRefs(MemRefs, MemRefs + MatchedMemRefs.size());
2422       }
2423       
2424       DEBUG(errs() << "  "
2425                    << (Opcode == OPC_MorphNodeTo ? "Morphed" : "Created")
2426                    << " node: "; Res->dump(CurDAG); errs() << "\n");
2427       
2428       // If this was a MorphNodeTo then we're completely done!
2429       if (Opcode == OPC_MorphNodeTo) {
2430         // Update chain and flag uses.
2431         UpdateChainsAndFlags(NodeToMatch, InputChain, ChainNodesMatched,
2432                              InputFlag, FlagResultNodesMatched, true);
2433         return Res;
2434       }
2435       
2436       continue;
2437     }
2438         
2439     case OPC_MarkFlagResults: {
2440       unsigned NumNodes = MatcherTable[MatcherIndex++];
2441       
2442       // Read and remember all the flag-result nodes.
2443       for (unsigned i = 0; i != NumNodes; ++i) {
2444         unsigned RecNo = MatcherTable[MatcherIndex++];
2445         if (RecNo & 128)
2446           RecNo = GetVBR(RecNo, MatcherTable, MatcherIndex);
2447
2448         assert(RecNo < RecordedNodes.size() && "Invalid CheckSame");
2449         FlagResultNodesMatched.push_back(RecordedNodes[RecNo].getNode());
2450       }
2451       continue;
2452     }
2453       
2454     case OPC_CompleteMatch: {
2455       // The match has been completed, and any new nodes (if any) have been
2456       // created.  Patch up references to the matched dag to use the newly
2457       // created nodes.
2458       unsigned NumResults = MatcherTable[MatcherIndex++];
2459
2460       for (unsigned i = 0; i != NumResults; ++i) {
2461         unsigned ResSlot = MatcherTable[MatcherIndex++];
2462         if (ResSlot & 128)
2463           ResSlot = GetVBR(ResSlot, MatcherTable, MatcherIndex);
2464         
2465         assert(ResSlot < RecordedNodes.size() && "Invalid CheckSame");
2466         SDValue Res = RecordedNodes[ResSlot];
2467         
2468         assert(i < NodeToMatch->getNumValues() &&
2469                NodeToMatch->getValueType(i) != MVT::Other &&
2470                NodeToMatch->getValueType(i) != MVT::Flag &&
2471                "Invalid number of results to complete!");
2472         assert((NodeToMatch->getValueType(i) == Res.getValueType() ||
2473                 NodeToMatch->getValueType(i) == MVT::iPTR ||
2474                 Res.getValueType() == MVT::iPTR ||
2475                 NodeToMatch->getValueType(i).getSizeInBits() ==
2476                     Res.getValueType().getSizeInBits()) &&
2477                "invalid replacement");
2478         CurDAG->ReplaceAllUsesOfValueWith(SDValue(NodeToMatch, i), Res);
2479       }
2480
2481       // If the root node defines a flag, add it to the flag nodes to update
2482       // list.
2483       if (NodeToMatch->getValueType(NodeToMatch->getNumValues()-1) == MVT::Flag)
2484         FlagResultNodesMatched.push_back(NodeToMatch);
2485       
2486       // Update chain and flag uses.
2487       UpdateChainsAndFlags(NodeToMatch, InputChain, ChainNodesMatched,
2488                            InputFlag, FlagResultNodesMatched, false);
2489       
2490       assert(NodeToMatch->use_empty() &&
2491              "Didn't replace all uses of the node?");
2492       
2493       // FIXME: We just return here, which interacts correctly with SelectRoot
2494       // above.  We should fix this to not return an SDNode* anymore.
2495       return 0;
2496     }
2497     }
2498     
2499     // If the code reached this point, then the match failed.  See if there is
2500     // another child to try in the current 'Scope', otherwise pop it until we
2501     // find a case to check.
2502     DEBUG(errs() << "  Match failed at index " << CurrentOpcodeIndex << "\n");
2503     ++NumDAGIselRetries;
2504     while (1) {
2505       if (MatchScopes.empty()) {
2506         CannotYetSelect(NodeToMatch);
2507         return 0;
2508       }
2509
2510       // Restore the interpreter state back to the point where the scope was
2511       // formed.
2512       MatchScope &LastScope = MatchScopes.back();
2513       RecordedNodes.resize(LastScope.NumRecordedNodes);
2514       NodeStack.clear();
2515       NodeStack.append(LastScope.NodeStack.begin(), LastScope.NodeStack.end());
2516       N = NodeStack.back();
2517
2518       if (LastScope.NumMatchedMemRefs != MatchedMemRefs.size())
2519         MatchedMemRefs.resize(LastScope.NumMatchedMemRefs);
2520       MatcherIndex = LastScope.FailIndex;
2521       
2522       DEBUG(errs() << "  Continuing at " << MatcherIndex << "\n");
2523     
2524       InputChain = LastScope.InputChain;
2525       InputFlag = LastScope.InputFlag;
2526       if (!LastScope.HasChainNodesMatched)
2527         ChainNodesMatched.clear();
2528       if (!LastScope.HasFlagResultNodesMatched)
2529         FlagResultNodesMatched.clear();
2530
2531       // Check to see what the offset is at the new MatcherIndex.  If it is zero
2532       // we have reached the end of this scope, otherwise we have another child
2533       // in the current scope to try.
2534       unsigned NumToSkip = MatcherTable[MatcherIndex++];
2535       if (NumToSkip & 128)
2536         NumToSkip = GetVBR(NumToSkip, MatcherTable, MatcherIndex);
2537
2538       // If we have another child in this scope to match, update FailIndex and
2539       // try it.
2540       if (NumToSkip != 0) {
2541         LastScope.FailIndex = MatcherIndex+NumToSkip;
2542         break;
2543       }
2544       
2545       // End of this scope, pop it and try the next child in the containing
2546       // scope.
2547       MatchScopes.pop_back();
2548     }
2549   }
2550 }
2551     
2552
2553
2554 void SelectionDAGISel::CannotYetSelect(SDNode *N) {
2555   std::string msg;
2556   raw_string_ostream Msg(msg);
2557   Msg << "Cannot yet select: ";
2558   
2559   if (N->getOpcode() != ISD::INTRINSIC_W_CHAIN &&
2560       N->getOpcode() != ISD::INTRINSIC_WO_CHAIN &&
2561       N->getOpcode() != ISD::INTRINSIC_VOID) {
2562     N->printrFull(Msg, CurDAG);
2563   } else {
2564     bool HasInputChain = N->getOperand(0).getValueType() == MVT::Other;
2565     unsigned iid =
2566       cast<ConstantSDNode>(N->getOperand(HasInputChain))->getZExtValue();
2567     if (iid < Intrinsic::num_intrinsics)
2568       Msg << "intrinsic %" << Intrinsic::getName((Intrinsic::ID)iid);
2569     else if (const TargetIntrinsicInfo *TII = TM.getIntrinsicInfo())
2570       Msg << "target intrinsic %" << TII->getName(iid);
2571     else
2572       Msg << "unknown intrinsic #" << iid;
2573   }
2574   report_fatal_error(Msg.str());
2575 }
2576
2577 char SelectionDAGISel::ID = 0;