We currently always emit profiling hooks, even when we are not profiling. This adds unnecessary branches to function calls and returns. The solution is to regenerate code when profiling is enabled. Geoff has already done some preliminary work in this direction in bug 21281.
Removing all branches (both the profiling branch and the activation / 'arguments' branch) from op_ret is at least a 4.3% speedup on Richards and a 1.0% speedup on DeltaBlue.
*** This bug has been marked as a duplicate of 21735 ***