diff options
author | David Brazdil <dbrazdil@google.com> | 2015-04-21 16:36:35 +0100 |
---|---|---|
committer | David Brazdil <dbrazdil@google.com> | 2015-04-21 17:17:11 +0100 |
commit | 7d275379bf490a87805852129e3fe2e8afe961e7 (patch) | |
tree | d0bbe856872c92773931c62e6881b0305a916236 /test/478-checker-inliner-nested-loop | |
parent | 223f2f5b2a20ca8246da1523494900a2424d5956 (diff) | |
download | art-7d275379bf490a87805852129e3fe2e8afe961e7.tar.gz art-7d275379bf490a87805852129e3fe2e8afe961e7.tar.bz2 art-7d275379bf490a87805852129e3fe2e8afe961e7.zip |
ART: Update loop info of all nested loops when inlining
When inlining into a nested loop, the inliner would only add the new
blocks into the innermost loop info object. This patch fixes that and
modifies SsaChecker to verify the property.
Change-Id: I21d343a6f7d972f5b7420701f816c65ab3f20566
Diffstat (limited to 'test/478-checker-inliner-nested-loop')
-rw-r--r-- | test/478-checker-inliner-nested-loop/expected.txt | 0 | ||||
-rw-r--r-- | test/478-checker-inliner-nested-loop/info.txt | 2 | ||||
-rw-r--r-- | test/478-checker-inliner-nested-loop/src/Main.java | 57 |
3 files changed, 59 insertions, 0 deletions
diff --git a/test/478-checker-inliner-nested-loop/expected.txt b/test/478-checker-inliner-nested-loop/expected.txt new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/test/478-checker-inliner-nested-loop/expected.txt diff --git a/test/478-checker-inliner-nested-loop/info.txt b/test/478-checker-inliner-nested-loop/info.txt new file mode 100644 index 0000000000..c221e37285 --- /dev/null +++ b/test/478-checker-inliner-nested-loop/info.txt @@ -0,0 +1,2 @@ +Tests inlining into a nested loop. SSAChecker should verify that +loop information was updated correctly. diff --git a/test/478-checker-inliner-nested-loop/src/Main.java b/test/478-checker-inliner-nested-loop/src/Main.java new file mode 100644 index 0000000000..df583d9302 --- /dev/null +++ b/test/478-checker-inliner-nested-loop/src/Main.java @@ -0,0 +1,57 @@ +/* +* Copyright (C) 2015 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + + +public class Main { + + public static void assertIntEquals(int expected, int result) { + if (expected != result) { + throw new Error("Expected: " + expected + ", found: " + result); + } + } + + public static int Inline(int x, int y) { + int result; + if (x <= y) { + result = x * y; + } else { + result = 0; + } + return result; + } + + // CHECK-START: int Main.NestedLoop(int, int) inliner (before) + // CHECK-NOT: Mul + + // CHECK-START: int Main.NestedLoop(int, int) inliner (after) + // CHECK: Mul + // CHECK-NOT: Mul + + public static int NestedLoop(int max_x, int max_y) { + int total = 0; + for (int x = 0; x < max_x; ++x) { + for (int y = 0; y < max_y; ++y) { + total += Inline(x, y); + } + } + return total; + } + + public static void main(String[] args) { + assertIntEquals(0, NestedLoop(1, 1)); + assertIntEquals(3, NestedLoop(2, 3)); + } +} |