[PATCH] D60908: [WebAssembly] FastISel: Don't fallback to SelectionDAG after BuildMI in selectCall

Sam Clegg via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 19 15:38:42 PDT 2019


sbc100 updated this revision to Diff 195928.
sbc100 added a comment.

- add test


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D60908/new/

https://reviews.llvm.org/D60908

Files:
  llvm/lib/Target/WebAssembly/WebAssemblyFastISel.cpp
  llvm/test/CodeGen/WebAssembly/call-pic.ll


Index: llvm/test/CodeGen/WebAssembly/call-pic.ll
===================================================================
--- llvm/test/CodeGen/WebAssembly/call-pic.ll
+++ llvm/test/CodeGen/WebAssembly/call-pic.ll
@@ -8,6 +8,11 @@
 declare hidden i32 @hidden_function()
 
 @indirect_func = global i32 ()* @foo
+ at alias_func = hidden alias i32 (), i32 ()* @local_function
+
+define i32 @local_function() {
+  ret i32 1
+}
 
 define void @call_indirect_func() {
 ; CHECK-LABEL: call_indirect_func:
@@ -31,6 +36,16 @@
   ret void
 }
 
+define void @call_alias_func() {
+; CHECK-LABEL: call_alias_func:
+; CHECK: .functype call_alias_func () -> ()
+; CHECK-NEXT: i32.call $push0=, alias_func
+; CHECK-NEXT: drop $pop0{{$}}
+; CHECK-NEXT: return{{$}}
+  %call = call i32 @alias_func()
+  ret void
+}
+
 define i8* @get_function_address() {
 ; CHECK-LABEL: get_function_address:
 ; CHECK:       global.get $push[[L0:[0-9]+]]=, bar at GOT{{$}}
Index: llvm/lib/Target/WebAssembly/WebAssemblyFastISel.cpp
===================================================================
--- llvm/lib/Target/WebAssembly/WebAssemblyFastISel.cpp
+++ llvm/lib/Target/WebAssembly/WebAssemblyFastISel.cpp
@@ -851,6 +851,13 @@
     Args.push_back(Reg);
   }
 
+  unsigned CalleeReg = 0;
+  if (!IsDirect) {
+    CalleeReg = getRegForValue(Call->getCalledValue());
+    if (!CalleeReg)
+      return false;
+  }
+
   auto MIB = BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(Opc));
 
   if (!IsVoid)
@@ -858,12 +865,8 @@
 
   if (IsDirect)
     MIB.addGlobalAddress(Func);
-  else {
-    unsigned Reg = getRegForValue(Call->getCalledValue());
-    if (Reg == 0)
-      return false;
-    MIB.addReg(Reg);
-  }
+  else
+    MIB.addReg(CalleeReg);
 
   for (unsigned ArgReg : Args)
     MIB.addReg(ArgReg);


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D60908.195928.patch
Type: text/x-patch
Size: 1776 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190419/139d197a/attachment-0001.bin>


More information about the llvm-commits mailing list