On Wed, Sep 18, 2019 at 8:54 AM Richard Sandiford <richard.sandif...@arm.com> wrote: > > CONSTANT lattice values are symbolic constants rather than > compile-time constants, so among other things can be POLY_INT_CSTs. > This patch fixes a case in which we assumed all CONSTANTs were either > ADDR_EXPRs or INTEGER_CSTs. > > This is tested by later SVE patches. > > Tested on aarch64-linux-gnu with SVE (with and without follow-on > patches) and x86_64-linux-gnu. OK to install?
OK. Richard. > Richard > > > 2019-09-18 Richard Sandiford <richard.sandif...@arm.com> > > gcc/ > * tree-ssa-ccp.c (get_value_for_expr): Check whether CONSTANTs > are INTEGER_CSTs. > > Index: gcc/tree-ssa-ccp.c > =================================================================== > --- gcc/tree-ssa-ccp.c 2019-08-21 14:58:05.999057076 +0100 > +++ gcc/tree-ssa-ccp.c 2019-09-18 07:53:36.930481545 +0100 > @@ -615,9 +615,17 @@ get_value_for_expr (tree expr, bool for_ > val.mask = -1; > } > if (for_bits_p > - && val.lattice_val == CONSTANT > - && TREE_CODE (val.value) == ADDR_EXPR) > - val = get_value_from_alignment (val.value); > + && val.lattice_val == CONSTANT) > + { > + if (TREE_CODE (val.value) == ADDR_EXPR) > + val = get_value_from_alignment (val.value); > + else if (TREE_CODE (val.value) != INTEGER_CST) > + { > + val.lattice_val = VARYING; > + val.value = NULL_TREE; > + val.mask = -1; > + } > + } > /* Fall back to a copy value. */ > if (!for_bits_p > && val.lattice_val == VARYING