1 //===-- SelectionDAGISel.cpp - Implement the SelectionDAGISel class -------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This implements the SelectionDAGISel class.
12 //===----------------------------------------------------------------------===//
14 #define DEBUG_TYPE "isel"
15 #include "ScheduleDAGSDNodes.h"
16 #include "SelectionDAGBuilder.h"
17 #include "llvm/CodeGen/FunctionLoweringInfo.h"
18 #include "llvm/CodeGen/SelectionDAGISel.h"
19 #include "llvm/Analysis/AliasAnalysis.h"
20 #include "llvm/Analysis/BranchProbabilityInfo.h"
21 #include "llvm/Analysis/DebugInfo.h"
22 #include "llvm/Constants.h"
23 #include "llvm/Function.h"
24 #include "llvm/InlineAsm.h"
25 #include "llvm/Instructions.h"
26 #include "llvm/Intrinsics.h"
27 #include "llvm/IntrinsicInst.h"
28 #include "llvm/LLVMContext.h"
29 #include "llvm/Module.h"
30 #include "llvm/CodeGen/FastISel.h"
31 #include "llvm/CodeGen/GCStrategy.h"
32 #include "llvm/CodeGen/GCMetadata.h"
33 #include "llvm/CodeGen/MachineFrameInfo.h"
34 #include "llvm/CodeGen/MachineFunction.h"
35 #include "llvm/CodeGen/MachineInstrBuilder.h"
36 #include "llvm/CodeGen/MachineModuleInfo.h"
37 #include "llvm/CodeGen/MachineRegisterInfo.h"
38 #include "llvm/CodeGen/ScheduleHazardRecognizer.h"
39 #include "llvm/CodeGen/SchedulerRegistry.h"
40 #include "llvm/CodeGen/SelectionDAG.h"
41 #include "llvm/Target/TargetRegisterInfo.h"
42 #include "llvm/Target/TargetIntrinsicInfo.h"
43 #include "llvm/Target/TargetInstrInfo.h"
44 #include "llvm/Target/TargetLowering.h"
45 #include "llvm/Target/TargetMachine.h"
46 #include "llvm/Target/TargetOptions.h"
47 #include "llvm/Transforms/Utils/BasicBlockUtils.h"
48 #include "llvm/Support/Compiler.h"
49 #include "llvm/Support/Debug.h"
50 #include "llvm/Support/ErrorHandling.h"
51 #include "llvm/Support/Timer.h"
52 #include "llvm/Support/raw_ostream.h"
53 #include "llvm/ADT/PostOrderIterator.h"
54 #include "llvm/ADT/Statistic.h"
58 STATISTIC(NumFastIselFailures
, "Number of instructions fast isel failed on");
59 STATISTIC(NumFastIselSuccess
, "Number of instructions fast isel selected");
60 STATISTIC(NumFastIselBlocks
, "Number of blocks selected entirely by fast isel");
61 STATISTIC(NumDAGBlocks
, "Number of blocks selected using DAG");
62 STATISTIC(NumDAGIselRetries
,"Number of times dag isel has to try another path");
65 EnableFastISelVerbose("fast-isel-verbose", cl::Hidden
,
66 cl::desc("Enable verbose messages in the \"fast\" "
67 "instruction selector"));
69 EnableFastISelAbort("fast-isel-abort", cl::Hidden
,
70 cl::desc("Enable abort calls when \"fast\" instruction fails"));
74 cl::desc("use Machine Branch Probability Info"),
75 cl::init(true), cl::Hidden
);
79 ViewDAGCombine1("view-dag-combine1-dags", cl::Hidden
,
80 cl::desc("Pop up a window to show dags before the first "
83 ViewLegalizeTypesDAGs("view-legalize-types-dags", cl::Hidden
,
84 cl::desc("Pop up a window to show dags before legalize types"));
86 ViewLegalizeDAGs("view-legalize-dags", cl::Hidden
,
87 cl::desc("Pop up a window to show dags before legalize"));
89 ViewDAGCombine2("view-dag-combine2-dags", cl::Hidden
,
90 cl::desc("Pop up a window to show dags before the second "
93 ViewDAGCombineLT("view-dag-combine-lt-dags", cl::Hidden
,
94 cl::desc("Pop up a window to show dags before the post legalize types"
95 " dag combine pass"));
97 ViewISelDAGs("view-isel-dags", cl::Hidden
,
98 cl::desc("Pop up a window to show isel dags as they are selected"));
100 ViewSchedDAGs("view-sched-dags", cl::Hidden
,
101 cl::desc("Pop up a window to show sched dags as they are processed"));
103 ViewSUnitDAGs("view-sunit-dags", cl::Hidden
,
104 cl::desc("Pop up a window to show SUnit dags after they are processed"));
106 static const bool ViewDAGCombine1
= false,
107 ViewLegalizeTypesDAGs
= false, ViewLegalizeDAGs
= false,
108 ViewDAGCombine2
= false,
109 ViewDAGCombineLT
= false,
110 ViewISelDAGs
= false, ViewSchedDAGs
= false,
111 ViewSUnitDAGs
= false;
114 //===---------------------------------------------------------------------===//
116 /// RegisterScheduler class - Track the registration of instruction schedulers.
118 //===---------------------------------------------------------------------===//
119 MachinePassRegistry
RegisterScheduler::Registry
;
121 //===---------------------------------------------------------------------===//
123 /// ISHeuristic command line option for instruction schedulers.
125 //===---------------------------------------------------------------------===//
126 static cl::opt
<RegisterScheduler::FunctionPassCtor
, false,
127 RegisterPassParser
<RegisterScheduler
> >
128 ISHeuristic("pre-RA-sched",
129 cl::init(&createDefaultScheduler
),
130 cl::desc("Instruction schedulers available (before register"
133 static RegisterScheduler
134 defaultListDAGScheduler("default", "Best scheduler for the target",
135 createDefaultScheduler
);
138 //===--------------------------------------------------------------------===//
139 /// createDefaultScheduler - This creates an instruction scheduler appropriate
141 ScheduleDAGSDNodes
* createDefaultScheduler(SelectionDAGISel
*IS
,
142 CodeGenOpt::Level OptLevel
) {
143 const TargetLowering
&TLI
= IS
->getTargetLowering();
145 if (OptLevel
== CodeGenOpt::None
)
146 return createSourceListDAGScheduler(IS
, OptLevel
);
147 if (TLI
.getSchedulingPreference() == Sched::Latency
)
148 return createTDListDAGScheduler(IS
, OptLevel
);
149 if (TLI
.getSchedulingPreference() == Sched::RegPressure
)
150 return createBURRListDAGScheduler(IS
, OptLevel
);
151 if (TLI
.getSchedulingPreference() == Sched::Hybrid
)
152 return createHybridListDAGScheduler(IS
, OptLevel
);
153 assert(TLI
.getSchedulingPreference() == Sched::ILP
&&
154 "Unknown sched type!");
155 return createILPListDAGScheduler(IS
, OptLevel
);
159 // EmitInstrWithCustomInserter - This method should be implemented by targets
160 // that mark instructions with the 'usesCustomInserter' flag. These
161 // instructions are special in various ways, which require special support to
162 // insert. The specified MachineInstr is created but not inserted into any
163 // basic blocks, and this method is called to expand it into a sequence of
164 // instructions, potentially also creating new basic blocks and control flow.
165 // When new basic blocks are inserted and the edges from MBB to its successors
166 // are modified, the method should insert pairs of <OldSucc, NewSucc> into the
169 TargetLowering::EmitInstrWithCustomInserter(MachineInstr
*MI
,
170 MachineBasicBlock
*MBB
) const {
172 dbgs() << "If a target marks an instruction with "
173 "'usesCustomInserter', it must implement "
174 "TargetLowering::EmitInstrWithCustomInserter!";
180 //===----------------------------------------------------------------------===//
181 // SelectionDAGISel code
182 //===----------------------------------------------------------------------===//
184 SelectionDAGISel::SelectionDAGISel(const TargetMachine
&tm
,
185 CodeGenOpt::Level OL
) :
186 MachineFunctionPass(ID
), TM(tm
), TLI(*tm
.getTargetLowering()),
187 FuncInfo(new FunctionLoweringInfo(TLI
)),
188 CurDAG(new SelectionDAG(tm
)),
189 SDB(new SelectionDAGBuilder(*CurDAG
, *FuncInfo
, OL
)),
193 initializeGCModuleInfoPass(*PassRegistry::getPassRegistry());
194 initializeAliasAnalysisAnalysisGroup(*PassRegistry::getPassRegistry());
195 initializeBranchProbabilityInfoPass(*PassRegistry::getPassRegistry());
198 SelectionDAGISel::~SelectionDAGISel() {
204 void SelectionDAGISel::getAnalysisUsage(AnalysisUsage
&AU
) const {
205 AU
.addRequired
<AliasAnalysis
>();
206 AU
.addPreserved
<AliasAnalysis
>();
207 AU
.addRequired
<GCModuleInfo
>();
208 AU
.addPreserved
<GCModuleInfo
>();
209 if (UseMBPI
&& OptLevel
!= CodeGenOpt::None
)
210 AU
.addRequired
<BranchProbabilityInfo
>();
211 MachineFunctionPass::getAnalysisUsage(AU
);
214 /// SplitCriticalSideEffectEdges - Look for critical edges with a PHI value that
215 /// may trap on it. In this case we have to split the edge so that the path
216 /// through the predecessor block that doesn't go to the phi block doesn't
217 /// execute the possibly trapping instruction.
219 /// This is required for correctness, so it must be done at -O0.
221 static void SplitCriticalSideEffectEdges(Function
&Fn
, Pass
*SDISel
) {
222 // Loop for blocks with phi nodes.
223 for (Function::iterator BB
= Fn
.begin(), E
= Fn
.end(); BB
!= E
; ++BB
) {
224 PHINode
*PN
= dyn_cast
<PHINode
>(BB
->begin());
225 if (PN
== 0) continue;
228 // For each block with a PHI node, check to see if any of the input values
229 // are potentially trapping constant expressions. Constant expressions are
230 // the only potentially trapping value that can occur as the argument to a
232 for (BasicBlock::iterator I
= BB
->begin(); (PN
= dyn_cast
<PHINode
>(I
)); ++I
)
233 for (unsigned i
= 0, e
= PN
->getNumIncomingValues(); i
!= e
; ++i
) {
234 ConstantExpr
*CE
= dyn_cast
<ConstantExpr
>(PN
->getIncomingValue(i
));
235 if (CE
== 0 || !CE
->canTrap()) continue;
237 // The only case we have to worry about is when the edge is critical.
238 // Since this block has a PHI Node, we assume it has multiple input
239 // edges: check to see if the pred has multiple successors.
240 BasicBlock
*Pred
= PN
->getIncomingBlock(i
);
241 if (Pred
->getTerminator()->getNumSuccessors() == 1)
244 // Okay, we have to split this edge.
245 SplitCriticalEdge(Pred
->getTerminator(),
246 GetSuccessorNumber(Pred
, BB
), SDISel
, true);
252 bool SelectionDAGISel::runOnMachineFunction(MachineFunction
&mf
) {
253 // Do some sanity-checking on the command-line options.
254 assert((!EnableFastISelVerbose
|| EnableFastISel
) &&
255 "-fast-isel-verbose requires -fast-isel");
256 assert((!EnableFastISelAbort
|| EnableFastISel
) &&
257 "-fast-isel-abort requires -fast-isel");
259 const Function
&Fn
= *mf
.getFunction();
260 const TargetInstrInfo
&TII
= *TM
.getInstrInfo();
261 const TargetRegisterInfo
&TRI
= *TM
.getRegisterInfo();
264 RegInfo
= &MF
->getRegInfo();
265 AA
= &getAnalysis
<AliasAnalysis
>();
266 GFI
= Fn
.hasGC() ? &getAnalysis
<GCModuleInfo
>().getFunctionInfo(Fn
) : 0;
268 DEBUG(dbgs() << "\n\n\n=== " << Fn
.getName() << "\n");
270 SplitCriticalSideEffectEdges(const_cast<Function
&>(Fn
), this);
273 FuncInfo
->set(Fn
, *MF
);
275 if (UseMBPI
&& OptLevel
!= CodeGenOpt::None
)
276 FuncInfo
->BPI
= &getAnalysis
<BranchProbabilityInfo
>();
282 SelectAllBasicBlocks(Fn
);
284 // If the first basic block in the function has live ins that need to be
285 // copied into vregs, emit the copies into the top of the block before
286 // emitting the code for the block.
287 MachineBasicBlock
*EntryMBB
= MF
->begin();
288 RegInfo
->EmitLiveInCopies(EntryMBB
, TRI
, TII
);
290 DenseMap
<unsigned, unsigned> LiveInMap
;
291 if (!FuncInfo
->ArgDbgValues
.empty())
292 for (MachineRegisterInfo::livein_iterator LI
= RegInfo
->livein_begin(),
293 E
= RegInfo
->livein_end(); LI
!= E
; ++LI
)
295 LiveInMap
.insert(std::make_pair(LI
->first
, LI
->second
));
297 // Insert DBG_VALUE instructions for function arguments to the entry block.
298 for (unsigned i
= 0, e
= FuncInfo
->ArgDbgValues
.size(); i
!= e
; ++i
) {
299 MachineInstr
*MI
= FuncInfo
->ArgDbgValues
[e
-i
-1];
300 unsigned Reg
= MI
->getOperand(0).getReg();
301 if (TargetRegisterInfo::isPhysicalRegister(Reg
))
302 EntryMBB
->insert(EntryMBB
->begin(), MI
);
304 MachineInstr
*Def
= RegInfo
->getVRegDef(Reg
);
305 MachineBasicBlock::iterator InsertPos
= Def
;
306 // FIXME: VR def may not be in entry block.
307 Def
->getParent()->insert(llvm::next(InsertPos
), MI
);
310 // If Reg is live-in then update debug info to track its copy in a vreg.
311 DenseMap
<unsigned, unsigned>::iterator LDI
= LiveInMap
.find(Reg
);
312 if (LDI
!= LiveInMap
.end()) {
313 MachineInstr
*Def
= RegInfo
->getVRegDef(LDI
->second
);
314 MachineBasicBlock::iterator InsertPos
= Def
;
315 const MDNode
*Variable
=
316 MI
->getOperand(MI
->getNumOperands()-1).getMetadata();
317 unsigned Offset
= MI
->getOperand(1).getImm();
318 // Def is never a terminator here, so it is ok to increment InsertPos.
319 BuildMI(*EntryMBB
, ++InsertPos
, MI
->getDebugLoc(),
320 TII
.get(TargetOpcode::DBG_VALUE
))
321 .addReg(LDI
->second
, RegState::Debug
)
322 .addImm(Offset
).addMetadata(Variable
);
324 // If this vreg is directly copied into an exported register then
325 // that COPY instructions also need DBG_VALUE, if it is the only
326 // user of LDI->second.
327 MachineInstr
*CopyUseMI
= NULL
;
328 for (MachineRegisterInfo::use_iterator
329 UI
= RegInfo
->use_begin(LDI
->second
);
330 MachineInstr
*UseMI
= UI
.skipInstruction();) {
331 if (UseMI
->isDebugValue()) continue;
332 if (UseMI
->isCopy() && !CopyUseMI
&& UseMI
->getParent() == EntryMBB
) {
333 CopyUseMI
= UseMI
; continue;
335 // Otherwise this is another use or second copy use.
336 CopyUseMI
= NULL
; break;
339 MachineInstr
*NewMI
=
340 BuildMI(*MF
, CopyUseMI
->getDebugLoc(),
341 TII
.get(TargetOpcode::DBG_VALUE
))
342 .addReg(CopyUseMI
->getOperand(0).getReg(), RegState::Debug
)
343 .addImm(Offset
).addMetadata(Variable
);
344 EntryMBB
->insertAfter(CopyUseMI
, NewMI
);
349 // Determine if there are any calls in this machine function.
350 MachineFrameInfo
*MFI
= MF
->getFrameInfo();
351 if (!MFI
->hasCalls()) {
352 for (MachineFunction::const_iterator
353 I
= MF
->begin(), E
= MF
->end(); I
!= E
; ++I
) {
354 const MachineBasicBlock
*MBB
= I
;
355 for (MachineBasicBlock::const_iterator
356 II
= MBB
->begin(), IE
= MBB
->end(); II
!= IE
; ++II
) {
357 const MCInstrDesc
&MCID
= TM
.getInstrInfo()->get(II
->getOpcode());
359 if ((MCID
.isCall() && !MCID
.isReturn()) ||
360 II
->isStackAligningInlineAsm()) {
361 MFI
->setHasCalls(true);
369 // Determine if there is a call to setjmp in the machine function.
370 MF
->setCallsSetJmp(Fn
.callsFunctionThatReturnsTwice());
372 // Replace forward-declared registers with the registers containing
373 // the desired value.
374 MachineRegisterInfo
&MRI
= MF
->getRegInfo();
375 for (DenseMap
<unsigned, unsigned>::iterator
376 I
= FuncInfo
->RegFixups
.begin(), E
= FuncInfo
->RegFixups
.end();
378 unsigned From
= I
->first
;
379 unsigned To
= I
->second
;
380 // If To is also scheduled to be replaced, find what its ultimate
383 DenseMap
<unsigned, unsigned>::iterator J
=
384 FuncInfo
->RegFixups
.find(To
);
389 MRI
.replaceRegWith(From
, To
);
392 // Release function-specific state. SDB and CurDAG are already cleared
399 void SelectionDAGISel::SelectBasicBlock(BasicBlock::const_iterator Begin
,
400 BasicBlock::const_iterator End
,
402 // Lower all of the non-terminator instructions. If a call is emitted
403 // as a tail call, cease emitting nodes for this block. Terminators
404 // are handled below.
405 for (BasicBlock::const_iterator I
= Begin
; I
!= End
&& !SDB
->HasTailCall
; ++I
)
408 // Make sure the root of the DAG is up-to-date.
409 CurDAG
->setRoot(SDB
->getControlRoot());
410 HadTailCall
= SDB
->HasTailCall
;
413 // Final step, emit the lowered DAG as machine code.
417 void SelectionDAGISel::ComputeLiveOutVRegInfo() {
418 SmallPtrSet
<SDNode
*, 128> VisitedNodes
;
419 SmallVector
<SDNode
*, 128> Worklist
;
421 Worklist
.push_back(CurDAG
->getRoot().getNode());
428 SDNode
*N
= Worklist
.pop_back_val();
430 // If we've already seen this node, ignore it.
431 if (!VisitedNodes
.insert(N
))
434 // Otherwise, add all chain operands to the worklist.
435 for (unsigned i
= 0, e
= N
->getNumOperands(); i
!= e
; ++i
)
436 if (N
->getOperand(i
).getValueType() == MVT::Other
)
437 Worklist
.push_back(N
->getOperand(i
).getNode());
439 // If this is a CopyToReg with a vreg dest, process it.
440 if (N
->getOpcode() != ISD::CopyToReg
)
443 unsigned DestReg
= cast
<RegisterSDNode
>(N
->getOperand(1))->getReg();
444 if (!TargetRegisterInfo::isVirtualRegister(DestReg
))
447 // Ignore non-scalar or non-integer values.
448 SDValue Src
= N
->getOperand(2);
449 EVT SrcVT
= Src
.getValueType();
450 if (!SrcVT
.isInteger() || SrcVT
.isVector())
453 unsigned NumSignBits
= CurDAG
->ComputeNumSignBits(Src
);
454 Mask
= APInt::getAllOnesValue(SrcVT
.getSizeInBits());
455 CurDAG
->ComputeMaskedBits(Src
, Mask
, KnownZero
, KnownOne
);
456 FuncInfo
->AddLiveOutRegInfo(DestReg
, NumSignBits
, KnownZero
, KnownOne
);
457 } while (!Worklist
.empty());
460 void SelectionDAGISel::CodeGenAndEmitDAG() {
461 std::string GroupName
;
462 if (TimePassesIsEnabled
)
463 GroupName
= "Instruction Selection and Scheduling";
464 std::string BlockName
;
465 int BlockNumber
= -1;
467 if (ViewDAGCombine1
|| ViewLegalizeTypesDAGs
|| ViewLegalizeDAGs
||
468 ViewDAGCombine2
|| ViewDAGCombineLT
|| ViewISelDAGs
|| ViewSchedDAGs
||
472 BlockNumber
= FuncInfo
->MBB
->getNumber();
473 BlockName
= MF
->getFunction()->getNameStr() + ":" +
474 FuncInfo
->MBB
->getBasicBlock()->getNameStr();
476 DEBUG(dbgs() << "Initial selection DAG: BB#" << BlockNumber
477 << " '" << BlockName
<< "'\n"; CurDAG
->dump());
479 if (ViewDAGCombine1
) CurDAG
->viewGraph("dag-combine1 input for " + BlockName
);
481 // Run the DAG combiner in pre-legalize mode.
483 NamedRegionTimer
T("DAG Combining 1", GroupName
, TimePassesIsEnabled
);
484 CurDAG
->Combine(Unrestricted
, *AA
, OptLevel
);
487 DEBUG(dbgs() << "Optimized lowered selection DAG: BB#" << BlockNumber
488 << " '" << BlockName
<< "'\n"; CurDAG
->dump());
490 // Second step, hack on the DAG until it only uses operations and types that
491 // the target supports.
492 if (ViewLegalizeTypesDAGs
) CurDAG
->viewGraph("legalize-types input for " +
497 NamedRegionTimer
T("Type Legalization", GroupName
, TimePassesIsEnabled
);
498 Changed
= CurDAG
->LegalizeTypes();
501 DEBUG(dbgs() << "Type-legalized selection DAG: BB#" << BlockNumber
502 << " '" << BlockName
<< "'\n"; CurDAG
->dump());
505 if (ViewDAGCombineLT
)
506 CurDAG
->viewGraph("dag-combine-lt input for " + BlockName
);
508 // Run the DAG combiner in post-type-legalize mode.
510 NamedRegionTimer
T("DAG Combining after legalize types", GroupName
,
511 TimePassesIsEnabled
);
512 CurDAG
->Combine(NoIllegalTypes
, *AA
, OptLevel
);
515 DEBUG(dbgs() << "Optimized type-legalized selection DAG: BB#" << BlockNumber
516 << " '" << BlockName
<< "'\n"; CurDAG
->dump());
520 NamedRegionTimer
T("Vector Legalization", GroupName
, TimePassesIsEnabled
);
521 Changed
= CurDAG
->LegalizeVectors();
526 NamedRegionTimer
T("Type Legalization 2", GroupName
, TimePassesIsEnabled
);
527 CurDAG
->LegalizeTypes();
530 if (ViewDAGCombineLT
)
531 CurDAG
->viewGraph("dag-combine-lv input for " + BlockName
);
533 // Run the DAG combiner in post-type-legalize mode.
535 NamedRegionTimer
T("DAG Combining after legalize vectors", GroupName
,
536 TimePassesIsEnabled
);
537 CurDAG
->Combine(NoIllegalOperations
, *AA
, OptLevel
);
540 DEBUG(dbgs() << "Optimized vector-legalized selection DAG: BB#"
541 << BlockNumber
<< " '" << BlockName
<< "'\n"; CurDAG
->dump());
544 if (ViewLegalizeDAGs
) CurDAG
->viewGraph("legalize input for " + BlockName
);
547 NamedRegionTimer
T("DAG Legalization", GroupName
, TimePassesIsEnabled
);
551 DEBUG(dbgs() << "Legalized selection DAG: BB#" << BlockNumber
552 << " '" << BlockName
<< "'\n"; CurDAG
->dump());
554 if (ViewDAGCombine2
) CurDAG
->viewGraph("dag-combine2 input for " + BlockName
);
556 // Run the DAG combiner in post-legalize mode.
558 NamedRegionTimer
T("DAG Combining 2", GroupName
, TimePassesIsEnabled
);
559 CurDAG
->Combine(NoIllegalOperations
, *AA
, OptLevel
);
562 DEBUG(dbgs() << "Optimized legalized selection DAG: BB#" << BlockNumber
563 << " '" << BlockName
<< "'\n"; CurDAG
->dump());
565 if (OptLevel
!= CodeGenOpt::None
)
566 ComputeLiveOutVRegInfo();
568 if (ViewISelDAGs
) CurDAG
->viewGraph("isel input for " + BlockName
);
570 // Third, instruction select all of the operations to machine code, adding the
571 // code to the MachineBasicBlock.
573 NamedRegionTimer
T("Instruction Selection", GroupName
, TimePassesIsEnabled
);
574 DoInstructionSelection();
577 DEBUG(dbgs() << "Selected selection DAG: BB#" << BlockNumber
578 << " '" << BlockName
<< "'\n"; CurDAG
->dump());
580 if (ViewSchedDAGs
) CurDAG
->viewGraph("scheduler input for " + BlockName
);
582 // Schedule machine code.
583 ScheduleDAGSDNodes
*Scheduler
= CreateScheduler();
585 NamedRegionTimer
T("Instruction Scheduling", GroupName
,
586 TimePassesIsEnabled
);
587 Scheduler
->Run(CurDAG
, FuncInfo
->MBB
, FuncInfo
->InsertPt
);
590 if (ViewSUnitDAGs
) Scheduler
->viewGraph();
592 // Emit machine code to BB. This can change 'BB' to the last block being
594 MachineBasicBlock
*FirstMBB
= FuncInfo
->MBB
, *LastMBB
;
596 NamedRegionTimer
T("Instruction Creation", GroupName
, TimePassesIsEnabled
);
598 LastMBB
= FuncInfo
->MBB
= Scheduler
->EmitSchedule();
599 FuncInfo
->InsertPt
= Scheduler
->InsertPos
;
602 // If the block was split, make sure we update any references that are used to
603 // update PHI nodes later on.
604 if (FirstMBB
!= LastMBB
)
605 SDB
->UpdateSplitBlock(FirstMBB
, LastMBB
);
607 // Free the scheduler state.
609 NamedRegionTimer
T("Instruction Scheduling Cleanup", GroupName
,
610 TimePassesIsEnabled
);
614 // Free the SelectionDAG state, now that we're finished with it.
618 void SelectionDAGISel::DoInstructionSelection() {
619 DEBUG(errs() << "===== Instruction selection begins: BB#"
620 << FuncInfo
->MBB
->getNumber()
621 << " '" << FuncInfo
->MBB
->getName() << "'\n");
625 // Select target instructions for the DAG.
627 // Number all nodes with a topological order and set DAGSize.
628 DAGSize
= CurDAG
->AssignTopologicalOrder();
630 // Create a dummy node (which is not added to allnodes), that adds
631 // a reference to the root node, preventing it from being deleted,
632 // and tracking any changes of the root.
633 HandleSDNode
Dummy(CurDAG
->getRoot());
634 ISelPosition
= SelectionDAG::allnodes_iterator(CurDAG
->getRoot().getNode());
637 // The AllNodes list is now topological-sorted. Visit the
638 // nodes by starting at the end of the list (the root of the
639 // graph) and preceding back toward the beginning (the entry
641 while (ISelPosition
!= CurDAG
->allnodes_begin()) {
642 SDNode
*Node
= --ISelPosition
;
643 // Skip dead nodes. DAGCombiner is expected to eliminate all dead nodes,
644 // but there are currently some corner cases that it misses. Also, this
645 // makes it theoretically possible to disable the DAGCombiner.
646 if (Node
->use_empty())
649 SDNode
*ResNode
= Select(Node
);
651 // FIXME: This is pretty gross. 'Select' should be changed to not return
652 // anything at all and this code should be nuked with a tactical strike.
654 // If node should not be replaced, continue with the next one.
655 if (ResNode
== Node
|| Node
->getOpcode() == ISD::DELETED_NODE
)
659 ReplaceUses(Node
, ResNode
);
661 // If after the replacement this node is not used any more,
662 // remove this dead node.
663 if (Node
->use_empty()) { // Don't delete EntryToken, etc.
664 ISelUpdater
ISU(ISelPosition
);
665 CurDAG
->RemoveDeadNode(Node
, &ISU
);
669 CurDAG
->setRoot(Dummy
.getValue());
672 DEBUG(errs() << "===== Instruction selection ends:\n");
674 PostprocessISelDAG();
677 /// PrepareEHLandingPad - Emit an EH_LABEL, set up live-in registers, and
678 /// do other setup for EH landing-pad blocks.
679 void SelectionDAGISel::PrepareEHLandingPad() {
680 // Add a label to mark the beginning of the landing pad. Deletion of the
681 // landing pad can thus be detected via the MachineModuleInfo.
682 MCSymbol
*Label
= MF
->getMMI().addLandingPad(FuncInfo
->MBB
);
684 const MCInstrDesc
&II
= TM
.getInstrInfo()->get(TargetOpcode::EH_LABEL
);
685 BuildMI(*FuncInfo
->MBB
, FuncInfo
->InsertPt
, SDB
->getCurDebugLoc(), II
)
688 // Mark exception register as live in.
689 unsigned Reg
= TLI
.getExceptionAddressRegister();
690 if (Reg
) FuncInfo
->MBB
->addLiveIn(Reg
);
692 // Mark exception selector register as live in.
693 Reg
= TLI
.getExceptionSelectorRegister();
694 if (Reg
) FuncInfo
->MBB
->addLiveIn(Reg
);
696 // FIXME: Hack around an exception handling flaw (PR1508): the personality
697 // function and list of typeids logically belong to the invoke (or, if you
698 // like, the basic block containing the invoke), and need to be associated
699 // with it in the dwarf exception handling tables. Currently however the
700 // information is provided by an intrinsic (eh.selector) that can be moved
701 // to unexpected places by the optimizers: if the unwind edge is critical,
702 // then breaking it can result in the intrinsics being in the successor of
703 // the landing pad, not the landing pad itself. This results
704 // in exceptions not being caught because no typeids are associated with
705 // the invoke. This may not be the only way things can go wrong, but it
706 // is the only way we try to work around for the moment.
707 const BasicBlock
*LLVMBB
= FuncInfo
->MBB
->getBasicBlock();
708 const BranchInst
*Br
= dyn_cast
<BranchInst
>(LLVMBB
->getTerminator());
710 if (Br
&& Br
->isUnconditional()) { // Critical edge?
711 BasicBlock::const_iterator I
, E
;
712 for (I
= LLVMBB
->begin(), E
= --LLVMBB
->end(); I
!= E
; ++I
)
713 if (isa
<EHSelectorInst
>(I
))
717 // No catch info found - try to extract some from the successor.
718 CopyCatchInfo(Br
->getSuccessor(0), LLVMBB
, &MF
->getMMI(), *FuncInfo
);
724 /// TryToFoldFastISelLoad - We're checking to see if we can fold the specified
725 /// load into the specified FoldInst. Note that we could have a sequence where
726 /// multiple LLVM IR instructions are folded into the same machineinstr. For
727 /// example we could have:
728 /// A: x = load i32 *P
729 /// B: y = icmp A, 42
732 /// In this scenario, LI is "A", and FoldInst is "C". We know about "B" (and
733 /// any other folded instructions) because it is between A and C.
735 /// If we succeed in folding the load into the operation, return true.
737 bool SelectionDAGISel::TryToFoldFastISelLoad(const LoadInst
*LI
,
738 const Instruction
*FoldInst
,
740 // We know that the load has a single use, but don't know what it is. If it
741 // isn't one of the folded instructions, then we can't succeed here. Handle
742 // this by scanning the single-use users of the load until we get to FoldInst.
743 unsigned MaxUsers
= 6; // Don't scan down huge single-use chains of instrs.
745 const Instruction
*TheUser
= LI
->use_back();
746 while (TheUser
!= FoldInst
&& // Scan up until we find FoldInst.
747 // Stay in the right block.
748 TheUser
->getParent() == FoldInst
->getParent() &&
749 --MaxUsers
) { // Don't scan too far.
750 // If there are multiple or no uses of this instruction, then bail out.
751 if (!TheUser
->hasOneUse())
754 TheUser
= TheUser
->use_back();
757 // Don't try to fold volatile loads. Target has to deal with alignment
759 if (LI
->isVolatile()) return false;
761 // Figure out which vreg this is going into. If there is no assigned vreg yet
762 // then there actually was no reference to it. Perhaps the load is referenced
763 // by a dead instruction.
764 unsigned LoadReg
= FastIS
->getRegForValue(LI
);
768 // Check to see what the uses of this vreg are. If it has no uses, or more
769 // than one use (at the machine instr level) then we can't fold it.
770 MachineRegisterInfo::reg_iterator RI
= RegInfo
->reg_begin(LoadReg
);
771 if (RI
== RegInfo
->reg_end())
774 // See if there is exactly one use of the vreg. If there are multiple uses,
775 // then the instruction got lowered to multiple machine instructions or the
776 // use of the loaded value ended up being multiple operands of the result, in
777 // either case, we can't fold this.
778 MachineRegisterInfo::reg_iterator PostRI
= RI
; ++PostRI
;
779 if (PostRI
!= RegInfo
->reg_end())
782 assert(RI
.getOperand().isUse() &&
783 "The only use of the vreg must be a use, we haven't emitted the def!");
785 MachineInstr
*User
= &*RI
;
787 // Set the insertion point properly. Folding the load can cause generation of
788 // other random instructions (like sign extends) for addressing modes, make
789 // sure they get inserted in a logical place before the new instruction.
790 FuncInfo
->InsertPt
= User
;
791 FuncInfo
->MBB
= User
->getParent();
793 // Ask the target to try folding the load.
794 return FastIS
->TryToFoldLoad(User
, RI
.getOperandNo(), LI
);
797 /// isFoldedOrDeadInstruction - Return true if the specified instruction is
798 /// side-effect free and is either dead or folded into a generated instruction.
799 /// Return false if it needs to be emitted.
800 static bool isFoldedOrDeadInstruction(const Instruction
*I
,
801 FunctionLoweringInfo
*FuncInfo
) {
802 return !I
->mayWriteToMemory() && // Side-effecting instructions aren't folded.
803 !isa
<TerminatorInst
>(I
) && // Terminators aren't folded.
804 !isa
<DbgInfoIntrinsic
>(I
) && // Debug instructions aren't folded.
805 !FuncInfo
->isExportedInst(I
); // Exported instrs must be computed.
808 void SelectionDAGISel::SelectAllBasicBlocks(const Function
&Fn
) {
809 // Initialize the Fast-ISel state, if needed.
810 FastISel
*FastIS
= 0;
812 FastIS
= TLI
.createFastISel(*FuncInfo
);
814 // Iterate over all basic blocks in the function.
815 ReversePostOrderTraversal
<const Function
*> RPOT(&Fn
);
816 for (ReversePostOrderTraversal
<const Function
*>::rpo_iterator
817 I
= RPOT
.begin(), E
= RPOT
.end(); I
!= E
; ++I
) {
818 const BasicBlock
*LLVMBB
= *I
;
820 if (OptLevel
!= CodeGenOpt::None
) {
821 bool AllPredsVisited
= true;
822 for (const_pred_iterator PI
= pred_begin(LLVMBB
), PE
= pred_end(LLVMBB
);
824 if (!FuncInfo
->VisitedBBs
.count(*PI
)) {
825 AllPredsVisited
= false;
830 if (AllPredsVisited
) {
831 for (BasicBlock::const_iterator I
= LLVMBB
->begin();
832 isa
<PHINode
>(I
); ++I
)
833 FuncInfo
->ComputePHILiveOutRegInfo(cast
<PHINode
>(I
));
835 for (BasicBlock::const_iterator I
= LLVMBB
->begin();
836 isa
<PHINode
>(I
); ++I
)
837 FuncInfo
->InvalidatePHILiveOutRegInfo(cast
<PHINode
>(I
));
840 FuncInfo
->VisitedBBs
.insert(LLVMBB
);
843 FuncInfo
->MBB
= FuncInfo
->MBBMap
[LLVMBB
];
844 FuncInfo
->InsertPt
= FuncInfo
->MBB
->getFirstNonPHI();
846 BasicBlock::const_iterator
const Begin
= LLVMBB
->getFirstNonPHI();
847 BasicBlock::const_iterator
const End
= LLVMBB
->end();
848 BasicBlock::const_iterator BI
= End
;
850 FuncInfo
->InsertPt
= FuncInfo
->MBB
->getFirstNonPHI();
852 // Setup an EH landing-pad block.
853 if (FuncInfo
->MBB
->isLandingPad())
854 PrepareEHLandingPad();
856 // Lower any arguments needed in this block if this is the entry block.
857 if (LLVMBB
== &Fn
.getEntryBlock())
858 LowerArguments(LLVMBB
);
860 // Before doing SelectionDAG ISel, see if FastISel has been requested.
862 FastIS
->startNewBlock();
864 // Emit code for any incoming arguments. This must happen before
865 // beginning FastISel on the entry block.
866 if (LLVMBB
== &Fn
.getEntryBlock()) {
867 CurDAG
->setRoot(SDB
->getControlRoot());
871 // If we inserted any instructions at the beginning, make a note of
872 // where they are, so we can be sure to emit subsequent instructions
874 if (FuncInfo
->InsertPt
!= FuncInfo
->MBB
->begin())
875 FastIS
->setLastLocalValue(llvm::prior(FuncInfo
->InsertPt
));
877 FastIS
->setLastLocalValue(0);
880 // Do FastISel on as many instructions as possible.
881 for (; BI
!= Begin
; --BI
) {
882 const Instruction
*Inst
= llvm::prior(BI
);
884 // If we no longer require this instruction, skip it.
885 if (isFoldedOrDeadInstruction(Inst
, FuncInfo
))
888 // Bottom-up: reset the insert pos at the top, after any local-value
890 FastIS
->recomputeInsertPt();
892 // Try to select the instruction with FastISel.
893 if (FastIS
->SelectInstruction(Inst
)) {
894 ++NumFastIselSuccess
;
895 // If fast isel succeeded, skip over all the folded instructions, and
896 // then see if there is a load right before the selected instructions.
897 // Try to fold the load if so.
898 const Instruction
*BeforeInst
= Inst
;
899 while (BeforeInst
!= Begin
) {
900 BeforeInst
= llvm::prior(BasicBlock::const_iterator(BeforeInst
));
901 if (!isFoldedOrDeadInstruction(BeforeInst
, FuncInfo
))
904 if (BeforeInst
!= Inst
&& isa
<LoadInst
>(BeforeInst
) &&
905 BeforeInst
->hasOneUse() &&
906 TryToFoldFastISelLoad(cast
<LoadInst
>(BeforeInst
), Inst
, FastIS
))
907 // If we succeeded, don't re-select the load.
908 BI
= llvm::next(BasicBlock::const_iterator(BeforeInst
));
912 // Then handle certain instructions as single-LLVM-Instruction blocks.
913 if (isa
<CallInst
>(Inst
)) {
914 ++NumFastIselFailures
;
915 if (EnableFastISelVerbose
|| EnableFastISelAbort
) {
916 dbgs() << "FastISel missed call: ";
920 if (!Inst
->getType()->isVoidTy() && !Inst
->use_empty()) {
921 unsigned &R
= FuncInfo
->ValueMap
[Inst
];
923 R
= FuncInfo
->CreateRegs(Inst
->getType());
926 bool HadTailCall
= false;
927 SelectBasicBlock(Inst
, BI
, HadTailCall
);
929 // If the call was emitted as a tail call, we're done with the block.
938 if (isa
<TerminatorInst
>(Inst
) && !isa
<BranchInst
>(Inst
)) {
939 // Don't abort, and use a different message for terminator misses.
940 ++NumFastIselFailures
;
941 if (EnableFastISelVerbose
|| EnableFastISelAbort
) {
942 dbgs() << "FastISel missed terminator: ";
946 ++NumFastIselFailures
;
947 if (EnableFastISelVerbose
|| EnableFastISelAbort
) {
948 dbgs() << "FastISel miss: ";
951 if (EnableFastISelAbort
)
952 // The "fast" selector couldn't handle something and bailed.
953 // For the purpose of debugging, just abort.
954 llvm_unreachable("FastISel didn't select the entire block");
959 FastIS
->recomputeInsertPt();
968 // Run SelectionDAG instruction selection on the remainder of the block
969 // not handled by FastISel. If FastISel is not run, this is the entire
972 SelectBasicBlock(Begin
, BI
, HadTailCall
);
976 FuncInfo
->PHINodesToUpdate
.clear();
980 SDB
->clearDanglingDebugInfo();
984 SelectionDAGISel::FinishBasicBlock() {
986 DEBUG(dbgs() << "Total amount of phi nodes to update: "
987 << FuncInfo
->PHINodesToUpdate
.size() << "\n";
988 for (unsigned i
= 0, e
= FuncInfo
->PHINodesToUpdate
.size(); i
!= e
; ++i
)
989 dbgs() << "Node " << i
<< " : ("
990 << FuncInfo
->PHINodesToUpdate
[i
].first
991 << ", " << FuncInfo
->PHINodesToUpdate
[i
].second
<< ")\n");
993 // Next, now that we know what the last MBB the LLVM BB expanded is, update
994 // PHI nodes in successors.
995 if (SDB
->SwitchCases
.empty() &&
996 SDB
->JTCases
.empty() &&
997 SDB
->BitTestCases
.empty()) {
998 for (unsigned i
= 0, e
= FuncInfo
->PHINodesToUpdate
.size(); i
!= e
; ++i
) {
999 MachineInstr
*PHI
= FuncInfo
->PHINodesToUpdate
[i
].first
;
1000 assert(PHI
->isPHI() &&
1001 "This is not a machine PHI node that we are updating!");
1002 if (!FuncInfo
->MBB
->isSuccessor(PHI
->getParent()))
1005 MachineOperand::CreateReg(FuncInfo
->PHINodesToUpdate
[i
].second
, false));
1006 PHI
->addOperand(MachineOperand::CreateMBB(FuncInfo
->MBB
));
1011 for (unsigned i
= 0, e
= SDB
->BitTestCases
.size(); i
!= e
; ++i
) {
1012 // Lower header first, if it wasn't already lowered
1013 if (!SDB
->BitTestCases
[i
].Emitted
) {
1014 // Set the current basic block to the mbb we wish to insert the code into
1015 FuncInfo
->MBB
= SDB
->BitTestCases
[i
].Parent
;
1016 FuncInfo
->InsertPt
= FuncInfo
->MBB
->end();
1018 SDB
->visitBitTestHeader(SDB
->BitTestCases
[i
], FuncInfo
->MBB
);
1019 CurDAG
->setRoot(SDB
->getRoot());
1021 CodeGenAndEmitDAG();
1024 for (unsigned j
= 0, ej
= SDB
->BitTestCases
[i
].Cases
.size(); j
!= ej
; ++j
) {
1025 // Set the current basic block to the mbb we wish to insert the code into
1026 FuncInfo
->MBB
= SDB
->BitTestCases
[i
].Cases
[j
].ThisBB
;
1027 FuncInfo
->InsertPt
= FuncInfo
->MBB
->end();
1030 SDB
->visitBitTestCase(SDB
->BitTestCases
[i
],
1031 SDB
->BitTestCases
[i
].Cases
[j
+1].ThisBB
,
1032 SDB
->BitTestCases
[i
].Reg
,
1033 SDB
->BitTestCases
[i
].Cases
[j
],
1036 SDB
->visitBitTestCase(SDB
->BitTestCases
[i
],
1037 SDB
->BitTestCases
[i
].Default
,
1038 SDB
->BitTestCases
[i
].Reg
,
1039 SDB
->BitTestCases
[i
].Cases
[j
],
1043 CurDAG
->setRoot(SDB
->getRoot());
1045 CodeGenAndEmitDAG();
1049 for (unsigned pi
= 0, pe
= FuncInfo
->PHINodesToUpdate
.size();
1051 MachineInstr
*PHI
= FuncInfo
->PHINodesToUpdate
[pi
].first
;
1052 MachineBasicBlock
*PHIBB
= PHI
->getParent();
1053 assert(PHI
->isPHI() &&
1054 "This is not a machine PHI node that we are updating!");
1055 // This is "default" BB. We have two jumps to it. From "header" BB and
1056 // from last "case" BB.
1057 if (PHIBB
== SDB
->BitTestCases
[i
].Default
) {
1058 PHI
->addOperand(MachineOperand::
1059 CreateReg(FuncInfo
->PHINodesToUpdate
[pi
].second
,
1061 PHI
->addOperand(MachineOperand::CreateMBB(SDB
->BitTestCases
[i
].Parent
));
1062 PHI
->addOperand(MachineOperand::
1063 CreateReg(FuncInfo
->PHINodesToUpdate
[pi
].second
,
1065 PHI
->addOperand(MachineOperand::CreateMBB(SDB
->BitTestCases
[i
].Cases
.
1068 // One of "cases" BB.
1069 for (unsigned j
= 0, ej
= SDB
->BitTestCases
[i
].Cases
.size();
1071 MachineBasicBlock
* cBB
= SDB
->BitTestCases
[i
].Cases
[j
].ThisBB
;
1072 if (cBB
->isSuccessor(PHIBB
)) {
1073 PHI
->addOperand(MachineOperand::
1074 CreateReg(FuncInfo
->PHINodesToUpdate
[pi
].second
,
1076 PHI
->addOperand(MachineOperand::CreateMBB(cBB
));
1081 SDB
->BitTestCases
.clear();
1083 // If the JumpTable record is filled in, then we need to emit a jump table.
1084 // Updating the PHI nodes is tricky in this case, since we need to determine
1085 // whether the PHI is a successor of the range check MBB or the jump table MBB
1086 for (unsigned i
= 0, e
= SDB
->JTCases
.size(); i
!= e
; ++i
) {
1087 // Lower header first, if it wasn't already lowered
1088 if (!SDB
->JTCases
[i
].first
.Emitted
) {
1089 // Set the current basic block to the mbb we wish to insert the code into
1090 FuncInfo
->MBB
= SDB
->JTCases
[i
].first
.HeaderBB
;
1091 FuncInfo
->InsertPt
= FuncInfo
->MBB
->end();
1093 SDB
->visitJumpTableHeader(SDB
->JTCases
[i
].second
, SDB
->JTCases
[i
].first
,
1095 CurDAG
->setRoot(SDB
->getRoot());
1097 CodeGenAndEmitDAG();
1100 // Set the current basic block to the mbb we wish to insert the code into
1101 FuncInfo
->MBB
= SDB
->JTCases
[i
].second
.MBB
;
1102 FuncInfo
->InsertPt
= FuncInfo
->MBB
->end();
1104 SDB
->visitJumpTable(SDB
->JTCases
[i
].second
);
1105 CurDAG
->setRoot(SDB
->getRoot());
1107 CodeGenAndEmitDAG();
1110 for (unsigned pi
= 0, pe
= FuncInfo
->PHINodesToUpdate
.size();
1112 MachineInstr
*PHI
= FuncInfo
->PHINodesToUpdate
[pi
].first
;
1113 MachineBasicBlock
*PHIBB
= PHI
->getParent();
1114 assert(PHI
->isPHI() &&
1115 "This is not a machine PHI node that we are updating!");
1116 // "default" BB. We can go there only from header BB.
1117 if (PHIBB
== SDB
->JTCases
[i
].second
.Default
) {
1119 (MachineOperand::CreateReg(FuncInfo
->PHINodesToUpdate
[pi
].second
,
1122 (MachineOperand::CreateMBB(SDB
->JTCases
[i
].first
.HeaderBB
));
1124 // JT BB. Just iterate over successors here
1125 if (FuncInfo
->MBB
->isSuccessor(PHIBB
)) {
1127 (MachineOperand::CreateReg(FuncInfo
->PHINodesToUpdate
[pi
].second
,
1129 PHI
->addOperand(MachineOperand::CreateMBB(FuncInfo
->MBB
));
1133 SDB
->JTCases
.clear();
1135 // If the switch block involved a branch to one of the actual successors, we
1136 // need to update PHI nodes in that block.
1137 for (unsigned i
= 0, e
= FuncInfo
->PHINodesToUpdate
.size(); i
!= e
; ++i
) {
1138 MachineInstr
*PHI
= FuncInfo
->PHINodesToUpdate
[i
].first
;
1139 assert(PHI
->isPHI() &&
1140 "This is not a machine PHI node that we are updating!");
1141 if (FuncInfo
->MBB
->isSuccessor(PHI
->getParent())) {
1143 MachineOperand::CreateReg(FuncInfo
->PHINodesToUpdate
[i
].second
, false));
1144 PHI
->addOperand(MachineOperand::CreateMBB(FuncInfo
->MBB
));
1148 // If we generated any switch lowering information, build and codegen any
1149 // additional DAGs necessary.
1150 for (unsigned i
= 0, e
= SDB
->SwitchCases
.size(); i
!= e
; ++i
) {
1151 // Set the current basic block to the mbb we wish to insert the code into
1152 FuncInfo
->MBB
= SDB
->SwitchCases
[i
].ThisBB
;
1153 FuncInfo
->InsertPt
= FuncInfo
->MBB
->end();
1155 // Determine the unique successors.
1156 SmallVector
<MachineBasicBlock
*, 2> Succs
;
1157 Succs
.push_back(SDB
->SwitchCases
[i
].TrueBB
);
1158 if (SDB
->SwitchCases
[i
].TrueBB
!= SDB
->SwitchCases
[i
].FalseBB
)
1159 Succs
.push_back(SDB
->SwitchCases
[i
].FalseBB
);
1161 // Emit the code. Note that this could result in FuncInfo->MBB being split.
1162 SDB
->visitSwitchCase(SDB
->SwitchCases
[i
], FuncInfo
->MBB
);
1163 CurDAG
->setRoot(SDB
->getRoot());
1165 CodeGenAndEmitDAG();
1167 // Remember the last block, now that any splitting is done, for use in
1168 // populating PHI nodes in successors.
1169 MachineBasicBlock
*ThisBB
= FuncInfo
->MBB
;
1171 // Handle any PHI nodes in successors of this chunk, as if we were coming
1172 // from the original BB before switch expansion. Note that PHI nodes can
1173 // occur multiple times in PHINodesToUpdate. We have to be very careful to
1174 // handle them the right number of times.
1175 for (unsigned i
= 0, e
= Succs
.size(); i
!= e
; ++i
) {
1176 FuncInfo
->MBB
= Succs
[i
];
1177 FuncInfo
->InsertPt
= FuncInfo
->MBB
->end();
1178 // FuncInfo->MBB may have been removed from the CFG if a branch was
1180 if (ThisBB
->isSuccessor(FuncInfo
->MBB
)) {
1181 for (MachineBasicBlock::iterator Phi
= FuncInfo
->MBB
->begin();
1182 Phi
!= FuncInfo
->MBB
->end() && Phi
->isPHI();
1184 // This value for this PHI node is recorded in PHINodesToUpdate.
1185 for (unsigned pn
= 0; ; ++pn
) {
1186 assert(pn
!= FuncInfo
->PHINodesToUpdate
.size() &&
1187 "Didn't find PHI entry!");
1188 if (FuncInfo
->PHINodesToUpdate
[pn
].first
== Phi
) {
1189 Phi
->addOperand(MachineOperand::
1190 CreateReg(FuncInfo
->PHINodesToUpdate
[pn
].second
,
1192 Phi
->addOperand(MachineOperand::CreateMBB(ThisBB
));
1200 SDB
->SwitchCases
.clear();
1204 /// Create the scheduler. If a specific scheduler was specified
1205 /// via the SchedulerRegistry, use it, otherwise select the
1206 /// one preferred by the target.
1208 ScheduleDAGSDNodes
*SelectionDAGISel::CreateScheduler() {
1209 RegisterScheduler::FunctionPassCtor Ctor
= RegisterScheduler::getDefault();
1213 RegisterScheduler::setDefault(Ctor
);
1216 return Ctor(this, OptLevel
);
1219 //===----------------------------------------------------------------------===//
1220 // Helper functions used by the generated instruction selector.
1221 //===----------------------------------------------------------------------===//
1222 // Calls to these methods are generated by tblgen.
1224 /// CheckAndMask - The isel is trying to match something like (and X, 255). If
1225 /// the dag combiner simplified the 255, we still want to match. RHS is the
1226 /// actual value in the DAG on the RHS of an AND, and DesiredMaskS is the value
1227 /// specified in the .td file (e.g. 255).
1228 bool SelectionDAGISel::CheckAndMask(SDValue LHS
, ConstantSDNode
*RHS
,
1229 int64_t DesiredMaskS
) const {
1230 const APInt
&ActualMask
= RHS
->getAPIntValue();
1231 const APInt
&DesiredMask
= APInt(LHS
.getValueSizeInBits(), DesiredMaskS
);
1233 // If the actual mask exactly matches, success!
1234 if (ActualMask
== DesiredMask
)
1237 // If the actual AND mask is allowing unallowed bits, this doesn't match.
1238 if (ActualMask
.intersects(~DesiredMask
))
1241 // Otherwise, the DAG Combiner may have proven that the value coming in is
1242 // either already zero or is not demanded. Check for known zero input bits.
1243 APInt NeededMask
= DesiredMask
& ~ActualMask
;
1244 if (CurDAG
->MaskedValueIsZero(LHS
, NeededMask
))
1247 // TODO: check to see if missing bits are just not demanded.
1249 // Otherwise, this pattern doesn't match.
1253 /// CheckOrMask - The isel is trying to match something like (or X, 255). If
1254 /// the dag combiner simplified the 255, we still want to match. RHS is the
1255 /// actual value in the DAG on the RHS of an OR, and DesiredMaskS is the value
1256 /// specified in the .td file (e.g. 255).
1257 bool SelectionDAGISel::CheckOrMask(SDValue LHS
, ConstantSDNode
*RHS
,
1258 int64_t DesiredMaskS
) const {
1259 const APInt
&ActualMask
= RHS
->getAPIntValue();
1260 const APInt
&DesiredMask
= APInt(LHS
.getValueSizeInBits(), DesiredMaskS
);
1262 // If the actual mask exactly matches, success!
1263 if (ActualMask
== DesiredMask
)
1266 // If the actual AND mask is allowing unallowed bits, this doesn't match.
1267 if (ActualMask
.intersects(~DesiredMask
))
1270 // Otherwise, the DAG Combiner may have proven that the value coming in is
1271 // either already zero or is not demanded. Check for known zero input bits.
1272 APInt NeededMask
= DesiredMask
& ~ActualMask
;
1274 APInt KnownZero
, KnownOne
;
1275 CurDAG
->ComputeMaskedBits(LHS
, NeededMask
, KnownZero
, KnownOne
);
1277 // If all the missing bits in the or are already known to be set, match!
1278 if ((NeededMask
& KnownOne
) == NeededMask
)
1281 // TODO: check to see if missing bits are just not demanded.
1283 // Otherwise, this pattern doesn't match.
1288 /// SelectInlineAsmMemoryOperands - Calls to this are automatically generated
1289 /// by tblgen. Others should not call it.
1290 void SelectionDAGISel::
1291 SelectInlineAsmMemoryOperands(std::vector
<SDValue
> &Ops
) {
1292 std::vector
<SDValue
> InOps
;
1293 std::swap(InOps
, Ops
);
1295 Ops
.push_back(InOps
[InlineAsm::Op_InputChain
]); // 0
1296 Ops
.push_back(InOps
[InlineAsm::Op_AsmString
]); // 1
1297 Ops
.push_back(InOps
[InlineAsm::Op_MDNode
]); // 2, !srcloc
1298 Ops
.push_back(InOps
[InlineAsm::Op_ExtraInfo
]); // 3 (SideEffect, AlignStack)
1300 unsigned i
= InlineAsm::Op_FirstOperand
, e
= InOps
.size();
1301 if (InOps
[e
-1].getValueType() == MVT::Glue
)
1302 --e
; // Don't process a glue operand if it is here.
1305 unsigned Flags
= cast
<ConstantSDNode
>(InOps
[i
])->getZExtValue();
1306 if (!InlineAsm::isMemKind(Flags
)) {
1307 // Just skip over this operand, copying the operands verbatim.
1308 Ops
.insert(Ops
.end(), InOps
.begin()+i
,
1309 InOps
.begin()+i
+InlineAsm::getNumOperandRegisters(Flags
) + 1);
1310 i
+= InlineAsm::getNumOperandRegisters(Flags
) + 1;
1312 assert(InlineAsm::getNumOperandRegisters(Flags
) == 1 &&
1313 "Memory operand with multiple values?");
1314 // Otherwise, this is a memory operand. Ask the target to select it.
1315 std::vector
<SDValue
> SelOps
;
1316 if (SelectInlineAsmMemoryOperand(InOps
[i
+1], 'm', SelOps
))
1317 report_fatal_error("Could not match memory address. Inline asm"
1320 // Add this to the output node.
1322 InlineAsm::getFlagWord(InlineAsm::Kind_Mem
, SelOps
.size());
1323 Ops
.push_back(CurDAG
->getTargetConstant(NewFlags
, MVT::i32
));
1324 Ops
.insert(Ops
.end(), SelOps
.begin(), SelOps
.end());
1329 // Add the glue input back if present.
1330 if (e
!= InOps
.size())
1331 Ops
.push_back(InOps
.back());
1334 /// findGlueUse - Return use of MVT::Glue value produced by the specified
1337 static SDNode
*findGlueUse(SDNode
*N
) {
1338 unsigned FlagResNo
= N
->getNumValues()-1;
1339 for (SDNode::use_iterator I
= N
->use_begin(), E
= N
->use_end(); I
!= E
; ++I
) {
1340 SDUse
&Use
= I
.getUse();
1341 if (Use
.getResNo() == FlagResNo
)
1342 return Use
.getUser();
1347 /// findNonImmUse - Return true if "Use" is a non-immediate use of "Def".
1348 /// This function recursively traverses up the operand chain, ignoring
1350 static bool findNonImmUse(SDNode
*Use
, SDNode
* Def
, SDNode
*ImmedUse
,
1351 SDNode
*Root
, SmallPtrSet
<SDNode
*, 16> &Visited
,
1352 bool IgnoreChains
) {
1353 // The NodeID's are given uniques ID's where a node ID is guaranteed to be
1354 // greater than all of its (recursive) operands. If we scan to a point where
1355 // 'use' is smaller than the node we're scanning for, then we know we will
1358 // The Use may be -1 (unassigned) if it is a newly allocated node. This can
1359 // happen because we scan down to newly selected nodes in the case of glue
1361 if ((Use
->getNodeId() < Def
->getNodeId() && Use
->getNodeId() != -1))
1364 // Don't revisit nodes if we already scanned it and didn't fail, we know we
1365 // won't fail if we scan it again.
1366 if (!Visited
.insert(Use
))
1369 for (unsigned i
= 0, e
= Use
->getNumOperands(); i
!= e
; ++i
) {
1370 // Ignore chain uses, they are validated by HandleMergeInputChains.
1371 if (Use
->getOperand(i
).getValueType() == MVT::Other
&& IgnoreChains
)
1374 SDNode
*N
= Use
->getOperand(i
).getNode();
1376 if (Use
== ImmedUse
|| Use
== Root
)
1377 continue; // We are not looking for immediate use.
1382 // Traverse up the operand chain.
1383 if (findNonImmUse(N
, Def
, ImmedUse
, Root
, Visited
, IgnoreChains
))
1389 /// IsProfitableToFold - Returns true if it's profitable to fold the specific
1390 /// operand node N of U during instruction selection that starts at Root.
1391 bool SelectionDAGISel::IsProfitableToFold(SDValue N
, SDNode
*U
,
1392 SDNode
*Root
) const {
1393 if (OptLevel
== CodeGenOpt::None
) return false;
1394 return N
.hasOneUse();
1397 /// IsLegalToFold - Returns true if the specific operand node N of
1398 /// U can be folded during instruction selection that starts at Root.
1399 bool SelectionDAGISel::IsLegalToFold(SDValue N
, SDNode
*U
, SDNode
*Root
,
1400 CodeGenOpt::Level OptLevel
,
1401 bool IgnoreChains
) {
1402 if (OptLevel
== CodeGenOpt::None
) return false;
1404 // If Root use can somehow reach N through a path that that doesn't contain
1405 // U then folding N would create a cycle. e.g. In the following
1406 // diagram, Root can reach N through X. If N is folded into into Root, then
1407 // X is both a predecessor and a successor of U.
1418 // * indicates nodes to be folded together.
1420 // If Root produces glue, then it gets (even more) interesting. Since it
1421 // will be "glued" together with its glue use in the scheduler, we need to
1422 // check if it might reach N.
1441 // If GU (glue use) indirectly reaches N (the load), and Root folds N
1442 // (call it Fold), then X is a predecessor of GU and a successor of
1443 // Fold. But since Fold and GU are glued together, this will create
1444 // a cycle in the scheduling graph.
1446 // If the node has glue, walk down the graph to the "lowest" node in the
1448 EVT VT
= Root
->getValueType(Root
->getNumValues()-1);
1449 while (VT
== MVT::Glue
) {
1450 SDNode
*GU
= findGlueUse(Root
);
1454 VT
= Root
->getValueType(Root
->getNumValues()-1);
1456 // If our query node has a glue result with a use, we've walked up it. If
1457 // the user (which has already been selected) has a chain or indirectly uses
1458 // the chain, our WalkChainUsers predicate will not consider it. Because of
1459 // this, we cannot ignore chains in this predicate.
1460 IgnoreChains
= false;
1464 SmallPtrSet
<SDNode
*, 16> Visited
;
1465 return !findNonImmUse(Root
, N
.getNode(), U
, Root
, Visited
, IgnoreChains
);
1468 SDNode
*SelectionDAGISel::Select_INLINEASM(SDNode
*N
) {
1469 std::vector
<SDValue
> Ops(N
->op_begin(), N
->op_end());
1470 SelectInlineAsmMemoryOperands(Ops
);
1472 std::vector
<EVT
> VTs
;
1473 VTs
.push_back(MVT::Other
);
1474 VTs
.push_back(MVT::Glue
);
1475 SDValue New
= CurDAG
->getNode(ISD::INLINEASM
, N
->getDebugLoc(),
1476 VTs
, &Ops
[0], Ops
.size());
1478 return New
.getNode();
1481 SDNode
*SelectionDAGISel::Select_UNDEF(SDNode
*N
) {
1482 return CurDAG
->SelectNodeTo(N
, TargetOpcode::IMPLICIT_DEF
,N
->getValueType(0));
1485 /// GetVBR - decode a vbr encoding whose top bit is set.
1486 LLVM_ATTRIBUTE_ALWAYS_INLINE
static uint64_t
1487 GetVBR(uint64_t Val
, const unsigned char *MatcherTable
, unsigned &Idx
) {
1488 assert(Val
>= 128 && "Not a VBR");
1489 Val
&= 127; // Remove first vbr bit.
1494 NextBits
= MatcherTable
[Idx
++];
1495 Val
|= (NextBits
&127) << Shift
;
1497 } while (NextBits
& 128);
1503 /// UpdateChainsAndGlue - When a match is complete, this method updates uses of
1504 /// interior glue and chain results to use the new glue and chain results.
1505 void SelectionDAGISel::
1506 UpdateChainsAndGlue(SDNode
*NodeToMatch
, SDValue InputChain
,
1507 const SmallVectorImpl
<SDNode
*> &ChainNodesMatched
,
1509 const SmallVectorImpl
<SDNode
*> &GlueResultNodesMatched
,
1510 bool isMorphNodeTo
) {
1511 SmallVector
<SDNode
*, 4> NowDeadNodes
;
1513 ISelUpdater
ISU(ISelPosition
);
1515 // Now that all the normal results are replaced, we replace the chain and
1516 // glue results if present.
1517 if (!ChainNodesMatched
.empty()) {
1518 assert(InputChain
.getNode() != 0 &&
1519 "Matched input chains but didn't produce a chain");
1520 // Loop over all of the nodes we matched that produced a chain result.
1521 // Replace all the chain results with the final chain we ended up with.
1522 for (unsigned i
= 0, e
= ChainNodesMatched
.size(); i
!= e
; ++i
) {
1523 SDNode
*ChainNode
= ChainNodesMatched
[i
];
1525 // If this node was already deleted, don't look at it.
1526 if (ChainNode
->getOpcode() == ISD::DELETED_NODE
)
1529 // Don't replace the results of the root node if we're doing a
1531 if (ChainNode
== NodeToMatch
&& isMorphNodeTo
)
1534 SDValue ChainVal
= SDValue(ChainNode
, ChainNode
->getNumValues()-1);
1535 if (ChainVal
.getValueType() == MVT::Glue
)
1536 ChainVal
= ChainVal
.getValue(ChainVal
->getNumValues()-2);
1537 assert(ChainVal
.getValueType() == MVT::Other
&& "Not a chain?");
1538 CurDAG
->ReplaceAllUsesOfValueWith(ChainVal
, InputChain
, &ISU
);
1540 // If the node became dead and we haven't already seen it, delete it.
1541 if (ChainNode
->use_empty() &&
1542 !std::count(NowDeadNodes
.begin(), NowDeadNodes
.end(), ChainNode
))
1543 NowDeadNodes
.push_back(ChainNode
);
1547 // If the result produces glue, update any glue results in the matched
1548 // pattern with the glue result.
1549 if (InputGlue
.getNode() != 0) {
1550 // Handle any interior nodes explicitly marked.
1551 for (unsigned i
= 0, e
= GlueResultNodesMatched
.size(); i
!= e
; ++i
) {
1552 SDNode
*FRN
= GlueResultNodesMatched
[i
];
1554 // If this node was already deleted, don't look at it.
1555 if (FRN
->getOpcode() == ISD::DELETED_NODE
)
1558 assert(FRN
->getValueType(FRN
->getNumValues()-1) == MVT::Glue
&&
1559 "Doesn't have a glue result");
1560 CurDAG
->ReplaceAllUsesOfValueWith(SDValue(FRN
, FRN
->getNumValues()-1),
1563 // If the node became dead and we haven't already seen it, delete it.
1564 if (FRN
->use_empty() &&
1565 !std::count(NowDeadNodes
.begin(), NowDeadNodes
.end(), FRN
))
1566 NowDeadNodes
.push_back(FRN
);
1570 if (!NowDeadNodes
.empty())
1571 CurDAG
->RemoveDeadNodes(NowDeadNodes
, &ISU
);
1573 DEBUG(errs() << "ISEL: Match complete!\n");
1579 CR_LeadsToInteriorNode
1582 /// WalkChainUsers - Walk down the users of the specified chained node that is
1583 /// part of the pattern we're matching, looking at all of the users we find.
1584 /// This determines whether something is an interior node, whether we have a
1585 /// non-pattern node in between two pattern nodes (which prevent folding because
1586 /// it would induce a cycle) and whether we have a TokenFactor node sandwiched
1587 /// between pattern nodes (in which case the TF becomes part of the pattern).
1589 /// The walk we do here is guaranteed to be small because we quickly get down to
1590 /// already selected nodes "below" us.
1592 WalkChainUsers(SDNode
*ChainedNode
,
1593 SmallVectorImpl
<SDNode
*> &ChainedNodesInPattern
,
1594 SmallVectorImpl
<SDNode
*> &InteriorChainedNodes
) {
1595 ChainResult Result
= CR_Simple
;
1597 for (SDNode::use_iterator UI
= ChainedNode
->use_begin(),
1598 E
= ChainedNode
->use_end(); UI
!= E
; ++UI
) {
1599 // Make sure the use is of the chain, not some other value we produce.
1600 if (UI
.getUse().getValueType() != MVT::Other
) continue;
1604 // If we see an already-selected machine node, then we've gone beyond the
1605 // pattern that we're selecting down into the already selected chunk of the
1607 if (User
->isMachineOpcode() ||
1608 User
->getOpcode() == ISD::HANDLENODE
) // Root of the graph.
1611 if (User
->getOpcode() == ISD::CopyToReg
||
1612 User
->getOpcode() == ISD::CopyFromReg
||
1613 User
->getOpcode() == ISD::INLINEASM
||
1614 User
->getOpcode() == ISD::EH_LABEL
) {
1615 // If their node ID got reset to -1 then they've already been selected.
1616 // Treat them like a MachineOpcode.
1617 if (User
->getNodeId() == -1)
1621 // If we have a TokenFactor, we handle it specially.
1622 if (User
->getOpcode() != ISD::TokenFactor
) {
1623 // If the node isn't a token factor and isn't part of our pattern, then it
1624 // must be a random chained node in between two nodes we're selecting.
1625 // This happens when we have something like:
1630 // Because we structurally match the load/store as a read/modify/write,
1631 // but the call is chained between them. We cannot fold in this case
1632 // because it would induce a cycle in the graph.
1633 if (!std::count(ChainedNodesInPattern
.begin(),
1634 ChainedNodesInPattern
.end(), User
))
1635 return CR_InducesCycle
;
1637 // Otherwise we found a node that is part of our pattern. For example in:
1641 // This would happen when we're scanning down from the load and see the
1642 // store as a user. Record that there is a use of ChainedNode that is
1643 // part of the pattern and keep scanning uses.
1644 Result
= CR_LeadsToInteriorNode
;
1645 InteriorChainedNodes
.push_back(User
);
1649 // If we found a TokenFactor, there are two cases to consider: first if the
1650 // TokenFactor is just hanging "below" the pattern we're matching (i.e. no
1651 // uses of the TF are in our pattern) we just want to ignore it. Second,
1652 // the TokenFactor can be sandwiched in between two chained nodes, like so:
1658 // | \ DAG's like cheese
1661 // [TokenFactor] [Op]
1668 // In this case, the TokenFactor becomes part of our match and we rewrite it
1669 // as a new TokenFactor.
1671 // To distinguish these two cases, do a recursive walk down the uses.
1672 switch (WalkChainUsers(User
, ChainedNodesInPattern
, InteriorChainedNodes
)) {
1674 // If the uses of the TokenFactor are just already-selected nodes, ignore
1675 // it, it is "below" our pattern.
1677 case CR_InducesCycle
:
1678 // If the uses of the TokenFactor lead to nodes that are not part of our
1679 // pattern that are not selected, folding would turn this into a cycle,
1681 return CR_InducesCycle
;
1682 case CR_LeadsToInteriorNode
:
1683 break; // Otherwise, keep processing.
1686 // Okay, we know we're in the interesting interior case. The TokenFactor
1687 // is now going to be considered part of the pattern so that we rewrite its
1688 // uses (it may have uses that are not part of the pattern) with the
1689 // ultimate chain result of the generated code. We will also add its chain
1690 // inputs as inputs to the ultimate TokenFactor we create.
1691 Result
= CR_LeadsToInteriorNode
;
1692 ChainedNodesInPattern
.push_back(User
);
1693 InteriorChainedNodes
.push_back(User
);
1700 /// HandleMergeInputChains - This implements the OPC_EmitMergeInputChains
1701 /// operation for when the pattern matched at least one node with a chains. The
1702 /// input vector contains a list of all of the chained nodes that we match. We
1703 /// must determine if this is a valid thing to cover (i.e. matching it won't
1704 /// induce cycles in the DAG) and if so, creating a TokenFactor node. that will
1705 /// be used as the input node chain for the generated nodes.
1707 HandleMergeInputChains(SmallVectorImpl
<SDNode
*> &ChainNodesMatched
,
1708 SelectionDAG
*CurDAG
) {
1709 // Walk all of the chained nodes we've matched, recursively scanning down the
1710 // users of the chain result. This adds any TokenFactor nodes that are caught
1711 // in between chained nodes to the chained and interior nodes list.
1712 SmallVector
<SDNode
*, 3> InteriorChainedNodes
;
1713 for (unsigned i
= 0, e
= ChainNodesMatched
.size(); i
!= e
; ++i
) {
1714 if (WalkChainUsers(ChainNodesMatched
[i
], ChainNodesMatched
,
1715 InteriorChainedNodes
) == CR_InducesCycle
)
1716 return SDValue(); // Would induce a cycle.
1719 // Okay, we have walked all the matched nodes and collected TokenFactor nodes
1720 // that we are interested in. Form our input TokenFactor node.
1721 SmallVector
<SDValue
, 3> InputChains
;
1722 for (unsigned i
= 0, e
= ChainNodesMatched
.size(); i
!= e
; ++i
) {
1723 // Add the input chain of this node to the InputChains list (which will be
1724 // the operands of the generated TokenFactor) if it's not an interior node.
1725 SDNode
*N
= ChainNodesMatched
[i
];
1726 if (N
->getOpcode() != ISD::TokenFactor
) {
1727 if (std::count(InteriorChainedNodes
.begin(),InteriorChainedNodes
.end(),N
))
1730 // Otherwise, add the input chain.
1731 SDValue InChain
= ChainNodesMatched
[i
]->getOperand(0);
1732 assert(InChain
.getValueType() == MVT::Other
&& "Not a chain");
1733 InputChains
.push_back(InChain
);
1737 // If we have a token factor, we want to add all inputs of the token factor
1738 // that are not part of the pattern we're matching.
1739 for (unsigned op
= 0, e
= N
->getNumOperands(); op
!= e
; ++op
) {
1740 if (!std::count(ChainNodesMatched
.begin(), ChainNodesMatched
.end(),
1741 N
->getOperand(op
).getNode()))
1742 InputChains
.push_back(N
->getOperand(op
));
1747 if (InputChains
.size() == 1)
1748 return InputChains
[0];
1749 return CurDAG
->getNode(ISD::TokenFactor
, ChainNodesMatched
[0]->getDebugLoc(),
1750 MVT::Other
, &InputChains
[0], InputChains
.size());
1753 /// MorphNode - Handle morphing a node in place for the selector.
1754 SDNode
*SelectionDAGISel::
1755 MorphNode(SDNode
*Node
, unsigned TargetOpc
, SDVTList VTList
,
1756 const SDValue
*Ops
, unsigned NumOps
, unsigned EmitNodeInfo
) {
1757 // It is possible we're using MorphNodeTo to replace a node with no
1758 // normal results with one that has a normal result (or we could be
1759 // adding a chain) and the input could have glue and chains as well.
1760 // In this case we need to shift the operands down.
1761 // FIXME: This is a horrible hack and broken in obscure cases, no worse
1762 // than the old isel though.
1763 int OldGlueResultNo
= -1, OldChainResultNo
= -1;
1765 unsigned NTMNumResults
= Node
->getNumValues();
1766 if (Node
->getValueType(NTMNumResults
-1) == MVT::Glue
) {
1767 OldGlueResultNo
= NTMNumResults
-1;
1768 if (NTMNumResults
!= 1 &&
1769 Node
->getValueType(NTMNumResults
-2) == MVT::Other
)
1770 OldChainResultNo
= NTMNumResults
-2;
1771 } else if (Node
->getValueType(NTMNumResults
-1) == MVT::Other
)
1772 OldChainResultNo
= NTMNumResults
-1;
1774 // Call the underlying SelectionDAG routine to do the transmogrification. Note
1775 // that this deletes operands of the old node that become dead.
1776 SDNode
*Res
= CurDAG
->MorphNodeTo(Node
, ~TargetOpc
, VTList
, Ops
, NumOps
);
1778 // MorphNodeTo can operate in two ways: if an existing node with the
1779 // specified operands exists, it can just return it. Otherwise, it
1780 // updates the node in place to have the requested operands.
1782 // If we updated the node in place, reset the node ID. To the isel,
1783 // this should be just like a newly allocated machine node.
1787 unsigned ResNumResults
= Res
->getNumValues();
1788 // Move the glue if needed.
1789 if ((EmitNodeInfo
& OPFL_GlueOutput
) && OldGlueResultNo
!= -1 &&
1790 (unsigned)OldGlueResultNo
!= ResNumResults
-1)
1791 CurDAG
->ReplaceAllUsesOfValueWith(SDValue(Node
, OldGlueResultNo
),
1792 SDValue(Res
, ResNumResults
-1));
1794 if ((EmitNodeInfo
& OPFL_GlueOutput
) != 0)
1797 // Move the chain reference if needed.
1798 if ((EmitNodeInfo
& OPFL_Chain
) && OldChainResultNo
!= -1 &&
1799 (unsigned)OldChainResultNo
!= ResNumResults
-1)
1800 CurDAG
->ReplaceAllUsesOfValueWith(SDValue(Node
, OldChainResultNo
),
1801 SDValue(Res
, ResNumResults
-1));
1803 // Otherwise, no replacement happened because the node already exists. Replace
1804 // Uses of the old node with the new one.
1806 CurDAG
->ReplaceAllUsesWith(Node
, Res
);
1811 /// CheckPatternPredicate - Implements OP_CheckPatternPredicate.
1812 LLVM_ATTRIBUTE_ALWAYS_INLINE
static bool
1813 CheckSame(const unsigned char *MatcherTable
, unsigned &MatcherIndex
,
1815 const SmallVectorImpl
<std::pair
<SDValue
, SDNode
*> > &RecordedNodes
) {
1816 // Accept if it is exactly the same as a previously recorded node.
1817 unsigned RecNo
= MatcherTable
[MatcherIndex
++];
1818 assert(RecNo
< RecordedNodes
.size() && "Invalid CheckSame");
1819 return N
== RecordedNodes
[RecNo
].first
;
1822 /// CheckPatternPredicate - Implements OP_CheckPatternPredicate.
1823 LLVM_ATTRIBUTE_ALWAYS_INLINE
static bool
1824 CheckPatternPredicate(const unsigned char *MatcherTable
, unsigned &MatcherIndex
,
1825 SelectionDAGISel
&SDISel
) {
1826 return SDISel
.CheckPatternPredicate(MatcherTable
[MatcherIndex
++]);
1829 /// CheckNodePredicate - Implements OP_CheckNodePredicate.
1830 LLVM_ATTRIBUTE_ALWAYS_INLINE
static bool
1831 CheckNodePredicate(const unsigned char *MatcherTable
, unsigned &MatcherIndex
,
1832 SelectionDAGISel
&SDISel
, SDNode
*N
) {
1833 return SDISel
.CheckNodePredicate(N
, MatcherTable
[MatcherIndex
++]);
1836 LLVM_ATTRIBUTE_ALWAYS_INLINE
static bool
1837 CheckOpcode(const unsigned char *MatcherTable
, unsigned &MatcherIndex
,
1839 uint16_t Opc
= MatcherTable
[MatcherIndex
++];
1840 Opc
|= (unsigned short)MatcherTable
[MatcherIndex
++] << 8;
1841 return N
->getOpcode() == Opc
;
1844 LLVM_ATTRIBUTE_ALWAYS_INLINE
static bool
1845 CheckType(const unsigned char *MatcherTable
, unsigned &MatcherIndex
,
1846 SDValue N
, const TargetLowering
&TLI
) {
1847 MVT::SimpleValueType VT
= (MVT::SimpleValueType
)MatcherTable
[MatcherIndex
++];
1848 if (N
.getValueType() == VT
) return true;
1850 // Handle the case when VT is iPTR.
1851 return VT
== MVT::iPTR
&& N
.getValueType() == TLI
.getPointerTy();
1854 LLVM_ATTRIBUTE_ALWAYS_INLINE
static bool
1855 CheckChildType(const unsigned char *MatcherTable
, unsigned &MatcherIndex
,
1856 SDValue N
, const TargetLowering
&TLI
,
1858 if (ChildNo
>= N
.getNumOperands())
1859 return false; // Match fails if out of range child #.
1860 return ::CheckType(MatcherTable
, MatcherIndex
, N
.getOperand(ChildNo
), TLI
);
1864 LLVM_ATTRIBUTE_ALWAYS_INLINE
static bool
1865 CheckCondCode(const unsigned char *MatcherTable
, unsigned &MatcherIndex
,
1867 return cast
<CondCodeSDNode
>(N
)->get() ==
1868 (ISD::CondCode
)MatcherTable
[MatcherIndex
++];
1871 LLVM_ATTRIBUTE_ALWAYS_INLINE
static bool
1872 CheckValueType(const unsigned char *MatcherTable
, unsigned &MatcherIndex
,
1873 SDValue N
, const TargetLowering
&TLI
) {
1874 MVT::SimpleValueType VT
= (MVT::SimpleValueType
)MatcherTable
[MatcherIndex
++];
1875 if (cast
<VTSDNode
>(N
)->getVT() == VT
)
1878 // Handle the case when VT is iPTR.
1879 return VT
== MVT::iPTR
&& cast
<VTSDNode
>(N
)->getVT() == TLI
.getPointerTy();
1882 LLVM_ATTRIBUTE_ALWAYS_INLINE
static bool
1883 CheckInteger(const unsigned char *MatcherTable
, unsigned &MatcherIndex
,
1885 int64_t Val
= MatcherTable
[MatcherIndex
++];
1887 Val
= GetVBR(Val
, MatcherTable
, MatcherIndex
);
1889 ConstantSDNode
*C
= dyn_cast
<ConstantSDNode
>(N
);
1890 return C
!= 0 && C
->getSExtValue() == Val
;
1893 LLVM_ATTRIBUTE_ALWAYS_INLINE
static bool
1894 CheckAndImm(const unsigned char *MatcherTable
, unsigned &MatcherIndex
,
1895 SDValue N
, SelectionDAGISel
&SDISel
) {
1896 int64_t Val
= MatcherTable
[MatcherIndex
++];
1898 Val
= GetVBR(Val
, MatcherTable
, MatcherIndex
);
1900 if (N
->getOpcode() != ISD::AND
) return false;
1902 ConstantSDNode
*C
= dyn_cast
<ConstantSDNode
>(N
->getOperand(1));
1903 return C
!= 0 && SDISel
.CheckAndMask(N
.getOperand(0), C
, Val
);
1906 LLVM_ATTRIBUTE_ALWAYS_INLINE
static bool
1907 CheckOrImm(const unsigned char *MatcherTable
, unsigned &MatcherIndex
,
1908 SDValue N
, SelectionDAGISel
&SDISel
) {
1909 int64_t Val
= MatcherTable
[MatcherIndex
++];
1911 Val
= GetVBR(Val
, MatcherTable
, MatcherIndex
);
1913 if (N
->getOpcode() != ISD::OR
) return false;
1915 ConstantSDNode
*C
= dyn_cast
<ConstantSDNode
>(N
->getOperand(1));
1916 return C
!= 0 && SDISel
.CheckOrMask(N
.getOperand(0), C
, Val
);
1919 /// IsPredicateKnownToFail - If we know how and can do so without pushing a
1920 /// scope, evaluate the current node. If the current predicate is known to
1921 /// fail, set Result=true and return anything. If the current predicate is
1922 /// known to pass, set Result=false and return the MatcherIndex to continue
1923 /// with. If the current predicate is unknown, set Result=false and return the
1924 /// MatcherIndex to continue with.
1925 static unsigned IsPredicateKnownToFail(const unsigned char *Table
,
1926 unsigned Index
, SDValue N
,
1927 bool &Result
, SelectionDAGISel
&SDISel
,
1928 SmallVectorImpl
<std::pair
<SDValue
, SDNode
*> > &RecordedNodes
) {
1929 switch (Table
[Index
++]) {
1932 return Index
-1; // Could not evaluate this predicate.
1933 case SelectionDAGISel::OPC_CheckSame
:
1934 Result
= !::CheckSame(Table
, Index
, N
, RecordedNodes
);
1936 case SelectionDAGISel::OPC_CheckPatternPredicate
:
1937 Result
= !::CheckPatternPredicate(Table
, Index
, SDISel
);
1939 case SelectionDAGISel::OPC_CheckPredicate
:
1940 Result
= !::CheckNodePredicate(Table
, Index
, SDISel
, N
.getNode());
1942 case SelectionDAGISel::OPC_CheckOpcode
:
1943 Result
= !::CheckOpcode(Table
, Index
, N
.getNode());
1945 case SelectionDAGISel::OPC_CheckType
:
1946 Result
= !::CheckType(Table
, Index
, N
, SDISel
.TLI
);
1948 case SelectionDAGISel::OPC_CheckChild0Type
:
1949 case SelectionDAGISel::OPC_CheckChild1Type
:
1950 case SelectionDAGISel::OPC_CheckChild2Type
:
1951 case SelectionDAGISel::OPC_CheckChild3Type
:
1952 case SelectionDAGISel::OPC_CheckChild4Type
:
1953 case SelectionDAGISel::OPC_CheckChild5Type
:
1954 case SelectionDAGISel::OPC_CheckChild6Type
:
1955 case SelectionDAGISel::OPC_CheckChild7Type
:
1956 Result
= !::CheckChildType(Table
, Index
, N
, SDISel
.TLI
,
1957 Table
[Index
-1] - SelectionDAGISel::OPC_CheckChild0Type
);
1959 case SelectionDAGISel::OPC_CheckCondCode
:
1960 Result
= !::CheckCondCode(Table
, Index
, N
);
1962 case SelectionDAGISel::OPC_CheckValueType
:
1963 Result
= !::CheckValueType(Table
, Index
, N
, SDISel
.TLI
);
1965 case SelectionDAGISel::OPC_CheckInteger
:
1966 Result
= !::CheckInteger(Table
, Index
, N
);
1968 case SelectionDAGISel::OPC_CheckAndImm
:
1969 Result
= !::CheckAndImm(Table
, Index
, N
, SDISel
);
1971 case SelectionDAGISel::OPC_CheckOrImm
:
1972 Result
= !::CheckOrImm(Table
, Index
, N
, SDISel
);
1980 /// FailIndex - If this match fails, this is the index to continue with.
1983 /// NodeStack - The node stack when the scope was formed.
1984 SmallVector
<SDValue
, 4> NodeStack
;
1986 /// NumRecordedNodes - The number of recorded nodes when the scope was formed.
1987 unsigned NumRecordedNodes
;
1989 /// NumMatchedMemRefs - The number of matched memref entries.
1990 unsigned NumMatchedMemRefs
;
1992 /// InputChain/InputGlue - The current chain/glue
1993 SDValue InputChain
, InputGlue
;
1995 /// HasChainNodesMatched - True if the ChainNodesMatched list is non-empty.
1996 bool HasChainNodesMatched
, HasGlueResultNodesMatched
;
2001 SDNode
*SelectionDAGISel::
2002 SelectCodeCommon(SDNode
*NodeToMatch
, const unsigned char *MatcherTable
,
2003 unsigned TableSize
) {
2004 // FIXME: Should these even be selected? Handle these cases in the caller?
2005 switch (NodeToMatch
->getOpcode()) {
2008 case ISD::EntryToken
: // These nodes remain the same.
2009 case ISD::BasicBlock
:
2011 //case ISD::VALUETYPE:
2012 //case ISD::CONDCODE:
2013 case ISD::HANDLENODE
:
2014 case ISD::MDNODE_SDNODE
:
2015 case ISD::TargetConstant
:
2016 case ISD::TargetConstantFP
:
2017 case ISD::TargetConstantPool
:
2018 case ISD::TargetFrameIndex
:
2019 case ISD::TargetExternalSymbol
:
2020 case ISD::TargetBlockAddress
:
2021 case ISD::TargetJumpTable
:
2022 case ISD::TargetGlobalTLSAddress
:
2023 case ISD::TargetGlobalAddress
:
2024 case ISD::TokenFactor
:
2025 case ISD::CopyFromReg
:
2026 case ISD::CopyToReg
:
2028 NodeToMatch
->setNodeId(-1); // Mark selected.
2030 case ISD::AssertSext
:
2031 case ISD::AssertZext
:
2032 CurDAG
->ReplaceAllUsesOfValueWith(SDValue(NodeToMatch
, 0),
2033 NodeToMatch
->getOperand(0));
2035 case ISD::INLINEASM
: return Select_INLINEASM(NodeToMatch
);
2036 case ISD::UNDEF
: return Select_UNDEF(NodeToMatch
);
2039 assert(!NodeToMatch
->isMachineOpcode() && "Node already selected!");
2041 // Set up the node stack with NodeToMatch as the only node on the stack.
2042 SmallVector
<SDValue
, 8> NodeStack
;
2043 SDValue N
= SDValue(NodeToMatch
, 0);
2044 NodeStack
.push_back(N
);
2046 // MatchScopes - Scopes used when matching, if a match failure happens, this
2047 // indicates where to continue checking.
2048 SmallVector
<MatchScope
, 8> MatchScopes
;
2050 // RecordedNodes - This is the set of nodes that have been recorded by the
2051 // state machine. The second value is the parent of the node, or null if the
2052 // root is recorded.
2053 SmallVector
<std::pair
<SDValue
, SDNode
*>, 8> RecordedNodes
;
2055 // MatchedMemRefs - This is the set of MemRef's we've seen in the input
2057 SmallVector
<MachineMemOperand
*, 2> MatchedMemRefs
;
2059 // These are the current input chain and glue for use when generating nodes.
2060 // Various Emit operations change these. For example, emitting a copytoreg
2061 // uses and updates these.
2062 SDValue InputChain
, InputGlue
;
2064 // ChainNodesMatched - If a pattern matches nodes that have input/output
2065 // chains, the OPC_EmitMergeInputChains operation is emitted which indicates
2066 // which ones they are. The result is captured into this list so that we can
2067 // update the chain results when the pattern is complete.
2068 SmallVector
<SDNode
*, 3> ChainNodesMatched
;
2069 SmallVector
<SDNode
*, 3> GlueResultNodesMatched
;
2071 DEBUG(errs() << "ISEL: Starting pattern match on root node: ";
2072 NodeToMatch
->dump(CurDAG
);
2075 // Determine where to start the interpreter. Normally we start at opcode #0,
2076 // but if the state machine starts with an OPC_SwitchOpcode, then we
2077 // accelerate the first lookup (which is guaranteed to be hot) with the
2078 // OpcodeOffset table.
2079 unsigned MatcherIndex
= 0;
2081 if (!OpcodeOffset
.empty()) {
2082 // Already computed the OpcodeOffset table, just index into it.
2083 if (N
.getOpcode() < OpcodeOffset
.size())
2084 MatcherIndex
= OpcodeOffset
[N
.getOpcode()];
2085 DEBUG(errs() << " Initial Opcode index to " << MatcherIndex
<< "\n");
2087 } else if (MatcherTable
[0] == OPC_SwitchOpcode
) {
2088 // Otherwise, the table isn't computed, but the state machine does start
2089 // with an OPC_SwitchOpcode instruction. Populate the table now, since this
2090 // is the first time we're selecting an instruction.
2093 // Get the size of this case.
2094 unsigned CaseSize
= MatcherTable
[Idx
++];
2096 CaseSize
= GetVBR(CaseSize
, MatcherTable
, Idx
);
2097 if (CaseSize
== 0) break;
2099 // Get the opcode, add the index to the table.
2100 uint16_t Opc
= MatcherTable
[Idx
++];
2101 Opc
|= (unsigned short)MatcherTable
[Idx
++] << 8;
2102 if (Opc
>= OpcodeOffset
.size())
2103 OpcodeOffset
.resize((Opc
+1)*2);
2104 OpcodeOffset
[Opc
] = Idx
;
2108 // Okay, do the lookup for the first opcode.
2109 if (N
.getOpcode() < OpcodeOffset
.size())
2110 MatcherIndex
= OpcodeOffset
[N
.getOpcode()];
2114 assert(MatcherIndex
< TableSize
&& "Invalid index");
2116 unsigned CurrentOpcodeIndex
= MatcherIndex
;
2118 BuiltinOpcodes Opcode
= (BuiltinOpcodes
)MatcherTable
[MatcherIndex
++];
2121 // Okay, the semantics of this operation are that we should push a scope
2122 // then evaluate the first child. However, pushing a scope only to have
2123 // the first check fail (which then pops it) is inefficient. If we can
2124 // determine immediately that the first check (or first several) will
2125 // immediately fail, don't even bother pushing a scope for them.
2129 unsigned NumToSkip
= MatcherTable
[MatcherIndex
++];
2130 if (NumToSkip
& 128)
2131 NumToSkip
= GetVBR(NumToSkip
, MatcherTable
, MatcherIndex
);
2132 // Found the end of the scope with no match.
2133 if (NumToSkip
== 0) {
2138 FailIndex
= MatcherIndex
+NumToSkip
;
2140 unsigned MatcherIndexOfPredicate
= MatcherIndex
;
2141 (void)MatcherIndexOfPredicate
; // silence warning.
2143 // If we can't evaluate this predicate without pushing a scope (e.g. if
2144 // it is a 'MoveParent') or if the predicate succeeds on this node, we
2145 // push the scope and evaluate the full predicate chain.
2147 MatcherIndex
= IsPredicateKnownToFail(MatcherTable
, MatcherIndex
, N
,
2148 Result
, *this, RecordedNodes
);
2152 DEBUG(errs() << " Skipped scope entry (due to false predicate) at "
2153 << "index " << MatcherIndexOfPredicate
2154 << ", continuing at " << FailIndex
<< "\n");
2155 ++NumDAGIselRetries
;
2157 // Otherwise, we know that this case of the Scope is guaranteed to fail,
2158 // move to the next case.
2159 MatcherIndex
= FailIndex
;
2162 // If the whole scope failed to match, bail.
2163 if (FailIndex
== 0) break;
2165 // Push a MatchScope which indicates where to go if the first child fails
2167 MatchScope NewEntry
;
2168 NewEntry
.FailIndex
= FailIndex
;
2169 NewEntry
.NodeStack
.append(NodeStack
.begin(), NodeStack
.end());
2170 NewEntry
.NumRecordedNodes
= RecordedNodes
.size();
2171 NewEntry
.NumMatchedMemRefs
= MatchedMemRefs
.size();
2172 NewEntry
.InputChain
= InputChain
;
2173 NewEntry
.InputGlue
= InputGlue
;
2174 NewEntry
.HasChainNodesMatched
= !ChainNodesMatched
.empty();
2175 NewEntry
.HasGlueResultNodesMatched
= !GlueResultNodesMatched
.empty();
2176 MatchScopes
.push_back(NewEntry
);
2179 case OPC_RecordNode
: {
2180 // Remember this node, it may end up being an operand in the pattern.
2182 if (NodeStack
.size() > 1)
2183 Parent
= NodeStack
[NodeStack
.size()-2].getNode();
2184 RecordedNodes
.push_back(std::make_pair(N
, Parent
));
2188 case OPC_RecordChild0
: case OPC_RecordChild1
:
2189 case OPC_RecordChild2
: case OPC_RecordChild3
:
2190 case OPC_RecordChild4
: case OPC_RecordChild5
:
2191 case OPC_RecordChild6
: case OPC_RecordChild7
: {
2192 unsigned ChildNo
= Opcode
-OPC_RecordChild0
;
2193 if (ChildNo
>= N
.getNumOperands())
2194 break; // Match fails if out of range child #.
2196 RecordedNodes
.push_back(std::make_pair(N
->getOperand(ChildNo
),
2200 case OPC_RecordMemRef
:
2201 MatchedMemRefs
.push_back(cast
<MemSDNode
>(N
)->getMemOperand());
2204 case OPC_CaptureGlueInput
:
2205 // If the current node has an input glue, capture it in InputGlue.
2206 if (N
->getNumOperands() != 0 &&
2207 N
->getOperand(N
->getNumOperands()-1).getValueType() == MVT::Glue
)
2208 InputGlue
= N
->getOperand(N
->getNumOperands()-1);
2211 case OPC_MoveChild
: {
2212 unsigned ChildNo
= MatcherTable
[MatcherIndex
++];
2213 if (ChildNo
>= N
.getNumOperands())
2214 break; // Match fails if out of range child #.
2215 N
= N
.getOperand(ChildNo
);
2216 NodeStack
.push_back(N
);
2220 case OPC_MoveParent
:
2221 // Pop the current node off the NodeStack.
2222 NodeStack
.pop_back();
2223 assert(!NodeStack
.empty() && "Node stack imbalance!");
2224 N
= NodeStack
.back();
2228 if (!::CheckSame(MatcherTable
, MatcherIndex
, N
, RecordedNodes
)) break;
2230 case OPC_CheckPatternPredicate
:
2231 if (!::CheckPatternPredicate(MatcherTable
, MatcherIndex
, *this)) break;
2233 case OPC_CheckPredicate
:
2234 if (!::CheckNodePredicate(MatcherTable
, MatcherIndex
, *this,
2238 case OPC_CheckComplexPat
: {
2239 unsigned CPNum
= MatcherTable
[MatcherIndex
++];
2240 unsigned RecNo
= MatcherTable
[MatcherIndex
++];
2241 assert(RecNo
< RecordedNodes
.size() && "Invalid CheckComplexPat");
2242 if (!CheckComplexPattern(NodeToMatch
, RecordedNodes
[RecNo
].second
,
2243 RecordedNodes
[RecNo
].first
, CPNum
,
2248 case OPC_CheckOpcode
:
2249 if (!::CheckOpcode(MatcherTable
, MatcherIndex
, N
.getNode())) break;
2253 if (!::CheckType(MatcherTable
, MatcherIndex
, N
, TLI
)) break;
2256 case OPC_SwitchOpcode
: {
2257 unsigned CurNodeOpcode
= N
.getOpcode();
2258 unsigned SwitchStart
= MatcherIndex
-1; (void)SwitchStart
;
2261 // Get the size of this case.
2262 CaseSize
= MatcherTable
[MatcherIndex
++];
2264 CaseSize
= GetVBR(CaseSize
, MatcherTable
, MatcherIndex
);
2265 if (CaseSize
== 0) break;
2267 uint16_t Opc
= MatcherTable
[MatcherIndex
++];
2268 Opc
|= (unsigned short)MatcherTable
[MatcherIndex
++] << 8;
2270 // If the opcode matches, then we will execute this case.
2271 if (CurNodeOpcode
== Opc
)
2274 // Otherwise, skip over this case.
2275 MatcherIndex
+= CaseSize
;
2278 // If no cases matched, bail out.
2279 if (CaseSize
== 0) break;
2281 // Otherwise, execute the case we found.
2282 DEBUG(errs() << " OpcodeSwitch from " << SwitchStart
2283 << " to " << MatcherIndex
<< "\n");
2287 case OPC_SwitchType
: {
2288 MVT CurNodeVT
= N
.getValueType().getSimpleVT();
2289 unsigned SwitchStart
= MatcherIndex
-1; (void)SwitchStart
;
2292 // Get the size of this case.
2293 CaseSize
= MatcherTable
[MatcherIndex
++];
2295 CaseSize
= GetVBR(CaseSize
, MatcherTable
, MatcherIndex
);
2296 if (CaseSize
== 0) break;
2298 MVT CaseVT
= (MVT::SimpleValueType
)MatcherTable
[MatcherIndex
++];
2299 if (CaseVT
== MVT::iPTR
)
2300 CaseVT
= TLI
.getPointerTy();
2302 // If the VT matches, then we will execute this case.
2303 if (CurNodeVT
== CaseVT
)
2306 // Otherwise, skip over this case.
2307 MatcherIndex
+= CaseSize
;
2310 // If no cases matched, bail out.
2311 if (CaseSize
== 0) break;
2313 // Otherwise, execute the case we found.
2314 DEBUG(errs() << " TypeSwitch[" << EVT(CurNodeVT
).getEVTString()
2315 << "] from " << SwitchStart
<< " to " << MatcherIndex
<<'\n');
2318 case OPC_CheckChild0Type
: case OPC_CheckChild1Type
:
2319 case OPC_CheckChild2Type
: case OPC_CheckChild3Type
:
2320 case OPC_CheckChild4Type
: case OPC_CheckChild5Type
:
2321 case OPC_CheckChild6Type
: case OPC_CheckChild7Type
:
2322 if (!::CheckChildType(MatcherTable
, MatcherIndex
, N
, TLI
,
2323 Opcode
-OPC_CheckChild0Type
))
2326 case OPC_CheckCondCode
:
2327 if (!::CheckCondCode(MatcherTable
, MatcherIndex
, N
)) break;
2329 case OPC_CheckValueType
:
2330 if (!::CheckValueType(MatcherTable
, MatcherIndex
, N
, TLI
)) break;
2332 case OPC_CheckInteger
:
2333 if (!::CheckInteger(MatcherTable
, MatcherIndex
, N
)) break;
2335 case OPC_CheckAndImm
:
2336 if (!::CheckAndImm(MatcherTable
, MatcherIndex
, N
, *this)) break;
2338 case OPC_CheckOrImm
:
2339 if (!::CheckOrImm(MatcherTable
, MatcherIndex
, N
, *this)) break;
2342 case OPC_CheckFoldableChainNode
: {
2343 assert(NodeStack
.size() != 1 && "No parent node");
2344 // Verify that all intermediate nodes between the root and this one have
2346 bool HasMultipleUses
= false;
2347 for (unsigned i
= 1, e
= NodeStack
.size()-1; i
!= e
; ++i
)
2348 if (!NodeStack
[i
].hasOneUse()) {
2349 HasMultipleUses
= true;
2352 if (HasMultipleUses
) break;
2354 // Check to see that the target thinks this is profitable to fold and that
2355 // we can fold it without inducing cycles in the graph.
2356 if (!IsProfitableToFold(N
, NodeStack
[NodeStack
.size()-2].getNode(),
2358 !IsLegalToFold(N
, NodeStack
[NodeStack
.size()-2].getNode(),
2359 NodeToMatch
, OptLevel
,
2360 true/*We validate our own chains*/))
2365 case OPC_EmitInteger
: {
2366 MVT::SimpleValueType VT
=
2367 (MVT::SimpleValueType
)MatcherTable
[MatcherIndex
++];
2368 int64_t Val
= MatcherTable
[MatcherIndex
++];
2370 Val
= GetVBR(Val
, MatcherTable
, MatcherIndex
);
2371 RecordedNodes
.push_back(std::pair
<SDValue
, SDNode
*>(
2372 CurDAG
->getTargetConstant(Val
, VT
), (SDNode
*)0));
2375 case OPC_EmitRegister
: {
2376 MVT::SimpleValueType VT
=
2377 (MVT::SimpleValueType
)MatcherTable
[MatcherIndex
++];
2378 unsigned RegNo
= MatcherTable
[MatcherIndex
++];
2379 RecordedNodes
.push_back(std::pair
<SDValue
, SDNode
*>(
2380 CurDAG
->getRegister(RegNo
, VT
), (SDNode
*)0));
2383 case OPC_EmitRegister2
: {
2384 // For targets w/ more than 256 register names, the register enum
2385 // values are stored in two bytes in the matcher table (just like
2387 MVT::SimpleValueType VT
=
2388 (MVT::SimpleValueType
)MatcherTable
[MatcherIndex
++];
2389 unsigned RegNo
= MatcherTable
[MatcherIndex
++];
2390 RegNo
|= MatcherTable
[MatcherIndex
++] << 8;
2391 RecordedNodes
.push_back(std::pair
<SDValue
, SDNode
*>(
2392 CurDAG
->getRegister(RegNo
, VT
), (SDNode
*)0));
2396 case OPC_EmitConvertToTarget
: {
2397 // Convert from IMM/FPIMM to target version.
2398 unsigned RecNo
= MatcherTable
[MatcherIndex
++];
2399 assert(RecNo
< RecordedNodes
.size() && "Invalid CheckSame");
2400 SDValue Imm
= RecordedNodes
[RecNo
].first
;
2402 if (Imm
->getOpcode() == ISD::Constant
) {
2403 int64_t Val
= cast
<ConstantSDNode
>(Imm
)->getZExtValue();
2404 Imm
= CurDAG
->getTargetConstant(Val
, Imm
.getValueType());
2405 } else if (Imm
->getOpcode() == ISD::ConstantFP
) {
2406 const ConstantFP
*Val
=cast
<ConstantFPSDNode
>(Imm
)->getConstantFPValue();
2407 Imm
= CurDAG
->getTargetConstantFP(*Val
, Imm
.getValueType());
2410 RecordedNodes
.push_back(std::make_pair(Imm
, RecordedNodes
[RecNo
].second
));
2414 case OPC_EmitMergeInputChains1_0
: // OPC_EmitMergeInputChains, 1, 0
2415 case OPC_EmitMergeInputChains1_1
: { // OPC_EmitMergeInputChains, 1, 1
2416 // These are space-optimized forms of OPC_EmitMergeInputChains.
2417 assert(InputChain
.getNode() == 0 &&
2418 "EmitMergeInputChains should be the first chain producing node");
2419 assert(ChainNodesMatched
.empty() &&
2420 "Should only have one EmitMergeInputChains per match");
2422 // Read all of the chained nodes.
2423 unsigned RecNo
= Opcode
== OPC_EmitMergeInputChains1_1
;
2424 assert(RecNo
< RecordedNodes
.size() && "Invalid CheckSame");
2425 ChainNodesMatched
.push_back(RecordedNodes
[RecNo
].first
.getNode());
2427 // FIXME: What if other value results of the node have uses not matched
2429 if (ChainNodesMatched
.back() != NodeToMatch
&&
2430 !RecordedNodes
[RecNo
].first
.hasOneUse()) {
2431 ChainNodesMatched
.clear();
2435 // Merge the input chains if they are not intra-pattern references.
2436 InputChain
= HandleMergeInputChains(ChainNodesMatched
, CurDAG
);
2438 if (InputChain
.getNode() == 0)
2439 break; // Failed to merge.
2443 case OPC_EmitMergeInputChains
: {
2444 assert(InputChain
.getNode() == 0 &&
2445 "EmitMergeInputChains should be the first chain producing node");
2446 // This node gets a list of nodes we matched in the input that have
2447 // chains. We want to token factor all of the input chains to these nodes
2448 // together. However, if any of the input chains is actually one of the
2449 // nodes matched in this pattern, then we have an intra-match reference.
2450 // Ignore these because the newly token factored chain should not refer to
2452 unsigned NumChains
= MatcherTable
[MatcherIndex
++];
2453 assert(NumChains
!= 0 && "Can't TF zero chains");
2455 assert(ChainNodesMatched
.empty() &&
2456 "Should only have one EmitMergeInputChains per match");
2458 // Read all of the chained nodes.
2459 for (unsigned i
= 0; i
!= NumChains
; ++i
) {
2460 unsigned RecNo
= MatcherTable
[MatcherIndex
++];
2461 assert(RecNo
< RecordedNodes
.size() && "Invalid CheckSame");
2462 ChainNodesMatched
.push_back(RecordedNodes
[RecNo
].first
.getNode());
2464 // FIXME: What if other value results of the node have uses not matched
2466 if (ChainNodesMatched
.back() != NodeToMatch
&&
2467 !RecordedNodes
[RecNo
].first
.hasOneUse()) {
2468 ChainNodesMatched
.clear();
2473 // If the inner loop broke out, the match fails.
2474 if (ChainNodesMatched
.empty())
2477 // Merge the input chains if they are not intra-pattern references.
2478 InputChain
= HandleMergeInputChains(ChainNodesMatched
, CurDAG
);
2480 if (InputChain
.getNode() == 0)
2481 break; // Failed to merge.
2486 case OPC_EmitCopyToReg
: {
2487 unsigned RecNo
= MatcherTable
[MatcherIndex
++];
2488 assert(RecNo
< RecordedNodes
.size() && "Invalid CheckSame");
2489 unsigned DestPhysReg
= MatcherTable
[MatcherIndex
++];
2491 if (InputChain
.getNode() == 0)
2492 InputChain
= CurDAG
->getEntryNode();
2494 InputChain
= CurDAG
->getCopyToReg(InputChain
, NodeToMatch
->getDebugLoc(),
2495 DestPhysReg
, RecordedNodes
[RecNo
].first
,
2498 InputGlue
= InputChain
.getValue(1);
2502 case OPC_EmitNodeXForm
: {
2503 unsigned XFormNo
= MatcherTable
[MatcherIndex
++];
2504 unsigned RecNo
= MatcherTable
[MatcherIndex
++];
2505 assert(RecNo
< RecordedNodes
.size() && "Invalid CheckSame");
2506 SDValue Res
= RunSDNodeXForm(RecordedNodes
[RecNo
].first
, XFormNo
);
2507 RecordedNodes
.push_back(std::pair
<SDValue
,SDNode
*>(Res
, (SDNode
*) 0));
2512 case OPC_MorphNodeTo
: {
2513 uint16_t TargetOpc
= MatcherTable
[MatcherIndex
++];
2514 TargetOpc
|= (unsigned short)MatcherTable
[MatcherIndex
++] << 8;
2515 unsigned EmitNodeInfo
= MatcherTable
[MatcherIndex
++];
2516 // Get the result VT list.
2517 unsigned NumVTs
= MatcherTable
[MatcherIndex
++];
2518 SmallVector
<EVT
, 4> VTs
;
2519 for (unsigned i
= 0; i
!= NumVTs
; ++i
) {
2520 MVT::SimpleValueType VT
=
2521 (MVT::SimpleValueType
)MatcherTable
[MatcherIndex
++];
2522 if (VT
== MVT::iPTR
) VT
= TLI
.getPointerTy().SimpleTy
;
2526 if (EmitNodeInfo
& OPFL_Chain
)
2527 VTs
.push_back(MVT::Other
);
2528 if (EmitNodeInfo
& OPFL_GlueOutput
)
2529 VTs
.push_back(MVT::Glue
);
2531 // This is hot code, so optimize the two most common cases of 1 and 2
2534 if (VTs
.size() == 1)
2535 VTList
= CurDAG
->getVTList(VTs
[0]);
2536 else if (VTs
.size() == 2)
2537 VTList
= CurDAG
->getVTList(VTs
[0], VTs
[1]);
2539 VTList
= CurDAG
->getVTList(VTs
.data(), VTs
.size());
2541 // Get the operand list.
2542 unsigned NumOps
= MatcherTable
[MatcherIndex
++];
2543 SmallVector
<SDValue
, 8> Ops
;
2544 for (unsigned i
= 0; i
!= NumOps
; ++i
) {
2545 unsigned RecNo
= MatcherTable
[MatcherIndex
++];
2547 RecNo
= GetVBR(RecNo
, MatcherTable
, MatcherIndex
);
2549 assert(RecNo
< RecordedNodes
.size() && "Invalid EmitNode");
2550 Ops
.push_back(RecordedNodes
[RecNo
].first
);
2553 // If there are variadic operands to add, handle them now.
2554 if (EmitNodeInfo
& OPFL_VariadicInfo
) {
2555 // Determine the start index to copy from.
2556 unsigned FirstOpToCopy
= getNumFixedFromVariadicInfo(EmitNodeInfo
);
2557 FirstOpToCopy
+= (EmitNodeInfo
& OPFL_Chain
) ? 1 : 0;
2558 assert(NodeToMatch
->getNumOperands() >= FirstOpToCopy
&&
2559 "Invalid variadic node");
2560 // Copy all of the variadic operands, not including a potential glue
2562 for (unsigned i
= FirstOpToCopy
, e
= NodeToMatch
->getNumOperands();
2564 SDValue V
= NodeToMatch
->getOperand(i
);
2565 if (V
.getValueType() == MVT::Glue
) break;
2570 // If this has chain/glue inputs, add them.
2571 if (EmitNodeInfo
& OPFL_Chain
)
2572 Ops
.push_back(InputChain
);
2573 if ((EmitNodeInfo
& OPFL_GlueInput
) && InputGlue
.getNode() != 0)
2574 Ops
.push_back(InputGlue
);
2578 if (Opcode
!= OPC_MorphNodeTo
) {
2579 // If this is a normal EmitNode command, just create the new node and
2580 // add the results to the RecordedNodes list.
2581 Res
= CurDAG
->getMachineNode(TargetOpc
, NodeToMatch
->getDebugLoc(),
2582 VTList
, Ops
.data(), Ops
.size());
2584 // Add all the non-glue/non-chain results to the RecordedNodes list.
2585 for (unsigned i
= 0, e
= VTs
.size(); i
!= e
; ++i
) {
2586 if (VTs
[i
] == MVT::Other
|| VTs
[i
] == MVT::Glue
) break;
2587 RecordedNodes
.push_back(std::pair
<SDValue
,SDNode
*>(SDValue(Res
, i
),
2592 Res
= MorphNode(NodeToMatch
, TargetOpc
, VTList
, Ops
.data(), Ops
.size(),
2596 // If the node had chain/glue results, update our notion of the current
2598 if (EmitNodeInfo
& OPFL_GlueOutput
) {
2599 InputGlue
= SDValue(Res
, VTs
.size()-1);
2600 if (EmitNodeInfo
& OPFL_Chain
)
2601 InputChain
= SDValue(Res
, VTs
.size()-2);
2602 } else if (EmitNodeInfo
& OPFL_Chain
)
2603 InputChain
= SDValue(Res
, VTs
.size()-1);
2605 // If the OPFL_MemRefs glue is set on this node, slap all of the
2606 // accumulated memrefs onto it.
2608 // FIXME: This is vastly incorrect for patterns with multiple outputs
2609 // instructions that access memory and for ComplexPatterns that match
2611 if (EmitNodeInfo
& OPFL_MemRefs
) {
2612 // Only attach load or store memory operands if the generated
2613 // instruction may load or store.
2614 const MCInstrDesc
&MCID
= TM
.getInstrInfo()->get(TargetOpc
);
2615 bool mayLoad
= MCID
.mayLoad();
2616 bool mayStore
= MCID
.mayStore();
2618 unsigned NumMemRefs
= 0;
2619 for (SmallVector
<MachineMemOperand
*, 2>::const_iterator I
=
2620 MatchedMemRefs
.begin(), E
= MatchedMemRefs
.end(); I
!= E
; ++I
) {
2621 if ((*I
)->isLoad()) {
2624 } else if ((*I
)->isStore()) {
2632 MachineSDNode::mmo_iterator MemRefs
=
2633 MF
->allocateMemRefsArray(NumMemRefs
);
2635 MachineSDNode::mmo_iterator MemRefsPos
= MemRefs
;
2636 for (SmallVector
<MachineMemOperand
*, 2>::const_iterator I
=
2637 MatchedMemRefs
.begin(), E
= MatchedMemRefs
.end(); I
!= E
; ++I
) {
2638 if ((*I
)->isLoad()) {
2641 } else if ((*I
)->isStore()) {
2649 cast
<MachineSDNode
>(Res
)
2650 ->setMemRefs(MemRefs
, MemRefs
+ NumMemRefs
);
2654 << (Opcode
== OPC_MorphNodeTo
? "Morphed" : "Created")
2655 << " node: "; Res
->dump(CurDAG
); errs() << "\n");
2657 // If this was a MorphNodeTo then we're completely done!
2658 if (Opcode
== OPC_MorphNodeTo
) {
2659 // Update chain and glue uses.
2660 UpdateChainsAndGlue(NodeToMatch
, InputChain
, ChainNodesMatched
,
2661 InputGlue
, GlueResultNodesMatched
, true);
2668 case OPC_MarkGlueResults
: {
2669 unsigned NumNodes
= MatcherTable
[MatcherIndex
++];
2671 // Read and remember all the glue-result nodes.
2672 for (unsigned i
= 0; i
!= NumNodes
; ++i
) {
2673 unsigned RecNo
= MatcherTable
[MatcherIndex
++];
2675 RecNo
= GetVBR(RecNo
, MatcherTable
, MatcherIndex
);
2677 assert(RecNo
< RecordedNodes
.size() && "Invalid CheckSame");
2678 GlueResultNodesMatched
.push_back(RecordedNodes
[RecNo
].first
.getNode());
2683 case OPC_CompleteMatch
: {
2684 // The match has been completed, and any new nodes (if any) have been
2685 // created. Patch up references to the matched dag to use the newly
2687 unsigned NumResults
= MatcherTable
[MatcherIndex
++];
2689 for (unsigned i
= 0; i
!= NumResults
; ++i
) {
2690 unsigned ResSlot
= MatcherTable
[MatcherIndex
++];
2692 ResSlot
= GetVBR(ResSlot
, MatcherTable
, MatcherIndex
);
2694 assert(ResSlot
< RecordedNodes
.size() && "Invalid CheckSame");
2695 SDValue Res
= RecordedNodes
[ResSlot
].first
;
2697 assert(i
< NodeToMatch
->getNumValues() &&
2698 NodeToMatch
->getValueType(i
) != MVT::Other
&&
2699 NodeToMatch
->getValueType(i
) != MVT::Glue
&&
2700 "Invalid number of results to complete!");
2701 assert((NodeToMatch
->getValueType(i
) == Res
.getValueType() ||
2702 NodeToMatch
->getValueType(i
) == MVT::iPTR
||
2703 Res
.getValueType() == MVT::iPTR
||
2704 NodeToMatch
->getValueType(i
).getSizeInBits() ==
2705 Res
.getValueType().getSizeInBits()) &&
2706 "invalid replacement");
2707 CurDAG
->ReplaceAllUsesOfValueWith(SDValue(NodeToMatch
, i
), Res
);
2710 // If the root node defines glue, add it to the glue nodes to update list.
2711 if (NodeToMatch
->getValueType(NodeToMatch
->getNumValues()-1) == MVT::Glue
)
2712 GlueResultNodesMatched
.push_back(NodeToMatch
);
2714 // Update chain and glue uses.
2715 UpdateChainsAndGlue(NodeToMatch
, InputChain
, ChainNodesMatched
,
2716 InputGlue
, GlueResultNodesMatched
, false);
2718 assert(NodeToMatch
->use_empty() &&
2719 "Didn't replace all uses of the node?");
2721 // FIXME: We just return here, which interacts correctly with SelectRoot
2722 // above. We should fix this to not return an SDNode* anymore.
2727 // If the code reached this point, then the match failed. See if there is
2728 // another child to try in the current 'Scope', otherwise pop it until we
2729 // find a case to check.
2730 DEBUG(errs() << " Match failed at index " << CurrentOpcodeIndex
<< "\n");
2731 ++NumDAGIselRetries
;
2733 if (MatchScopes
.empty()) {
2734 CannotYetSelect(NodeToMatch
);
2738 // Restore the interpreter state back to the point where the scope was
2740 MatchScope
&LastScope
= MatchScopes
.back();
2741 RecordedNodes
.resize(LastScope
.NumRecordedNodes
);
2743 NodeStack
.append(LastScope
.NodeStack
.begin(), LastScope
.NodeStack
.end());
2744 N
= NodeStack
.back();
2746 if (LastScope
.NumMatchedMemRefs
!= MatchedMemRefs
.size())
2747 MatchedMemRefs
.resize(LastScope
.NumMatchedMemRefs
);
2748 MatcherIndex
= LastScope
.FailIndex
;
2750 DEBUG(errs() << " Continuing at " << MatcherIndex
<< "\n");
2752 InputChain
= LastScope
.InputChain
;
2753 InputGlue
= LastScope
.InputGlue
;
2754 if (!LastScope
.HasChainNodesMatched
)
2755 ChainNodesMatched
.clear();
2756 if (!LastScope
.HasGlueResultNodesMatched
)
2757 GlueResultNodesMatched
.clear();
2759 // Check to see what the offset is at the new MatcherIndex. If it is zero
2760 // we have reached the end of this scope, otherwise we have another child
2761 // in the current scope to try.
2762 unsigned NumToSkip
= MatcherTable
[MatcherIndex
++];
2763 if (NumToSkip
& 128)
2764 NumToSkip
= GetVBR(NumToSkip
, MatcherTable
, MatcherIndex
);
2766 // If we have another child in this scope to match, update FailIndex and
2768 if (NumToSkip
!= 0) {
2769 LastScope
.FailIndex
= MatcherIndex
+NumToSkip
;
2773 // End of this scope, pop it and try the next child in the containing
2775 MatchScopes
.pop_back();
2782 void SelectionDAGISel::CannotYetSelect(SDNode
*N
) {
2784 raw_string_ostream
Msg(msg
);
2785 Msg
<< "Cannot select: ";
2787 if (N
->getOpcode() != ISD::INTRINSIC_W_CHAIN
&&
2788 N
->getOpcode() != ISD::INTRINSIC_WO_CHAIN
&&
2789 N
->getOpcode() != ISD::INTRINSIC_VOID
) {
2790 N
->printrFull(Msg
, CurDAG
);
2792 bool HasInputChain
= N
->getOperand(0).getValueType() == MVT::Other
;
2794 cast
<ConstantSDNode
>(N
->getOperand(HasInputChain
))->getZExtValue();
2795 if (iid
< Intrinsic::num_intrinsics
)
2796 Msg
<< "intrinsic %" << Intrinsic::getName((Intrinsic::ID
)iid
);
2797 else if (const TargetIntrinsicInfo
*TII
= TM
.getIntrinsicInfo())
2798 Msg
<< "target intrinsic %" << TII
->getName(iid
);
2800 Msg
<< "unknown intrinsic #" << iid
;
2802 report_fatal_error(Msg
.str());
2805 char SelectionDAGISel::ID
= 0;