https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126403
Drea Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Component|tree-optimization |middle-end
Blocks| |101926
Status|UNCONFIRMED |NEW
Summary|missed optimization: |float[4] argument passing
|vectorization of simple |and return messes up a lot
|loop |
Last reconfirmed| |2026-07-25
Keywords| |missed-optimization
Ever confirmed|0 |1
Severity|normal |enhancement
--- Comment #1 from Drea Pinski <pinskia at gcc dot gnu.org> ---
It is not a missed vectorization as you can see it via:
vect__1.6_5 = MEM <vector(4) float> [(float *)&a];
vect__2.9_19 = MEM <vector(4) float> [(float *)&b];
vect__3.10_20 = vect__1.6_5 * vect__2.9_19;
MEM <vector(4) float> [(float *)&r] = vect__3.10_20;
D.2979 = r;
r ={v} {CLOBBER(eos)};
return D.2979;
The problem is argument passing and return causes the extra code.
And yes there a few other issues related to argument passing and return values
messing up.
Referenced Bugs:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101926
[Bug 101926] [meta-bug] struct/complex/other argument passing and return should
be improved