diff options
author | Igor Kudrin <ikudrin@accesssoftek.com> | 2024-07-03 05:36:02 +0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-07-02 15:36:02 -0700 |
commit | 23db37c51cd3dcdcf069345aa7fab7d84b6f6f6e (patch) | |
tree | 8cc96c58804627ce7faaecb5d54e92ebeaed81c1 /llvm/lib/CodeGen/AssignmentTrackingAnalysis.cpp | |
parent | 60d4a3517610494e5b2ef6bf347cdc71a6a979e5 (diff) | |
download | llvm-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