aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
diff options
context:
space:
mode:
authorDan Gohman <dan433584@gmail.com>2016-03-09 02:01:14 +0000
committerDan Gohman <dan433584@gmail.com>2016-03-09 02:01:14 +0000
commitd7a2eea619e179b722442748fa096c8429ff6ae0 (patch)
treeb2fef41bf54f1693b68322179efcf545b10e67bb /llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
parentd2d989609f503a59a6ddecb02170de546f8cffa4 (diff)
downloadllvm-d7a2eea619e179b722442748fa096c8429ff6ae0.zip
llvm-d7a2eea619e179b722442748fa096c8429ff6ae0.tar.gz
llvm-d7a2eea619e179b722442748fa096c8429ff6ae0.tar.bz2
[WebAssembly] Implement irreducible control flow.
This implements a very simple conservative transformation that doesn't require more than linear code size growth. There's room for much more optimization in this space. llvm-svn: 262982
Diffstat (limited to 'llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp')
-rw-r--r--llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
index 4d58339..2e4ed62 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
@@ -204,6 +204,9 @@ void WebAssemblyPassConfig::addPostRegAlloc() {
void WebAssemblyPassConfig::addPreEmitPass() {
TargetPassConfig::addPreEmitPass();
+ // Eliminate multiple-entry loops.
+ addPass(createWebAssemblyFixIrreducibleControlFlow());
+
// Put the CFG in structured form; insert BLOCK and LOOP markers.
addPass(createWebAssemblyCFGStackify());