aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/ProfileData/Coverage/CoverageMapping.cpp
diff options
context:
space:
mode:
authorNick Desaulniers <ndesaulniers@google.com>2023-04-27 13:39:54 -0700
committerNick Desaulniers <ndesaulniers@google.com>2023-04-27 13:40:00 -0700
commit012ea747ed0275c499f69c82ac0f635f4c76f746 (patch)
tree01f195591b5690bb04daec6f045c957c67ebce11 /llvm/lib/ProfileData/Coverage/CoverageMapping.cpp
parent095a0c67bb5705b2ebd91ecc039e73bbd6982cee (diff)
downloadllvm-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