Use the stored entry position when moving constants.
Bug: b/230337727
Change-Id: Ie5435c4a83abcbf9e1ce4015226ff681b8406eb0
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 9787686..2e6cc06 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
@@ -228,6 +228,7 @@
new IRCode(
appView.options(),
method,
+ callerPosition,
ListUtils.newLinkedList(block),
valueNumberGenerator,
blockNumberGenerator,
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 a363790..4656ad8 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
@@ -117,6 +117,7 @@
private final ProgramMethod method;
private final MutableMethodConversionOptions conversionOptions;
+ public final Position entryPosition;
public LinkedList<BasicBlock> blocks;
public final NumberGenerator valueNumberGenerator;
public final NumberGenerator basicBlockNumberGenerator;
@@ -133,6 +134,7 @@
public IRCode(
InternalOptions options,
ProgramMethod method,
+ Position entryPosition,
LinkedList<BasicBlock> blocks,
NumberGenerator valueNumberGenerator,
NumberGenerator basicBlockNumberGenerator,
@@ -142,9 +144,11 @@
assert metadata != null;
assert options != null;
assert blocks.size() == basicBlockNumberGenerator.peek();
+ assert entryPosition != null;
this.options = options;
this.conversionOptions = conversionOptions;
this.method = method;
+ this.entryPosition = entryPosition;
this.blocks = blocks;
this.valueNumberGenerator = valueNumberGenerator;
this.basicBlockNumberGenerator = basicBlockNumberGenerator;
@@ -169,6 +173,10 @@
return blocks.getFirst();
}
+ public Position getEntryPosition() {
+ return entryPosition;
+ }
+
public MethodConversionOptions getConversionOptions() {
return conversionOptions;
}
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 b46ebad..85ac399 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
@@ -703,6 +703,7 @@
new IRCode(
appView.options(),
method,
+ source.getCanonicalDebugPositionAtOffset(0),
blocks,
valueNumberGenerator,
basicBlockNumberGenerator,
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/SyntheticStraightLineSourceCode.java b/src/main/java/com/android/tools/r8/ir/conversion/SyntheticStraightLineSourceCode.java
index b505cf0..e8d830e 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/SyntheticStraightLineSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/SyntheticStraightLineSourceCode.java
@@ -63,7 +63,7 @@
@Override
public Position getCanonicalDebugPositionAtOffset(int offset) {
- return null;
+ return Position.syntheticNone();
}
@Override
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 99ebaba..bf34207 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
@@ -279,10 +279,7 @@
while (it.hasNext()) {
Instruction next = it.next();
if (!next.isArgument()) {
- // Set the constant to be the same position as the point at which it is inserted.
- // Doing so preserves the "break on entry / break on first line behavior" as the constant
- // itself is assumed to be a non-observable change.
- canonicalizedConstant.setPosition(next.getPosition());
+ canonicalizedConstant.setPosition(code.getEntryPosition());
it.previous();
break;
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/OutlinerImpl.java b/src/main/java/com/android/tools/r8/ir/optimize/OutlinerImpl.java
index 734e09e..2cab3fb 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/OutlinerImpl.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/OutlinerImpl.java
@@ -1738,7 +1738,7 @@
@Override
public Position getCanonicalDebugPositionAtOffset(int offset) {
- throw new Unreachable();
+ return Position.syntheticNone();
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/code/CheckNotZeroCode.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/code/CheckNotZeroCode.java
index dd73d7e..6e187ae 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/code/CheckNotZeroCode.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/code/CheckNotZeroCode.java
@@ -83,6 +83,7 @@
return new IRCode(
appView.options(),
checkNotZeroMethod,
+ code.getEntryPosition(),
code.getBlocks(),
code.valueNumberGenerator,
code.basicBlockNumberGenerator,
diff --git a/src/main/java/com/android/tools/r8/ir/synthetic/SyntheticSourceCode.java b/src/main/java/com/android/tools/r8/ir/synthetic/SyntheticSourceCode.java
index c81383c..8e0d7d4 100644
--- a/src/main/java/com/android/tools/r8/ir/synthetic/SyntheticSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/synthetic/SyntheticSourceCode.java
@@ -207,7 +207,7 @@
@Override
public Position getCanonicalDebugPositionAtOffset(int offset) {
- throw new Unreachable();
+ return Position.syntheticNone();
}
@Override
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 1427b24..9a0d0ce 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
@@ -142,6 +142,7 @@
new IRCode(
options,
null,
+ Position.none(),
blocks,
new NumberGenerator(),
basicBlockNumberGenerator,
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 7bbc000..ea86918 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
@@ -100,6 +100,7 @@
new IRCode(
options,
null,
+ Position.none(),
blocks,
new NumberGenerator(),
basicBlockNumberGenerator,
@@ -188,6 +189,7 @@
new IRCode(
options,
null,
+ Position.none(),
blocks,
new NumberGenerator(),
basicBlockNumberGenerator,
diff --git a/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java b/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
index dd40ecf..4d546d1 100644
--- a/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
+++ b/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
@@ -1014,7 +1014,7 @@
@Override
public Position getCanonicalDebugPositionAtOffset(int offset) {
- throw new Unreachable();
+ return Position.none();
}
@Override