Null pointer check elimination
Diego Novillo
dnovillo@redhat.com
Sat Nov 12 20:33:00 GMT 2005
On Saturday 12 November 2005 14:35, Per Bothner wrote:
> The internal SSA form might be something like:
>> foo()
> {
> if (test)
> {
> int __attribute__((never_null)) *p_1 =
> this_never_returns_NULL(); < ... use p without modifying it ... > <--
> p_1 never NULL here. }
> else
> {
> int *p_2 = other_fn ();
> < ... use p without modifying it ... > <-- p_2 may be NULL here.
> }
> int *p_3 = PHI(p_1, p_2);
> ... more uses of p ...;
> }
>Well, I am not an FE person, so I don't much care how you convey the
information into the optimizers.
From a user's perspective I see the obvious drawback that you've just
forced me to edit a potentially large number of source files just to add
the __attribute__((never_null)). The other approach just needs a single
__attribute__ in the function declaration.
Another problem I would have as a user is if you suddenly make 'int *' and
'int * __attribute__((non_null))' different/incompatible types. If I have
a function that takes 'int *' as argument, I don't want to start adding
tons of type casts to get around compiler warnings/errors.
>From an optimizer perspective, I fail to see how would your approach give
me better information inside VRP. But since your approach seems to give
me the same information, I don't much care how the FE implements this. If
you decide to have type attributes, I'll use it. If you mark the
function, I'll use it with the same effect.
More information about the Java
mailing list