Use latest graph lens as code lens for inlining IR

Change-Id: I1805381e589ba243c41a3faf6fb2b78688467480
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfInvoke.java b/src/main/java/com/android/tools/r8/cf/code/CfInvoke.java
index 2e6564d..292178b 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfInvoke.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfInvoke.java
@@ -214,7 +214,7 @@
           AppView<?> appView = builder.appView;
           ProgramMethod context = builder.getProgramMethod();
           canonicalMethod = method;
-          type = Invoke.Type.fromInvokeSpecial(method, context, appView);
+          type = Invoke.Type.fromInvokeSpecial(method, context, appView, builder.getCodeLens());
           break;
         }
       case Opcodes.INVOKESTATIC:
@@ -244,7 +244,8 @@
       builder.addMoveResult(state.push(method.getReturnType()).register);
     }
     assert type
-        == Invoke.Type.fromCfOpcode(opcode, method, builder.getProgramMethod(), builder.appView);
+        == Invoke.Type.fromCfOpcode(
+            opcode, method, builder.getProgramMethod(), builder.appView, builder.getCodeLens());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/graph/CfCode.java b/src/main/java/com/android/tools/r8/graph/CfCode.java
index fd550c1..c043d4a 100644
--- a/src/main/java/com/android/tools/r8/graph/CfCode.java
+++ b/src/main/java/com/android/tools/r8/graph/CfCode.java
@@ -427,7 +427,8 @@
   public IRCode buildIR(ProgramMethod method, AppView<?> appView, Origin origin) {
     verifyFramesOrRemove(
         method.getDefinition(), appView, origin, IRBuilder.lookupPrototypeChanges(appView, method));
-    return internalBuildPossiblyWithLocals(method, method, appView, null, null, origin, null);
+    return internalBuildPossiblyWithLocals(
+        method, method, appView, appView.codeLens(), null, null, origin, null);
   }
 
   @Override
@@ -435,6 +436,7 @@
       ProgramMethod context,
       ProgramMethod method,
       AppView<?> appView,
+      GraphLens codeLens,
       NumberGenerator valueNumberGenerator,
       Position callerPosition,
       Origin origin,
@@ -444,7 +446,14 @@
     assert protoChanges != null;
     verifyFramesOrRemove(method.getDefinition(), appView, origin, protoChanges);
     return internalBuildPossiblyWithLocals(
-        context, method, appView, valueNumberGenerator, callerPosition, origin, protoChanges);
+        context,
+        method,
+        appView,
+        codeLens,
+        valueNumberGenerator,
+        callerPosition,
+        origin,
+        protoChanges);
   }
 
   private void verifyFramesOrRemove(
@@ -465,6 +474,7 @@
       ProgramMethod context,
       ProgramMethod method,
       AppView<?> appView,
+      GraphLens codeLens,
       NumberGenerator valueNumberGenerator,
       Position callerPosition,
       Origin origin,
@@ -475,13 +485,21 @@
           context,
           method,
           appView,
+          codeLens,
           valueNumberGenerator,
           callerPosition,
           origin,
           protoChanges);
     } else {
       return internalBuildWithLocals(
-          context, method, appView, valueNumberGenerator, callerPosition, origin, protoChanges);
+          context,
+          method,
+          appView,
+          codeLens,
+          valueNumberGenerator,
+          callerPosition,
+          origin,
+          protoChanges);
     }
   }
 
@@ -490,6 +508,7 @@
       ProgramMethod context,
       ProgramMethod method,
       AppView<?> appView,
+      GraphLens codeLens,
       NumberGenerator valueNumberGenerator,
       Position callerPosition,
       Origin origin,
@@ -500,6 +519,7 @@
           context,
           method,
           appView,
+          codeLens,
           valueNumberGenerator,
           callerPosition,
           origin,
@@ -511,6 +531,7 @@
           context,
           method,
           appView,
+          codeLens,
           valueNumberGenerator,
           callerPosition,
           origin,
@@ -524,6 +545,7 @@
       ProgramMethod context,
       ProgramMethod method,
       AppView<?> appView,
