[PATCH] D51991: [WebAssembly] Make tied inline asm operands work again

Heejin Ahn via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 12 14:35:55 PDT 2018


This revision was automatically updated to reflect the committed changes.
Closed by commit rL342084: [WebAssembly] Make tied inline asm operands work again (authored by aheejin, committed by ).

Repository:
  rL LLVM

https://reviews.llvm.org/D51991

Files:
  llvm/trunk/lib/Target/WebAssembly/WebAssemblyExplicitLocals.cpp
  llvm/trunk/test/CodeGen/WebAssembly/inline-asm.ll


Index: llvm/trunk/test/CodeGen/WebAssembly/inline-asm.ll
===================================================================
--- llvm/trunk/test/CodeGen/WebAssembly/inline-asm.ll
+++ llvm/trunk/test/CodeGen/WebAssembly/inline-asm.ll
@@ -97,6 +97,15 @@
   ret i32 %t0
 }
 
+; CHECK-LABEL: tied_operands
+; CHECK: get_local  $push0=, 0
+; CHECK: return    $pop0
+define i32 @tied_operands(i32 %var) {
+entry:
+  %ret = call i32 asm "", "=r,0"(i32 %var)
+  ret i32 %ret
+}
+
 attributes #0 = { nounwind }
 
 !0 = !{i32 47}
Index: llvm/trunk/lib/Target/WebAssembly/WebAssemblyExplicitLocals.cpp
===================================================================
--- llvm/trunk/lib/Target/WebAssembly/WebAssemblyExplicitLocals.cpp
+++ llvm/trunk/lib/Target/WebAssembly/WebAssemblyExplicitLocals.cpp
@@ -316,6 +316,9 @@
         if (MO.isDef()) {
           assert(MI.getOpcode() == TargetOpcode::INLINEASM);
           unsigned LocalId = getLocalId(Reg2Local, CurLocal, OldReg);
+          // If this register operand is tied to another operand, we can't
+          // change it to an immediate. Untie it first.
+          MI.untieRegOperand(MI.getOperandNo(&MO));
           MO.ChangeToImmediate(LocalId);
           continue;
         }
@@ -331,6 +334,8 @@
         // indices as immediates.
         if (MI.getOpcode() == TargetOpcode::INLINEASM) {
           unsigned LocalId = getLocalId(Reg2Local, CurLocal, OldReg);
+          // Untie it first if this reg operand is tied to another operand.
+          MI.untieRegOperand(MI.getOperandNo(&MO));
           MO.ChangeToImmediate(LocalId);
           continue;
         }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D51991.165155.patch
Type: text/x-patch
Size: 1623 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180912/ebef4cdb/attachment-0001.bin>


More information about the llvm-commits mailing list