From 36ce1b0157c306671a4868f8976bdcbc085417d4 Mon Sep 17 00:00:00 2001 From: Quentin Colombet Date: Wed, 10 Feb 2016 23:43:48 +0000 Subject: [PATCH] [GlobalISel] Remember the size of generic virtual registers llvm-svn: 260468 --- llvm/include/llvm/CodeGen/MachineRegisterInfo.h | 11 +++++++++++ llvm/lib/CodeGen/MachineInstr.cpp | 9 ++++++++- llvm/lib/CodeGen/MachineRegisterInfo.cpp | 9 +++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/llvm/include/llvm/CodeGen/MachineRegisterInfo.h b/llvm/include/llvm/CodeGen/MachineRegisterInfo.h index 04191bc..a09c379 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 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 1fee798..0f3d18a 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 03c82f4..2d09aea 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::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 -- 2.7.4