From 01ab2e44cacfe48cf141e438666bb2f368a3c76f Mon Sep 17 00:00:00 2001 From: Derek Schuff Date: Wed, 16 Dec 2015 20:43:08 +0000 Subject: [PATCH] Iterate over phys regs instead git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@255816 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp | 13 +++++++++---- .../WebAssembly/WebAssemblyMachineFunctionInfo.h | 1 + 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp b/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp index e853b76d0dd..084c4ed277b 100644 --- a/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp +++ b/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp @@ -91,7 +91,10 @@ private: //===----------------------------------------------------------------------===// MVT WebAssemblyAsmPrinter::getRegType(unsigned RegNo) const { - const TargetRegisterClass *TRC = MRI->getRegClass(RegNo); + const TargetRegisterClass *TRC = + TargetRegisterInfo::isVirtualRegister(RegNo) ? + MRI->getRegClass(RegNo) : + MRI->getTargetRegisterInfo()->getMinimalPhysRegClass(RegNo); for (MVT T : {MVT::i32, MVT::i64, MVT::f32, MVT::f64}) if (TRC->hasType(T)) return T; @@ -182,9 +185,11 @@ void WebAssemblyAsmPrinter::EmitFunctionBodyStart() { Local.addOperand(MCOperand::createImm(getRegType(VReg).SimpleTy)); AnyWARegs = true; } - if (MF->getFrameInfo()->getStackSize() > 0) { - // TODO: wasm64 - Local.addOperand(MCOperand::createImm(MVT::i32)); + auto &PhysRegs = MFI->getPhysRegs(); + for (unsigned PReg = 0; PReg < PhysRegs.size(); ++PReg) { + if (PhysRegs[PReg] == -1U) + continue; + Local.addOperand(MCOperand::createImm(getRegType(PReg).SimpleTy)); AnyWARegs = true; } if (AnyWARegs) diff --git a/lib/Target/WebAssembly/WebAssemblyMachineFunctionInfo.h b/lib/Target/WebAssembly/WebAssemblyMachineFunctionInfo.h index e3c7f41189b..6a60280900a 100644 --- a/lib/Target/WebAssembly/WebAssemblyMachineFunctionInfo.h +++ b/lib/Target/WebAssembly/WebAssemblyMachineFunctionInfo.h @@ -89,6 +89,7 @@ public: assert(WAReg < -1U); PhysRegs[PReg] = WAReg; } + const std::vector &getPhysRegs() const { return PhysRegs; } }; } // end namespace llvm -- 2.34.1