diff options
author | Thomas Lively <tlively@google.com> | 2020-06-11 15:11:45 -0700 |
---|---|---|
committer | Thomas Lively <tlively@google.com> | 2020-06-11 15:11:45 -0700 |
commit | c5d012341e58bf5e4300024a7e4f4e509c08463f (patch) | |
tree | 912ebafac868839a1a02815184b3f6830ac9934e /llvm/lib/Object/TapiUniversal.cpp | |
parent | 3b43f006294971b8049d4807110032169780e5b8 (diff) | |
download | llvm-c5d012341e58bf5e4300024a7e4f4e509c08463f.zip llvm-c5d012341e58bf5e4300024a7e4f4e509c08463f.tar.gz llvm-c5d012341e58bf5e4300024a7e4f4e509c08463f.tar.bz2 |
[WebAssembly] Make BR_TABLE non-duplicable
Summary:
After their range checks were removed in 7f50c15be5c0, br_tables
started being duplicated into their predecessors by tail
folding. Unfortunately, when the br_tables were in loops this
transformation introduced bad irreducible control flow which was later
expanded into even more br_tables. This commit abuses the
`isNotDuplicable` property to prevent this irreducible control flow
from being introduced. This change saves a few dozen bytes of code
size and has a negligible affect on performance for most of the large
Emscripten benchmarks, but can improve performance significantly on
microbenchmarks of switches in loops.
Reviewers: aheejin, dschuff
Subscribers: sbc100, jgravelle-google, hiraditya, sunfish, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D81628
Diffstat (limited to 'llvm/lib/Object/TapiUniversal.cpp')
0 files changed, 0 insertions, 0 deletions