From ed1cb75099f89e02b0e4a2d90f1cf31572c8a9dd Mon Sep 17 00:00:00 2001 From: Derek Schuff Date: Fri, 8 Dec 2017 00:39:54 +0000 Subject: [PATCH] Revert "[WebAssemby] Support main functions with alternate signatures." This reverts commit 959e37e669b0c3cfad4cb9f1f7c9261ce9f5e9ae. That commit doesn't handle the case where main is declared rather than defined, in particular the even-more special case where main is a prototypeless declaration (which is of course the one actually used by musl currently). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320121 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../WebAssembly/WebAssemblyFixFunctionBitcasts.cpp | 46 +--------------------- test/CodeGen/WebAssembly/main.ll | 18 --------- 2 files changed, 1 insertion(+), 63 deletions(-) delete mode 100644 test/CodeGen/WebAssembly/main.ll diff --git a/lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp b/lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp index 4888bf3a747..f1d2c00d163 100644 --- a/lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp +++ b/lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp @@ -142,41 +142,11 @@ static Function *CreateWrapper(Function *F, FunctionType *Ty) { } bool FixFunctionBitcasts::runOnModule(Module &M) { - Function *Main = nullptr; - CallInst *CallMain = nullptr; SmallVector, 0> Uses; SmallPtrSet ConstantBCs; // Collect all the places that need wrappers. - for (Function &F : M) { - FindUses(&F, F, Uses, ConstantBCs); - - // If we have a "main" function, and its type isn't - // "int main(int argc, char *argv[])", create an artificial call with it - // bitcasted to that type so that we generate a wrapper for it, so that - // the C runtime can call it. - if (F.getName() == "main") { - Main = &F; - LLVMContext &C = M.getContext(); - Type *MainArgTys[] = { - PointerType::get(Type::getInt8PtrTy(C), 0), - Type::getInt32Ty(C) - }; - FunctionType *MainTy = FunctionType::get(Type::getInt32Ty(C), MainArgTys, - /*isVarArg=*/false); - if (F.getFunctionType() != MainTy) { - Value *Args[] = { - UndefValue::get(MainArgTys[0]), - UndefValue::get(MainArgTys[1]) - }; - Value *Casted = ConstantExpr::getBitCast(Main, - PointerType::get(MainTy, 0)); - CallMain = CallInst::Create(Casted, Args, "call_main"); - Use *UseMain = &CallMain->getOperandUse(2); - Uses.push_back(std::make_pair(UseMain, &F)); - } - } - } + for (Function &F : M) FindUses(&F, F, Uses, ConstantBCs); DenseMap, Function *> Wrappers; @@ -211,19 +181,5 @@ bool FixFunctionBitcasts::runOnModule(Module &M) { U->set(Wrapper); } - // If we created a wrapper for main, rename the wrapper so that it's the - // one that gets called from startup. - if (CallMain) { - Main->setName("__original_main"); - Function *MainWrapper = - cast(CallMain->getCalledValue()->stripPointerCasts()); - MainWrapper->setName("main"); - MainWrapper->setLinkage(Main->getLinkage()); - MainWrapper->setVisibility(Main->getVisibility()); - Main->setLinkage(Function::PrivateLinkage); - Main->setVisibility(Function::DefaultVisibility); - delete CallMain; - } - return true; } diff --git a/test/CodeGen/WebAssembly/main.ll b/test/CodeGen/WebAssembly/main.ll deleted file mode 100644 index 314dde28307..00000000000 --- a/test/CodeGen/WebAssembly/main.ll +++ /dev/null @@ -1,18 +0,0 @@ -; RUN: llc < %s -asm-verbose=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-wasm" - -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@FUNCTION -- 2.11.0