<div dir="ltr">I am having a really difficult time with subregister related issues when I turn<br>on subregister liveness tracking.<br><br>Before RA:<br><span style="font-family:monospace">79760B    %2216:vsrc = LXVDSX %5551:g8rc_and_g8rc_nox0, %2215:g8rc :: (load 8 from %ir.scevgep1857.cast, !alias.scope !92, !noalias !93)<br>79872B    %2225:vsrprc = LXVP 352, %661:g8rc_and_g8rc_nox0<br>84328B    %5540:vsrc = contract nofpexcept XVMADDADP %5540:vsrc(tied-def 0), %2225.sub_vsx0:vsrprc, %2216:vsrc, implicit $rm<br></span><br>After RA (greedy):<br><span style="font-family:monospace">79744B    %2214:vsrc = LXVDSX %5551:g8rc_and_g8rc_nox0, %6477:g8rc :: (load 8 from %ir.scevgep1860.cast, !alias.scope !92, !noalias !93)<br>79872B    %7503:vsrprc = LXVP 352, %661:g8rc_and_g8rc_nox0<br>80248B    %7527:vsrprc = COPY %7503:vsrprc<br>80988B    undef %7526.sub_64:vsrprc = COPY %7527.sub_64:vsrprc<br>84324B    undef %7501.sub_64:vsrprc = COPY %7526.sub_64:vsrprc<br>84328B    %5546:vsrc = contract nofpexcept XVMADDADP %5546:vsrc(tied-def 0), %7501.sub_vsx0:vsrprc, %2214:vsrc, implicit $rm<br></span><br>Subregister definitions for PPC:<br><span style="font-family:monospace">def sub_64 : SubRegIndex<64>;<br>def sub_vsx0 : SubRegIndex<128>;<br>def sub_vsx1 : SubRegIndex<128, 128>;<br>def sub_pair0 : SubRegIndex<256>;<br>def sub_pair1 : SubRegIndex<256, 256>;<br></span><br>So the instruction at 84328B uses the full register %2216 and the high order<br>128 bits of (256-bit) register %2225. However, the register allocator splits<br>the live range and introduces a copy of the high order 64 bits of that 256-bit<br>register, then another copy of that copy and rewrites the use in instruction<br>84328B to that copy. The copy is marked undef so the register allocator<br>assigns just some random register to the use of that copy in 84328B.<br><br>Or maybe I am completely misinterpreting the meaning of the debug dumps<br>from the register allocator.<br><br>This appears to be related to lane masks and dead lane detection although<br>I don't see dead lane detection marking anything unexpected as undef (seems<br><div>to just be INSERT_SUBREG and PHI).</div><div><br></div><div>If anyone has suggestions on what might be the issue and/or how to go about figuring this out and fixing it, I would really appreciate it.</div><div><br></div><div>Nemanja<br></div></div>