diff options
| author | Dan Gohman <dan433584@gmail.com> | 2015-09-09 00:52:47 +0000 |
|---|---|---|
| committer | Dan Gohman <dan433584@gmail.com> | 2015-09-09 00:52:47 +0000 |
| commit | 4f52e00ecbd6623360bd1ff132552a623052b88d (patch) | |
| tree | 1d82943f473d505a0d62a1a4dcf225604156fb08 /llvm/lib | |
| parent | 309915626110fffc66a6ee598f9d24dbbb256ded (diff) | |
| download | bcm5719-llvm-4f52e00ecbd6623360bd1ff132552a623052b88d.tar.gz bcm5719-llvm-4f52e00ecbd6623360bd1ff132552a623052b88d.zip | |
[WebAssembly] Implement WebAssemblyInstrInfo::copyPhysReg
llvm-svn: 247110
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp | 48 | ||||
| -rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyInstrInfo.cpp | 8 | ||||
| -rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyInstrInfo.h | 4 |
3 files changed, 38 insertions, 22 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp index eb1343292d3..c2e71c1489b 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp @@ -269,28 +269,32 @@ void WebAssemblyAsmPrinter::EmitInstruction(const MachineInstr *MI) { OS << "(setlocal @" << TargetRegisterInfo::virtReg2Index(Reg) << ' '; } - OS << '(' << OpcodeName(TII, MI); - for (const MachineOperand &MO : MI->uses()) - switch (MO.getType()) { - default: - llvm_unreachable("unexpected machine operand type"); - case MachineOperand::MO_Register: { - if (MO.isImplicit()) - continue; - unsigned Reg = MO.getReg(); - OS << " @" << TargetRegisterInfo::virtReg2Index(Reg); - } break; - case MachineOperand::MO_Immediate: { - OS << ' ' << MO.getImm(); - } break; - case MachineOperand::MO_FPImmediate: { - OS << ' ' << toString(MO.getFPImm()->getValueAPF()); - } break; - case MachineOperand::MO_GlobalAddress: { - OS << ' ' << toSymbol(MO.getGlobal()->getName()); - } break; - } - OS << ')'; + if (MI->getOpcode() == WebAssembly::COPY) { + OS << '@' << TargetRegisterInfo::virtReg2Index(MI->getOperand(1).getReg()); + } else { + OS << '(' << OpcodeName(TII, MI); + for (const MachineOperand &MO : MI->uses()) + switch (MO.getType()) { + default: + llvm_unreachable("unexpected machine operand type"); + case MachineOperand::MO_Register: { + if (MO.isImplicit()) + continue; + unsigned Reg = MO.getReg(); + OS << " @" << TargetRegisterInfo::virtReg2Index(Reg); + } break; + case MachineOperand::MO_Immediate: { + OS << ' ' << MO.getImm(); + } break; + case MachineOperand::MO_FPImmediate: { + OS << ' ' << toString(MO.getFPImm()->getValueAPF()); + } break; + case MachineOperand::MO_GlobalAddress: { + OS << ' ' << toSymbol(MO.getGlobal()->getName()); + } break; + } + OS << ')'; + } if (NumDefs != 0) OS << ')'; diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyInstrInfo.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyInstrInfo.cpp index d4c65a4b98c..1898ad8f8eb 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyInstrInfo.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyInstrInfo.cpp @@ -29,3 +29,11 @@ using namespace llvm; WebAssemblyInstrInfo::WebAssemblyInstrInfo(const WebAssemblySubtarget &STI) : RI(STI.getTargetTriple()) {} + +void WebAssemblyInstrInfo::copyPhysReg(MachineBasicBlock &MBB, + MachineBasicBlock::iterator I, + DebugLoc DL, unsigned DestReg, + unsigned SrcReg, bool KillSrc) const { + BuildMI(MBB, I, DL, get(WebAssembly::COPY), DestReg) + .addReg(SrcReg, KillSrc ? RegState::Kill : 0); +} diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyInstrInfo.h b/llvm/lib/Target/WebAssembly/WebAssemblyInstrInfo.h index 29fdcb0e6cb..29feee2d831 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyInstrInfo.h +++ b/llvm/lib/Target/WebAssembly/WebAssemblyInstrInfo.h @@ -33,6 +33,10 @@ public: explicit WebAssemblyInstrInfo(const WebAssemblySubtarget &STI); const WebAssemblyRegisterInfo &getRegisterInfo() const { return RI; } + + void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator MI, + DebugLoc DL, unsigned DestReg, unsigned SrcReg, + bool KillSrc) const override; }; } // end namespace llvm |

