public boolean mergeStarts(int label, RegisterSpecSet specs) {
    RegisterSpecSet start = getStarts0(label);
    boolean changed = false;

    if (start == null) {
      setStarts(label, specs);
      return true;
    }

    RegisterSpecSet newStart = start.mutableCopy();
    if (start.size() != 0) {
      newStart.intersect(specs, true);
    } else {
      newStart = specs.mutableCopy();
    }

    if (start.equals(newStart)) {
      return false;
    }

    newStart.setImmutable();
    setStarts(label, newStart);

    return true;
  }
Merges the given register set into the set for the block with the given label. If there was not
already an associated set, then this is the same as calling {@link #setStarts}. Otherwise, this
will merge the two sets and call {@link #setStarts} on the result of the merge.

@param label {@code >= 0;} the block label
@param specs {@code non-null;} the register set to merge into the start set for the block
@return {@code true} if the merge resulted in an actual change to the associated set (including
    storing one for the first time) or {@code false} if there was no change
android/android_framework/dex-maker/src/main/java/com/android/dx/rop/code/LocalVariableInfo.java