Make IRCode.options private
Change-Id: I2d8a70cc7ba9cf0a6819926d590b18da193c786f
diff --git a/src/main/java/com/android/tools/r8/ir/code/ConstString.java b/src/main/java/com/android/tools/r8/ir/code/ConstString.java
index 27577c0..11b9a3d 100644
--- a/src/main/java/com/android/tools/r8/ir/code/ConstString.java
+++ b/src/main/java/com/android/tools/r8/ir/code/ConstString.java
@@ -117,7 +117,7 @@
@Override
public boolean canBeDeadCode(AppView<? extends AppInfo> appView, IRCode code) {
// No side-effect, such as throwing an exception, in CF.
- return code.options.isGeneratingClassFiles() || !instructionInstanceCanThrow();
+ return appView.options().isGeneratingClassFiles() || !instructionInstanceCanThrow();
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/IRCode.java b/src/main/java/com/android/tools/r8/ir/code/IRCode.java
index 40376d5..7d83faf 100644
--- a/src/main/java/com/android/tools/r8/ir/code/IRCode.java
+++ b/src/main/java/com/android/tools/r8/ir/code/IRCode.java
@@ -104,7 +104,7 @@
public boolean hasConstString;
public final boolean hasMonitorInstruction;
- public final InternalOptions options;
+ private final InternalOptions options;
public final Origin origin;
diff --git a/src/main/java/com/android/tools/r8/ir/code/MoveException.java b/src/main/java/com/android/tools/r8/ir/code/MoveException.java
index 3ccd8b0..09619fb 100644
--- a/src/main/java/com/android/tools/r8/ir/code/MoveException.java
+++ b/src/main/java/com/android/tools/r8/ir/code/MoveException.java
@@ -71,8 +71,8 @@
@Override
public boolean canBeDeadCode(AppView<? extends AppInfo> appView, IRCode code) {
- return !(code.options.debug || code.method.getOptimizationInfo().isReachabilitySensitive())
- && code.options.isGeneratingDex();
+ return !(appView.options().debug || code.method.getOptimizationInfo().isReachabilitySensitive())
+ && appView.options().isGeneratingDex();
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java b/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java
index 2eaa046..bda37c3 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java
@@ -122,9 +122,8 @@
BasicBlock nextBlock;
public DexBuilder(IRCode ir, RegisterAllocator registerAllocator) {
- this(ir, registerAllocator, ir.options);
+ this(ir, registerAllocator, registerAllocator.options());
assert ir != null;
- assert registerAllocator != null;
}
private DexBuilder(IRCode ir, RegisterAllocator registerAllocator, InternalOptions options) {
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 a2ea118..bb3e80e 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
@@ -827,7 +827,7 @@
}
if (options.canHaveArtStringNewInitBug()) {
- CodeRewriter.ensureDirectStringNewToInit(code);
+ CodeRewriter.ensureDirectStringNewToInit(code, appView.dexItemFactory());
}
boolean isDebugMode = options.debug || method.getOptimizationInfo().isReachabilitySensitive();
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java
index 064f105..79621b8 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java
@@ -322,6 +322,6 @@
BasicBlock currentBlock = newInstance.getBlock();
BasicBlock nextBlock = instructions.split(code, blocks);
assert !instructions.hasNext();
- nextBlock.copyCatchHandlers(code, blocks, currentBlock, code.options);
+ nextBlock.copyCatchHandlers(code, blocks, currentBlock, appView.options());
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/StringConcatRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/StringConcatRewriter.java
index e31924e..1f299aa 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/StringConcatRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/StringConcatRewriter.java
@@ -397,7 +397,7 @@
}
// Copy catch handlers after all blocks are split.
for (BasicBlock newBlock : newBlocks) {
- newBlock.copyCatchHandlers(code, blocks, currentBlock, code.options);
+ newBlock.copyCatchHandlers(code, blocks, currentBlock, appView.options());
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
index 2bacf8f..705dcb1 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
@@ -2666,9 +2666,11 @@
private static class CSEExpressionEquivalence extends Equivalence<Instruction> {
private final IRCode code;
+ private final InternalOptions options;
- private CSEExpressionEquivalence(IRCode code) {
+ private CSEExpressionEquivalence(IRCode code, InternalOptions options) {
this.code = code;
+ this.options = options;
}
@Override
@@ -2676,7 +2678,7 @@
// Some Dalvik VMs incorrectly handle Cmp instructions which leads to a requirement
// that we do not perform common subexpression elimination for them. See comment on
// canHaveCmpLongBug for details.
- if (a.isCmp() && code.options.canHaveCmpLongBug()) {
+ if (a.isCmp() && options.canHaveCmpLongBug()) {
return false;
}
// Note that we don't consider positions because CSE can at most remove an instruction.
@@ -2786,7 +2788,7 @@
if (hasCSECandidate(code, noCandidate)) {
final ListMultimap<Wrapper<Instruction>, Value> instructionToValue =
ArrayListMultimap.create();
- final CSEExpressionEquivalence equivalence = new CSEExpressionEquivalence(code);
+ final CSEExpressionEquivalence equivalence = new CSEExpressionEquivalence(code, options);
final DominatorTree dominatorTree = new DominatorTree(code);
for (int i = 0; i < dominatorTree.getSortedBlocks().length; i++) {
BasicBlock block = dominatorTree.getSortedBlocks()[i];
@@ -3458,7 +3460,7 @@
*/
public static void removeUnneededMovesOnExitingPaths(
IRCode code, LinearScanRegisterAllocator allocator) {
- if (!code.options.debug) {
+ if (!allocator.options().debug) {
return;
}
for (BasicBlock block : code.blocks) {
@@ -3765,16 +3767,15 @@
iterator.add(new InvokeVirtual(printLn, null, ImmutableList.of(out, empty)));
}
- public static void ensureDirectStringNewToInit(IRCode code) {
- DexItemFactory factory = code.options.itemFactory;
+ public static void ensureDirectStringNewToInit(IRCode code, DexItemFactory dexItemFactory) {
for (BasicBlock block : code.blocks) {
for (InstructionListIterator it = block.listIterator(); it.hasNext(); ) {
Instruction instruction = it.next();
if (instruction.isInvokeDirect()) {
InvokeDirect invoke = instruction.asInvokeDirect();
DexMethod method = invoke.getInvokedMethod();
- if (factory.isConstructor(method)
- && method.holder == factory.stringType
+ if (dexItemFactory.isConstructor(method)
+ && method.holder == dexItemFactory.stringType
&& invoke.getReceiver().isPhi()) {
NewInstance newInstance = findNewInstance(invoke.getReceiver().asPhi());
replaceTrivialNewInstancePhis(newInstance.outValue());
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 5e8a11b..13d5c77 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
@@ -192,7 +192,7 @@
codeRewriter.simplifyIf(code);
// If a method was inlined we may see more trivial computation/conversion of String.
boolean isDebugMode =
- code.options.debug || method.getOptimizationInfo().isReachabilitySensitive();
+ appView.options().debug || method.getOptimizationInfo().isReachabilitySensitive();
if (!isDebugMode) {
// Reflection/string optimization 3. trivial conversion/computation on const-string
stringOptimizer.computeTrivialOperationsOnConstString(code);
diff --git a/src/main/java/com/android/tools/r8/ir/regalloc/SpillMoveSet.java b/src/main/java/com/android/tools/r8/ir/regalloc/SpillMoveSet.java
index c7dd142..ede8aaf 100644
--- a/src/main/java/com/android/tools/r8/ir/regalloc/SpillMoveSet.java
+++ b/src/main/java/com/android/tools/r8/ir/regalloc/SpillMoveSet.java
@@ -370,7 +370,7 @@
// In case the runtime might have a bound-check elimination bug we make sure to define all
// indexing constants with an actual const instruction rather than a move. This appears to
// avoid a bug where the index variable could end up being uninitialized.
- if (code.options.canHaveBoundsCheckEliminationBug()
+ if (allocator.options().canHaveBoundsCheckEliminationBug()
&& move.from.getValue().isConstNumber()
&& move.type.isSingle()
&& allocator.unadjustedRealRegisterFromAllocated(move.to.getRegister()) < 256) {