diff options
author | mikaelpeltier <mikaelpeltier@google.com> | 2017-07-17 17:52:11 +0200 |
---|---|---|
committer | mikaelpeltier <mikaelpeltier@google.com> | 2017-07-17 17:52:11 +0200 |
commit | 863b970924a7d6dfb211284d8a7a629deaa5cce5 (patch) | |
tree | 35b28257a9c769dd58ed667fa47d23c3307bdf70 /src/main/java/com/android/tools/r8/ir/optimize/PeepholeOptimizer.java | |
parent | a19e721dd6d7728063e33299855c3c19813482e5 (diff) | |
download | r8-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.java | 3 |
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); |