From cc037ac6e20feae4667ccff29592d87fa22120ad Mon Sep 17 00:00:00 2001 From: Heejin Ahn Date: Sat, 30 Mar 2019 09:29:57 +0000 Subject: [PATCH] [WebAssembly] Run ExplicitLocals pass after CFGStackify Summary: While this does not change any final output, this will greatly simplify ixing unwind destination mismatches in CFGStackify (D48345), because we have to create some new registers there. Reviewers: dschuff Subscribers: sunfish, sbc100, jgravelle-google, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D59652 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@357342 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/WebAssembly/WebAssembly.h | 4 ++-- lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp | 8 ++++---- test/CodeGen/WebAssembly/cfg-stackify-dbg-skip.ll | 1 - 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/lib/Target/WebAssembly/WebAssembly.h b/lib/Target/WebAssembly/WebAssembly.h index 2a7efe1176f..fcbd0a5082f 100644 --- a/lib/Target/WebAssembly/WebAssembly.h +++ b/lib/Target/WebAssembly/WebAssembly.h @@ -44,11 +44,11 @@ FunctionPass *createWebAssemblyOptimizeLiveIntervals(); FunctionPass *createWebAssemblyMemIntrinsicResults(); FunctionPass *createWebAssemblyRegStackify(); FunctionPass *createWebAssemblyRegColoring(); -FunctionPass *createWebAssemblyExplicitLocals(); FunctionPass *createWebAssemblyFixIrreducibleControlFlow(); FunctionPass *createWebAssemblyLateEHPrepare(); FunctionPass *createWebAssemblyCFGSort(); FunctionPass *createWebAssemblyCFGStackify(); +FunctionPass *createWebAssemblyExplicitLocals(); FunctionPass *createWebAssemblyLowerBrUnless(); FunctionPass *createWebAssemblyRegNumbering(); FunctionPass *createWebAssemblyPeephole(); @@ -68,12 +68,12 @@ void initializeWebAssemblyOptimizeLiveIntervalsPass(PassRegistry &); void initializeWebAssemblyMemIntrinsicResultsPass(PassRegistry &); void initializeWebAssemblyRegStackifyPass(PassRegistry &); void initializeWebAssemblyRegColoringPass(PassRegistry &); -void initializeWebAssemblyExplicitLocalsPass(PassRegistry &); void initializeWebAssemblyFixIrreducibleControlFlowPass(PassRegistry &); void initializeWebAssemblyLateEHPreparePass(PassRegistry &); void initializeWebAssemblyExceptionInfoPass(PassRegistry &); void initializeWebAssemblyCFGSortPass(PassRegistry &); void initializeWebAssemblyCFGStackifyPass(PassRegistry &); +void initializeWebAssemblyExplicitLocalsPass(PassRegistry &); void initializeWebAssemblyLowerBrUnlessPass(PassRegistry &); void initializeWebAssemblyRegNumberingPass(PassRegistry &); void initializeWebAssemblyPeepholePass(PassRegistry &); diff --git a/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp b/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp index 8a768dbc104..3d10bfbad56 100644 --- a/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp +++ b/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp @@ -66,12 +66,12 @@ extern "C" void LLVMInitializeWebAssemblyTarget() { initializeWebAssemblyMemIntrinsicResultsPass(PR); initializeWebAssemblyRegStackifyPass(PR); initializeWebAssemblyRegColoringPass(PR); - initializeWebAssemblyExplicitLocalsPass(PR); initializeWebAssemblyFixIrreducibleControlFlowPass(PR); initializeWebAssemblyLateEHPreparePass(PR); initializeWebAssemblyExceptionInfoPass(PR); initializeWebAssemblyCFGSortPass(PR); initializeWebAssemblyCFGStackifyPass(PR); + initializeWebAssemblyExplicitLocalsPass(PR); initializeWebAssemblyLowerBrUnlessPass(PR); initializeWebAssemblyRegNumberingPass(PR); initializeWebAssemblyPeepholePass(PR); @@ -442,9 +442,6 @@ void WebAssemblyPassConfig::addPreEmitPass() { addPass(createWebAssemblyRegColoring()); } - // Insert explicit local.get and local.set operators. - addPass(createWebAssemblyExplicitLocals()); - // Sort the blocks of the CFG into topological order, a prerequisite for // BLOCK and LOOP markers. addPass(createWebAssemblyCFGSort()); @@ -452,6 +449,9 @@ void WebAssemblyPassConfig::addPreEmitPass() { // Insert BLOCK and LOOP markers. addPass(createWebAssemblyCFGStackify()); + // Insert explicit local.get and local.set operators. + addPass(createWebAssemblyExplicitLocals()); + // Lower br_unless into br_if. addPass(createWebAssemblyLowerBrUnless()); diff --git a/test/CodeGen/WebAssembly/cfg-stackify-dbg-skip.ll b/test/CodeGen/WebAssembly/cfg-stackify-dbg-skip.ll index 5a7253493a1..a10b9bfdc71 100644 --- a/test/CodeGen/WebAssembly/cfg-stackify-dbg-skip.ll +++ b/test/CodeGen/WebAssembly/cfg-stackify-dbg-skip.ll @@ -7,7 +7,6 @@ ; CHECK: body: ; CHECK: BLOCK ; <-- Stackified expression starts -; CHECK-NEXT: LOCAL_GET_I64 ; CHECK-NEXT: I32_WRAP_I64 ; CHECK-NEXT: DBG_VALUE ; <-- BLOCK should NOT be placed here! -- 2.40.0