[WebAssembly] Remove special cases for things that are no longer special. NFC.
[oota-llvm.git] / lib / Target / WebAssembly / WebAssemblyAsmPrinter.cpp
index 59c1ff381a011c0502392e191a8a746f0ce2c0d7..6eb9ae6c5268950bf35f0676ee1c072e89b793ee 100644 (file)
@@ -269,33 +269,23 @@ void WebAssemblyAsmPrinter::EmitInstruction(const MachineInstr *MI) {
 
   switch (MI->getOpcode()) {
   case TargetOpcode::COPY:
-    OS << "get_local " << regToString(MI->getOperand(1));
-    break;
-  case WebAssembly::GLOBAL:
-    // TODO: wasm64
-    OS << "i32.const " << toSymbol(MI->getOperand(1).getGlobal()->getName());
+    OS << "get_local push, " << regToString(MI->getOperand(1));
     break;
   case WebAssembly::ARGUMENT_I32:
   case WebAssembly::ARGUMENT_I64:
   case WebAssembly::ARGUMENT_F32:
   case WebAssembly::ARGUMENT_F64:
-    OS << "get_local " << argToString(MI->getOperand(1));
-    break;
-  case WebAssembly::Immediate_I32:
-    OS << "i32.const " << MI->getOperand(1).getImm();
-    break;
-  case WebAssembly::Immediate_I64:
-    OS << "i64.const " << MI->getOperand(1).getImm();
-    break;
-  case WebAssembly::Immediate_F32:
-    OS << "f32.const " << toString(MI->getOperand(1).getFPImm()->getValueAPF());
-    break;
-  case WebAssembly::Immediate_F64:
-    OS << "f64.const " << toString(MI->getOperand(1).getFPImm()->getValueAPF());
+    OS << "get_local push, " << argToString(MI->getOperand(1));
     break;
   default: {
     OS << OpcodeName(TII, MI);
     bool NeedComma = false;
+    bool DefsPushed = false;
+    if (NumDefs != 0 && !MI->isCall()) {
+      OS << " push";
+      NeedComma = true;
+      DefsPushed = true;
+    }
     for (const MachineOperand &MO : MI->uses()) {
       if (MO.isReg() && MO.isImplicit())
         continue;
@@ -322,6 +312,12 @@ void WebAssemblyAsmPrinter::EmitInstruction(const MachineInstr *MI) {
         OS << toSymbol(MO.getMBB()->getSymbol()->getName());
         break;
       }
+      if (NumDefs != 0 && !DefsPushed) {
+        // Special-case for calls; print the push after the callee.
+        assert(MI->isCall());
+        OS << ", push";
+        DefsPushed = true;
+      }
     }
     break;
   }