On Wed, Apr 05, 2023 at 02:11:08PM +0200, Richard Biener wrote:
> Ok, but maybe there’s a gimple_build overload that meanwhile implements
> the desired semantics?  It would probably need to specify the valueization
> hook to follow SSA edges beyond the sequence we’re currently building.

Jeff has apparently committed the patch in the meantime.
For gimple_build, did you mean to use it just for this fallback case,
or instead of the initial resimplification as well?

> > 2023-04-05  Jakub Jelinek  <ja...@redhat.com>
> > 
> >    PR tree-optimization/109392
> >    * tree-vect-generic.cc (tree_vec_extract): If maybe_push_res_to_seq
> >    fails, build BIT_FIELD_REF insn without trying to simplify it.
> > 
> >    * gcc.dg/pr109392.c: New test.
> > 
> > --- gcc/tree-vect-generic.cc.jj    2023-03-23 10:02:18.997935620 +0100
> > +++ gcc/tree-vect-generic.cc    2023-04-04 14:28:32.977729134 +0200
> > @@ -174,7 +174,16 @@ tree_vec_extract (gimple_stmt_iterator *
> >   opr.resimplify (NULL, follow_all_ssa_edges);
> >   gimple_seq stmts = NULL;
> >   tree res = maybe_push_res_to_seq (&opr, &stmts);
> > -  gcc_assert (res);
> > +  if (!res)
> > +    {
> > +      /* This can happen if SSA_NAME_OCCURS_IN_ABNORMAL_PHI are
> > +     used.  Build BIT_FIELD_REF manually otherwise.  */
> > +      t = build3 (BIT_FIELD_REF, type, t, bitsize, bitpos);
> > +      res = make_ssa_name (type);
> > +      gimple *g = gimple_build_assign (res, t);
> > +      gsi_insert_before (gsi, g, GSI_SAME_STMT);
> > +      return res;
> > +    }
> >   gsi_insert_seq_before (gsi, stmts, GSI_SAME_STMT);
> >   return res;
> > }

        Jakub

Reply via email to