diff options
author | Amara Emerson <aemerson@apple.com> | 2020-05-29 12:30:20 -0700 |
---|---|---|
committer | Amara Emerson <aemerson@apple.com> | 2020-06-01 16:00:55 -0700 |
commit | 19ff00dab875d6184618c756df01b57acb908e82 (patch) | |
tree | 2f35a69a2d641eadf9c3c018ebf34e84c1832473 /clang/lib/Frontend/CompilerInvocation.cpp | |
parent | 776708b00bddb01f91b8d44f6853770966d335a5 (diff) | |
download | llvm-19ff00dab875d6184618c756df01b57acb908e82.zip llvm-19ff00dab875d6184618c756df01b57acb908e82.tar.gz llvm-19ff00dab875d6184618c756df01b57acb908e82.tar.bz2 |
[AArch64] Fix CollectLOH creating an AdrpAdd LOH when there's a live used reg
between the two instructions.
If there's a pattern like:
$xA = ADRP foo @PAGE
[some killing use of reg Xb]
$Xb = ADDXri $Xa, 0, @PAGEOFF
CollectLOH would create an AdrpAdd LOH that resulted in the linker optimizing
this sequence into:
$xB = ADR foo
[some killing use of reg $Xb]
... and therefore clobbers the live $Xb register that was used by the
instruction in between.
This was discovered by a GlobalISel patch D78465 which broke up global variable
accesses into two pseudos, which in some cases could be moved apart.
Differential Revision: https://reviews.llvm.org/D80834
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
0 files changed, 0 insertions, 0 deletions