Lines Matching +full:keep +full:- +full:a +full:- +full:live
1 //===- LiveRangeEdit.h - Basic tools for split and spill --------*- C++ -*-===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // The LiveRangeEdit class represents changes done to a virtual register when it
12 // The parent register is never changed. Instead, a number of new virtual
15 //===----------------------------------------------------------------------===//
51 /// Called immediately before erasing a dead machine instruction.
54 /// Called when a virtual register is no longer used. Return false to defer
58 /// Called before shrinking the live range of a virtual register.
61 /// Called after cloning a virtual register.
75 /// FirstNew - Index of the first register added to NewRegs.
78 /// ScannedRemattable - true when remattable values have been identified.
81 /// DeadRemats - The saved instructions which have already been dead after
82 /// rematerialization but not deleted yet -- to be done in postOptimization.
85 /// Remattable - Values defined by remattable instructions as identified by
89 /// Rematted - Values that were actually rematted, and so need to have their
90 /// live range trimmed or entirely removed.
93 /// scanRemattable - Identify the Parent values that may rematerialize.
96 /// foldAsLoad - If LI has a single use and a single def that can be folded as
97 /// a load, eliminate the register by folding the def into the use.
109 /// Check if MachineOperand \p MO is a last use/kill either in the
110 /// main live range of \p LI or in one of the matching subregister ranges.
113 /// Create a new empty interval based on OldReg.
117 /// Create a LiveRangeEdit for breaking down parent into smaller pieces.
121 /// @param MF The MachineFunction the live range edit is taking place in.
122 /// @param lis The collection of all live intervals in this function.
151 unsigned size() const { return NewRegs.size() - FirstNew; } in size()
155 /// pop_back - It allows LiveRangeEdit users to drop new registers.
156 /// The context is when an original def instruction of a register is
157 /// dead after rematerialization, we still want to keep it for following
159 /// and replace the original dst register with a new dummy register so
160 /// the live range of original dst register can be shrinked normally.
167 /// createFrom - Create a new virtual register based on OldReg.
170 /// create - Create a new register with the same class and original slot as
178 /// anyRematerializable - Return true if any parent values may be
183 /// checkRematerializable - Manually add VNI to the list of rematerializable
187 /// Remat - Information needed to rematerialize at a specific location.
196 /// allUsesAvailableAt - Return true if all registers used by OrigMI at
201 /// canRematerializeAt - Determine if ParentVNI can be rematerialized at
207 /// rematerializeAt - Rematerialize RM.ParentVNI into DestReg by inserting an
218 /// markRematerialized - explicitly mark a value as rematerialized after doing
224 /// didRematerialize - Return true if ParentVNI was rematerialized anywhere.
229 /// eraseVirtReg - Notify the delegate that Reg is no longer in use, and try
233 /// eliminateDeadDefs - Try to delete machine instructions that are now dead
234 /// (allDefsAreDead returns true). This may cause live intervals to be trimmed
242 /// calculateRegClassAndHint - Recompute register class and hint for each new