diff options
| author | Nick Desaulniers <ndesaulniers@google.com> | 2023-04-27 13:39:54 -0700 |
|---|---|---|
| committer | Nick Desaulniers <ndesaulniers@google.com> | 2023-04-27 13:40:00 -0700 |
| commit | 012ea747ed0275c499f69c82ac0f635f4c76f746 (patch) | |
| tree | 01f195591b5690bb04daec6f045c957c67ebce11 /llvm/lib/ProfileData/Coverage/CoverageMapping.cpp | |
| parent | 095a0c67bb5705b2ebd91ecc039e73bbd6982cee (diff) | |
| download | llvm-012ea747ed0275c499f69c82ac0f635f4c76f746.zip llvm-012ea747ed0275c499f69c82ac0f635f4c76f746.tar.gz llvm-012ea747ed0275c499f69c82ac0f635f4c76f746.tar.bz2 | |
[CodeGen][MachineLastInstrsCleanup] fix INLINEASM_BR hazard
If the removable definition resides in an INLINEASM_BR target, the
reuseable candidate might not dominate the INLINEASM_BR.
bb0:
INLINEASM_BR &"" %bb.1
renamable $x8 = MOVi64imm 29273397577910035
B %bb.2
...
bb1:
renamable $x8 = MOVi64imm 29273397577910035
renamable $x8 = ADDXri killed renamable $x8, 2048, 0
bb2:
Removing the second mov is a hazard when the inline asm branches to bb1.
Skip such replacements when the to be removed instruction is in the
target of such an INLINEASM_BR instruction.
We could get more aggressive about this in the future, but for now
simply abort.
This is causing a boot failure on linux-4.19.y branches of the LTS Linux
kernel for ARCH=arm64 with CONFIG_RANDOMIZE_BASE=y (KASLR) and
CONFIG_UNMAP_KERNEL_AT_EL0=y (KPTI).
Link: https://reviews.llvm.org/D123394
Link: https://github.com/ClangBuiltLinux/linux/issues/1837
Thanks to @nathanchance for the report, and @ardb for debugging.
Reviewed By: efriedma
Differential Revision: https://reviews.llvm.org/D149191
Diffstat (limited to 'llvm/lib/ProfileData/Coverage/CoverageMapping.cpp')
0 files changed, 0 insertions, 0 deletions
