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