summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQuentin Colombet <qcolombet@apple.com>2016-02-10 23:43:48 +0000
committerQuentin Colombet <qcolombet@apple.com>2016-02-10 23:43:48 +0000
commit36ce1b0157c306671a4868f8976bdcbc085417d4 (patch)
treec0cd30232ca1bd0068d9add41d5e7681cc0e3de8
parent704da023cc410e12402c800d8718a72d0ca56ee4 (diff)
downloadbcm5719-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.h11
-rw-r--r--llvm/lib/CodeGen/MachineInstr.cpp9
-rw-r--r--llvm/lib/CodeGen/MachineRegisterInfo.cpp9
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
OpenPOWER on IntegriCloud