Home | History | Annotate | Download | only in CodeGen

Lines Matching full:live

1 //===-------- SplitKit.h - Toolkit for splitting live ranges ----*- C++ -*-===//
11 // live range splitting.
39 /// SplitAnalysis - Analyze a LiveInterval, looking for live range splitting
50 /// live. Such a block will look like one of these templates:
52 /// 1. | o---x | Internal to block. Variable is only live in this block.
53 /// 2. |---x | Live-in, kill.
54 /// 3. | o---| Def, live-out.
55 /// 4. |---x o---| Live-in, kill, def, live-out. Counted by NumGapBlocks.
56 /// 5. |---o---o---| Live-through with uses or defs.
57 /// 6. |-----------| Live-through without uses. Counted by NumThroughBlocks.
59 /// Two BlockInfo entries are created for template 4. One for the live-in
60 /// segment, and one for the live-out segment. These entries look as if the
61 /// block were split in the middle where the live range isn't live.
63 /// Live-through blocks without any uses don't get BlockInfo entries. They
71 bool LiveIn; ///< Current reg is live in.
72 bool LiveOut; ///< Current reg is live out.
82 // Current live interval.
90 /// last valid split point for a variable that is live in to a landing pad
98 /// the live range has a gap.
101 /// ThroughBlocks - Block numbers where CurLI is live through without uses.
104 /// NumThroughBlocks - Number of live-through blocks.
128 /// can create live ranges that end in mid-air.
151 /// isOriginalEndpoint - Return true if the original live range was killed or
154 /// This can be used to recognize code inserted by earlier live range
169 /// isThroughBlock - Return true if CurLI is live through MBB without uses.
175 /// getNumLiveBlocks - Return the number of blocks where CurLI is live.
180 /// countLiveBlocks - Return the number of blocks where li is live. This is
188 /// live range for the instructions in BI. There is normally no benefit to
189 /// creating a live range for a single instruction, but it does enable
199 /// SplitEditor - Edit machine code and LiveIntervals for live range
203 /// - Start a new live interval with openIntv.
221 /// ComplementSpillMode - Select how the complement live range should be
267 /// Edit.get(RegAssign.lookup(Idx)) is the register that should be live at
279 /// Edit.get(RegIdx). Each value is represented by a minimal live range at
280 /// its def. The full live range can be inferred exactly from the range
283 /// the live range must be recomputed using LiveRangeCalc::extend().
285 /// The new value has no live ranges anywhere.
288 /// LRCalc - Cache for computing live ranges and SSA update. Each instance
289 /// can only handle non-overlapping live ranges, so use a separate
302 /// ParentVNI's live range in ParentLI. The new value is added to the value
307 /// forceRecompute - Force the live range of ParentVNI in RegIdx to be
309 /// This is used for values whose live range doesn't match RegAssign exactly.
357 /// Create a new virtual register and live interval.
369 /// If the parent interval is not live before Idx, a COPY is not inserted.
370 /// Return the beginning of the new live range.
374 /// Return the beginning of the new live range.
379 /// Return the beginning of the new live range.
389 /// Return the end of the live range.
393 /// Return the end of the live range.
398 /// Return the end of the live range.
402 /// interval, but also let the complement interval be live.
413 /// finish - after all the new live ranges have been created, compute the
414 /// remaining live range, and rewrite instructions to use the new registers.
415 /// @param LRMap When not null, this vector will map each live range in Edit
425 /// splitSingleBlock - Split CurLI into a separate live interval around the
455 /// block on the stack (or isn't live-in at all) and leaves it in IntvOut.