Diego Novillo wrote:
[ Apologies if this comes out twice.  I posted this message last week,
   but I think it was rejected because of a .pdf attachment. ]

We have been bouncing ideas for a new mechanism to describe the behavior
of function calls so that optimizers can be more aggressive at call
sites.  Currently, GCC supports the notion of pure/impure,
const/non-const, but that is not enough for various cases.

The main application for this would be stable library code like libc,
that the compiler generally doesn't get to process.

David sketched up the initial idea and we have been adding to it for the
last few weeks.  At this point, we have the initial design ideas and
some thoughts on how we would implement it, but we have not started any
actual implementation work.

The main idea is to add a variety of attributes to describe contracts
for function calls.  When the optimizers read in the function
declaration, they can take advantage of the attributes and adjust the
clobbering effects of call sites.

We are interested in feedback on the main idea and possible
implementation effort.  We would like to discuss this further at the
Summit, perhaps we can organize a BoF or just get folks together for a
chat (this came up after the Summit deadline).


Diego,

For the (all important :-)) java front end, it could be useful to have an attribute indicating that a function returns a non-null value. This is the case for the new operator which throws on allocation failures. Having this would allow VRP to eliminate a good bit of dead code for common java constructs.

See also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24825

Thanks,
David Daney

Reply via email to