On 01/20/2016 05:03 PM, Jakub Jelinek wrote:
Hi!

Among the __int20 changes was one that made get_ref_base_and_extent behave
differently from similar get_inner_reference, e.g. for XFmode long double
or structures containing just a single long double member,
get_ref_base_and_extent now returns on x86 80 instead of 96 or 128 which
the type spans in memory.  For a function that returns the extent IMHO
the bitsize is right, it also seems to allow SRA from scalarizing such
accesses (which it doesn't otherwise), and on the testcase below also
triggers some SRA bug that causes even wrong-code.  Martin said he will have
a look at SRA, but this patch will make that bug just latent issue.
DJ said his msp430 testing didn't reveal anything that would need the
precision there in this case (at least that is how I understood it).

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2016-01-21  Jakub Jelinek  <ja...@redhat.com>

        PR c++/69355
        * tree-dfa.c (get_ref_base_and_extent): Use GET_MODE_BITSIZE (mode)
        for bitsize instead of GET_MODE_PRECISION (mode).

        * g++.dg/torture/pr69355.C: New test.
Wasn't this discussed in IRC and approved there? Isn't this patch just making get_ref_base_and_extent consistent with get_inner_reference, right? If so, approved.

Jeff

Reply via email to