TrivialCheckCastAndInstanceOfRemover as CodeRewriterPass
Bug: b/284304606
Change-Id: I9f9f7245187b37c2a5c16b18347db242a4b1a9de
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteBuilderShrinker.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteBuilderShrinker.java
index a5e1ecb..20ac50a 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteBuilderShrinker.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteBuilderShrinker.java
@@ -332,7 +332,7 @@
// Run the enum optimization to optimize all Enum.ordinal() invocations. This is required to
// get rid of the enum switch in dynamicMethod().
if (enumValueOptimizer != null) {
- enumValueOptimizer.run(code.context(), code);
+ enumValueOptimizer.run(code, Timing.empty());
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java b/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java
index ae68050..e1b5d36 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java
@@ -198,7 +198,7 @@
timing.begin("BasicBlock peephole optimizations");
if (code.getConversionOptions().isPeepholeOptimizationsEnabled()) {
for (int i = 0; i < PEEPHOLE_OPTIMIZATION_PASSES; i++) {
- trivialGotosCollapser.run(code.context(), code, timing);
+ trivialGotosCollapser.run(code, timing);
PeepholeOptimizer.removeIdenticalPredecessorBlocks(code, registerAllocator);
PeepholeOptimizer.shareIdenticalBlockSuffix(
code, registerAllocator, SUFFIX_SHARING_OVERHEAD);
@@ -208,7 +208,7 @@
timing.time("Rewrite Iinc patterns", this::rewriteIincPatterns);
- trivialGotosCollapser.run(code.context(), code, timing);
+ trivialGotosCollapser.run(code, timing);
timing.begin("Remove redundant debug positions");
DexBuilder.removeRedundantDebugPositions(code);
timing.end();
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index 957a34f..700422b 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
@@ -731,28 +731,26 @@
assert code.verifyTypes(appView);
- timing.begin("Remove trivial type checks/casts");
new TrivialCheckCastAndInstanceOfRemover(appView)
- .run(code, context, methodProcessor, methodProcessingContext);
- timing.end();
+ .run(code, methodProcessor, methodProcessingContext, timing);
if (enumValueOptimizer != null) {
assert appView.enableWholeProgramOptimizations();
- enumValueOptimizer.run(context, code, timing);
+ enumValueOptimizer.run(code, timing);
}
timing.begin("Rewrite array length");
codeRewriter.rewriteKnownArrayLengthCalls(code);
timing.end();
- new NaturalIntLoopRemover(appView).run(context, code);
+ new NaturalIntLoopRemover(appView).run(code, timing);
if (assertionErrorTwoArgsConstructorRewriter != null) {
timing.begin("Rewrite AssertionError");
assertionErrorTwoArgsConstructorRewriter.rewrite(
code, methodProcessor, methodProcessingContext);
timing.end();
}
- commonSubexpressionElimination.run(context, code, timing);
- new ArrayConstructionSimplifier(appView).run(context, code, timing);
+ commonSubexpressionElimination.run(code, timing);
+ new ArrayConstructionSimplifier(appView).run(code, timing);
timing.begin("Rewrite move result");
codeRewriter.rewriteMoveResult(code);
timing.end();
@@ -769,13 +767,11 @@
timing.end();
timing.begin("Simplify control flow");
if (new BranchSimplifier(appView).simplifyBranches(code)) {
- timing.begin("Remove trivial type checks/casts");
new TrivialCheckCastAndInstanceOfRemover(appView)
- .run(code, context, methodProcessor, methodProcessingContext);
- timing.end();
+ .run(code, methodProcessor, methodProcessingContext, timing);
}
timing.end();
- splitBranch.run(code.context(), code, timing);
+ splitBranch.run(code, timing);
if (options.enableRedundantConstNumberOptimization) {
timing.begin("Remove const numbers");
codeRewriter.redundantConstNumberRemoval(code);
@@ -787,7 +783,7 @@
timing.end();
}
if (binopRewriter != null) {
- binopRewriter.run(context, code, timing);
+ binopRewriter.run(code, timing);
}
if (options.testing.invertConditionals) {
@@ -878,7 +874,7 @@
constantCanonicalizer.canonicalize();
timing.end();
previous = printMethod(code, "IR after constant canonicalization (SSA)", previous);
- new DexConstantOptimizer(appView, constantCanonicalizer).run(context, code, timing);
+ new DexConstantOptimizer(appView, constantCanonicalizer).run(code, timing);
previous = printMethod(code, "IR after dex constant optimization (SSA)", previous);
}
@@ -905,7 +901,7 @@
deadCodeRemover.run(code, timing);
- new ParentConstructorHoistingCodeRewriter(appView).run(context, code, timing);
+ new ParentConstructorHoistingCodeRewriter(appView).run(code, timing);
BytecodeMetadataProvider.Builder bytecodeMetadataProviderBuilder =
BytecodeMetadataProvider.builder();
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRToDexFinalizer.java b/src/main/java/com/android/tools/r8/ir/conversion/IRToDexFinalizer.java
index ddcd9ac..dbd35f7 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRToDexFinalizer.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRToDexFinalizer.java
@@ -64,14 +64,14 @@
if (code.getConversionOptions().isPeepholeOptimizationsEnabled()) {
timing.begin("Peephole optimize");
for (int i = 0; i < PEEPHOLE_OPTIMIZATION_PASSES; i++) {
- trivialGotosCollapser.run(code.context(), code, timing);
+ trivialGotosCollapser.run(code, timing);
PeepholeOptimizer.optimize(appView, code, registerAllocator);
}
timing.end();
}
timing.begin("Clean up");
CodeRewriter.removeUnneededMovesOnExitingPaths(code, registerAllocator);
- trivialGotosCollapser.run(code.context(), code, timing);
+ trivialGotosCollapser.run(code, timing);
timing.end();
return registerAllocator;
}
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/ArrayConstructionSimplifier.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/ArrayConstructionSimplifier.java
index bbbb807..63e6b36 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/ArrayConstructionSimplifier.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/ArrayConstructionSimplifier.java
@@ -8,7 +8,6 @@
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexClass;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.analysis.type.ArrayTypeElement;
import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.code.ArrayPut;
@@ -93,7 +92,7 @@
}
@Override
- protected void rewriteCode(ProgramMethod method, IRCode code) {
+ protected void rewriteCode(IRCode code) {
WorkList<BasicBlock> worklist = WorkList.newIdentityWorkList(code.blocks);
while (worklist.hasNext()) {
BasicBlock block = worklist.next();
@@ -102,7 +101,7 @@
}
@Override
- protected boolean shouldRewriteCode(ProgramMethod method, IRCode code) {
+ protected boolean shouldRewriteCode(IRCode code) {
return appView.options().isGeneratingDex();
}
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/BinopRewriter.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/BinopRewriter.java
index 7c47790..24fad2e 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/BinopRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/BinopRewriter.java
@@ -7,7 +7,6 @@
import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.graph.AppInfo;
import com.android.tools.r8.graph.AppView;
-import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.code.Add;
import com.android.tools.r8.ir.code.And;
@@ -244,12 +243,12 @@
}
@Override
- protected boolean shouldRewriteCode(ProgramMethod method, IRCode code) {
+ protected boolean shouldRewriteCode(IRCode code) {
return true;
}
@Override
- public void rewriteCode(ProgramMethod method, IRCode code) {
+ public void rewriteCode(IRCode code) {
InstructionListIterator iterator = code.instructionListIterator();
while (iterator.hasNext()) {
Instruction next = iterator.next();
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/CodeRewriterPass.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/CodeRewriterPass.java
index 50a469d..94e30d3 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/CodeRewriterPass.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/CodeRewriterPass.java
@@ -4,11 +4,13 @@
package com.android.tools.r8.ir.conversion.passes;
+import com.android.tools.r8.contexts.CompilationContext.MethodProcessingContext;
+import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.graph.AppInfo;
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexItemFactory;
-import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.code.IRCode;
+import com.android.tools.r8.ir.conversion.MethodProcessor;
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.Timing;
@@ -25,23 +27,43 @@
}
@SuppressWarnings("unchecked")
- AppView<? extends T> appView() {
+ protected AppView<? extends T> appView() {
return (AppView<? extends T>) appView;
}
- public final void run(ProgramMethod method, IRCode code, Timing timing) {
- timing.time(getTimingId(), () -> run(method, code));
+ public final void run(
+ IRCode code,
+ MethodProcessor methodProcessor,
+ MethodProcessingContext methodProcessingContext,
+ Timing timing) {
+ timing.time(getTimingId(), () -> run(code, methodProcessor, methodProcessingContext));
}
- public final void run(ProgramMethod method, IRCode code) {
- if (shouldRewriteCode(method, code)) {
- rewriteCode(method, code);
+ public final void run(IRCode code, Timing timing) {
+ timing.time(getTimingId(), () -> run(code, null, null));
+ }
+
+ private void run(
+ IRCode code,
+ MethodProcessor methodProcessor,
+ MethodProcessingContext methodProcessingContext) {
+ if (shouldRewriteCode(code)) {
+ rewriteCode(code, methodProcessor, methodProcessingContext);
}
}
protected abstract String getTimingId();
- protected abstract void rewriteCode(ProgramMethod method, IRCode code);
+ protected void rewriteCode(IRCode code) {
+ throw new Unreachable("Should Override or use overload");
+ }
- protected abstract boolean shouldRewriteCode(ProgramMethod method, IRCode code);
+ protected void rewriteCode(
+ IRCode code,
+ MethodProcessor methodProcessor,
+ MethodProcessingContext methodProcessingContext) {
+ rewriteCode(code);
+ }
+
+ protected abstract boolean shouldRewriteCode(IRCode code);
}
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/CommonSubexpressionElimination.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/CommonSubexpressionElimination.java
index 036bd0f..5d88ded 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/CommonSubexpressionElimination.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/CommonSubexpressionElimination.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.AppInfo;
import com.android.tools.r8.graph.AppView;
-import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.code.BasicBlock;
import com.android.tools.r8.ir.code.Binop;
import com.android.tools.r8.ir.code.CatchHandlers;
@@ -35,12 +34,12 @@
}
@Override
- protected boolean shouldRewriteCode(ProgramMethod method, IRCode code) {
+ protected boolean shouldRewriteCode(IRCode code) {
return true;
}
@Override
- protected void rewriteCode(ProgramMethod method, IRCode code) {
+ protected void rewriteCode(IRCode code) {
int noCandidate = code.reserveMarkingColor();
if (hasCSECandidate(code, noCandidate)) {
final ListMultimap<Wrapper<Instruction>, Value> instructionToValue =
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/DexConstantOptimizer.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/DexConstantOptimizer.java
index 7a34b63..c6e07ed 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/DexConstantOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/DexConstantOptimizer.java
@@ -14,7 +14,6 @@
import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.graph.AppInfo;
import com.android.tools.r8.graph.AppView;
-import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.code.BasicBlock;
import com.android.tools.r8.ir.code.BasicBlockIterator;
import com.android.tools.r8.ir.code.Binop;
@@ -64,13 +63,13 @@
}
@Override
- protected void rewriteCode(ProgramMethod method, IRCode code) {
+ protected void rewriteCode(IRCode code) {
useDedicatedConstantForLitInstruction(code);
shortenLiveRanges(code, constantCanonicalizer);
}
@Override
- protected boolean shouldRewriteCode(ProgramMethod method, IRCode code) {
+ protected boolean shouldRewriteCode(IRCode code) {
return true;
}
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/NaturalIntLoopRemover.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/NaturalIntLoopRemover.java
index 298020d..be7840f 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/NaturalIntLoopRemover.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/NaturalIntLoopRemover.java
@@ -7,7 +7,6 @@
import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.graph.AppInfo;
import com.android.tools.r8.graph.AppView;
-import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.code.BasicBlock;
import com.android.tools.r8.ir.code.Goto;
import com.android.tools.r8.ir.code.IRCode;
@@ -41,7 +40,7 @@
}
@Override
- protected void rewriteCode(ProgramMethod method, IRCode code) {
+ protected void rewriteCode(IRCode code) {
boolean loopRemoved = false;
for (BasicBlock comparisonBlockCandidate : code.blocks) {
if (isComparisonBlock(comparisonBlockCandidate)) {
@@ -56,7 +55,7 @@
}
@Override
- protected boolean shouldRewriteCode(ProgramMethod method, IRCode code) {
+ protected boolean shouldRewriteCode(IRCode code) {
return appView.options().enableLoopUnrolling;
}
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/ParentConstructorHoistingCodeRewriter.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/ParentConstructorHoistingCodeRewriter.java
index 685926d..4f96ce7 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/ParentConstructorHoistingCodeRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/ParentConstructorHoistingCodeRewriter.java
@@ -48,7 +48,7 @@
}
@Override
- protected void rewriteCode(ProgramMethod method, IRCode code) {
+ protected void rewriteCode(IRCode code) {
for (InvokeDirect invoke : getOrComputeSideEffectFreeConstructorCalls(code)) {
hoistSideEffectFreeConstructorCall(code, invoke);
}
@@ -136,15 +136,16 @@
/** Only run this when the rewriting may actually enable more constructor inlining. */
@Override
- protected boolean shouldRewriteCode(ProgramMethod method, IRCode code) {
+ protected boolean shouldRewriteCode(IRCode code) {
if (!appView.hasClassHierarchy()) {
return false;
}
- if (!method.getDefinition().isInstanceInitializer()
+ ProgramMethod context = code.context();
+ if (!context.getDefinition().isInstanceInitializer()
|| !options.canInitNewInstanceUsingSuperclassConstructor()) {
return false;
}
- KeepMethodInfo keepInfo = appView.getKeepInfo(method);
+ KeepMethodInfo keepInfo = appView.getKeepInfo(context);
return keepInfo.isOptimizationAllowed(options)
&& keepInfo.isShrinkingAllowed(options)
&& hoistingMayRemoveInstancePutToUninitializedThis(code);
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/SplitBranch.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/SplitBranch.java
index 9290a77..fbb3afd 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/SplitBranch.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/SplitBranch.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.AppInfo;
import com.android.tools.r8.graph.AppView;
-import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.analysis.type.TypeAnalysis;
import com.android.tools.r8.ir.code.BasicBlock;
import com.android.tools.r8.ir.code.ConstNumber;
@@ -39,7 +38,7 @@
}
@Override
- protected boolean shouldRewriteCode(ProgramMethod method, IRCode code) {
+ protected boolean shouldRewriteCode(IRCode code) {
return true;
}
@@ -54,7 +53,7 @@
* known boolean values.
*/
@Override
- protected void rewriteCode(ProgramMethod method, IRCode code) {
+ protected void rewriteCode(IRCode code) {
List<BasicBlock> candidates = computeCandidates(code);
if (candidates.isEmpty()) {
return;
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/TrivialCheckCastAndInstanceOfRemover.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/TrivialCheckCastAndInstanceOfRemover.java
index bd09aae..cbce46f 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/TrivialCheckCastAndInstanceOfRemover.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/TrivialCheckCastAndInstanceOfRemover.java
@@ -8,9 +8,9 @@
import com.android.tools.r8.contexts.CompilationContext.MethodProcessingContext;
import com.android.tools.r8.graph.AccessControl;
+import com.android.tools.r8.graph.AppInfo;
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexClass;
-import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.graph.DexProgramClass;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.ProgramMethod;
@@ -22,7 +22,6 @@
import com.android.tools.r8.ir.code.CheckCast;
import com.android.tools.r8.ir.code.ConstNumber;
import com.android.tools.r8.ir.code.IRCode;
-import com.android.tools.r8.ir.code.IRMetadata;
import com.android.tools.r8.ir.code.InstanceOf;
import com.android.tools.r8.ir.code.Instruction;
import com.android.tools.r8.ir.code.InstructionListIterator;
@@ -33,43 +32,35 @@
import com.android.tools.r8.ir.optimize.UtilityMethodsForCodeOptimizations;
import com.android.tools.r8.ir.optimize.UtilityMethodsForCodeOptimizations.UtilityMethodForCodeOptimizations;
import com.android.tools.r8.shaking.AppInfoWithLiveness;
-import com.android.tools.r8.utils.InternalOptions;
import com.google.common.collect.Sets;
import java.util.Set;
-public class TrivialCheckCastAndInstanceOfRemover {
-
- private final AppView<?> appView;
- private final InternalOptions options;
- private final DexItemFactory dexItemFactory;
+public class TrivialCheckCastAndInstanceOfRemover extends CodeRewriterPass<AppInfo> {
public TrivialCheckCastAndInstanceOfRemover(AppView<?> appView) {
- this.appView = appView;
- this.options = appView.options();
- this.dexItemFactory = appView.dexItemFactory();
+ super(appView);
}
- public void run(
+ @Override
+ protected String getTimingId() {
+ return "TrivialCheckCastAndInstanceOfRemover";
+ }
+
+ @Override
+ protected boolean shouldRewriteCode(IRCode code) {
+ return appView.enableWholeProgramOptimizations()
+ && appView.options().testing.enableCheckCastAndInstanceOfRemoval
+ && (code.metadata().mayHaveCheckCast() || code.metadata().mayHaveInstanceOf());
+ }
+
+ @Override
+ protected void rewriteCode(
IRCode code,
- ProgramMethod context,
MethodProcessor methodProcessor,
MethodProcessingContext methodProcessingContext) {
- if (!appView.enableWholeProgramOptimizations()) {
- return;
- }
-
assert appView.appInfo().hasLiveness();
AppView<AppInfoWithLiveness> appViewWithLiveness = appView.withLiveness();
- if (!appView.options().testing.enableCheckCastAndInstanceOfRemoval) {
- return;
- }
-
- IRMetadata metadata = code.metadata();
- if (!metadata.mayHaveCheckCast() && !metadata.mayHaveInstanceOf()) {
- return;
- }
-
// If we can remove a CheckCast it is due to us having at least as much information about the
// type as the CheckCast gives. We then need to propagate that information to the users of
// the CheckCast to ensure further optimizations and removals of CheckCast:
@@ -101,7 +92,7 @@
current.asCheckCast(),
it,
code,
- context,
+ code.context(),
affectedValues,
methodProcessor,
methodProcessingContext);
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/TrivialGotosCollapser.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/TrivialGotosCollapser.java
index fef138e..4f8ee2e 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/TrivialGotosCollapser.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/TrivialGotosCollapser.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.AppInfo;
import com.android.tools.r8.graph.AppView;
-import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.code.BasicBlock;
import com.android.tools.r8.ir.code.IRCode;
import com.android.tools.r8.ir.code.If;
@@ -34,7 +33,7 @@
}
@Override
- protected void rewriteCode(ProgramMethod method, IRCode code) {
+ protected void rewriteCode(IRCode code) {
assert code.isConsistentGraph(appView);
List<BasicBlock> blocksToRemove = new ArrayList<>();
// Rewrite all non-fallthrough targets to the end of trivial goto chains and remove
@@ -77,7 +76,7 @@
}
@Override
- protected boolean shouldRewriteCode(ProgramMethod method, IRCode code) {
+ protected boolean shouldRewriteCode(IRCode code) {
return true;
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/ClassInliner.java b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/ClassInliner.java
index 05a01c0..d3d2a08 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/ClassInliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/ClassInliner.java
@@ -31,6 +31,7 @@
import com.android.tools.r8.ir.optimize.string.StringOptimizer;
import com.android.tools.r8.shaking.AppInfoWithLiveness;
import com.android.tools.r8.utils.LazyBox;
+import com.android.tools.r8.utils.Timing;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import java.util.Iterator;
@@ -249,7 +250,7 @@
// have more information about the types of the arguments at the call site. This is
// particularly important for bridge methods.
new TrivialCheckCastAndInstanceOfRemover(appView)
- .run(code, method, methodProcessor, methodProcessingContext);
+ .run(code, methodProcessor, methodProcessingContext, Timing.empty());
// If a method was inlined we may be able to prune additional branches.
new BranchSimplifier(appView).simplifyBranches(code);
// If a method was inlined we may see more trivial computation/conversion of String.
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumValueOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumValueOptimizer.java
index 3fb3242..c94b03e 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumValueOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumValueOptimizer.java
@@ -14,7 +14,6 @@
import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.analysis.type.ClassTypeElement;
import com.android.tools.r8.ir.analysis.type.TypeAnalysis;
import com.android.tools.r8.ir.analysis.type.TypeElement;
@@ -61,12 +60,12 @@
}
@Override
- protected void rewriteCode(ProgramMethod method, IRCode code) {
+ protected void rewriteCode(IRCode code) {
rewriteConstantEnumMethodCalls(code);
}
@Override
- protected boolean shouldRewriteCode(ProgramMethod method, IRCode code) {
+ protected boolean shouldRewriteCode(IRCode code) {
return code.metadata().mayHaveInvokeMethodWithReceiver();
}
@@ -86,7 +85,7 @@
InvokeMethodWithReceiver methodWithReceiver = current.asInvokeMethodWithReceiver();
Value receiver = methodWithReceiver.getReceiver().getAliasedValue();
if (!receiver.getType().isClassType()
- || !appView
+ || !appView()
.appInfo()
.isSubtype(
receiver.getType().asClassType().getClassType(), dexItemFactory.enumType)) {
@@ -171,7 +170,7 @@
}
DexEncodedMethod singleTarget =
- appView
+ appView()
.appInfo()
.resolveMethodOnClassLegacy(
enumFieldType.getClassType(), dexItemFactory.objectMembers.toString)
@@ -455,7 +454,7 @@
return null;
}
StaticGet staticGet = array.asStaticGet();
- Int2ReferenceMap<DexField> indexMap = appView.appInfo().getSwitchMap(staticGet.getField());
+ Int2ReferenceMap<DexField> indexMap = appView().appInfo().getSwitchMap(staticGet.getField());
if (indexMap == null || indexMap.isEmpty()) {
return null;
}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/TrivialGotoEliminationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/TrivialGotoEliminationTest.java
index 8a8ab51..9e02653 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/TrivialGotoEliminationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/TrivialGotoEliminationTest.java
@@ -33,6 +33,7 @@
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.InternalOptions;
+import com.android.tools.r8.utils.Timing;
import com.google.common.collect.ImmutableList;
import java.util.LinkedList;
import org.junit.Test;
@@ -108,7 +109,7 @@
IRMetadata.unknown(),
Origin.unknown(),
new MutableMethodConversionOptions(options));
- new TrivialGotosCollapser(appView).run(code.context(), code);
+ new TrivialGotosCollapser(appView).run(code, Timing.empty());
assertTrue(code.entryBlock().isTrivialGoto());
assertTrue(blocks.contains(block0));
assertTrue(blocks.contains(block1));
@@ -197,7 +198,7 @@
IRMetadata.unknown(),
Origin.unknown(),
new MutableMethodConversionOptions(options));
- new TrivialGotosCollapser(appView).run(code.context(), code);
+ new TrivialGotosCollapser(appView).run(code, Timing.empty());
assertTrue(block0.getInstructions().get(1).isIf());
assertEquals(block1, block0.getInstructions().get(1).asIf().fallthroughBlock());
assertTrue(blocks.containsAll(ImmutableList.of(block0, block1, block2, block3)));
diff --git a/src/test/java/com/android/tools/r8/rewrite/arrays/ArrayWithDataLengthRewriteTest.java b/src/test/java/com/android/tools/r8/rewrite/arrays/ArrayWithDataLengthRewriteTest.java
index a09de37..7f9c7bd 100644
--- a/src/test/java/com/android/tools/r8/rewrite/arrays/ArrayWithDataLengthRewriteTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/arrays/ArrayWithDataLengthRewriteTest.java
@@ -14,6 +14,7 @@
import com.android.tools.r8.ir.code.IRCode;
import com.android.tools.r8.ir.code.Instruction;
import com.android.tools.r8.ir.conversion.passes.ArrayConstructionSimplifier;
+import com.android.tools.r8.utils.Timing;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
@@ -64,7 +65,7 @@
}
private void transformArray(IRCode irCode, AppView<?> appView) {
- new ArrayConstructionSimplifier(appView).run(irCode.context(), irCode);
+ new ArrayConstructionSimplifier(appView).run(irCode, Timing.empty());
String name = irCode.context().getReference().getName().toString();
if (name.contains("filledArrayData")) {
assertTrue(irCode.streamInstructions().anyMatch(Instruction::isNewArrayFilledData));