On Mon, Nov 7, 2011 at 5:07 PM, Jeff Law <[email protected]> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
>
>>
>> I also wonder if instead of a new pass control-dependent DCE can be
>> taught of this?
> It could. I'm not sure it really buys us anything except maybe being
> able to reuse the pdom & control-dependency analysis.
>
> It actually more naturally belongs in cprop because it's cprop that
> exposes NULL pointers in useful ways (in memory dereferences and as
> PHI args).
Heh, indeed, that as well. I suppose every pass that handles
unexecutable edges in some way might benefit from this. Like for
if (i)
j_1 = 1;
else
{
j_2 = 2;
*0 = ...;
}
j_3 = PHI <j_1, j_2>
we could CCP j_1 = 1 to j_3 ...
Even without actually removing the edge and the trapping stmt.
For DCE the most interesting part would be to end the block at
the point of the trap - thus - replace the store with a __builtin_trap ()
which then trivially makes all code w/o side-effects on the path
dead.
Richard.
>
>
>
> At least I presume that this code removal can
>> expose DCE opportunities and DCE can expose these code removal
>> opportunities?
> In theory, yes. However, because we find & remove the edge upon which
> the memory reference is control dependent upon, what we really expose
> is unreachable code. Hence the CFG cleanup pass.
>
> Secondary effects I've witnessed are more block merging exposed due to
> CFG simplifications and further const/copy propagation exposed by edge
> removal at the point where unexecutable & executable paths meet.
>
> It's not hard to imagine how this could lead to additional DCE
> opportunities and other optimizations, I just haven't looked for them
> or noticed them. The valgrind results are a good indication that
> we're picking up good secondary optimizations.
>
> I don't think DCE will often lead to new opportunities for this code,
> it could happen, but I'd expect it to be the exception rather than the
> norm.
>
> FWIW, the location of the pass right now sits just after DOM1 so a
> goodly amount of constant propagation is already done, but we still
> get a chance to pick up the secondary optimization opportunities in
> DOM2. The pass also sits between two DCE passes, so if DCE is
> exposing opportunities for this pass, we get them and if this pass is
> exposing opportunities for DCE, we get them too :-)
>
>
>
>>
>> Did you consider simplifying the code by simply relying on
>> points-to analysis? Thus for the dereferenced SSA name check
>>
>> pi = SSA_NAME_PTR_INFO (name); if (pi && pt_solution_empty_p
>> (&pi->pt))
> Nope. I guess it could be added, though it's often important to know
> the origin of the NULL pointer.
>
> p5 = PHI (p4 (1), 0 (0))
> ...
> if (cond)
> goto X
> else
> goto Y
>
> X:
> foo (P5)
> goto Z
> Y:
> *p5 = <value>
> Z:
>
>
> Analysis will mark P5 is being potentially NULL, but it would
> incorrect to remove the edge corresponding to the NULL PHI arguement
> as traversing that edge does not guarantee we will dereference the
> NULL pointer.
>
> The most interesting answer from PTA would be things like this pointer
> must be NULL, but if that's true, then it should have been propagated
> to the use sites already.
>
>> ...
>>
>> ? I once implemented a warning to warn about such derefrences, but
>> it (of course ...) triggers for all the unexecutable code paths...
> Yup. The one I've got here looks like a traditional propagation
> engine. There's knobs on it to tweak how it handles loads from
> memory, call return values, etc. Utilizing PTA would certainly help.
> I'll put that on the TODO list. I would have liked to have it
> polished in time for GCC 4.7, but other events got in the way.
>
> Jeff
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.11 (GNU/Linux)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
>
> iQEcBAEBAgAGBQJOuAJbAAoJEBRtltQi2kC7cA4H/jrPusXwvf0ECDh5MP/hNcna
> R+zHWQPVOsPsyZkJCEuGqBkLT0+2ar0fS0uiqcXrZelY+TqAw0geg5t60w4lHF9p
> 9ERDqsBExVZW0X2VdnTZrYyfyB/fOc9xIizp/KxDWV33i7CwDFOyYR7QwXZnAMcp
> 7lpdzzxRbFaq05kj9K2aFtt8X/N7+Gn7dsI7kTLexmU2T+rXEF8P/HEqNefz70tV
> t23W9V81cbZDP9g9LhJzrMfQrylI/lSk+Nve10aBal0EVPi5IzWAvxfL5uxD3G4l
> sxOuH9bD7dNGDdJI1JnFxz56Z4DNI/0ARHM/RsZDbcAFUm8FG/DIzitBPslFegY=
> =24NO
> -----END PGP SIGNATURE-----
>