private static RopMethod optimizeMinimizeRegisters(
      RopMethod rmeth, int paramWidth, boolean isStatic, EnumSet<OptionalStep> steps) {
    SsaMethod ssaMeth;
    RopMethod resultMeth;

    ssaMeth = SsaConverter.convertToSsaMethod(rmeth, paramWidth, isStatic);

    EnumSet<OptionalStep> newSteps = steps.clone();

    /*
     * CONST_COLLECTOR trades insns for registers, which is not an
     * appropriate strategy here.
     */
    newSteps.remove(OptionalStep.CONST_COLLECTOR);

    runSsaFormSteps(ssaMeth, newSteps);

    resultMeth = SsaToRop.convertToRopMethod(ssaMeth, true);
    return resultMeth;
  }
Runs the optimizer with a strategy to minimize the number of rop-form registers used by the end
result. Dex bytecode does not have instruction forms that take register numbers larger than 15
for all instructions. If we've produced a method that uses more than 16 registers, try again
with a different strategy to see if we can get under the bar. The end result will be much more
efficient.

@param rmeth method to process
@param paramWidth the total width, in register-units, of this method's parameters
@param isStatic true if this method has no 'this' pointer argument.
@param steps set of optional optimization steps to run
@return optimized method
android/android_framework/dex-maker/src/main/java/com/android/dx/ssa/Optimizer.java