Home | History | Annotate | Download | only in CodeGen

Lines Matching full:live

1 //===-------- SplitKit.h - Toolkit for splitting live ranges ----*- C++ -*-===//
11 // live range splitting.
40 /// SplitAnalysis - Analyze a LiveInterval, looking for live range splitting
51 /// live. Such a block will look like one of these templates:
53 /// 1. | o---x | Internal to block. Variable is only live in this block.
54 /// 2. |---x | Live-in, kill.
55 /// 3. | o---| Def, live-out.
56 /// 4. |---x o---| Live-in, kill, def, live-out. Counted by NumGapBlocks.
57 /// 5. |---o---o---| Live-through with uses or defs.
58 /// 6. |-----------| Live-through without uses. Counted by NumThroughBlocks.
60 /// Two BlockInfo entries are created for template 4. One for the live-in
61 /// segment, and one for the live-out segment. These entries look as if the
62 /// block were split in the middle where the live range isn't live.
64 /// Live-through blocks without any uses don't get BlockInfo entries. They
72 bool LiveIn; ///< Current reg is live in.
73 bool LiveOut; ///< Current reg is live out.
83 // Current live interval.
91 /// last valid split point for a variable that is live in to a landing pad
99 /// the live range has a gap.
102 /// ThroughBlocks - Block numbers where CurLI is live through without uses.
105 /// NumThroughBlocks - Number of live-through blocks.
129 /// can create live ranges that end in mid-air.
152 /// isOriginalEndpoint - Return true if the original live range was killed or
155 /// This can be used to recognize code inserted by earlier live range
170 /// isThroughBlock - Return true if CurLI is live through MBB without uses.
176 /// getNumLiveBlocks - Return the number of blocks where CurLI is live.
181 /// countLiveBlocks - Return the number of blocks where li is live. This is
189 /// live range for the instructions in BI. There is normally no benefit to
190 /// creating a live range for a single instruction, but it does enable
200 /// SplitEditor - Edit machine code and LiveIntervals for live range
204 /// - Start a new live interval with openIntv.
223 /// ComplementSpillMode - Select how the complement live range should be
269 /// Edit.get(RegAssign.lookup(Idx)) is the register that should be live at
281 /// Edit.get(RegIdx). Each value is represented by a minimal live range at
282 /// its def. The full live range can be inferred exactly from the range
285 /// the live range must be recomputed using LiveRangeCalc::extend().
287 /// The new value has no live ranges anywhere.
290 /// LRCalc - Cache for computing live ranges and SSA update. Each instance
291 /// can only handle non-overlapping live ranges, so use a separate
304 /// ParentVNI's live range in ParentLI. The new value is added to the value
309 /// forceRecompute - Force the live range of ParentVNI in RegIdx to be
311 /// This is used for values whose live range doesn't match RegAssign exactly.
359 /// Create a new virtual register and live interval.
371 /// If the parent interval is not live before Idx, a COPY is not inserted.
372 /// Return the beginning of the new live range.
376 /// Return the beginning of the new live range.
381 /// Return the beginning of the new live range.
391 /// Return the end of the live range.
395 /// Return the end of the live range.
400 /// Return the end of the live range.
404 /// interval, but also let the complement interval be live.
415 /// finish - after all the new live ranges have been created, compute the
416 /// remaining live range, and rewrite instructions to use the new registers.
417 /// @param LRMap When not null, this vector will map each live range in Edit
427 /// splitSingleBlock - Split CurLI into a separate live interval around the
457 /// block on the stack (or isn't live-in at all) and leaves it in IntvOut.