[llvm] r342157 - [WebAssembly] Fix signature of `main` in FixFunctionBitcasts

Sam Clegg via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 13 10:13:11 PDT 2018


Author: sbc
Date: Thu Sep 13 10:13:10 2018
New Revision: 342157

URL: http://llvm.org/viewvc/llvm-project?rev=342157&view=rev
Log:
[WebAssembly] Fix signature of `main` in FixFunctionBitcasts

Also, add a check to ensure that when main has the expected signature
we do not create a wrapper.

Differential Revision: https://reviews.llvm.org/D51562

Added:
    llvm/trunk/test/CodeGen/WebAssembly/main-no-args.ll
      - copied, changed from r342150, llvm/trunk/test/CodeGen/WebAssembly/main.ll
    llvm/trunk/test/CodeGen/WebAssembly/main-with-args.ll
      - copied, changed from r342150, llvm/trunk/test/CodeGen/WebAssembly/main.ll
Removed:
    llvm/trunk/test/CodeGen/WebAssembly/main.ll
Modified:
    llvm/trunk/lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp

Modified: llvm/trunk/lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp?rev=342157&r1=342156&r2=342157&view=diff
==============================================================================
--- llvm/trunk/lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp (original)
+++ llvm/trunk/lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp Thu Sep 13 10:13:10 2018
@@ -244,11 +244,13 @@ bool FixFunctionBitcasts::runOnModule(Mo
     if (!TemporaryWorkarounds && !F.isDeclaration() && F.getName() == "main") {
       Main = &F;
       LLVMContext &C = M.getContext();
-      Type *MainArgTys[] = {PointerType::get(Type::getInt8PtrTy(C), 0),
-                            Type::getInt32Ty(C)};
+      Type *MainArgTys[] = {Type::getInt32Ty(C),
+                            PointerType::get(Type::getInt8PtrTy(C), 0)};
       FunctionType *MainTy = FunctionType::get(Type::getInt32Ty(C), MainArgTys,
                                                /*isVarArg=*/false);
       if (F.getFunctionType() != MainTy) {
+        LLVM_DEBUG(dbgs() << "Found `main` function with incorrect type: "
+                          << *F.getFunctionType() << "\n");
         Value *Args[] = {UndefValue::get(MainArgTys[0]),
                          UndefValue::get(MainArgTys[1])};
         Value *Casted =

Copied: llvm/trunk/test/CodeGen/WebAssembly/main-no-args.ll (from r342150, llvm/trunk/test/CodeGen/WebAssembly/main.ll)
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/WebAssembly/main-no-args.ll?p2=llvm/trunk/test/CodeGen/WebAssembly/main-no-args.ll&p1=llvm/trunk/test/CodeGen/WebAssembly/main.ll&r1=342150&r2=342157&rev=342157&view=diff
==============================================================================
    (empty)

Copied: llvm/trunk/test/CodeGen/WebAssembly/main-with-args.ll (from r342150, llvm/trunk/test/CodeGen/WebAssembly/main.ll)
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/WebAssembly/main-with-args.ll?p2=llvm/trunk/test/CodeGen/WebAssembly/main-with-args.ll&p1=llvm/trunk/test/CodeGen/WebAssembly/main.ll&r1=342150&r2=342157&rev=342157&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/WebAssembly/main.ll (original)
+++ llvm/trunk/test/CodeGen/WebAssembly/main-with-args.ll Thu Sep 13 10:13:10 2018
@@ -1,18 +1,16 @@
 ; RUN: llc < %s -asm-verbose=false -wasm-temporary-workarounds=false | FileCheck %s
 
-; Test main functions with alternate signatures.
+; Test that main function with expected signature is not wrapped
 
 target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
 target triple = "wasm32-unknown-unknown"
 
-define void @main() {
-  ret void
+define i32 @main(i32 %a, i8** %b) {
+  ret i32 0
 }
 
-; CHECK-LABEL: .L__original_main:
-; CHECK-NEXT: end_function
-
 ; CHECK-LABEL: main:
 ; CHECK-NEXT: .param i32, i32
 ; CHECK-NEXT: .result i32
-; CHECK:      call .L__original_main at FUNCTION
+
+; CHECK-NOT: __original_main:

Removed: llvm/trunk/test/CodeGen/WebAssembly/main.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/WebAssembly/main.ll?rev=342156&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/WebAssembly/main.ll (original)
+++ llvm/trunk/test/CodeGen/WebAssembly/main.ll (removed)
@@ -1,18 +0,0 @@
-; RUN: llc < %s -asm-verbose=false -wasm-temporary-workarounds=false | FileCheck %s
-
-; Test main functions with alternate signatures.
-
-target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
-target triple = "wasm32-unknown-unknown"
-
-define void @main() {
-  ret void
-}
-
-; CHECK-LABEL: .L__original_main:
-; CHECK-NEXT: end_function
-
-; CHECK-LABEL: main:
-; CHECK-NEXT: .param i32, i32
-; CHECK-NEXT: .result i32
-; CHECK:      call .L__original_main at FUNCTION




More information about the llvm-commits mailing list