dropModule instead of deprecated stripModuleSuffix
Level 1 intra-method optimiz: ConstantFolder

Intra-method optimizations are performed until a fixpoint is reached.

Constant folding comprises:

  - loads that are amenable to shorthand (e.g. ICONST_1) are rewritten

  - stores where the LHS already contains the value
    denoted by the RHS are replaced by DROP instruction

  - binary operations with constant result are left in place,
    but a DROP and a load of the constant-result are inserted
    rigth after them. Successive iterations of the fixpoint will
    reduce code to its final form.

  - conditional jumps, as well as lookup and table switches
    are simplified when their operand is constant.
BCodeOpt: test constant folding in the presence of NaNs

Tests are added to verify that intra-method optimizations
don't change the meaning of a program that involves operations
on floating-point NaNs.

These tests are the BCodeOpt counterpart to the tests introduced in
commit 497b0cb09a750fe05cf6c7c1cae2e3b960772ec4
Level 1 intra-method optimiz: NullnessPropagator

Intra-method optimizations are performed until a fixpoint is reached.

Nullness propagation comprises:

  - simplify control-flow when a conditional jump
    will always be taken or avoided

  - simplify an ALOAD for a local-var known to contain null

  - simplify an ASTORE both whose RHS and LHS are known
    to contain null (POP1 replaces it)

  - Scala unbox of null is replaced by a zero load
    of the appropriate sort (I, L, F, or D).
BCodeOpt: NullnessPropagator takes module load for non-null
BCodeOpt: test constant folding including nullness propagation

A test is added to verify branches are removed when their outcome
can be determined at compile time based on constant-folding and
nullness propagation.

The test is the BCodeOpt counterpart to the jvm test introduced in
commit 69109c0ace5e3ac831c3b0a5635f25317d3b28bf
Level 1 intra-method optimiz: Copy propagation

Intra-method optimizations are performed until a fixpoint is reached.

"Copy propagation" replaces the last link in a chain of data accesses
by a direct access to the chain-start.

A "chain of data accesses" refers to a assignments of the form shown below,
without any intervening rewriting of v, v1, v2, ..., v9:

      v1 =  v
       ...
      v2 = v1
       ...
      v9 = v8

After CopyPropagator.transform has run,
`LOAD v9` has been replaced with `LOAD v`.
Similarly for `LOAD v1` to `LOAD v8`.

Other than that, this method changes nothing else:
in particular STORE v1` to `STORE v9` are left as-is.
Removing dead-stores is the job of `DeadStoreElim`.
Level 1 intra-method optimiz: Dead Store Elimination, Primitives
Level 1 intra-method optimiz: Dead Store Elimination, References
Level 1 intra-method optimiz: PushPopCollapser
Level 1 intra-method optimiz: JumpReducer
Level 1 intra-method optimiz: Type-Flow Analysis
Level 1 intra-method optimiz: cancel out box-unbox pairs
Level 1 intra-method optimiz: compacting method-local vars

"Compacting" of non-param local-vars involves:
   - detecting gaps in the index sequence, followed by
   - re-numbering that shifts indexes to close the gaps.

As already hinted, "compacting" excludes parameters.
Also, a local-var that at least gets initialized won't be removed.
BCodeOpt: test dead-store elimination, part 1
BCodeOpt: test dead-store elimination, part 2
intra-method optimizations activated by default
SI-7607 fixed in BCodeOpt, unlike for the ICode-based optimizer
specializeTypes.specializedFunctionX for use by Late-Closure-Classes
fix to future-spec test, req for Late-Closure-Classes