https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97456
--- Comment #4 from Martin Jambor <jamborm at gcc dot gnu.org> ---
Looking at Martin's reduced testcase....
(In reply to Richard Biener from comment #2)
> Confirmed with -fwhole-program -O3 IPA SRA messes things up here cloning
> wrong
> and producing the strange
>
> wrong.isra (floatD.41 ISRA.85D.75004)
> {
[...]
>
> <bb 6> [local count: 1073741824]:
>
> <bb 2> [local count: 1073741824]:
> _1 = ISRA.85_10(D);
>
> eventually mixing up param/replacement here?
...this is simple conversion of a parameter passed by reference to one
passed by value. I'm good at overlooking things but at least at the
moment I cannot see anything wrong with it.
Rather, I believe it is cplxlower1 which turns
<bb 2> [local count: 1073741824]:
a$_M_value_21 = COMPLEX_EXPR <ISRA.18_10(D), ISRA.18_10(D)>;
into:
<bb 2> [local count: 1073741824]:
a$_M_value_21 = COMPLEX_EXPR <a$_M_value$real_10(D), a$_M_value$real_10(D)>;
i.e. it replaces two uses of the parameter default-def with two
uninitialized value variable default-defs.
When I disable IPA-SRA, the pass starts with:
<bb 2> [local count: 1073741824]:
_1 = *pos_6(D);
a$_M_value_21 = COMPLEX_EXPR <_1, _1>;
and changes it into:
<bb 2> [local count: 1073741824]:
a$_M_value$real_1 = *pos_6(D);
a$_M_value_21 = COMPLEX_EXPR <a$_M_value$real_1, a$_M_value$real_1>;
...so my hypothesis is that cplxlower does not handle good
default-defs properly.