1. A method for processing software code, comprising: receiving an intermediate representation of a source code, the intermediate representation generated at least in part by compiling the source code without identifying a safepoint; performing one or more optimizations on the intermediate code; identifying, subsequent to performing the one or more optimizations, one more safepoints in the optimized intermediate representation, wherein the safepoints are execution points at which garbage collection operations can be performed correctly; inserting safepoint related code associated with the safepoint into the optimized intermediate representation; and generating machine code based upon the optimized intermediate representation subsequent to inserting the safepoint related code.