Merge "Introduce IRCode#entryBlock."
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/constant/SparseConditionalConstantPropagation.java b/src/main/java/com/android/tools/r8/ir/analysis/constant/SparseConditionalConstantPropagation.java
index b4ff421..ad95b05 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/constant/SparseConditionalConstantPropagation.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/constant/SparseConditionalConstantPropagation.java
@@ -45,7 +45,7 @@
public void run() {
- BasicBlock firstBlock = code.blocks.get(0);
+ BasicBlock firstBlock = code.entryBlock();
visitInstructions(firstBlock);
while (!flowEdges.isEmpty() || !ssaEdges.isEmpty()) {
diff --git a/src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionIterator.java b/src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionIterator.java
index 04f56f5..1ab0670 100644
--- a/src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionIterator.java
+++ b/src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionIterator.java
@@ -303,7 +303,7 @@
for (int i = 0; i < inlinee.blocks.size(); i++) {
blocksIterator.previous();
}
- assert IteratorUtils.peekNext(blocksIterator) == inlinee.blocks.getFirst();
+ assert IteratorUtils.peekNext(blocksIterator) == inlinee.entryBlock();
// Iterate through the inlined blocks.
for (BasicBlock inlinedBlock : inlinee.blocks) {
BasicBlock expected = blocksIterator.next();
@@ -364,7 +364,7 @@
List<Value> arguments = inlinee.collectArguments();
assert invoke.inValues().size() == arguments.size();
- BasicBlock entryBlock = inlinee.blocks.getFirst();
+ BasicBlock entryBlock = inlinee.entryBlock();
InstructionListIterator entryBlockIterator;
int i = 0;
@@ -425,7 +425,7 @@
new TypeAnalysis(appInfo, inlinee.method).narrowing(argumentUsers);
// The inline entry is the first block now the argument instructions are gone.
- BasicBlock inlineEntry = inlinee.blocks.getFirst();
+ BasicBlock inlineEntry = inlinee.entryBlock();
BasicBlock inlineExit = null;
List<BasicBlock> normalExits = inlinee.computeNormalExitBlocks();
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 870ae6f..0d96f0d 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
@@ -136,6 +136,10 @@
this.hasConstString |= inlinee.hasConstString;
}
+ public BasicBlock entryBlock() {
+ return blocks.getFirst();
+ }
+
/**
* Compute the set of live values at the entry to each block using a backwards data-flow analysis.
*/
@@ -416,7 +420,7 @@
ArrayList<BasicBlock> reverseOrdered = new ArrayList<>(blocks.size());
Set<BasicBlock> visitedBlocks = new HashSet<>(blocks.size());
Deque<Object> worklist = new ArrayDeque<>(blocks.size());
- worklist.addLast(blocks.getFirst());
+ worklist.addLast(entryBlock());
while (!worklist.isEmpty()) {
Object item = worklist.removeLast();
if (item instanceof BlockMarker) {
@@ -768,7 +772,7 @@
public List<Value> collectArguments(boolean ignoreReceiver) {
final List<Value> arguments = new ArrayList<>();
- Iterator<Instruction> iterator = blocks.get(0).iterator();
+ Iterator<Instruction> iterator = entryBlock().iterator();
while (iterator.hasNext()) {
Instruction instruction = iterator.next();
if (instruction.isArgument()) {
@@ -787,7 +791,7 @@
if (method.accessFlags.isStatic()) {
return null;
}
- Instruction firstArg = blocks.getFirst().listIterator().nextUntil(Instruction::isArgument);
+ Instruction firstArg = entryBlock().listIterator().nextUntil(Instruction::isArgument);
assert firstArg != null;
Value thisValue = firstArg.asArgument().outValue();
assert thisValue.isThis();
@@ -910,7 +914,7 @@
public Set<BasicBlock> getUnreachableBlocks() {
Set<BasicBlock> unreachableBlocks = Sets.newIdentityHashSet();
int color = reserveMarkingColor();
- markTransitiveSuccessors(blocks.getFirst(), color);
+ markTransitiveSuccessors(entryBlock(), color);
for (BasicBlock block : blocks) {
if (!block.isMarked(color)) {
unreachableBlocks.add(block);
@@ -923,7 +927,7 @@
public Set<Value> removeUnreachableBlocks() {
ImmutableSet.Builder<Value> affectedValueBuilder = ImmutableSet.builder();
int color = reserveMarkingColor();
- markTransitiveSuccessors(blocks.getFirst(), color);
+ markTransitiveSuccessors(entryBlock(), color);
ListIterator<BasicBlock> blockIterator = listIterator();
while (blockIterator.hasNext()) {
BasicBlock current = blockIterator.next();
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 b1bb84e..b5f3a2d 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
@@ -201,7 +201,7 @@
BasicBlock blk = block; // Additional local for lambda below.
assert !block.isTrivialGoto()
|| block.exit().asGoto().getTarget() == block
- || code.blocks.get(0) == block
+ || code.entryBlock() == block
|| block.getPredecessors().stream().anyMatch((b) -> b.exit().fallthroughBlock() == blk);
// Trivial goto blocks never target the next block (in that case there should just be a
// fallthrough).
@@ -242,7 +242,7 @@
// Not targeting the fallthrough block, determine if we need this goto. We need it if
// a fallthrough can hit this block. That is the case if the block is the entry block
// or if one of the predecessors fall through to the block.
- needed = code.blocks.get(0) == block || isFallthroughBlock(block);
+ needed = code.entryBlock() == block || isFallthroughBlock(block);
}
if (!needed) {
@@ -1535,7 +1535,7 @@
final int color = code.reserveMarkingColor();
try {
ArrayDeque<BasicBlock> worklist = new ArrayDeque<>();
- final BasicBlock entry = code.blocks.getFirst();
+ final BasicBlock entry = code.entryBlock();
worklist.add(entry);
entry.mark(color);
@@ -2032,7 +2032,7 @@
Set<StaticPut> puts, Map<DexField, StaticPut> finalFieldPut) {
final int color = code.reserveMarkingColor();
try {
- BasicBlock block = code.blocks.getFirst();
+ BasicBlock block = code.entryBlock();
while (!block.isMarked(color) && block.getPredecessors().size() <= 1) {
block.mark(color);
InstructionListIterator it = block.listIterator();
@@ -3897,7 +3897,7 @@
*/
public void logArgumentTypes(DexEncodedMethod method, IRCode code) {
List<Value> arguments = code.collectArguments();
- BasicBlock block = code.blocks.getFirst();
+ BasicBlock block = code.entryBlock();
InstructionListIterator iterator = block.listIterator();
// Attach some synthetic position to all inserted code.
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/ConstantCanonicalizer.java b/src/main/java/com/android/tools/r8/ir/optimize/ConstantCanonicalizer.java
index 4c437bd..53da564 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/ConstantCanonicalizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/ConstantCanonicalizer.java
@@ -90,7 +90,7 @@
// Double-check the entry block does not have catch handlers.
// Otherwise, we need to split it before moving canonicalized const-string, which may throw.
- assert !code.blocks.getFirst().hasCatchHandlers();
+ assert !code.entryBlock().hasCatchHandlers();
Position firstNonNonePosition = findFirstNonNonePosition(code);
FastSortedEntrySet<ConstInstruction, List<Value>> entries =
valuesDefinedByConstant.object2ObjectEntrySet();
@@ -124,7 +124,7 @@
private static void insertCanonicalizedConstant(
IRCode code, ConstInstruction canonicalizedConstant) {
- BasicBlock entryBlock = code.blocks.get(0);
+ BasicBlock entryBlock = code.entryBlock();
// Insert the constant instruction at the start of the block right after the argument
// instructions. It is important that the const instruction is put before any instruction
// that can throw exceptions (since the value could be used on the exceptional edge).
@@ -139,7 +139,7 @@
}
private static Position findFirstNonNonePosition(IRCode code) {
- BasicBlock entryBlock = code.blocks.get(0);
+ BasicBlock entryBlock = code.entryBlock();
Instruction rightAfterArguments =
entryBlock.listIterator().nextUntil(instr -> !instr.isArgument());
Position firstNonArgumentPosition = rightAfterArguments.getPosition();
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/IdempotentFunctionCallCanonicalizer.java b/src/main/java/com/android/tools/r8/ir/optimize/IdempotentFunctionCallCanonicalizer.java
index 229611d..2e31219 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/IdempotentFunctionCallCanonicalizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/IdempotentFunctionCallCanonicalizer.java
@@ -183,7 +183,7 @@
}
private static void insertCanonicalizedInvoke(IRCode code, Invoke canonicalizedInvoke) {
- BasicBlock entryBlock = code.blocks.get(0);
+ BasicBlock entryBlock = code.entryBlock();
// Insert the canonicalized invoke after in values.
int numberOfInValuePassed = 0;
InstructionListIterator it = entryBlock.listIterator();
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/NonNullTracker.java b/src/main/java/com/android/tools/r8/ir/optimize/NonNullTracker.java
index cbdeaac..dd84122 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/NonNullTracker.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/NonNullTracker.java
@@ -422,8 +422,7 @@
// Stop traversing upwards if we hit the entry block: if the entry block has an non-null,
// this case should be handled already by A) because the entry block surely dominates all
// normal exits.
- // TODO(b/120787963): code.entryBlock()
- if (uncoveredPath == code.blocks.getFirst()) {
+ if (uncoveredPath == code.entryBlock()) {
return false;
}
// Make sure we're not visiting the same block over and over again.
diff --git a/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java b/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java
index 170c39e..51f9de0 100644
--- a/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java
+++ b/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java
@@ -189,7 +189,7 @@
this.code = code;
this.options = options;
int argumentRegisters = 0;
- for (Instruction instruction : code.blocks.getFirst().getInstructions()) {
+ for (Instruction instruction : code.entryBlock().getInstructions()) {
if (instruction.isArgument()) {
argumentRegisters += instruction.outValue().requiredRegisters();
}
@@ -2506,7 +2506,7 @@
// VMs we block the receiver register throughout the method.
if ((options.canHaveThisTypeVerifierBug() || options.canHaveThisJitCodeDebuggingBug())
&& !code.method.accessFlags.isStatic()) {
- for (Instruction instruction : code.blocks.get(0).getInstructions()) {
+ for (Instruction instruction : code.entryBlock().getInstructions()) {
if (instruction.isArgument() && instruction.outValue().isThis()) {
Value thisValue = instruction.outValue();
LiveIntervals thisIntervals = thisValue.getLiveIntervals();
@@ -2674,8 +2674,8 @@
// be original, consecutive arguments of the enclosing method (and importantly, not values that
// have been defined by a check-cast instruction).
private void transformBridgeMethod() {
- assert implementationIsBridge(this.code);
- BasicBlock entry = this.code.blocks.getFirst();
+ assert implementationIsBridge(code);
+ BasicBlock entry = code.entryBlock();
InstructionListIterator iterator = entry.listIterator();
// Create a mapping from argument values to their index, while scanning over the arguments.
Reference2IntMap<Value> argumentIndices = new Reference2IntArrayMap<>();
@@ -2733,7 +2733,7 @@
if (code.blocks.size() > 1) {
return false;
}
- InstructionListIterator iterator = code.blocks.getFirst().listIterator();
+ InstructionListIterator iterator = code.entryBlock().listIterator();
// Move forward to the first instruction after the definition of the arguments.
while (iterator.hasNext() && iterator.peekNext().isArgument()) {
iterator.next();
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 8489866..0d25746 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
@@ -166,7 +166,7 @@
public int scheduleAndInsertMoves(int tempRegister) {
for (BasicBlock block : code.blocks) {
InstructionListIterator insertAt = block.listIterator();
- if (block == code.blocks.getFirst()) {
+ if (block == code.entryBlock()) {
// Move insertAt iterator to the first non-argument, such that moves for the arguments will
// be inserted after the last argument.
while (insertAt.hasNext() && insertAt.peekNext().isArgument()) {
diff --git a/src/test/java/com/android/tools/r8/cf/TryRangeTestRunner.java b/src/test/java/com/android/tools/r8/cf/TryRangeTestRunner.java
index 926a22d..b730618 100644
--- a/src/test/java/com/android/tools/r8/cf/TryRangeTestRunner.java
+++ b/src/test/java/com/android/tools/r8/cf/TryRangeTestRunner.java
@@ -91,7 +91,7 @@
if (!code.method.qualifiedName().equals(TryRangeTestLimitRange.class.getName() + ".main")) {
return;
}
- BasicBlock entryBlock = code.blocks.get(0);
+ BasicBlock entryBlock = code.entryBlock();
BasicBlock tryBlock = code.blocks.get(1);
assertTrue(tryBlock.hasCatchHandlers());
ListIterator<Instruction> it = entryBlock.getInstructions().listIterator();
diff --git a/src/test/java/com/android/tools/r8/ir/InlineTest.java b/src/test/java/com/android/tools/r8/ir/InlineTest.java
index a459a9c..68b466a 100644
--- a/src/test/java/com/android/tools/r8/ir/InlineTest.java
+++ b/src/test/java/com/android/tools/r8/ir/InlineTest.java
@@ -101,7 +101,7 @@
// Run code inlining a.
test = codeForMethodReplaceTest(a, b);
- iterator = test.code.blocks.get(0).listIterator();
+ iterator = test.code.entryBlock().listIterator();
iterator.nextUntil(instruction -> instruction.isInvoke());
iterator.previous();
iterator.inlineInvoke(test.appInfo, test.code, test.additionalCode.get(0));
@@ -110,7 +110,7 @@
// Run code inlining b (where a is actually called).
test = codeForMethodReplaceTest(a, b);
- iterator = test.code.blocks.get(0).listIterator();
+ iterator = test.code.entryBlock().listIterator();
iterator.nextUntil(instruction -> instruction.isInvoke());
iterator.previous();
iterator.inlineInvoke(test.appInfo, test.code, test.additionalCode.get(1));
@@ -183,7 +183,7 @@
// Run code inlining a.
test = codeForMethodReplaceReturnVoidTest(1, 2);
- iterator = test.code.blocks.get(0).listIterator();
+ iterator = test.code.entryBlock().listIterator();
iterator.nextUntil(instruction -> instruction.isInvoke());
iterator.previous();
iterator.inlineInvoke(test.appInfo, test.code, test.additionalCode.get(0));
@@ -519,7 +519,7 @@
// Run code inlining a.
test = codeForInlineCanThrow(a, b, twoGuards);
- iterator = test.code.blocks.get(0).listIterator();
+ iterator = test.code.entryBlock().listIterator();
iterator.nextUntil(instruction -> instruction.isInvoke());
iterator.previous();
iterator.inlineInvoke(test.appInfo, test.code, test.additionalCode.get(0));
@@ -528,7 +528,7 @@
// Run code inlining b (where a is actually called).
test = codeForInlineCanThrow(a, b, twoGuards);
- iterator = test.code.blocks.get(0).listIterator();
+ iterator = test.code.entryBlock().listIterator();
iterator.nextUntil(instruction -> instruction.isInvoke());
iterator.previous();
iterator.inlineInvoke(test.appInfo, test.code, test.additionalCode.get(1));
@@ -633,7 +633,7 @@
// Run code inlining a.
test = codeForInlineAlwaysThrows(twoGuards);
- iterator = test.code.blocks.get(0).listIterator();
+ iterator = test.code.entryBlock().listIterator();
iterator.nextUntil(Instruction::isInvoke);
iterator.previous();
iterator.inlineInvoke(test.appInfo, test.code, test.additionalCode.get(0));
@@ -643,7 +643,7 @@
// Run code inlining b (where a is actually called).
test = codeForInlineAlwaysThrows(twoGuards);
- iterator = test.code.blocks.get(0).listIterator();
+ iterator = test.code.entryBlock().listIterator();
iterator.nextUntil(Instruction::isInvoke);
iterator.previous();
iterator.inlineInvoke(test.appInfo, test.code, test.additionalCode.get(1));
diff --git a/src/test/java/com/android/tools/r8/ir/IrInjectionTestBase.java b/src/test/java/com/android/tools/r8/ir/IrInjectionTestBase.java
index 1152903..066c51a 100644
--- a/src/test/java/com/android/tools/r8/ir/IrInjectionTestBase.java
+++ b/src/test/java/com/android/tools/r8/ir/IrInjectionTestBase.java
@@ -104,7 +104,7 @@
public int countArgumentInstructions() {
int count = 0;
- ListIterator<Instruction> iterator = code.blocks.get(0).listIterator();
+ ListIterator<Instruction> iterator = code.entryBlock().listIterator();
while (iterator.next().isArgument()) {
count++;
}
diff --git a/src/test/java/com/android/tools/r8/ir/LinearFlowIteratorTest.java b/src/test/java/com/android/tools/r8/ir/LinearFlowIteratorTest.java
index 3001b98..0a11f41 100644
--- a/src/test/java/com/android/tools/r8/ir/LinearFlowIteratorTest.java
+++ b/src/test/java/com/android/tools/r8/ir/LinearFlowIteratorTest.java
@@ -107,7 +107,7 @@
@Test
public void hasNextWillCheckNextBlock() throws Exception {
IRCode code = simpleCode();
- InstructionListIterator it = new LinearFlowInstructionIterator(code.blocks.get(0));
+ InstructionListIterator it = new LinearFlowInstructionIterator(code.entryBlock());
Instruction current = it.next();
current = it.next();
assert it.hasNext();
@@ -116,7 +116,7 @@
@Test
public void nextWillContinueThroughGotoBlocks() throws Exception {
IRCode code = simpleCode();
- InstructionListIterator it = new LinearFlowInstructionIterator(code.blocks.get(0));
+ InstructionListIterator it = new LinearFlowInstructionIterator(code.entryBlock());
Instruction current = it.next();
current = it.next();
current = it.next();
@@ -142,7 +142,7 @@
public void GoToFrontAndBackIsSameAmountOfInstructions() throws Exception {
IRCode code = simpleCode();
int moves = 0;
- InstructionListIterator it = new LinearFlowInstructionIterator(code.blocks.get(0));
+ InstructionListIterator it = new LinearFlowInstructionIterator(code.entryBlock());
while (it.hasNext()) {
it.next();
moves++;
@@ -169,7 +169,7 @@
@Test
public void doNotChangeToNextBlockWhenNotLinearFlow() throws Exception {
IRCode code = branchingCode();
- InstructionListIterator it = new LinearFlowInstructionIterator(code.blocks.get(0));
+ InstructionListIterator it = new LinearFlowInstructionIterator(code.entryBlock());
it.nextUntil((i) -> !i.isArgument());
Instruction current = it.next();
assert !it.hasNext();
diff --git a/src/test/java/com/android/tools/r8/ir/SplitBlockTest.java b/src/test/java/com/android/tools/r8/ir/SplitBlockTest.java
index c416c6e..2a6e8c8 100644
--- a/src/test/java/com/android/tools/r8/ir/SplitBlockTest.java
+++ b/src/test/java/com/android/tools/r8/ir/SplitBlockTest.java
@@ -83,7 +83,7 @@
IRCode code = test.code;
assertEquals(initialBlockCount, code.blocks.size());
- BasicBlock block = code.blocks.get(0);
+ BasicBlock block = code.entryBlock();
int instructionCount = block.getInstructions().size();
assertEquals(firstBlockInstructions, instructionCount);
@@ -96,7 +96,7 @@
assertTrue(code.isConsistentSSA());
assertEquals(initialBlockCount + 1, code.blocks.size());
- assertEquals(i + 1, code.blocks.get(0).getInstructions().size());
+ assertEquals(i + 1, code.entryBlock().getInstructions().size());
assertEquals(instructionCount - i, code.blocks.get(1).getInstructions().size());
assertSame(newBlock, code.blocks.get(1));
@@ -117,7 +117,7 @@
IRCode code = test.code;
assertEquals(initialBlockCount, code.blocks.size());
- BasicBlock block = code.blocks.get(0);
+ BasicBlock block = code.entryBlock();
int instructionCount = block.getInstructions().size();
assertEquals(firstBlockInstructions, instructionCount);
@@ -130,7 +130,7 @@
assertTrue(code.isConsistentSSA());
assertEquals(initialBlockCount + 2, code.blocks.size());
- assertEquals(i + 1, code.blocks.get(0).getInstructions().size());
+ assertEquals(i + 1, code.entryBlock().getInstructions().size());
assertEquals(2, code.blocks.get(1).getInstructions().size());
assertEquals(instructionCount - i - 1, code.blocks.get(2).getInstructions().size());
assertSame(newBlock, code.blocks.get(1));
@@ -329,7 +329,7 @@
IRCode code = test.code;
assertEquals(initialBlockCount, code.blocks.size());
- BasicBlock block = code.blocks.get(0);
+ BasicBlock block = code.entryBlock();
int instructionCount = block.getInstructions().size();
assertEquals(firstBlockInstructions, instructionCount);
@@ -342,7 +342,7 @@
assertTrue(code.isConsistentSSA());
assertEquals(initialBlockCount + 1, code.blocks.size());
- assertEquals(i + 1, code.blocks.get(0).getInstructions().size());
+ assertEquals(i + 1, code.entryBlock().getInstructions().size());
assertEquals(instructionCount - i, newBlock.getInstructions().size());
assertSame(newBlock, code.blocks.get(1));
@@ -457,7 +457,7 @@
IRCode code = test.code;
assertEquals(initialBlockCount, code.blocks.size());
- BasicBlock block = code.blocks.get(0);
+ BasicBlock block = code.entryBlock();
int instructionCount = block.getInstructions().size();
assertEquals(firstBlockInstructions, instructionCount);
@@ -470,7 +470,7 @@
assertTrue(code.isConsistentSSA());
assertEquals(initialBlockCount + 1, code.blocks.size());
- assertEquals(i + 1, code.blocks.get(0).getInstructions().size());
+ assertEquals(i + 1, code.entryBlock().getInstructions().size());
assertEquals(instructionCount - i, newBlock.getInstructions().size());
assertSame(newBlock, code.blocks.get(1));
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/ConstantRemovalTest.java b/src/test/java/com/android/tools/r8/ir/optimize/ConstantRemovalTest.java
index 927bff2..0df0f97 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/ConstantRemovalTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/ConstantRemovalTest.java
@@ -145,6 +145,6 @@
// Check that all four constant number instructions remain.
assertEquals(
4,
- code.blocks.get(0).getInstructions().stream().filter(Instruction::isConstNumber).count());
+ code.entryBlock().getInstructions().stream().filter(Instruction::isConstNumber).count());
}
}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/RedundantConstNumberRemovalTest.java b/src/test/java/com/android/tools/r8/ir/optimize/RedundantConstNumberRemovalTest.java
index 6b281cb..e2f47cd 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/RedundantConstNumberRemovalTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/RedundantConstNumberRemovalTest.java
@@ -102,7 +102,7 @@
// Only a single basic block.
assertEquals(1, code.blocks.size());
// The block only has three instructions.
- BasicBlock entryBlock = code.blocks.get(0);
+ BasicBlock entryBlock = code.entryBlock();
assertEquals(3, entryBlock.getInstructions().size());
// The first one is the `argument` instruction.
Instruction argument = entryBlock.getInstructions().getFirst();
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 3582403..a9e2157 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
@@ -83,7 +83,7 @@
false,
Origin.unknown());
CodeRewriter.collapseTrivialGotos(null, code);
- assertTrue(code.blocks.get(0).isTrivialGoto());
+ assertTrue(code.entryBlock().isTrivialGoto());
assertTrue(blocks.contains(block0));
assertTrue(blocks.contains(block1));
assertTrue(blocks.contains(block2));