question on verify_ssa failure due to ccp in dom3 (PR30784)

Richard Guenther richard.guenther@gmail.com
Wed Mar 14 14:06:00 GMT 2007


On 3/14/07, Dorit Nuzman <DORIT@il.ibm.com> wrote:
>
> Hi,
>
> We have a '{2,2}' expression (vector initializer) propagated by dom into a
> BIT_FIELD_REF:
>
> before (bug.c.105t.vrp2):
>
>       vector long int vect_cst_.47;
>       vect_cst_.47_66 = {2, 2};
>       D.2103_79 = BIT_FIELD_REF <vect_cst_.47_66, 64, 0>;
>
> after (bug.c.106t.dom3):
>       "
>       Optimizing block #7
>
>       Optimizing statement <L0>:;
>       Optimizing statement D.2102_78 = BIT_FIELD_REF <vect_vec_iv_.48_67,
> 64, 0>;
>       Optimizing statement D.2103_79 = BIT_FIELD_REF <vect_cst_.47_66, 64,
> 0>;
>       Replaced 'vect_cst_.47_66' with constant '{2, 2}'
>       "
>
>       D.2103_79 = BIT_FIELD_REF <{2, 2}, 64, 0>;
>
>
> ...which causes he following ICE:
> "
>    bug.c:8: error: invalid reference prefix
>    {2, 2}
>    bug.c:8: internal compiler error: verify_stmts failed
> "
>
> Several testcases are available in the bugzilla report (PR30784).
>
> So, the question is - what needs to be fixed - is it copy propagation that
> allows propagating the initializer into a BIT_FIELD_REF? or vect_lower pass
> that creates these BIT_FIELD_REFs after vectorization?

I think the BIT_FIELD_REF should be properly folded to a constant or
the propagation
not done.  fold_stmt_inplace is the candidate to look at,
propagate_rhs_into_lhs in
tree-ssa-dom.c to reject propagation into BIT_FIELD_REF.  fold_ternary should be
able to fold the BIT_FIELD_REF in question, it would be interesting to
know why it
doesn't.

Richard.



More information about the Gcc mailing list