[PATCH] D51562: [WebAssembly] Fix signature of `main` in FixFunctionBitcasts
Sam Clegg via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 31 17:02:43 PDT 2018
sbc100 created this revision.
Herald added subscribers: llvm-commits, sunfish, aheejin, jgravelle-google, dschuff.
Also, add a check to ensure that when main has the expected signature
we do not create a wrapper.
Repository:
rL LLVM
https://reviews.llvm.org/D51562
Files:
lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp
test/CodeGen/WebAssembly/main.ll
test/CodeGen/WebAssembly/main_with_args.ll
Index: test/CodeGen/WebAssembly/main_with_args.ll
===================================================================
--- test/CodeGen/WebAssembly/main_with_args.ll
+++ test/CodeGen/WebAssembly/main_with_args.ll
@@ -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:
Index: test/CodeGen/WebAssembly/main.ll
===================================================================
--- test/CodeGen/WebAssembly/main.ll
+++ test/CodeGen/WebAssembly/main.ll
@@ -1,18 +1,21 @@
; RUN: llc < %s -asm-verbose=false -wasm-temporary-workarounds=false | FileCheck %s
-; Test main functions with alternate signatures.
+; Test main functions with alternate signature. Specifically no arguments.
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() {
+ ret i32 0
}
; CHECK-LABEL: .L__original_main:
+; CHECK-NEXT: .result i32
+; CHECK-NEXT: i32.const 0
; CHECK-NEXT: end_function
; CHECK-LABEL: main:
; CHECK-NEXT: .param i32, i32
; CHECK-NEXT: .result i32
-; CHECK: call .L__original_main at FUNCTION
+; CHECK: i32.call .L__original_main at FUNCTION
+; CHECK: end_function
Index: lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp
===================================================================
--- lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp
+++ lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp
@@ -244,12 +244,15 @@
Main = &F;
LLVMContext &C = M.getContext();
Type *MainArgTys[] = {
- PointerType::get(Type::getInt8PtrTy(C), 0),
- Type::getInt32Ty(C)
+ 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");
+ LLVM_DEBUG(dbgs() << "expected: " << *MainTy << "\n");
Value *Args[] = {
UndefValue::get(MainArgTys[0]),
UndefValue::get(MainArgTys[1])
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D51562.163606.patch
Type: text/x-patch
Size: 2805 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180901/89695fb0/attachment.bin>
More information about the llvm-commits
mailing list