On 03/07/18 12:45, Richard Biener wrote:
On Tue, Jul 3, 2018 at 1:38 PM Andrew Stubbs <andrew_stu...@mentor.com> wrote:

On 03/07/18 12:30, Richard Biener wrote:
Hmm, so they're safe, but may prevent the optimization of nearby variables?

Yes, they prevent earlier stores into lanes that are "really" written
to to be DSEd.

Right, but I have unrelated variables allocated to the stack within the
"shadow" of the masked vector. I didn't ask it to do that, it just does,
so I presume this is an expect feature of masked vectors with a known mask.

Huh, I don't think so.  I guess that's the real error and I wonder how
that happens.
Are those just spills or real allocations?

The code from the testcase looks like this:

    struct rtattr rt[2];
    struct rtattr *rta[14];
    int i;

    rt[0].rta_len = sizeof (struct rtattr) + 8;
    rt[0].rta_type = 0;
    rt[1] = rt[0];
    for (i = 0; i < 14; i++)
      rta[i] = &rt[0];

The initialization of rt[0] and rt[1] are being deleted because the write to rta[0..13] would overwrite rt if it had actually been the maximum rta[0..63].

That, or I've been staring at dumps too long and gone crazy.

Andrew

P.S. I'm trying to test with (match_dup 0), but LRA exploded.

Reply via email to