diff options
author | Derek Schuff <dschuff@google.com> | 2015-12-16 20:43:08 +0000 |
---|---|---|
committer | Derek Schuff <dschuff@google.com> | 2015-12-16 20:43:08 +0000 |
commit | 83717cc2976e644027065abb6ea375fa26dbfebe (patch) | |
tree | fdd847e3789b566a02eaf064d02c0501291d187e | |
parent | 45cd5a79b24ea75b4d746eae53d3eb8f84a63c2e (diff) | |
download | bcm5719-llvm-83717cc2976e644027065abb6ea375fa26dbfebe.tar.gz bcm5719-llvm-83717cc2976e644027065abb6ea375fa26dbfebe.zip |
Iterate over phys regs instead
llvm-svn: 255816
-rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp | 13 | ||||
-rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyMachineFunctionInfo.h | 1 |
2 files changed, 10 insertions, 4 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp index e853b76d0dd..084c4ed277b 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp +++ b/llvm/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/llvm/lib/Target/WebAssembly/WebAssemblyMachineFunctionInfo.h b/llvm/lib/Target/WebAssembly/WebAssemblyMachineFunctionInfo.h index e3c7f41189b..6a60280900a 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyMachineFunctionInfo.h +++ b/llvm/lib/Target/WebAssembly/WebAssemblyMachineFunctionInfo.h @@ -89,6 +89,7 @@ public: assert(WAReg < -1U); PhysRegs[PReg] = WAReg; } + const std::vector<unsigned> &getPhysRegs() const { return PhysRegs; } }; } // end namespace llvm |