aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/android/tools/r8/ir/optimize/PeepholeOptimizer.java
diff options
context:
space:
mode:
authormikaelpeltier <mikaelpeltier@google.com>2017-07-17 17:52:11 +0200
committermikaelpeltier <mikaelpeltier@google.com>2017-07-17 17:52:11 +0200
commit863b970924a7d6dfb211284d8a7a629deaa5cce5 (patch)
tree35b28257a9c769dd58ed667fa47d23c3307bdf70 /src/main/java/com/android/tools/r8/ir/optimize/PeepholeOptimizer.java
parenta19e721dd6d7728063e33299855c3c19813482e5 (diff)
downloadr8-863b970924a7d6dfb211284d8a7a629deaa5cce5.tar.gz
Do not assign same number to different basic block
- shareIdenticalBlockSuffix optimization does not longer assign the same number to different basic block. It complicates debugging and it prevents to use basic block number as array index. - add an assertion into isConsistentGraph to guarantee this assumption. Change-Id: I561b7f52ee964c79cdca7d887791355c04ef2ebc
Diffstat (limited to 'src/main/java/com/android/tools/r8/ir/optimize/PeepholeOptimizer.java')
-rw-r--r--src/main/java/com/android/tools/r8/ir/optimize/PeepholeOptimizer.java3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/PeepholeOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/PeepholeOptimizer.java
index de81dfeff..9a7086453 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/PeepholeOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/PeepholeOptimizer.java
@@ -42,6 +42,7 @@ public class PeepholeOptimizer {
private static void shareIdenticalBlockSuffix(IRCode code, RegisterAllocator allocator) {
Collection<BasicBlock> blocks = code.blocks;
do {
+ int startNumberOfNewBlock = code.getHighestBlockNumber() + 1;
Map<BasicBlock, BasicBlock> newBlocks = new IdentityHashMap<>();
for (BasicBlock block : blocks) {
InstructionEquivalence equivalence = new InstructionEquivalence(allocator);
@@ -79,7 +80,7 @@ public class PeepholeOptimizer {
commonSuffixSize, sharedSuffixSizeExcludingExit(firstPred, pred, allocator));
}
assert commonSuffixSize >= 1;
- int blockNumber = code.blocks.size() + newBlocks.size();
+ int blockNumber = startNumberOfNewBlock + newBlocks.size();
BasicBlock newBlock = createAndInsertBlockForSuffix(
blockNumber, commonSuffixSize, predsWithSameLastInstruction, block);
newBlocks.put(predsWithSameLastInstruction.get(0), newBlock);