+      GraphLens codeLens,
       NumberGenerator valueNumberGenerator,
       Position callerPosition,
       Origin origin,
@@ -544,7 +566,7 @@
     } else {
       builder =
           IRBuilder.createForInlining(
-              method, appView, source, origin, valueNumberGenerator, protoChanges);
+              method, appView, codeLens, source, origin, valueNumberGenerator, protoChanges);
     }
     return builder.build(context);
   }
diff --git a/src/main/java/com/android/tools/r8/graph/Code.java b/src/main/java/com/android/tools/r8/graph/Code.java
index 8de51ce..205422c 100644
--- a/src/main/java/com/android/tools/r8/graph/Code.java
+++ b/src/main/java/com/android/tools/r8/graph/Code.java
@@ -21,6 +21,7 @@
       ProgramMethod context,
       ProgramMethod method,
       AppView<?> appView,
+      GraphLens codeLens,
       NumberGenerator valueNumberGenerator,
       Position callerPosition,
       Origin origin,
diff --git a/src/main/java/com/android/tools/r8/graph/DexCode.java b/src/main/java/com/android/tools/r8/graph/DexCode.java
index 2c36882..aa201c2 100644
--- a/src/main/java/com/android/tools/r8/graph/DexCode.java
+++ b/src/main/java/com/android/tools/r8/graph/DexCode.java
@@ -275,6 +275,7 @@
       ProgramMethod context,
       ProgramMethod method,
       AppView<?> appView,
+      GraphLens codeLens,
       NumberGenerator valueNumberGenerator,
       Position callerPosition,
       Origin origin,
@@ -286,7 +287,7 @@
             appView.graphLens().getOriginalMethodSignature(method.getReference()),
             callerPosition);
     return IRBuilder.createForInlining(
-            method, appView, source, origin, valueNumberGenerator, protoChanges)
+            method, appView, codeLens, source, origin, valueNumberGenerator, protoChanges)
         .build(context);
   }
 
diff --git a/src/main/java/com/android/tools/r8/graph/LazyCfCode.java b/src/main/java/com/android/tools/r8/graph/LazyCfCode.java
index cd91733..0aaa24e 100644
--- a/src/main/java/com/android/tools/r8/graph/LazyCfCode.java
+++ b/src/main/java/com/android/tools/r8/graph/LazyCfCode.java
@@ -235,13 +235,21 @@
       ProgramMethod context,
       ProgramMethod method,
       AppView<?> appView,
+      GraphLens codeLens,
       NumberGenerator valueNumberGenerator,
       Position callerPosition,
       Origin origin,
       RewrittenPrototypeDescription protoChanges) {
     return asCfCode()
         .buildInliningIR(
-            context, method, appView, valueNumberGenerator, callerPosition, origin, protoChanges);
+            context,
+            method,
+            appView,
+            codeLens,
+            valueNumberGenerator,
+            callerPosition,
+            origin,
+            protoChanges);
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/graph/ProgramMethod.java b/src/main/java/com/android/tools/r8/graph/ProgramMethod.java
index 7e1cd24..c03a7b8 100644
--- a/src/main/java/com/android/tools/r8/graph/ProgramMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/ProgramMethod.java
@@ -8,6 +8,7 @@
 import com.android.tools.r8.ir.code.NumberGenerator;
 import com.android.tools.r8.ir.code.Position;
 import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
+import com.android.tools.r8.ir.conversion.MethodProcessor;
 import com.android.tools.r8.kotlin.KotlinMethodLevelInfo;
 import com.android.tools.r8.logging.Log;
 import com.android.tools.r8.origin.Origin;
@@ -32,10 +33,23 @@
       NumberGenerator valueNumberGenerator,
       Position callerPosition,
       Origin origin,
