Some of these perform strength reduction and rematerialization, the latter of which reduce calls to memory.  
Delayed load scheduling is a variant on the Sethi-Ullman algorithm frequently used in simple implementations of one of their stages.  One of these called ROSE produces a higher level output than usual, and up to three different systems are employed in the Canadian Cross version of one of these.  Some of these perform strength reduction and rematerialization, the latter of which reduce calls to memory.  Simpler ones execute in a single pass, and common optimizations in them include loop unrolling.  Their traditional first step outputs a series of identifiers such as "Keyword" or "Integer" that are called tokens; that is the lexical analysis step.  Self-hosting ones of these are called bootstrappers.  Typically not performed by interpreted languages like Perl, Java uses a just-in-time one.  For 10 points, name this operation that turns source code into a machine readable target language.
Delayed load scheduling is a variant on the Sethi-Ullman algorithm frequently used in simple implementations of one of their stages.  
Compiler [or Compilation; accept Code Generation before "ROSE"]