[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