The constructor for java.lang.Object does nothing. Its probably a reasonable assumption that it will always do nothing, so, we should change the compiler to not generate calls to it when generating native code. This would save 1 call for every "new" operation, and also improve the number of inlining opportunities available to the compiler, as many constructor calls could now be fully inlined. One way to do this might be to extend the java "builtins" mechanism to allow us to turn other well known calls, not just Math.* calls, into inlined trees. If we see a java.lang.Object() call, check_for_builtin() would just return an empty statement tree.
Confirmed. But I should note that even the Sun's javac does not do this optimization so ...
pinskia: bytecode compilation is a different story. Obviously we should only do this when compiling to _native_ code. We know our java.lang.Object constructor doesn't do anything, but we can't make that assumption about other implementations.
Man this is a semi hard problem, I could figure out where the call expression is built but we patch it up which makes it harder (maybe we should pass a pointer to the tree which we patch up and then change it to a nop).
Closing as won't fix as the Java front-end has been removed from the trunk.