https://gcc.gnu.org/bugzilla/show_bug.cgi?id=127454
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jamborm at gcc dot gnu.org
Priority|P3 |P2
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
We have
<bb 2> [local count: 1073741824]:
sp$refaulted_56 = .DEFERRED_INIT (8, 2, &"sp"[0]);
pv$refaulted_8 = .DEFERRED_INIT (8, 2, &"pv"[0]);
...
<bb 8> [local count: 1073741824]:
# iftmp.0_38 = PHI <_87(7), 1(14)>
sp$16_7 = .DEFERRED_INIT (4, 2, &"sp"[0]);
sp = .DEFERRED_INIT (24, 2, &"sp"[0]);
pv$16_119 = .DEFERRED_INIT (4, 2, &"pv"[0]);
pv = .DEFERRED_INIT (24, 2, &"pv"[0]);
MEM <long unsigned int> [(void *)&sp] = sp$refaulted_56;
MEM <long unsigned int> [(void *)&sp + 8B] = sp$refaulted_56;
MEM <int> [(void *)&sp + 16B] = sp$16_7;
read_ctrl_pos (lruvec_2(D), iftmp.0_38, 0, 0, 2, &sp);
so that's clearly stored uninitialized. But as the bisect suggests
it might be SRA introducing re-materialization before the read_ctrl_pos ()
call, and instead of opting to _not_ initialize the .DEFERRED_INIT-ialized
members it does it the way it does:
+ sp_24 = .DEFERRED_INIT (8, 2, &"sp"[0]);
+ sp$8_16 = .DEFERRED_INIT (8, 2, &"sp"[0]);
+ sp$16_7 = .DEFERRED_INIT (4, 2, &"sp"[0]);
sp = .DEFERRED_INIT (24, 2, &"sp"[0]);
...
+ MEM <long unsigned int> [(void *)&sp] = sp_24;
+ MEM <long unsigned int> [(void *)&sp + 8B] = sp$8_16;
+ MEM <int> [(void *)&sp + 16B] = sp$16_7;
read_ctrl_pos (lruvec_2(D), iftmp.0_38, 0, 0, 2, &sp);