[Bug tree-optimization/93231] [10 Regression] ICEs since r280132

jakub at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Jan 13 12:26:00 GMT 2020


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93231

--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
(In reply to Wilco from comment #4)
> I guess TREE_INT_CST_LOW should fix that. The goal is to support signed and
> unsigned types.

Maybe.  Though, perhaps you want to zero extend the constant from the type's
precision to HOST_BITS_PER_WIDE_INT too.

> I'm adding an extra tree_fits_uhwi for that.

Ok.

> I'll check but I think this check is no longer required.

I guess it wouldn't work if the constants are 64-bit, because then tree_to_shwi
might not work for them.

> I can add a generic testcase as well.

Great.

> > And I don't see a check that if it is a STRING_CST, the array elements must be 
> > bytes and not wider, which the function assumes (e.g. if it is u"..."[(x & -x) > * ...) >> 27]).
> 
> Right now "abc"[] can't match - the constructor always returns an error for
> this case. And this doesn't seem a common idiom so adding support isn't
> useful.

But you do have check_ctz_string, so let's talk about const type var[] =
u"abcd"; or const type var[] = "defg";
I was just lazy to construct an u"\x...\x...\x......" string that would trigger
with check_ctz_string reading it as by array, when at runtime it would actually
be treated as short array etc.

For the non-zero stuff, perhaps you could if (tree_expr_nonzero_p (res_ops[0]))
{ zero_ok = true; zeroval = 0; ctzval = 0; } or so, because if x is not zero,
then you don't need to bother with it, don't need to & mask at the end or punt
etc.


More information about the Gcc-bugs mailing list