-      RewrittenPrototypeDescription protoChanges) {
+      MethodProcessor methodProcessor) {
     Code code = getDefinition().getCode();
+    GraphLens codeLens = appView.graphLens();
+    RewrittenPrototypeDescription protoChanges = RewrittenPrototypeDescription.none();
+    if (methodProcessor.shouldApplyCodeRewritings(this)) {
+      codeLens = appView.codeLens();
+      protoChanges = appView.graphLens().lookupPrototypeChangesForMethodDefinition(getReference());
+    }
     return code.buildInliningIR(
-        context, this, appView, valueNumberGenerator, callerPosition, origin, protoChanges);
+        context,
+        this,
+        appView,
+        codeLens,
+        valueNumberGenerator,
+        callerPosition,
+        origin,
+        protoChanges);
   }
 
   public void collectIndexedItems(
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/code/ClassInitializerMerger.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/code/ClassInitializerMerger.java
index b3d27a5..8372926 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/code/ClassInitializerMerger.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/code/ClassInitializerMerger.java
@@ -253,6 +253,7 @@
                     method,
                     classInitializer,
                     appView,
+                    appView.codeLens(),
                     valueNumberGenerator,
                     callerPosition,
                     classInitializer.getOrigin(),
diff --git a/src/main/java/com/android/tools/r8/ir/code/Invoke.java b/src/main/java/com/android/tools/r8/ir/code/Invoke.java
index f595b77..9e6d8a6 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Invoke.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Invoke.java
@@ -59,11 +59,20 @@
 
     public static Type fromCfOpcode(
         int opcode, DexMethod invokedMethod, DexClassAndMethod context, AppView<?> appView) {
+      return fromCfOpcode(opcode, invokedMethod, context, appView, appView.codeLens());
+    }
+
+    public static Type fromCfOpcode(
+        int opcode,
+        DexMethod invokedMethod,
+        DexClassAndMethod context,
+        AppView<?> appView,
+        GraphLens codeLens) {
       switch (opcode) {
         case Opcodes.INVOKEINTERFACE:
           return Type.INTERFACE;
         case Opcodes.INVOKESPECIAL:
-          return fromInvokeSpecial(invokedMethod, context, appView);
+          return fromInvokeSpecial(invokedMethod, context, appView, codeLens);
         case Opcodes.INVOKESTATIC:
           return Type.STATIC;
         case Opcodes.INVOKEVIRTUAL:
@@ -77,12 +86,19 @@
 
     public static Type fromInvokeSpecial(
         DexMethod invokedMethod, DexClassAndMethod context, AppView<?> appView) {
+      return fromInvokeSpecial(invokedMethod, context, appView, appView.codeLens());
+    }
+
+    public static Type fromInvokeSpecial(
+        DexMethod invokedMethod,
+        DexClassAndMethod context,
+        AppView<?> appView,
+        GraphLens codeLens) {
       if (invokedMethod.isInstanceInitializer(appView.dexItemFactory())) {
         return Type.DIRECT;
       }
 
       GraphLens graphLens = appView.graphLens();
-      GraphLens codeLens = appView.codeLens();
       DexMethod originalContext =
           graphLens.getOriginalMethodSignature(context.getReference(), codeLens);
       if (invokedMethod.getHolderType() != originalContext.getHolderType()) {
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java b/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
index 01f1739..8f271a1 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
@@ -34,6 +34,7 @@
 import com.android.tools.r8.graph.DexReference;
 import com.android.tools.r8.graph.DexString;
 import com.android.tools.r8.graph.DexType;
+import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ProgramMethod;
 import com.android.tools.r8.graph.RewrittenPrototypeDescription;
 import com.android.tools.r8.graph.RewrittenPrototypeDescription.ArgumentInfo;
@@ -399,6 +400,7 @@
   private final ProgramMethod method;
   private ProgramMethod context;
   public final AppView<?> appView;
+  private final GraphLens codeLens;
   private final Origin origin;
   private final RewrittenPrototypeDescription prototypeChanges;
   private Value receiverValue;
@@ -438,6 +440,7 @@
     return new IRBuilder(
         method,
         appView,
+        appView.codeLens(),
         source,
         origin,
         lookupPrototypeChanges(appView, method),
@@ -447,11 +450,13 @@
   public static IRBuilder createForInlining(
       ProgramMethod method,
       AppView<?> appView,
+      GraphLens codeLens,
       SourceCode source,
       Origin origin,
       NumberGenerator valueNumberGenerator,
       RewrittenPrototypeDescription protoChanges) {
-    return new IRBuilder(method, appView, source, origin, protoChanges, valueNumberGenerator);
+    return new IRBuilder(
+        method, appView, codeLens, source, origin, protoChanges, valueNumberGenerator);
   }
 
   public static RewrittenPrototypeDescription lookupPrototypeChanges(
@@ -470,6 +475,7 @@
   private IRBuilder(
       ProgramMethod method,
       AppView<?> appView,
+      GraphLens codeLens,
       SourceCode source,
       Origin origin,
       RewrittenPrototypeDescription prototypeChanges,
@@ -480,6 +486,7 @@
     this.appView = appView;
     this.source = source;
     this.origin = origin;
+    this.codeLens = codeLens;
     this.prototypeChanges = prototypeChanges;
     this.valueNumberGenerator = valueNumberGenerator;
     this.basicBlockNumberGenerator = new NumberGenerator();
@@ -489,6 +496,10 @@
     return appView.dexItemFactory();
   }
 
+  public GraphLens getCodeLens() {
+    return codeLens;
+  }
+
   public DexEncodedMethod getMethod() {
     return method.getDefinition();
   }
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/inliner/InliningIRProvider.java b/src/main/java/com/android/tools/r8/ir/optimize/inliner/InliningIRProvider.java
index 35afed1..f348ce7 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/inliner/InliningIRProvider.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/inliner/InliningIRProvider.java
@@ -10,7 +10,6 @@
 import com.android.tools.r8.ir.code.InvokeMethod;
 import com.android.tools.r8.ir.code.NumberGenerator;
 import com.android.tools.r8.ir.code.Position;
-import com.android.tools.r8.ir.conversion.IRBuilder;
 import com.android.tools.r8.ir.conversion.MethodProcessor;
 import com.android.tools.r8.origin.Origin;
 import java.util.IdentityHashMap;
@@ -41,12 +40,7 @@
     Position position = Position.getPositionForInlining(appView, invoke, context);
     Origin origin = method.getOrigin();
     return method.buildInliningIR(
-        context,
-        appView,
-        valueNumberGenerator,
-        position,
-        origin,
-        IRBuilder.lookupPrototypeChangesForInlinee(appView, method, methodProcessor));
+        context, appView, valueNumberGenerator, position, origin, methodProcessor);
   }
 
   public IRCode getAndCacheInliningIR(InvokeMethod invoke, ProgramMethod method) {
diff --git a/src/main/java/com/android/tools/r8/ir/synthetic/AbstractSynthesizedCode.java b/src/main/java/com/android/tools/r8/ir/synthetic/AbstractSynthesizedCode.java
index 5c73aee..b750f84 100644
--- a/src/main/java/com/android/tools/r8/ir/synthetic/AbstractSynthesizedCode.java
+++ b/src/main/java/com/android/tools/r8/ir/synthetic/AbstractSynthesizedCode.java
@@ -10,6 +10,7 @@
 import com.android.tools.r8.graph.Code;
 import com.android.tools.r8.graph.DexClassAndMethod;
 import com.android.tools.r8.graph.DexEncodedMethod;
+import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ProgramMethod;
 import com.android.tools.r8.graph.RewrittenPrototypeDescription;
 import com.android.tools.r8.graph.UseRegistry;
@@ -48,6 +49,7 @@
       ProgramMethod context,
       ProgramMethod method,
       AppView<?> appView,
+      GraphLens codeLens,
       NumberGenerator valueNumberGenerator,
       Position callerPosition,
       Origin origin,
@@ -55,6 +57,7 @@
     return IRBuilder.createForInlining(
             method,
             appView,
+            codeLens,
             getSourceCodeProvider().get(context, callerPosition),
             origin,
             valueNumberGenerator,