https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104049
--- Comment #8 from Tamar Christina <tnfchris at gcc dot gnu.org> --- (In reply to Andrew Pinski from comment #7) > Hmm, > ;; _43 = .REDUC_PLUS (vect__7.11_47); > > (insn 23 22 24 (set (reg:V4SI 112) > (unspec:V4SI [ > (reg:V4SI 103 [ vect__7.11 ]) > ] UNSPEC_ADDV)) -1 > (nil)) > > (insn 24 23 0 (set (reg:SI 102 [ _43 ]) > (vec_select:SI (reg:V4SI 112) > (parallel [ > (const_int 0 [0]) > ]))) -1 > (nil)) > > Could we just represent REDUC_PLUS as: > > (insn 23 22 24 (set (reg:SI 112) > (unspec:SI [ > (reg:V4SI 103 [ vect__7.11 ]) > ] UNSPEC_ADDV_1)) -1 > (nil)) > > And then I don't think we will have the issue with the vec_select and subreg > really. Hmm that does look like the RTL in the optab is wrong, The V2F optab is right but the one with the mode iterator looks wrong.. I'll give it a shot.