1 //===---------- SplitKit.cpp - Toolkit for splitting live ranges ----------===//
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 file contains the SplitAnalysis class as well as mutator functions for
11 // live range splitting.
13 //===----------------------------------------------------------------------===//
15 #define DEBUG_TYPE "regalloc"
17 #include "LiveRangeEdit.h"
18 #include "VirtRegMap.h"
19 #include "llvm/CodeGen/CalcSpillWeights.h"
20 #include "llvm/CodeGen/LiveIntervalAnalysis.h"
21 #include "llvm/CodeGen/MachineDominators.h"
22 #include "llvm/CodeGen/MachineInstrBuilder.h"
23 #include "llvm/CodeGen/MachineLoopInfo.h"
24 #include "llvm/CodeGen/MachineRegisterInfo.h"
25 #include "llvm/Support/CommandLine.h"
26 #include "llvm/Support/Debug.h"
27 #include "llvm/Support/raw_ostream.h"
28 #include "llvm/Target/TargetInstrInfo.h"
29 #include "llvm/Target/TargetMachine.h"
34 AllowSplit("spiller-splits-edges",
35 cl::desc("Allow critical edge splitting during spilling"));
37 //===----------------------------------------------------------------------===//
39 //===----------------------------------------------------------------------===//
41 SplitAnalysis::SplitAnalysis(const MachineFunction
&mf
,
42 const LiveIntervals
&lis
,
43 const MachineLoopInfo
&mli
)
47 tii_(*mf
.getTarget().getInstrInfo()),
50 void SplitAnalysis::clear() {
57 bool SplitAnalysis::canAnalyzeBranch(const MachineBasicBlock
*MBB
) {
58 MachineBasicBlock
*T
, *F
;
59 SmallVector
<MachineOperand
, 4> Cond
;
60 return !tii_
.AnalyzeBranch(const_cast<MachineBasicBlock
&>(*MBB
), T
, F
, Cond
);
63 /// analyzeUses - Count instructions, basic blocks, and loops using curli.
64 void SplitAnalysis::analyzeUses() {
65 const MachineRegisterInfo
&MRI
= mf_
.getRegInfo();
66 for (MachineRegisterInfo::reg_iterator I
= MRI
.reg_begin(curli_
->reg
);
67 MachineInstr
*MI
= I
.skipInstruction();) {
68 if (MI
->isDebugValue() || !usingInstrs_
.insert(MI
))
70 MachineBasicBlock
*MBB
= MI
->getParent();
71 if (usingBlocks_
[MBB
]++)
73 for (MachineLoop
*Loop
= loops_
.getLoopFor(MBB
); Loop
;
74 Loop
= Loop
->getParentLoop())
77 DEBUG(dbgs() << " counted "
78 << usingInstrs_
.size() << " instrs, "
79 << usingBlocks_
.size() << " blocks, "
80 << usingLoops_
.size() << " loops.\n");
83 void SplitAnalysis::print(const BlockPtrSet
&B
, raw_ostream
&OS
) const {
84 for (BlockPtrSet::const_iterator I
= B
.begin(), E
= B
.end(); I
!= E
; ++I
) {
85 unsigned count
= usingBlocks_
.lookup(*I
);
86 OS
<< " BB#" << (*I
)->getNumber();
88 OS
<< '(' << count
<< ')';
92 // Get three sets of basic blocks surrounding a loop: Blocks inside the loop,
93 // predecessor blocks, and exit blocks.
94 void SplitAnalysis::getLoopBlocks(const MachineLoop
*Loop
, LoopBlocks
&Blocks
) {
97 // Blocks in the loop.
98 Blocks
.Loop
.insert(Loop
->block_begin(), Loop
->block_end());
100 // Predecessor blocks.
101 const MachineBasicBlock
*Header
= Loop
->getHeader();
102 for (MachineBasicBlock::const_pred_iterator I
= Header
->pred_begin(),
103 E
= Header
->pred_end(); I
!= E
; ++I
)
104 if (!Blocks
.Loop
.count(*I
))
105 Blocks
.Preds
.insert(*I
);
108 for (MachineLoop::block_iterator I
= Loop
->block_begin(),
109 E
= Loop
->block_end(); I
!= E
; ++I
) {
110 const MachineBasicBlock
*MBB
= *I
;
111 for (MachineBasicBlock::const_succ_iterator SI
= MBB
->succ_begin(),
112 SE
= MBB
->succ_end(); SI
!= SE
; ++SI
)
113 if (!Blocks
.Loop
.count(*SI
))
114 Blocks
.Exits
.insert(*SI
);
118 void SplitAnalysis::print(const LoopBlocks
&B
, raw_ostream
&OS
) const {
127 /// analyzeLoopPeripheralUse - Return an enum describing how curli_ is used in
128 /// and around the Loop.
129 SplitAnalysis::LoopPeripheralUse
SplitAnalysis::
130 analyzeLoopPeripheralUse(const SplitAnalysis::LoopBlocks
&Blocks
) {
131 LoopPeripheralUse use
= ContainedInLoop
;
132 for (BlockCountMap::iterator I
= usingBlocks_
.begin(), E
= usingBlocks_
.end();
134 const MachineBasicBlock
*MBB
= I
->first
;
135 // Is this a peripheral block?
136 if (use
< MultiPeripheral
&&
137 (Blocks
.Preds
.count(MBB
) || Blocks
.Exits
.count(MBB
))) {
138 if (I
->second
> 1) use
= MultiPeripheral
;
139 else use
= SinglePeripheral
;
142 // Is it a loop block?
143 if (Blocks
.Loop
.count(MBB
))
145 // It must be an unrelated block.
146 DEBUG(dbgs() << ", outside: BB#" << MBB
->getNumber());
152 /// getCriticalExits - It may be necessary to partially break critical edges
153 /// leaving the loop if an exit block has predecessors from outside the loop
155 void SplitAnalysis::getCriticalExits(const SplitAnalysis::LoopBlocks
&Blocks
,
156 BlockPtrSet
&CriticalExits
) {
157 CriticalExits
.clear();
159 // A critical exit block has curli live-in, and has a predecessor that is not
160 // in the loop nor a loop predecessor. For such an exit block, the edges
161 // carrying the new variable must be moved to a new pre-exit block.
162 for (BlockPtrSet::iterator I
= Blocks
.Exits
.begin(), E
= Blocks
.Exits
.end();
164 const MachineBasicBlock
*Exit
= *I
;
165 // A single-predecessor exit block is definitely not a critical edge.
166 if (Exit
->pred_size() == 1)
168 // This exit may not have curli live in at all. No need to split.
169 if (!lis_
.isLiveInToMBB(*curli_
, Exit
))
171 // Does this exit block have a predecessor that is not a loop block or loop
173 for (MachineBasicBlock::const_pred_iterator PI
= Exit
->pred_begin(),
174 PE
= Exit
->pred_end(); PI
!= PE
; ++PI
) {
175 const MachineBasicBlock
*Pred
= *PI
;
176 if (Blocks
.Loop
.count(Pred
) || Blocks
.Preds
.count(Pred
))
178 // This is a critical exit block, and we need to split the exit edge.
179 CriticalExits
.insert(Exit
);
185 void SplitAnalysis::getCriticalPreds(const SplitAnalysis::LoopBlocks
&Blocks
,
186 BlockPtrSet
&CriticalPreds
) {
187 CriticalPreds
.clear();
189 // A critical predecessor block has curli live-out, and has a successor that
190 // has curli live-in and is not in the loop nor a loop exit block. For such a
191 // predecessor block, we must carry the value in both the 'inside' and
192 // 'outside' registers.
193 for (BlockPtrSet::iterator I
= Blocks
.Preds
.begin(), E
= Blocks
.Preds
.end();
195 const MachineBasicBlock
*Pred
= *I
;
196 // Definitely not a critical edge.
197 if (Pred
->succ_size() == 1)
199 // This block may not have curli live out at all if there is a PHI.
200 if (!lis_
.isLiveOutOfMBB(*curli_
, Pred
))
202 // Does this block have a successor outside the loop?
203 for (MachineBasicBlock::const_pred_iterator SI
= Pred
->succ_begin(),
204 SE
= Pred
->succ_end(); SI
!= SE
; ++SI
) {
205 const MachineBasicBlock
*Succ
= *SI
;
206 if (Blocks
.Loop
.count(Succ
) || Blocks
.Exits
.count(Succ
))
208 if (!lis_
.isLiveInToMBB(*curli_
, Succ
))
210 // This is a critical predecessor block.
211 CriticalPreds
.insert(Pred
);
217 /// canSplitCriticalExits - Return true if it is possible to insert new exit
218 /// blocks before the blocks in CriticalExits.
220 SplitAnalysis::canSplitCriticalExits(const SplitAnalysis::LoopBlocks
&Blocks
,
221 BlockPtrSet
&CriticalExits
) {
222 // If we don't allow critical edge splitting, require no critical exits.
224 return CriticalExits
.empty();
226 for (BlockPtrSet::iterator I
= CriticalExits
.begin(), E
= CriticalExits
.end();
228 const MachineBasicBlock
*Succ
= *I
;
229 // We want to insert a new pre-exit MBB before Succ, and change all the
230 // in-loop blocks to branch to the pre-exit instead of Succ.
231 // Check that all the in-loop predecessors can be changed.
232 for (MachineBasicBlock::const_pred_iterator PI
= Succ
->pred_begin(),
233 PE
= Succ
->pred_end(); PI
!= PE
; ++PI
) {
234 const MachineBasicBlock
*Pred
= *PI
;
235 // The external predecessors won't be altered.
236 if (!Blocks
.Loop
.count(Pred
) && !Blocks
.Preds
.count(Pred
))
238 if (!canAnalyzeBranch(Pred
))
242 // If Succ's layout predecessor falls through, that too must be analyzable.
243 // We need to insert the pre-exit block in the gap.
244 MachineFunction::const_iterator MFI
= Succ
;
245 if (MFI
== mf_
.begin())
247 if (!canAnalyzeBranch(--MFI
))
250 // No problems found.
254 void SplitAnalysis::analyze(const LiveInterval
*li
) {
260 const MachineLoop
*SplitAnalysis::getBestSplitLoop() {
261 assert(curli_
&& "Call analyze() before getBestSplitLoop");
262 if (usingLoops_
.empty())
267 BlockPtrSet CriticalExits
;
269 // We split around loops where curli is used outside the periphery.
270 for (LoopCountMap::const_iterator I
= usingLoops_
.begin(),
271 E
= usingLoops_
.end(); I
!= E
; ++I
) {
272 const MachineLoop
*Loop
= I
->first
;
273 getLoopBlocks(Loop
, Blocks
);
274 DEBUG({ dbgs() << " "; print(Blocks
, dbgs()); });
276 switch(analyzeLoopPeripheralUse(Blocks
)) {
279 case MultiPeripheral
:
280 // FIXME: We could split a live range with multiple uses in a peripheral
281 // block and still make progress. However, it is possible that splitting
282 // another live range will insert copies into a peripheral block, and
283 // there is a small chance we can enter an infinity loop, inserting copies
285 // For safety, stick to splitting live ranges with uses outside the
287 DEBUG(dbgs() << ": multiple peripheral uses\n");
289 case ContainedInLoop
:
290 DEBUG(dbgs() << ": fully contained\n");
292 case SinglePeripheral
:
293 DEBUG(dbgs() << ": single peripheral use\n");
296 // Will it be possible to split around this loop?
297 getCriticalExits(Blocks
, CriticalExits
);
298 DEBUG(dbgs() << ": " << CriticalExits
.size() << " critical exits\n");
299 if (!canSplitCriticalExits(Blocks
, CriticalExits
))
301 // This is a possible split.
305 DEBUG(dbgs() << " getBestSplitLoop found " << Loops
.size()
306 << " candidate loops.\n");
311 // Pick the earliest loop.
312 // FIXME: Are there other heuristics to consider?
313 const MachineLoop
*Best
= 0;
315 for (LoopPtrSet::const_iterator I
= Loops
.begin(), E
= Loops
.end(); I
!= E
;
317 SlotIndex Idx
= lis_
.getMBBStartIdx((*I
)->getHeader());
318 if (!Best
|| Idx
< BestIdx
)
319 Best
= *I
, BestIdx
= Idx
;
321 DEBUG(dbgs() << " getBestSplitLoop found " << *Best
);
325 //===----------------------------------------------------------------------===//
327 //===----------------------------------------------------------------------===//
329 // Work around the fact that the std::pair constructors are broken for pointer
330 // pairs in some implementations. makeVV(x, 0) works.
331 static inline std::pair
<const VNInfo
*, VNInfo
*>
332 makeVV(const VNInfo
*a
, VNInfo
*b
) {
333 return std::make_pair(a
, b
);
336 void LiveIntervalMap::reset(LiveInterval
*li
) {
339 liveOutCache_
.clear();
342 bool LiveIntervalMap::isComplexMapped(const VNInfo
*ParentVNI
) const {
343 ValueMap::const_iterator i
= valueMap_
.find(ParentVNI
);
344 return i
!= valueMap_
.end() && i
->second
== 0;
347 // defValue - Introduce a li_ def for ParentVNI that could be later than
349 VNInfo
*LiveIntervalMap::defValue(const VNInfo
*ParentVNI
, SlotIndex Idx
) {
350 assert(li_
&& "call reset first");
351 assert(ParentVNI
&& "Mapping NULL value");
352 assert(Idx
.isValid() && "Invalid SlotIndex");
353 assert(parentli_
.getVNInfoAt(Idx
) == ParentVNI
&& "Bad ParentVNI");
355 // Create a new value.
356 VNInfo
*VNI
= li_
->getNextValue(Idx
, 0, lis_
.getVNInfoAllocator());
358 // Preserve the PHIDef bit.
359 if (ParentVNI
->isPHIDef() && Idx
== ParentVNI
->def
)
360 VNI
->setIsPHIDef(true);
362 // Use insert for lookup, so we can add missing values with a second lookup.
363 std::pair
<ValueMap::iterator
,bool> InsP
=
364 valueMap_
.insert(makeVV(ParentVNI
, Idx
== ParentVNI
->def
? VNI
: 0));
366 // This is now a complex def. Mark with a NULL in valueMap.
368 InsP
.first
->second
= 0;
374 // mapValue - Find the mapped value for ParentVNI at Idx.
375 // Potentially create phi-def values.
376 VNInfo
*LiveIntervalMap::mapValue(const VNInfo
*ParentVNI
, SlotIndex Idx
,
378 assert(li_
&& "call reset first");
379 assert(ParentVNI
&& "Mapping NULL value");
380 assert(Idx
.isValid() && "Invalid SlotIndex");
381 assert(parentli_
.getVNInfoAt(Idx
) == ParentVNI
&& "Bad ParentVNI");
383 // Use insert for lookup, so we can add missing values with a second lookup.
384 std::pair
<ValueMap::iterator
,bool> InsP
=
385 valueMap_
.insert(makeVV(ParentVNI
, 0));
387 // This was an unknown value. Create a simple mapping.
389 if (simple
) *simple
= true;
390 return InsP
.first
->second
= li_
->createValueCopy(ParentVNI
,
391 lis_
.getVNInfoAllocator());
394 // This was a simple mapped value.
395 if (InsP
.first
->second
) {
396 if (simple
) *simple
= true;
397 return InsP
.first
->second
;
400 // This is a complex mapped value. There may be multiple defs, and we may need
401 // to create phi-defs.
402 if (simple
) *simple
= false;
403 MachineBasicBlock
*IdxMBB
= lis_
.getMBBFromIndex(Idx
);
404 assert(IdxMBB
&& "No MBB at Idx");
406 // Is there a def in the same MBB we can extend?
407 if (VNInfo
*VNI
= extendTo(IdxMBB
, Idx
))
410 // Now for the fun part. We know that ParentVNI potentially has multiple defs,
411 // and we may need to create even more phi-defs to preserve VNInfo SSA form.
412 // Perform a search for all predecessor blocks where we know the dominating
413 // VNInfo. Insert phi-def VNInfos along the path back to IdxMBB.
414 DEBUG(dbgs() << "\n Reaching defs for BB#" << IdxMBB
->getNumber()
415 << " at " << Idx
<< " in " << *li_
<< '\n');
417 // Blocks where li_ should be live-in.
418 SmallVector
<MachineDomTreeNode
*, 16> LiveIn
;
419 LiveIn
.push_back(mdt_
[IdxMBB
]);
421 // Using liveOutCache_ as a visited set, perform a BFS for all reaching defs.
422 for (unsigned i
= 0; i
!= LiveIn
.size(); ++i
) {
423 MachineBasicBlock
*MBB
= LiveIn
[i
]->getBlock();
424 for (MachineBasicBlock::pred_iterator PI
= MBB
->pred_begin(),
425 PE
= MBB
->pred_end(); PI
!= PE
; ++PI
) {
426 MachineBasicBlock
*Pred
= *PI
;
427 // Is this a known live-out block?
428 std::pair
<LiveOutMap::iterator
,bool> LOIP
=
429 liveOutCache_
.insert(std::make_pair(Pred
, LiveOutPair()));
430 // Yes, we have been here before.
432 DEBUG(if (VNInfo
*VNI
= LOIP
.first
->second
.first
)
433 dbgs() << " known valno #" << VNI
->id
434 << " at BB#" << Pred
->getNumber() << '\n');
438 // Does Pred provide a live-out value?
439 SlotIndex Last
= lis_
.getMBBEndIdx(Pred
).getPrevSlot();
440 if (VNInfo
*VNI
= extendTo(Pred
, Last
)) {
441 MachineBasicBlock
*DefMBB
= lis_
.getMBBFromIndex(VNI
->def
);
442 DEBUG(dbgs() << " found valno #" << VNI
->id
443 << " from BB#" << DefMBB
->getNumber()
444 << " at BB#" << Pred
->getNumber() << '\n');
445 LiveOutPair
&LOP
= LOIP
.first
->second
;
447 LOP
.second
= mdt_
[DefMBB
];
450 // No, we need a live-in value for Pred as well
452 LiveIn
.push_back(mdt_
[Pred
]);
456 // We may need to add phi-def values to preserve the SSA form.
457 // This is essentially the same iterative algorithm that SSAUpdater uses,
458 // except we already have a dominator tree, so we don't have to recompute it.
463 DEBUG(dbgs() << " Iterating over " << LiveIn
.size() << " blocks.\n");
464 // Propagate live-out values down the dominator tree, inserting phi-defs when
465 // necessary. Since LiveIn was created by a BFS, going backwards makes it more
466 // likely for us to visit immediate dominators before their children.
467 for (unsigned i
= LiveIn
.size(); i
; --i
) {
468 MachineDomTreeNode
*Node
= LiveIn
[i
-1];
469 MachineBasicBlock
*MBB
= Node
->getBlock();
470 MachineDomTreeNode
*IDom
= Node
->getIDom();
471 LiveOutPair IDomValue
;
472 // We need a live-in value to a block with no immediate dominator?
473 // This is probably an unreachable block that has survived somehow.
474 bool needPHI
= !IDom
;
476 // Get the IDom live-out value.
478 LiveOutMap::iterator I
= liveOutCache_
.find(IDom
->getBlock());
479 if (I
!= liveOutCache_
.end())
480 IDomValue
= I
->second
;
482 // If IDom is outside our set of live-out blocks, there must be new
483 // defs, and we need a phi-def here.
487 // IDom dominates all of our predecessors, but it may not be the immediate
488 // dominator. Check if any of them have live-out values that are properly
489 // dominated by IDom. If so, we need a phi-def here.
491 for (MachineBasicBlock::pred_iterator PI
= MBB
->pred_begin(),
492 PE
= MBB
->pred_end(); PI
!= PE
; ++PI
) {
493 LiveOutPair Value
= liveOutCache_
[*PI
];
494 if (!Value
.first
|| Value
.first
== IDomValue
.first
)
496 // This predecessor is carrying something other than IDomValue.
497 // It could be because IDomValue hasn't propagated yet, or it could be
498 // because MBB is in the dominance frontier of that value.
499 if (mdt_
.dominates(IDom
, Value
.second
)) {
506 // Create a phi-def if required.
509 SlotIndex Start
= lis_
.getMBBStartIdx(MBB
);
510 VNInfo
*VNI
= li_
->getNextValue(Start
, 0, lis_
.getVNInfoAllocator());
511 VNI
->setIsPHIDef(true);
512 DEBUG(dbgs() << " - BB#" << MBB
->getNumber()
513 << " phi-def #" << VNI
->id
<< " at " << Start
<< '\n');
514 // We no longer need li_ to be live-in.
515 LiveIn
.erase(LiveIn
.begin()+(i
-1));
516 // Blocks in LiveIn are either IdxMBB, or have a value live-through.
519 // Check if we need to update live-out info.
520 LiveOutMap::iterator I
= liveOutCache_
.find(MBB
);
521 if (I
== liveOutCache_
.end() || I
->second
.second
== Node
) {
522 // We already have a live-out defined in MBB, so this must be IdxMBB.
523 assert(MBB
== IdxMBB
&& "Adding phi-def to known live-out");
524 li_
->addRange(LiveRange(Start
, Idx
.getNextSlot(), VNI
));
526 // This phi-def is also live-out, so color the whole block.
527 li_
->addRange(LiveRange(Start
, lis_
.getMBBEndIdx(MBB
), VNI
));
528 I
->second
= LiveOutPair(VNI
, Node
);
530 } else if (IDomValue
.first
) {
531 // No phi-def here. Remember incoming value for IdxMBB.
533 IdxVNI
= IDomValue
.first
;
534 // Propagate IDomValue if needed:
535 // MBB is live-out and doesn't define its own value.
536 LiveOutMap::iterator I
= liveOutCache_
.find(MBB
);
537 if (I
!= liveOutCache_
.end() && I
->second
.second
!= Node
&&
538 I
->second
.first
!= IDomValue
.first
) {
540 I
->second
= IDomValue
;
541 DEBUG(dbgs() << " - BB#" << MBB
->getNumber()
542 << " idom valno #" << IDomValue
.first
->id
543 << " from BB#" << IDom
->getBlock()->getNumber() << '\n');
547 DEBUG(dbgs() << " - made " << Changes
<< " changes.\n");
550 assert(IdxVNI
&& "Didn't find value for Idx");
553 // Check the liveOutCache_ invariants.
554 for (LiveOutMap::iterator I
= liveOutCache_
.begin(), E
= liveOutCache_
.end();
556 assert(I
->first
&& "Null MBB entry in cache");
557 assert(I
->second
.first
&& "Null VNInfo in cache");
558 assert(I
->second
.second
&& "Null DomTreeNode in cache");
559 if (I
->second
.second
->getBlock() == I
->first
)
561 for (MachineBasicBlock::pred_iterator PI
= I
->first
->pred_begin(),
562 PE
= I
->first
->pred_end(); PI
!= PE
; ++PI
)
563 assert(liveOutCache_
.lookup(*PI
) == I
->second
&& "Bad invariant");
567 // Since we went through the trouble of a full BFS visiting all reaching defs,
568 // the values in LiveIn are now accurate. No more phi-defs are needed
569 // for these blocks, so we can color the live ranges.
570 // This makes the next mapValue call much faster.
571 for (unsigned i
= 0, e
= LiveIn
.size(); i
!= e
; ++i
) {
572 MachineBasicBlock
*MBB
= LiveIn
[i
]->getBlock();
573 SlotIndex Start
= lis_
.getMBBStartIdx(MBB
);
575 li_
->addRange(LiveRange(Start
, Idx
.getNextSlot(), IdxVNI
));
578 // Anything in LiveIn other than IdxMBB is live-through.
579 VNInfo
*VNI
= liveOutCache_
.lookup(MBB
).first
;
580 assert(VNI
&& "Missing block value");
581 li_
->addRange(LiveRange(Start
, lis_
.getMBBEndIdx(MBB
), VNI
));
587 // extendTo - Find the last li_ value defined in MBB at or before Idx. The
588 // parentli_ is assumed to be live at Idx. Extend the live range to Idx.
589 // Return the found VNInfo, or NULL.
590 VNInfo
*LiveIntervalMap::extendTo(const MachineBasicBlock
*MBB
, SlotIndex Idx
) {
591 assert(li_
&& "call reset first");
592 LiveInterval::iterator I
= std::upper_bound(li_
->begin(), li_
->end(), Idx
);
593 if (I
== li_
->begin())
596 if (I
->end
<= lis_
.getMBBStartIdx(MBB
))
599 I
->end
= Idx
.getNextSlot();
603 // addSimpleRange - Add a simple range from parentli_ to li_.
604 // ParentVNI must be live in the [Start;End) interval.
605 void LiveIntervalMap::addSimpleRange(SlotIndex Start
, SlotIndex End
,
606 const VNInfo
*ParentVNI
) {
607 assert(li_
&& "call reset first");
609 VNInfo
*VNI
= mapValue(ParentVNI
, Start
, &simple
);
610 // A simple mapping is easy.
612 li_
->addRange(LiveRange(Start
, End
, VNI
));
616 // ParentVNI is a complex value. We must map per MBB.
617 MachineFunction::iterator MBB
= lis_
.getMBBFromIndex(Start
);
618 MachineFunction::iterator MBBE
= lis_
.getMBBFromIndex(End
.getPrevSlot());
621 li_
->addRange(LiveRange(Start
, End
, VNI
));
626 li_
->addRange(LiveRange(Start
, lis_
.getMBBEndIdx(MBB
), VNI
));
628 // Run sequence of full blocks.
629 for (++MBB
; MBB
!= MBBE
; ++MBB
) {
630 Start
= lis_
.getMBBStartIdx(MBB
);
631 li_
->addRange(LiveRange(Start
, lis_
.getMBBEndIdx(MBB
),
632 mapValue(ParentVNI
, Start
)));
636 Start
= lis_
.getMBBStartIdx(MBB
);
638 li_
->addRange(LiveRange(Start
, End
, mapValue(ParentVNI
, Start
)));
641 /// addRange - Add live ranges to li_ where [Start;End) intersects parentli_.
642 /// All needed values whose def is not inside [Start;End) must be defined
643 /// beforehand so mapValue will work.
644 void LiveIntervalMap::addRange(SlotIndex Start
, SlotIndex End
) {
645 assert(li_
&& "call reset first");
646 LiveInterval::const_iterator B
= parentli_
.begin(), E
= parentli_
.end();
647 LiveInterval::const_iterator I
= std::lower_bound(B
, E
, Start
);
649 // Check if --I begins before Start and overlaps.
653 addSimpleRange(Start
, std::min(End
, I
->end
), I
->valno
);
657 // The remaining ranges begin after Start.
658 for (;I
!= E
&& I
->start
< End
; ++I
)
659 addSimpleRange(I
->start
, std::min(End
, I
->end
), I
->valno
);
662 VNInfo
*LiveIntervalMap::defByCopy(const VNInfo
*ParentVNI
,
663 MachineBasicBlock
&MBB
,
664 MachineBasicBlock::iterator I
) {
665 const TargetInstrDesc
&TID
= MBB
.getParent()->getTarget().getInstrInfo()->
666 get(TargetOpcode::COPY
);
667 MachineInstr
*MI
= BuildMI(MBB
, I
, DebugLoc(), TID
, li_
->reg
)
668 .addReg(parentli_
.reg
);
669 SlotIndex DefIdx
= lis_
.InsertMachineInstrInMaps(MI
).getDefIndex();
670 VNInfo
*VNI
= defValue(ParentVNI
, DefIdx
);
672 li_
->addRange(LiveRange(DefIdx
, DefIdx
.getNextSlot(), VNI
));
676 //===----------------------------------------------------------------------===//
678 //===----------------------------------------------------------------------===//
680 /// Create a new SplitEditor for editing the LiveInterval analyzed by SA.
681 SplitEditor::SplitEditor(SplitAnalysis
&sa
,
684 MachineDominatorTree
&mdt
,
686 : sa_(sa
), lis_(lis
), vrm_(vrm
),
687 mri_(vrm
.getMachineFunction().getRegInfo()),
688 tii_(*vrm
.getMachineFunction().getTarget().getInstrInfo()),
690 dupli_(lis_
, mdt
, edit
.getParent()),
691 openli_(lis_
, mdt
, edit
.getParent())
695 bool SplitEditor::intervalsLiveAt(SlotIndex Idx
) const {
696 for (LiveRangeEdit::iterator I
= edit_
.begin(), E
= edit_
.end(); I
!= E
; ++I
)
697 if (*I
!= dupli_
.getLI() && (*I
)->liveAt(Idx
))
702 /// Create a new virtual register and live interval.
703 void SplitEditor::openIntv() {
704 assert(!openli_
.getLI() && "Previous LI not closed before openIntv");
707 dupli_
.reset(&edit_
.create(mri_
, lis_
, vrm_
));
709 openli_
.reset(&edit_
.create(mri_
, lis_
, vrm_
));
712 /// enterIntvBefore - Enter openli before the instruction at Idx. If curli is
713 /// not live before Idx, a COPY is not inserted.
714 void SplitEditor::enterIntvBefore(SlotIndex Idx
) {
715 assert(openli_
.getLI() && "openIntv not called before enterIntvBefore");
716 DEBUG(dbgs() << " enterIntvBefore " << Idx
);
717 VNInfo
*ParentVNI
= edit_
.getParent().getVNInfoAt(Idx
.getUseIndex());
719 DEBUG(dbgs() << ": not live\n");
722 DEBUG(dbgs() << ": valno " << ParentVNI
->id
);
723 truncatedValues
.insert(ParentVNI
);
724 MachineInstr
*MI
= lis_
.getInstructionFromIndex(Idx
);
725 assert(MI
&& "enterIntvBefore called with invalid index");
726 VNInfo
*VNI
= openli_
.defByCopy(ParentVNI
, *MI
->getParent(), MI
);
727 openli_
.getLI()->addRange(LiveRange(VNI
->def
, Idx
.getDefIndex(), VNI
));
728 DEBUG(dbgs() << ": " << *openli_
.getLI() << '\n');
731 /// enterIntvAtEnd - Enter openli at the end of MBB.
732 void SplitEditor::enterIntvAtEnd(MachineBasicBlock
&MBB
) {
733 assert(openli_
.getLI() && "openIntv not called before enterIntvAtEnd");
734 SlotIndex End
= lis_
.getMBBEndIdx(&MBB
);
735 DEBUG(dbgs() << " enterIntvAtEnd BB#" << MBB
.getNumber() << ", " << End
);
736 VNInfo
*ParentVNI
= edit_
.getParent().getVNInfoAt(End
.getPrevSlot());
738 DEBUG(dbgs() << ": not live\n");
741 DEBUG(dbgs() << ": valno " << ParentVNI
->id
);
742 truncatedValues
.insert(ParentVNI
);
743 VNInfo
*VNI
= openli_
.defByCopy(ParentVNI
, MBB
, MBB
.getFirstTerminator());
744 // Make sure openli is live out of MBB.
745 openli_
.getLI()->addRange(LiveRange(VNI
->def
, End
, VNI
));
746 DEBUG(dbgs() << ": " << *openli_
.getLI() << '\n');
749 /// useIntv - indicate that all instructions in MBB should use openli.
750 void SplitEditor::useIntv(const MachineBasicBlock
&MBB
) {
751 useIntv(lis_
.getMBBStartIdx(&MBB
), lis_
.getMBBEndIdx(&MBB
));
754 void SplitEditor::useIntv(SlotIndex Start
, SlotIndex End
) {
755 assert(openli_
.getLI() && "openIntv not called before useIntv");
756 openli_
.addRange(Start
, End
);
757 DEBUG(dbgs() << " use [" << Start
<< ';' << End
<< "): "
758 << *openli_
.getLI() << '\n');
761 /// leaveIntvAfter - Leave openli after the instruction at Idx.
762 void SplitEditor::leaveIntvAfter(SlotIndex Idx
) {
763 assert(openli_
.getLI() && "openIntv not called before leaveIntvAfter");
764 DEBUG(dbgs() << " leaveIntvAfter " << Idx
);
766 // The interval must be live beyond the instruction at Idx.
767 VNInfo
*ParentVNI
= edit_
.getParent().getVNInfoAt(Idx
.getBoundaryIndex());
769 DEBUG(dbgs() << ": not live\n");
772 DEBUG(dbgs() << ": valno " << ParentVNI
->id
);
774 MachineBasicBlock::iterator MII
= lis_
.getInstructionFromIndex(Idx
);
775 MachineBasicBlock
*MBB
= MII
->getParent();
776 VNInfo
*VNI
= dupli_
.defByCopy(ParentVNI
, *MBB
, llvm::next(MII
));
778 // Finally we must make sure that openli is properly extended from Idx to the
780 openli_
.addSimpleRange(Idx
.getBoundaryIndex(), VNI
->def
, ParentVNI
);
781 DEBUG(dbgs() << ": " << *openli_
.getLI() << '\n');
784 /// leaveIntvAtTop - Leave the interval at the top of MBB.
785 /// Currently, only one value can leave the interval.
786 void SplitEditor::leaveIntvAtTop(MachineBasicBlock
&MBB
) {
787 assert(openli_
.getLI() && "openIntv not called before leaveIntvAtTop");
788 SlotIndex Start
= lis_
.getMBBStartIdx(&MBB
);
789 DEBUG(dbgs() << " leaveIntvAtTop BB#" << MBB
.getNumber() << ", " << Start
);
791 VNInfo
*ParentVNI
= edit_
.getParent().getVNInfoAt(Start
);
793 DEBUG(dbgs() << ": not live\n");
797 // We are going to insert a back copy, so we must have a dupli_.
798 VNInfo
*VNI
= dupli_
.defByCopy(ParentVNI
, MBB
,
799 MBB
.SkipPHIsAndLabels(MBB
.begin()));
801 // Finally we must make sure that openli is properly extended from Start to
803 openli_
.addSimpleRange(Start
, VNI
->def
, ParentVNI
);
804 DEBUG(dbgs() << ": " << *openli_
.getLI() << '\n');
807 /// closeIntv - Indicate that we are done editing the currently open
808 /// LiveInterval, and ranges can be trimmed.
809 void SplitEditor::closeIntv() {
810 assert(openli_
.getLI() && "openIntv not called before closeIntv");
812 DEBUG(dbgs() << " closeIntv cleaning up\n");
813 DEBUG(dbgs() << " open " << *openli_
.getLI() << '\n');
817 /// rewrite - Rewrite all uses of reg to use the new registers.
818 void SplitEditor::rewrite(unsigned reg
) {
819 for (MachineRegisterInfo::reg_iterator RI
= mri_
.reg_begin(reg
),
820 RE
= mri_
.reg_end(); RI
!= RE
;) {
821 MachineOperand
&MO
= RI
.getOperand();
822 unsigned OpNum
= RI
.getOperandNo();
823 MachineInstr
*MI
= MO
.getParent();
825 if (MI
->isDebugValue()) {
826 DEBUG(dbgs() << "Zapping " << *MI
);
827 // FIXME: We can do much better with debug values.
831 SlotIndex Idx
= lis_
.getInstructionIndex(MI
);
832 Idx
= MO
.isUse() ? Idx
.getUseIndex() : Idx
.getDefIndex();
833 LiveInterval
*LI
= 0;
834 for (LiveRangeEdit::iterator I
= edit_
.begin(), E
= edit_
.end(); I
!= E
;
836 LiveInterval
*testli
= *I
;
837 if (testli
->liveAt(Idx
)) {
842 DEBUG(dbgs() << " rewr BB#" << MI
->getParent()->getNumber() << '\t'<< Idx
);
843 assert(LI
&& "No register was live at use");
845 if (MO
.isUse() && !MI
->isRegTiedToDefOperand(OpNum
))
846 MO
.setIsKill(LI
->killedAt(Idx
.getDefIndex()));
847 DEBUG(dbgs() << '\t' << *MI
);
852 SplitEditor::addTruncSimpleRange(SlotIndex Start
, SlotIndex End
, VNInfo
*VNI
) {
853 // Build vector of iterator pairs from the intervals.
854 typedef std::pair
<LiveInterval::const_iterator
,
855 LiveInterval::const_iterator
> IIPair
;
856 SmallVector
<IIPair
, 8> Iters
;
857 for (LiveRangeEdit::iterator LI
= edit_
.begin(), LE
= edit_
.end(); LI
!= LE
;
859 if (*LI
== dupli_
.getLI())
861 LiveInterval::const_iterator I
= (*LI
)->find(Start
);
862 LiveInterval::const_iterator E
= (*LI
)->end();
864 Iters
.push_back(std::make_pair(I
, E
));
867 SlotIndex sidx
= Start
;
868 // Break [Start;End) into segments that don't overlap any intervals.
870 SlotIndex next
= sidx
, eidx
= End
;
871 // Find overlapping intervals.
872 for (unsigned i
= 0; i
!= Iters
.size() && sidx
< eidx
; ++i
) {
873 LiveInterval::const_iterator I
= Iters
[i
].first
;
874 // Interval I is overlapping [sidx;eidx). Trim sidx.
875 if (I
->start
<= sidx
) {
877 // Move to the next run, remove iters when all are consumed.
878 I
= ++Iters
[i
].first
;
879 if (I
== Iters
[i
].second
) {
880 Iters
.erase(Iters
.begin() + i
);
885 // Trim eidx too if needed.
886 if (I
->start
>= eidx
)
891 // Now, [sidx;eidx) doesn't overlap anything in intervals_.
893 dupli_
.addSimpleRange(sidx
, eidx
, VNI
);
894 // If the interval end was truncated, we can try again from next.
901 void SplitEditor::computeRemainder() {
902 // First we need to fill in the live ranges in dupli.
903 // If values were redefined, we need a full recoloring with SSA update.
904 // If values were truncated, we only need to truncate the ranges.
905 // If values were partially rematted, we should shrink to uses.
906 // If values were fully rematted, they should be omitted.
907 // FIXME: If a single value is redefined, just move the def and truncate.
908 LiveInterval
&parent
= edit_
.getParent();
910 // Values that are fully contained in the split intervals.
911 SmallPtrSet
<const VNInfo
*, 8> deadValues
;
912 // Map all curli values that should have live defs in dupli.
913 for (LiveInterval::const_vni_iterator I
= parent
.vni_begin(),
914 E
= parent
.vni_end(); I
!= E
; ++I
) {
915 const VNInfo
*VNI
= *I
;
916 // Don't transfer unused values to the new intervals.
919 // Original def is contained in the split intervals.
920 if (intervalsLiveAt(VNI
->def
)) {
921 // Did this value escape?
922 if (dupli_
.isMapped(VNI
))
923 truncatedValues
.insert(VNI
);
925 deadValues
.insert(VNI
);
928 // Add minimal live range at the definition.
929 VNInfo
*DVNI
= dupli_
.defValue(VNI
, VNI
->def
);
930 dupli_
.getLI()->addRange(LiveRange(VNI
->def
, VNI
->def
.getNextSlot(), DVNI
));
933 // Add all ranges to dupli.
934 for (LiveInterval::const_iterator I
= parent
.begin(), E
= parent
.end();
936 const LiveRange
&LR
= *I
;
937 if (truncatedValues
.count(LR
.valno
)) {
938 // recolor after removing intervals_.
939 addTruncSimpleRange(LR
.start
, LR
.end
, LR
.valno
);
940 } else if (!deadValues
.count(LR
.valno
)) {
941 // recolor without truncation.
942 dupli_
.addSimpleRange(LR
.start
, LR
.end
, LR
.valno
);
946 // Extend dupli_ to be live out of any critical loop predecessors.
947 // This means we have multiple registers live out of those blocks.
948 // The alternative would be to split the critical edges.
949 if (criticalPreds_
.empty())
951 for (SplitAnalysis::BlockPtrSet::iterator I
= criticalPreds_
.begin(),
952 E
= criticalPreds_
.end(); I
!= E
; ++I
)
953 dupli_
.extendTo(*I
, lis_
.getMBBEndIdx(*I
).getPrevSlot());
954 criticalPreds_
.clear();
957 void SplitEditor::finish() {
958 assert(!openli_
.getLI() && "Previous LI not closed before rewrite");
959 assert(dupli_
.getLI() && "No dupli for rewrite. Noop spilt?");
961 // Complete dupli liveness.
964 // Get rid of unused values and set phi-kill flags.
965 for (LiveRangeEdit::iterator I
= edit_
.begin(), E
= edit_
.end(); I
!= E
; ++I
)
966 (*I
)->RenumberValues(lis_
);
968 // Rewrite instructions.
969 rewrite(edit_
.getReg());
971 // Now check if any registers were separated into multiple components.
972 ConnectedVNInfoEqClasses
ConEQ(lis_
);
973 for (unsigned i
= 0, e
= edit_
.size(); i
!= e
; ++i
) {
974 // Don't use iterators, they are invalidated by create() below.
975 LiveInterval
*li
= edit_
.get(i
);
976 unsigned NumComp
= ConEQ
.Classify(li
);
979 DEBUG(dbgs() << " " << NumComp
<< " components: " << *li
<< '\n');
980 SmallVector
<LiveInterval
*, 8> dups
;
982 for (unsigned i
= 1; i
!= NumComp
; ++i
)
983 dups
.push_back(&edit_
.create(mri_
, lis_
, vrm_
));
984 ConEQ
.Distribute(&dups
[0]);
985 // Rewrite uses to the new regs.
989 // Calculate spill weight and allocation hints for new intervals.
990 VirtRegAuxInfo
vrai(vrm_
.getMachineFunction(), lis_
, sa_
.loops_
);
991 for (LiveRangeEdit::iterator I
= edit_
.begin(), E
= edit_
.end(); I
!= E
; ++I
){
992 LiveInterval
&li
= **I
;
993 vrai
.CalculateRegClass(li
.reg
);
994 vrai
.CalculateWeightAndHint(li
);
995 DEBUG(dbgs() << " new interval " << mri_
.getRegClass(li
.reg
)->getName()
996 << ":" << li
<< '\n');
1001 //===----------------------------------------------------------------------===//
1003 //===----------------------------------------------------------------------===//
1005 void SplitEditor::splitAroundLoop(const MachineLoop
*Loop
) {
1006 SplitAnalysis::LoopBlocks Blocks
;
1007 sa_
.getLoopBlocks(Loop
, Blocks
);
1010 dbgs() << " splitAround"; sa_
.print(Blocks
, dbgs()); dbgs() << '\n';
1013 // Break critical edges as needed.
1014 SplitAnalysis::BlockPtrSet CriticalExits
;
1015 sa_
.getCriticalExits(Blocks
, CriticalExits
);
1016 assert(CriticalExits
.empty() && "Cannot break critical exits yet");
1018 // Get critical predecessors so computeRemainder can deal with them.
1019 sa_
.getCriticalPreds(Blocks
, criticalPreds_
);
1021 // Create new live interval for the loop.
1024 // Insert copies in the predecessors.
1025 for (SplitAnalysis::BlockPtrSet::iterator I
= Blocks
.Preds
.begin(),
1026 E
= Blocks
.Preds
.end(); I
!= E
; ++I
) {
1027 MachineBasicBlock
&MBB
= const_cast<MachineBasicBlock
&>(**I
);
1028 enterIntvAtEnd(MBB
);
1031 // Switch all loop blocks.
1032 for (SplitAnalysis::BlockPtrSet::iterator I
= Blocks
.Loop
.begin(),
1033 E
= Blocks
.Loop
.end(); I
!= E
; ++I
)
1036 // Insert back copies in the exit blocks.
1037 for (SplitAnalysis::BlockPtrSet::iterator I
= Blocks
.Exits
.begin(),
1038 E
= Blocks
.Exits
.end(); I
!= E
; ++I
) {
1039 MachineBasicBlock
&MBB
= const_cast<MachineBasicBlock
&>(**I
);
1040 leaveIntvAtTop(MBB
);
1049 //===----------------------------------------------------------------------===//
1050 // Single Block Splitting
1051 //===----------------------------------------------------------------------===//
1053 /// getMultiUseBlocks - if curli has more than one use in a basic block, it
1054 /// may be an advantage to split curli for the duration of the block.
1055 bool SplitAnalysis::getMultiUseBlocks(BlockPtrSet
&Blocks
) {
1056 // If curli is local to one block, there is no point to splitting it.
1057 if (usingBlocks_
.size() <= 1)
1059 // Add blocks with multiple uses.
1060 for (BlockCountMap::iterator I
= usingBlocks_
.begin(), E
= usingBlocks_
.end();
1062 switch (I
->second
) {
1067 // When there are only two uses and curli is both live in and live out,
1068 // we don't really win anything by isolating the block since we would be
1069 // inserting two copies.
1070 // The remaing register would still have two uses in the block. (Unless it
1071 // separates into disconnected components).
1072 if (lis_
.isLiveInToMBB(*curli_
, I
->first
) &&
1073 lis_
.isLiveOutOfMBB(*curli_
, I
->first
))
1077 Blocks
.insert(I
->first
);
1079 return !Blocks
.empty();
1082 /// splitSingleBlocks - Split curli into a separate live interval inside each
1083 /// basic block in Blocks.
1084 void SplitEditor::splitSingleBlocks(const SplitAnalysis::BlockPtrSet
&Blocks
) {
1085 DEBUG(dbgs() << " splitSingleBlocks for " << Blocks
.size() << " blocks.\n");
1086 // Determine the first and last instruction using curli in each block.
1087 typedef std::pair
<SlotIndex
,SlotIndex
> IndexPair
;
1088 typedef DenseMap
<const MachineBasicBlock
*,IndexPair
> IndexPairMap
;
1089 IndexPairMap MBBRange
;
1090 for (SplitAnalysis::InstrPtrSet::const_iterator I
= sa_
.usingInstrs_
.begin(),
1091 E
= sa_
.usingInstrs_
.end(); I
!= E
; ++I
) {
1092 const MachineBasicBlock
*MBB
= (*I
)->getParent();
1093 if (!Blocks
.count(MBB
))
1095 SlotIndex Idx
= lis_
.getInstructionIndex(*I
);
1096 DEBUG(dbgs() << " BB#" << MBB
->getNumber() << '\t' << Idx
<< '\t' << **I
);
1097 IndexPair
&IP
= MBBRange
[MBB
];
1098 if (!IP
.first
.isValid() || Idx
< IP
.first
)
1100 if (!IP
.second
.isValid() || Idx
> IP
.second
)
1104 // Create a new interval for each block.
1105 for (SplitAnalysis::BlockPtrSet::const_iterator I
= Blocks
.begin(),
1106 E
= Blocks
.end(); I
!= E
; ++I
) {
1107 IndexPair
&IP
= MBBRange
[*I
];
1108 DEBUG(dbgs() << " splitting for BB#" << (*I
)->getNumber() << ": ["
1109 << IP
.first
<< ';' << IP
.second
<< ")\n");
1110 assert(IP
.first
.isValid() && IP
.second
.isValid());
1113 enterIntvBefore(IP
.first
);
1114 useIntv(IP
.first
.getBaseIndex(), IP
.second
.getBoundaryIndex());
1115 leaveIntvAfter(IP
.second
);
1122 //===----------------------------------------------------------------------===//
1123 // Sub Block Splitting
1124 //===----------------------------------------------------------------------===//
1126 /// getBlockForInsideSplit - If curli is contained inside a single basic block,
1127 /// and it wou pay to subdivide the interval inside that block, return it.
1128 /// Otherwise return NULL. The returned block can be passed to
1129 /// SplitEditor::splitInsideBlock.
1130 const MachineBasicBlock
*SplitAnalysis::getBlockForInsideSplit() {
1131 // The interval must be exclusive to one block.
1132 if (usingBlocks_
.size() != 1)
1134 // Don't to this for less than 4 instructions. We want to be sure that
1135 // splitting actually reduces the instruction count per interval.
1136 if (usingInstrs_
.size() < 4)
1138 return usingBlocks_
.begin()->first
;
1141 /// splitInsideBlock - Split curli into multiple intervals inside MBB.
1142 void SplitEditor::splitInsideBlock(const MachineBasicBlock
*MBB
) {
1143 SmallVector
<SlotIndex
, 32> Uses
;
1144 Uses
.reserve(sa_
.usingInstrs_
.size());
1145 for (SplitAnalysis::InstrPtrSet::const_iterator I
= sa_
.usingInstrs_
.begin(),
1146 E
= sa_
.usingInstrs_
.end(); I
!= E
; ++I
)
1147 if ((*I
)->getParent() == MBB
)
1148 Uses
.push_back(lis_
.getInstructionIndex(*I
));
1149 DEBUG(dbgs() << " splitInsideBlock BB#" << MBB
->getNumber() << " for "
1150 << Uses
.size() << " instructions.\n");
1151 assert(Uses
.size() >= 3 && "Need at least 3 instructions");
1152 array_pod_sort(Uses
.begin(), Uses
.end());
1154 // Simple algorithm: Find the largest gap between uses as determined by slot
1155 // indices. Create new intervals for instructions before the gap and after the
1157 unsigned bestPos
= 0;
1159 DEBUG(dbgs() << " dist (" << Uses
[0]);
1160 for (unsigned i
= 1, e
= Uses
.size(); i
!= e
; ++i
) {
1161 int g
= Uses
[i
-1].distance(Uses
[i
]);
1162 DEBUG(dbgs() << ") -" << g
<< "- (" << Uses
[i
]);
1164 bestPos
= i
, bestGap
= g
;
1166 DEBUG(dbgs() << "), best: -" << bestGap
<< "-\n");
1168 // bestPos points to the first use after the best gap.
1169 assert(bestPos
> 0 && "Invalid gap");
1171 // FIXME: Don't create intervals for low densities.
1173 // First interval before the gap. Don't create single-instr intervals.
1176 enterIntvBefore(Uses
.front());
1177 useIntv(Uses
.front().getBaseIndex(), Uses
[bestPos
-1].getBoundaryIndex());
1178 leaveIntvAfter(Uses
[bestPos
-1]);
1182 // Second interval after the gap.
1183 if (bestPos
< Uses
.size()-1) {
1185 enterIntvBefore(Uses
[bestPos
]);
1186 useIntv(Uses
[bestPos
].getBaseIndex(), Uses
.back().getBoundaryIndex());
1187 leaveIntvAfter(Uses
.back());