aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/AssignmentTrackingAnalysis.cpp
diff options
context:
space:
mode:
authorIgor Kudrin <ikudrin@accesssoftek.com>2024-07-03 05:36:02 +0700
committerGitHub <noreply@github.com>2024-07-02 15:36:02 -0700
commit23db37c51cd3dcdcf069345aa7fab7d84b6f6f6e (patch)
tree8cc96c58804627ce7faaecb5d54e92ebeaed81c1 /llvm/lib/CodeGen/AssignmentTrackingAnalysis.cpp
parent60d4a3517610494e5b2ef6bf347cdc71a6a979e5 (diff)
downloadllvm-23db37c51cd3dcdcf069345aa7fab7d84b6f6f6e.zip
llvm-23db37c51cd3dcdcf069345aa7fab7d84b6f6f6e.tar.gz
llvm-23db37c51cd3dcdcf069345aa7fab7d84b6f6f6e.tar.bz2
[CodeGen] Do not emit TRAP for `unreachable` after `@llvm.trap` (#94570)
With `--trap-unreachable`, `clang` can emit double `TRAP` instructions for code that contains a call to `__builtin_trap()`: ``` > cat test.c void test() { __builtin_trap(); } > clang test.c --target=x86_64 -mllvm --trap-unreachable -O1 -S -o - ... test: ... ud2 ud2 ... ``` `SimplifyCFGPass` inserts `unreachable` after a call to a `noreturn` function, and later this instruction causes `TRAP/G_TRAP` to be emitted in `SelectionDAGBuilder::visitUnreachable()` or `IRTranslator::translateUnreachable()` if `TargetOptions.TrapUnreachable` is set. The patch checks the instruction before `unreachable` and avoids inserting an additional trap.
Diffstat (limited to 'llvm/lib/CodeGen/AssignmentTrackingAnalysis.cpp')
0 files changed, 0 insertions, 0 deletions