Use full encoding space of default debug event in jumbo string rewriter

Fixes: 208603998
Change-Id: I2e5963bfad7e5b3039634ac7b77f02b7f5b6fe0b
diff --git a/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java b/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java
index e402ce5..990d545 100644
--- a/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java
+++ b/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java
@@ -4,6 +4,7 @@
 package com.android.tools.r8.dex;
 
 import static com.android.tools.r8.graph.DexCode.TryHandler.NO_HANDLER;
+import static com.android.tools.r8.graph.DexDebugEventBuilder.addDefaultEventWithAdvancePcIfNecessary;
 
 import com.android.tools.r8.code.ConstString;
 import com.android.tools.r8.code.ConstStringJumbo;
@@ -233,7 +234,7 @@
           Instruction target = debugEventTargets.get(lastOriginalOffset);
           int lineDelta = defaultEvent.getLineDelta();
           int pcDelta = target.getOffset() - lastNewOffset;
-          addDefaultEvent(lineDelta, pcDelta, events);
+          addDefaultEventWithAdvancePcIfNecessary(lineDelta, pcDelta, events, factory);
           lastNewOffset = target.getOffset();
         } else {
           events.add(event);
@@ -247,27 +248,6 @@
     return code.getDebugInfo();
   }
 
-  // Add a default event. If the lineDelta and pcDelta can be encoded in one default event
-  // that will be done. Otherwise, this can output an advance line and/or advance pc event
-  // followed by a default event. A default event is always emitted as that is what will
-  // materialize an entry in the line table.
-  private void addDefaultEvent(int lineDelta, int pcDelta, List<DexDebugEvent> events) {
-    if (lineDelta < Constants.DBG_LINE_BASE
-        || lineDelta - Constants.DBG_LINE_BASE >= Constants.DBG_LINE_RANGE) {
-      events.add(factory.createAdvanceLine(lineDelta));
-      lineDelta = 0;
-    }
-    if (pcDelta >= Constants.DBG_ADDRESS_RANGE) {
-      events.add(factory.createAdvancePC(pcDelta));
-      pcDelta = 0;
-    }
-    int specialOpcode =
-        0x0a + (lineDelta - Constants.DBG_LINE_BASE) + Constants.DBG_LINE_RANGE * pcDelta;
-    assert specialOpcode >= 0x0a;
-    assert specialOpcode <= 0xff;
-    events.add(factory.createDefault(specialOpcode));
-  }
-
   private List<Instruction> expandCode() {
     LinkedList<Instruction> instructions = new LinkedList<>();
     Collections.addAll(instructions, method.getCode().asDexCode().instructions);
diff --git a/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java b/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java
index 8091db7..71822f6 100644
--- a/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java
+++ b/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java
@@ -261,6 +261,11 @@
           factory.createSetOutlineCallerFrame(
               nextPosition.getOutlineCallee(), nextPosition.getOutlinePositions()));
     }
+    addDefaultEventWithAdvancePcIfNecessary(lineDelta, pcDelta, events, factory);
+  }
+
+  public static void addDefaultEventWithAdvancePcIfNecessary(
+      int lineDelta, int pcDelta, List<DexDebugEvent> events, DexItemFactory factory) {
     if (lineDelta < Constants.DBG_LINE_BASE
         || lineDelta - Constants.DBG_LINE_BASE >= Constants.DBG_LINE_RANGE) {
       events.add(factory.createAdvanceLine(lineDelta));