[tree-ssa] USE or VUSE bugs?
Daniel Berlin
dberlin@dberlin.org
Mon Apr 28 08:06:00 GMT 2003
On Monday, April 28, 2003, at 12:45 AM, Wei Liu wrote:
> Thank you for Diego and Daniel's help.
>
> Eventually I figured out when I compile it with option
> -fno-strict-aliasing and -ftree-points-to=anderson together,
> it will have
> the problem. So after remove -fno-strict-aliasing, everything looks
> fine
> to me.
-fno-strict-aliasing seems to badly screw the aliasing info.
Watch:
with -fno-strict-aliasing:
# (*T.3)_13 = VDEF <(*T.3)_10
# .GLOBAL_VAR_14 = VDEF <.GLOBAL_VAR_11>;
b.4_12 = &b;
# (*T.3)_16 = VDEF <(*T.3)_13>;
# .GLOBAL_VAR_17 = VDEF <.GLOBAL_VAR_14>;
c.5_15 = &c;
# (*T.3)_18 = VDEF <(*T.3)_16>;
# .GLOBAL_VAR_19 = VDEF <.GLOBAL_VAR_17>;
foo2 (b.4_12, c.5_15);
without it:
# (*T.3)_19 = VDEF <(*T.3)_14>;
# (*b.4)_20 = VDEF <(*b.4)_15>;
# .GLOBAL_VAR_21 = VDEF <.GLOBAL_VAR_17>;
b.4_18 = &b;
# (*T.3)_23 = VDEF <(*T.3)_19>;
# (*b.4)_24 = VDEF <(*b.4)_20>;
# .GLOBAL_VAR_25 = VDEF <.GLOBAL_VAR_21>;
c.5_22 = &c;
# (*T.3)_26 = VDEF <(*T.3)_23>;
# (*b.4)_27 = VDEF <(*b.4)_24>;
# .GLOBAL_VAR_28 = VDEF <.GLOBAL_VAR_25>;
foo2 (b.4_18, c.5_22);
The second is clearly correct, the first, while it looks better (which
is funny, of course, since strict aliasing should give better results),
is wrong.
-fno-strict-aliasing also misses a few clobbered variables in an
earlier call:
-fno-strict-aliasing:
111 # .GLOBAL_VAR_11 = VDEF <.GLOBAL_VAR_3>;
112 # VUSE <(*T.3)_10>;
113 foo1 (T.3_9);
strict aliasing:
# .GLOBAL_VAR_17 = VDEF <.GLOBAL_VAR_3>;
116 # VUSE <(*T.3)_14>;
117 # VUSE <(*b.4)_15>;
118 # VUSE <(*in)_16>;
119 foo1 (T.3_13);
This all is the exact opposite of what one expects in terms of
"quality" of aliasing (which is why i started to assume something is
broken).
This is all without using tree PTA at all
Besides that, i'll note if you had the source to foo2 (or whatever the
function was named that you were passing &b and &c to) and made it
static, you can use -ftree-points-to=andersen and -funit-at-a-time, and
it should be able to figure out what's going on (-funit-at-a-time
enables interprocedural points-to analysis for static functions).
I just noticed a bug in querying PTA before we've created the alias
variables, i'll fix it (it's just moving the code a few lines up in
tree-dfa.) after my final tomorrow.
>
> I'm still not sure why using these two flags together may cause
> problems.
> If these two can not be used together, it would be nice if the compile
> can
> throw out a warning or error info.
>
I think -fno-strict-aliasing is currently very borked, unless i've
missed something.
> thanks.
>
> Wei
>
> On Sun, 27 Apr 2003, Diego Novillo wrote:
>
>> On Sun, Apr 27, 2003 at 09:59:39PM -0500, Wei Liu wrote:
>>
>>> Any suggestions are greatly appreciated. Thanks.
>>>
>> Compile with -fdump-tree-all-vops-alias and check the .c.t09.ssa
>> file. 'b' and 'c' are aliased by 'b.4' and '*T.3' (yes, our
>> aliasing code is rather lame).
>>
>>
>> Diego.
>>
>
>
More information about the Gcc
mailing list