public static RopMethod optimize(
      RopMethod rmeth,
      int paramWidth,
      boolean isStatic,
      boolean inPreserveLocals,
      TranslationAdvice inAdvice,
      EnumSet<OptionalStep> steps) {
    SsaMethod ssaMeth = null;

    preserveLocals = inPreserveLocals;
    advice = inAdvice;

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

    RopMethod resultMeth = SsaToRop.convertToRopMethod(ssaMeth, false);

    if (resultMeth.getBlocks().getRegCount() > advice.getMaxOptimalRegisterCount()) {
      // Try to see if we can squeeze it under the register count bar
      resultMeth = optimizeMinimizeRegisters(rmeth, paramWidth, isStatic, steps);
    }
    return resultMeth;
  }
Runs optimization algorthims over this method, and returns a new instance of RopMethod with the
changes.

@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 inPreserveLocals true if local variable info should be preserved, at the cost of some
    registers and insns
@param inAdvice {@code non-null;} translation advice
@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