diff options
| author | Quentin Colombet <qcolombet@apple.com> | 2016-02-10 23:43:48 +0000 |
|---|---|---|
| committer | Quentin Colombet <qcolombet@apple.com> | 2016-02-10 23:43:48 +0000 |
| commit | 36ce1b0157c306671a4868f8976bdcbc085417d4 (patch) | |
| tree | c0cd30232ca1bd0068d9add41d5e7681cc0e3de8 | |
| parent | 704da023cc410e12402c800d8718a72d0ca56ee4 (diff) | |
| download | bcm5719-llvm-36ce1b0157c306671a4868f8976bdcbc085417d4.tar.gz bcm5719-llvm-36ce1b0157c306671a4868f8976bdcbc085417d4.zip | |
[GlobalISel] Remember the size of generic virtual registers
llvm-svn: 260468
| -rw-r--r-- | llvm/include/llvm/CodeGen/MachineRegisterInfo.h | 11 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/MachineInstr.cpp | 9 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/MachineRegisterInfo.cpp | 9 |
3 files changed, 28 insertions, 1 deletions
diff --git a/llvm/include/llvm/CodeGen/MachineRegisterInfo.h b/llvm/include/llvm/CodeGen/MachineRegisterInfo.h index 04191bc1b74..a09c379679b 100644 --- a/llvm/include/llvm/CodeGen/MachineRegisterInfo.h +++ b/llvm/include/llvm/CodeGen/MachineRegisterInfo.h @@ -105,6 +105,11 @@ private: /// started. BitVector ReservedRegs; +#ifdef LLVM_BUILD_GLOBAL_ISEL + /// Map generic virtual registers to their actual size. + DenseMap<unsigned, unsigned> VRegToSize; +#endif + /// Keep track of the physical registers that are live in to the function. /// Live in values are typically arguments in registers. LiveIn values are /// allowed to have virtual registers associated with them, stored in the @@ -587,6 +592,12 @@ public: /// unsigned createVirtualRegister(const TargetRegisterClass *RegClass); +#ifdef LLVM_BUILD_GLOBAL_ISEL + /// Get the size of \p VReg or 0 if VReg is not a generic + /// (target independent) virtual register. + unsigned getSize(unsigned VReg) const; +#endif + /// getNumVirtRegs - Return the number of virtual registers created. /// unsigned getNumVirtRegs() const { return VRegInfo.size(); } diff --git a/llvm/lib/CodeGen/MachineInstr.cpp b/llvm/lib/CodeGen/MachineInstr.cpp index 1fee7989575..0f3d18a41c9 100644 --- a/llvm/lib/CodeGen/MachineInstr.cpp +++ b/llvm/lib/CodeGen/MachineInstr.cpp @@ -1657,8 +1657,15 @@ void MachineInstr::print(raw_ostream &OS, ModuleSlotTracker &MST, if (StartOp != 0) OS << ", "; getOperand(StartOp).print(OS, MST, TRI); unsigned Reg = getOperand(StartOp).getReg(); - if (TargetRegisterInfo::isVirtualRegister(Reg)) + if (TargetRegisterInfo::isVirtualRegister(Reg)) { VirtRegs.push_back(Reg); +#ifdef LLVM_BUILD_GLOBAL_ISEL + unsigned Size; + if (MRI && (Size = MRI->getSize(Reg))) { + OS << '(' << Size << ')'; + } +#endif + } } if (StartOp != 0) diff --git a/llvm/lib/CodeGen/MachineRegisterInfo.cpp b/llvm/lib/CodeGen/MachineRegisterInfo.cpp index 03c82f46da6..2d09aea21dd 100644 --- a/llvm/lib/CodeGen/MachineRegisterInfo.cpp +++ b/llvm/lib/CodeGen/MachineRegisterInfo.cpp @@ -103,6 +103,15 @@ MachineRegisterInfo::createVirtualRegister(const TargetRegisterClass *RegClass){ return Reg; } +#ifdef LLVM_BUILD_GLOBAL_ISEL +unsigned +MachineRegisterInfo::getSize(unsigned VReg) const { + DenseMap<unsigned, unsigned>::const_iterator SizeIt = + VRegToSize.find(VReg); + return SizeIt != VRegToSize.end()? SizeIt->second: 0; +} +#endif // LLVM_BUILD_GLOBAL_ISEL + /// clearVirtRegs - Remove all virtual registers (after physreg assignment). void MachineRegisterInfo::clearVirtRegs() { #ifndef NDEBUG |

