[all-commits] [llvm/llvm-project] a07c08: [WebAssembly] Lower llvm.debugtrap properly
Thomas Lively via All-commits
all-commits at lists.llvm.org
Thu Jun 4 13:25:32 PDT 2020
Branch: refs/heads/master
Home: https://github.com/llvm/llvm-project
Commit: a07c08f74fafcbf196cda4b20f0761538fca3dbe
https://github.com/llvm/llvm-project/commit/a07c08f74fafcbf196cda4b20f0761538fca3dbe
Author: Thomas Lively <tlively at google.com>
Date: 2020-06-04 (Thu, 04 Jun 2020)
Changed paths:
M llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp
M llvm/lib/Target/WebAssembly/WebAssemblyInstrControl.td
A llvm/test/CodeGen/WebAssembly/debugtrap.ll
Log Message:
-----------
[WebAssembly] Lower llvm.debugtrap properly
Summary:
Unlike normal traps, debug traps are allowed to return and can have
additional instructions in the same basic block. Without explicit
backend support for debug traps, they are lowered in ISel as normal
traps. Since normal traps are lowered in the WebAssembly backend to
the UNREACHABLE instruction, which is a terminator, using debug traps
could lead to invalid MBBs when there are additional instructions
after the trap. This patch fixes the issue by lowering debug traps to
a new version of the UNREACHABLE instruction, DEBUG_UNREACHABLE, that
is not a terminator.
An alternative approach would have been to make UNREACHABLE not a
terminator, but that breaks a large number of tests. In particular, it
would require removing the traps inserted after noreturn calls to
@llvm.wasm.throw because otherwise the terminator throw would be
followed by a non-terminator UNREACHABLE and we would be back to
having invalid MBBs. Overall the approach in this patch seems simpler.
Reviewers: aheejin, dschuff
Subscribers: sbc100, jgravelle-google, hiraditya, sunfish, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D81055
More information about the All-commits
mailing list