private void handleLocalAssociatedOther() {
    for (ArrayList<RegisterSpec> specs : localVariables.values()) {
      int ropReg = paramRangeEnd;

      boolean done = false;
      do {
        int maxCategory = 1;

        // Compute max category for remaining unmapped registers.
        int sz = specs.size();
        for (int i = 0; i < sz; i++) {
          RegisterSpec ssaSpec = specs.get(i);
          int category = ssaSpec.getCategory();
          if (!ssaRegsMapped.get(ssaSpec.getReg()) && category > maxCategory) {
            maxCategory = category;
          }
        }

        ropReg = findRopRegForLocal(ropReg, maxCategory);
        if (canMapRegs(specs, ropReg)) {
          done = tryMapRegs(specs, ropReg, maxCategory, true);
        }

        // Increment for next call to findRopRegForLocal.
        ropReg++;
      } while (!done);
    }
  }
Maps all local-associated registers that are not parameters. Tries to find an unreserved range
that's wide enough for all of the SSA registers, and then tries to map them all to that range.
If not all fit, a new range is tried until all registers have been fit.
android/android_framework/dex-maker/src/main/java/com/android/dx/ssa/back/FirstFitLocalCombiningAllocator.java