On Mon, Nov 7, 2011 at 5:07 PM, Jeff Law <l...@redhat.com> 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----- >