[PATCH] D156345: RegisterCoalescer: Add implicit-def of super register when coalescing SUBREG_TO_REG
Matt Arsenault via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 12 07:57:42 PDT 2023
arsenm added inline comments.
================
Comment at: llvm/lib/CodeGen/RegisterCoalescer.cpp:2163
+ if (CP.getDstIdx()) {
+ assert(!IsSubregToReg && "can this happen?");
+ updateRegDefsUses(CP.getDstReg(), CP.getDstReg(), CP.getDstIdx(), false);
----------------
arsenm wrote:
> arsenm wrote:
> > arsenm wrote:
> > > qcolombet wrote:
> > > > qcolombet wrote:
> > > > > Maybe it can happen if you have something like:
> > > > > ```
> > > > > %a = SUBREG_TO_REG ...
> > > > > %b = IMPLICIT_DEF
> > > > > %c = INSERT_SUBREG %b, %a, sub
> > > > > ```
> > > > > =>
> > > > > ```
> > > > > %a = SUBREG_TO_REG ...
> > > > > %c.sub = COPY %a
> > > > > ```
> > > > > =>
> > > > > ```
> > > > > %c.sub = SUBREG_TO_REG ...
> > > > > ```
> > > > Ditto on the can this happen.
> > > > Did you give a try to the example I gave?
> > > If I force subregister liveness on ninja check does find the failures.
> > >
> > > Also the baseline ninja check with verify-coalescing forced on isn't clean :(
> > This does hit the assert / verifier error, so I'll push it somewhere
> >
> > ```
> >
> > # RUN: llc -mtriple=x86_64-- -run-pass=register-coalescer -enable-subreg-liveness -o - %s
> > ---
> > name: test
> > tracksRegLiveness: true
> > body: |
> > bb.0:
> > liveins: $eax
> > %init_eax:gr32 = COPY $eax
> > %a:gr64 = SUBREG_TO_REG 0, %init_eax, %subreg.sub_32bit
> > %b:gr32 = IMPLICIT_DEF
> > %c:gr64 = INSERT_SUBREG %a, %b, %subreg.sub_32bit
> > JCC_1 %bb.2, 4, implicit undef $eflags
> >
> > bb.1:
> > %imm0:gr32 = MOV32r0 implicit-def dead $eflags
> > %a = SUBREG_TO_REG 0, %imm0, %subreg.sub_32bit
> > %c.sub_32bit = COPY %a
> >
> > bb.2:
> > %c.sub_32bit = SUBREG_TO_REG %a, %b, %subreg.sub_32bit
> > RET 0, implicit %c
> >
> > ...
> >
> > ```
> For some reason this failure only manifests further up the stack of patches
Oh, it's because this required hacking in enabling subreg liveness for x86. The flag apparently doesn't override the lack of implementation of the target hook
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D156345/new/
https://reviews.llvm.org/D156345
More information about the llvm-commits
mailing list