[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 11:00:14 PDT 2018


aheejin updated this revision to Diff 165123.
aheejin added a comment.

- Add comment


Repository:
  rL LLVM

https://reviews.llvm.org/D51991

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


Index: test/CodeGen/WebAssembly/inline-asm.ll
===================================================================
--- test/CodeGen/WebAssembly/inline-asm.ll
+++ 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: lib/Target/WebAssembly/WebAssemblyExplicitLocals.cpp
===================================================================
--- lib/Target/WebAssembly/WebAssemblyExplicitLocals.cpp
+++ 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.165123.patch
Type: text/x-patch
Size: 1557 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180912/7d49ee65/attachment.bin>


More information about the llvm-commits mailing list