aboutsummaryrefslogtreecommitdiff
path: root/flang/lib/Frontend/CompilerInvocation.cpp
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2023-07-24 15:59:04 -0400
committerMatt Arsenault <arsenm2@gmail.com>2023-10-02 13:57:09 +0300
commit414ff812d6241b728754ce562081419e7fc091eb (patch)
treeb1dc57147ff84a4ec458946285c7090cf47d8b19 /flang/lib/Frontend/CompilerInvocation.cpp
parentf906fd53b5ce12f07aec394ddf900c7f9f583405 (diff)
downloadllvm-414ff812d6241b728754ce562081419e7fc091eb.zip
llvm-414ff812d6241b728754ce562081419e7fc091eb.tar.gz
llvm-414ff812d6241b728754ce562081419e7fc091eb.tar.bz2
RegisterCoalescer: Add implicit-def of super register when coalescing SUBREG_TO_REG
Currently coalescing with SUBREG_TO_REG introduces an invisible load bearing undef. There is liveness for the super register not represented in the MIR. This is part 1 of a fix for regressions that appeared after b7836d856206ec39509d42529f958c920368166b. The allocator started recognizing undef-def subregister MOVs as copies. Since there was no representation for the dependency on the high bits, different undef segments of the super register ended up disconnected and downstream users ended up observing different undefs than they did previously. This does not yet fix the regression. The isCopyInstr handling needs to start handling implicit-defs on any instruction. I wanted to include an end to end IR test since the actual failure only appeared with an interaction between the coalescer and the allocator. It's a bit bigger than I'd like but I'm having a bit of trouble reducing it to something which definitely shows a diff that's meaningful. The same problem likely exists everywhere trying to do anything with SUBREG_TO_REG. I don't understand how this managed to be broken for so long. This needs to be applied to the release branch. https://reviews.llvm.org/D156345
Diffstat (limited to 'flang/lib/Frontend/CompilerInvocation.cpp')
0 files changed, 0 insertions, 0 deletions