[llvm] 85b8958 - [WebAssembly] add: hidden option to disable slow wasm pass (#67715)
    via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Wed Oct 18 15:52:03 PDT 2023
    
    
  
Author: Austin Theriault
Date: 2023-10-18T15:51:59-07:00
New Revision: 85b8958b56623cbe69be5cfcbb6c796ae48aff56
URL: https://github.com/llvm/llvm-project/commit/85b8958b56623cbe69be5cfcbb6c796ae48aff56
DIFF: https://github.com/llvm/llvm-project/commit/85b8958b56623cbe69be5cfcbb6c796ae48aff56.diff
LOG: [WebAssembly] add: hidden option to disable slow wasm pass (#67715)
Currently for any wasm target, llvm will make a pass that removes
irreducible control flow. (See
[here](https://llvm.org/doxygen/WebAssemblyFixIrreducibleControlFlow_8cpp.html)).
This can result in O(NumBlocks * NumNestedLoops * NumIrreducibleLoops +
NumLoops * NumLoops) build time, which has resulted in exceedingly long
build times when testing. This PR introduces a hidden flag to skip this
pass, which brings some of our build times down from 30 minutes to ~6
seconds.
Added: 
    
Modified: 
    llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
Removed: 
    
################################################################################
diff  --git a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
index 88c727796e0dfd7..2db1b6493cc4768 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
@@ -48,6 +48,12 @@ static cl::opt<bool> WasmDisableExplicitLocals(
              " instruction output for test purposes only."),
     cl::init(false));
 
+static cl::opt<bool> WasmDisableFixIrreducibleControlFlowPass(
+    "wasm-disable-fix-irreducible-control-flow-pass", cl::Hidden,
+    cl::desc("webassembly: disables the fix "
+             " irreducible control flow optimization pass"),
+    cl::init(false));
+
 extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeWebAssemblyTarget() {
   // Register the target.
   RegisterTargetMachine<WebAssemblyTargetMachine> X(
@@ -538,7 +544,8 @@ void WebAssemblyPassConfig::addPreEmitPass() {
   addPass(createWebAssemblyNullifyDebugValueLists());
 
   // Eliminate multiple-entry loops.
-  addPass(createWebAssemblyFixIrreducibleControlFlow());
+  if (!WasmDisableFixIrreducibleControlFlowPass)
+    addPass(createWebAssemblyFixIrreducibleControlFlow());
 
   // Do various transformations for exception handling.
   // Every CFG-changing optimizations should come before this.
        
    
    
More information about the llvm-commits
mailing list