On Thu Sep 10, 2026 at 9:46 AM PDT, Vineet Gupta wrote: > Linked-scalar equality is full-64-bit only. A 32-bit mov from a source > with unknown high bits therefore has to drop the relationship, and a later > narrowing of the source never reaches the destination: > > r6 = ... /* full 64-bit unknown */ > w7 = w6 /* 32-bit zero-extending mov */ > if w6 != 0 goto ... /* not taken: r6's low 32 bits are 0 */ > if w7 == 0 goto ... /* not deduced today */ > > Record a low-32-only link instead: dst shares src's low 32 bits and its > high half is zero. On a later narrowing, sync_linked_regs() rebuilds such > a register from the base rather than copying it, by re-applying the same > zext_32_to_64() the mov used. The reverse direction is skipped: a ->subreg > base knows nothing about a full register's high half.
at the first glance SUBREG_ZEXT is exactly the same as ADD_CONST32 delta == 0. no? Both are unidirectional: w6->id == 1 w7->id == 1, add_const == 32, delta == 0 will zero extend w7. This new SUBREG_ZEXT will do the same. What am I missing?

