Go to the documentation of this file.
16 #ifndef LLVM_CODEGEN_VIRTREGMAP_H
17 #define LLVM_CODEGEN_VIRTREGMAP_H
28 class MachineFunction;
29 class MachineRegisterInfo;
31 class TargetInstrInfo;
88 assert(MF &&
"getMachineFunction called before runOnMachineFunction");
122 return Virt2ShapeMap.
lookup(virtReg);
126 Virt2ShapeMap[virtReg.
id()] = shape;
134 "attempt to clear a not assigned virtual register");
140 Virt2PhysMap.
clear();
154 Virt2SplitMap[virtReg.
id()] = SReg;
162 return Virt2SplitMap[virtReg.
id()];
171 return Orig ? Orig : VirtReg;
181 return (Virt2SplitMap[virtReg.
id()] &&
189 return Virt2StackSlotMap[virtReg.
id()];
211 #endif // LLVM_CODEGEN_VIRTREGMAP_H
This is an optimization pass for GlobalISel generic memory operations.
bool isShapeMapEmpty() const
MachineRegisterInfo - Keep track of information for virtual and physical registers,...
bool hasPreferredPhys(Register VirtReg) const
returns true if VirtReg is assigned to its preferred physreg.
static MCRegister from(unsigned Val)
Check the provided unsigned value is a valid MCRegister.
ValueT lookup(const_arg_type_t< KeyT > Val) const
lookup - Return the entry for the specified key, or a default constructed value if no such entry exis...
bool hasKnownPreference(Register VirtReg) const
returns true if VirtReg has a known preferred register.
Register getOriginal(Register VirtReg) const
getOriginal - Return the original virtual register that VirtReg descends from through splitting.
void print(raw_ostream &OS, const Module *M=nullptr) const override
print - Print out the internal state of the pass.
void assignVirt2Phys(Register virtReg, MCPhysReg physReg)
creates a mapping for the specified virtual register to the specified physical register
MachineFunctionPass - This class adapts the FunctionPass interface to allow convenient creation of pa...
TargetRegisterInfo base class - We assume that the target defines a static array of TargetRegisterDes...
MachineFunction & getMachineFunction() const
Register getPreSplitReg(Register virtReg) const
returns the live interval virtReg is split from.
unsigned const TargetRegisterInfo * TRI
void getAnalysisUsage(AnalysisUsage &AU) const override
getAnalysisUsage - Subclasses that override getAnalysisUsage must call this.
TargetInstrInfo - Interface to description of machine instruction set.
void getAnalysisUsage(AnalysisUsage &AU) const override
getAnalysisUsage - Subclasses that override getAnalysisUsage must call this.
Represent the analysis usage information of a pass.
This class implements an extremely fast bulk output stream that can only output to a stream.
raw_ostream & operator<<(raw_ostream &OS, const APFixedPoint &FX)
bool isAssignedReg(Register virtReg) const
returns true if the specified virtual register is not mapped to a stack slot or rematerialized.
unsigned ID
LLVM IR allows to use arbitrary numbers as calling convention identifiers.
bool hasPhys(Register virtReg) const
returns true if the specified virtual register is mapped to a physical register
void setIsSplitFromReg(Register virtReg, Register SReg)
records virtReg is a split live interval from SReg.
MachineRegisterInfo & getRegInfo() const
bool isVirtual() const
Return true if the specified register number is in the virtual register namespace.
MCRegister getPhys(Register virtReg) const
returns the physical register mapped to the specified virtual register
bool runOnMachineFunction(MachineFunction &MF) override
runOnMachineFunction - This method must be overloaded to perform the desired machine code transformat...
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
bool hasShape(Register virtReg) const
A Module instance is used to store all the information related to an LLVM module.
void assignVirt2Shape(Register virtReg, ShapeT shape)
ShapeT getShape(Register virtReg) const
void clearAllVirt()
clears all virtual to physical register mappings
unsigned const MachineRegisterInfo * MRI
Wrapper class representing virtual and physical registers.
LLVM_NODISCARD bool empty() const
void setPreservesAll()
Set by analyses that do not transform their input at all.
void clearVirt(Register virtReg)
clears the specified virtual register's, physical register mapping
int assignVirt2StackSlot(Register virtReg)
create a mapping for the specifed virtual register to the next available stack slot
const TargetRegisterInfo & getTargetRegInfo() const
VirtRegMap & operator=(const VirtRegMap &)=delete
Wrapper class representing physical registers. Should be passed by value.
int getStackSlot(Register virtReg) const
returns the stack slot mapped to the specified virtual register