|
LLVM 24.0.0git
|
A rematerializable register, potentially defined by multiple instructions. More...
#include "llvm/CodeGen/Rematerializer.h"
Public Types | |
| using | RegionUsers = SmallDenseSet<MachineInstr *, 4> |
Public Member Functions | |
| MachineInstr * | getFirstDef () const |
| MachineInstr * | getLastDef () const |
| Register | getDefReg () const |
| Returns the rematerializable register from one of its defining instructions. | |
| bool | hasUsersInDefRegion () const |
| bool | hasUsersOutsideDefRegion () const |
| unsigned | getDefIdx (MachineInstr *DefMI) const |
Returns the index of DefMI in the register's definitions order. | |
| LLVM_ABI std::pair< MachineInstr *, MachineInstr * > | getRegionUseBounds (unsigned UseRegion, const LiveIntervals &LIS) const |
Returns the first and last user of the register in region UseRegion. | |
| bool | isAlive () const |
Public Attributes | |
| SmallVector< MachineInstr *, 1 > | Defs |
| All instructions that define the register, in program order. | |
| unsigned | DefRegion |
| Defining region of the register. | |
| LaneBitmask | Mask |
| The rematerializable register's lane bitmask. | |
| SmallDenseMap< unsigned, RegionUsers, 2 > | Uses |
| Uses of the register, mapped by region. | |
| SmallVector< RegisterIdx, 2 > | Dependencies |
| This register's rematerializable dependencies, one per unique rematerializable register operand over all definitions. | |
A rematerializable register, potentially defined by multiple instructions.
A rematerializable register has a set of dependencies, which correspond to the unique read register operands of its defining instruction(s) and which can themselves be rematerializable. Operands of defining instructions corresponding to unrematerializable dependencies are managed by and queried from the rematerializer, whereas rematerializable ones are part of this struct and identified through their register index.
A rematerializable register also has an arbitrary number of users in an arbitrary number of regions, potentially including its own defining region. When rematerializations lead to operand changes in users, a register may find itself without any user left, at which point the rematerializer deletes it (emptying Reg::Defs).
Definition at line 125 of file Rematerializer.h.
| using llvm::Rematerializer::Reg::RegionUsers = SmallDenseSet<MachineInstr *, 4> |
Definition at line 133 of file Rematerializer.h.
|
inline |
Returns the index of DefMI in the register's definitions order.
Returns the number of definitions if DefMI is not a definition of the register.
Definition at line 166 of file Rematerializer.h.
References DefMI, Defs, and llvm::find().
|
inline |
Returns the rematerializable register from one of its defining instructions.
Definition at line 147 of file Rematerializer.h.
References assert(), DefMI, and getFirstDef().
Referenced by llvm::Rematerializer::printID(), llvm::Rematerializer::printRematReg(), and llvm::Rematerializer::rematerializeReg().
|
inline |
|
inline |
Definition at line 143 of file Rematerializer.h.
References Defs.
Referenced by llvm::Rematerializer::findRematInRegion(), and llvm::PreRARematStage::initGCNSchedStage().
| std::pair< MachineInstr *, MachineInstr * > Rematerializer::Reg::getRegionUseBounds | ( | unsigned | UseRegion, |
| const LiveIntervals & | LIS ) const |
Returns the first and last user of the register in region UseRegion.
If the register has no user in the region, returns a pair of nullptr's.
Definition at line 939 of file Rematerializer.cpp.
References assert(), and Uses.
Referenced by llvm::PreRARematStage::initGCNSchedStage(), and llvm::Rematerializer::rematerializeToRegion().
|
inline |
Definition at line 153 of file Rematerializer.h.
|
inline |
Definition at line 157 of file Rematerializer.h.
|
inline |
Definition at line 175 of file Rematerializer.h.
References Defs.
Referenced by llvm::Rematerializer::isPermanentlyDead(), llvm::Rematerializer::printID(), llvm::Rematerializer::printRematReg(), and llvm::Rollbacker::rollback().
| unsigned llvm::Rematerializer::Reg::DefRegion |
Defining region of the register.
Definition at line 129 of file Rematerializer.h.
Referenced by llvm::Rematerializer::findRematInRegion(), hasUsersInDefRegion(), hasUsersOutsideDefRegion(), llvm::Rematerializer::printID(), llvm::Rematerializer::printRematReg(), llvm::Rematerializer::recreateReg(), and llvm::Rematerializer::rematerializeReg().
| SmallVector<MachineInstr *, 1> llvm::Rematerializer::Reg::Defs |
All instructions that define the register, in program order.
Definition at line 127 of file Rematerializer.h.
Referenced by getDefIdx(), getFirstDef(), getLastDef(), llvm::PreRARematStage::initGCNSchedStage(), isAlive(), llvm::Rematerializer::printRematReg(), llvm::Rematerializer::recreateReg(), llvm::Rematerializer::rematerializeReg(), and llvm::Rollbacker::rollback().
| SmallVector<RegisterIdx, 2> llvm::Rematerializer::Reg::Dependencies |
This register's rematerializable dependencies, one per unique rematerializable register operand over all definitions.
Definition at line 140 of file Rematerializer.h.
Referenced by llvm::PreRARematStage::initGCNSchedStage(), and llvm::Rematerializer::rematerializeReg().
| LaneBitmask llvm::Rematerializer::Reg::Mask |
The rematerializable register's lane bitmask.
Definition at line 131 of file Rematerializer.h.
Referenced by llvm::Rematerializer::rematerializeReg().
| SmallDenseMap<unsigned, RegionUsers, 2> llvm::Rematerializer::Reg::Uses |
Uses of the register, mapped by region.
Users that also define a part of the register are considered defs and not accounted for here.
Definition at line 136 of file Rematerializer.h.
Referenced by llvm::Rematerializer::findRematInRegion(), getRegionUseBounds(), hasUsersInDefRegion(), hasUsersOutsideDefRegion(), llvm::PreRARematStage::initGCNSchedStage(), llvm::Rematerializer::printRematReg(), llvm::Rematerializer::transferAllUsers(), and llvm::Rematerializer::transferRegionUsers().