summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Santiago Aboy Solanes <solanes@google.com> 2022-08-17 16:34:40 +0100
committer David Srbecky <dsrbecky@google.com> 2022-08-23 13:26:35 +0000
commitdb692461d217e59684baab57abcaf3055fa8ccf5 (patch)
treedd080f23ff8619ad9b5cf3ad60b755c982ad5f94
parenta8760e28393bdcceba603e8245bb52db369587a0 (diff)
Fix typo inversion in GenerateLastValueLinear
In https://android-review.googlesource.com/c/platform/art/+/2162257/3..5 we inverted an if clause but there was a typo when doing so and the inversion has to be fixed. Test: art/test/testrunner/testrunner.py --host --64 --optimizing -b Change-Id: I2ac8f64b832715dede2f7ccca627a0ef102dc0c2
-rw-r--r--compiler/optimizing/induction_var_range.cc2
-rw-r--r--test/618-checker-induction/src/Main.java29
2 files changed, 30 insertions, 1 deletions
diff --git a/compiler/optimizing/induction_var_range.cc b/compiler/optimizing/induction_var_range.cc
index cc62da848c..7f85483894 100644
--- a/compiler/optimizing/induction_var_range.cc
+++ b/compiler/optimizing/induction_var_range.cc
@@ -1128,7 +1128,7 @@ bool InductionVarRange::GenerateLastValueLinear(const HBasicBlock* context,
DataType::Type type = info->type;
// Avoid any narrowing linear induction or any type mismatch between the linear induction and the
// trip count expression.
- if (HInductionVarAnalysis::IsNarrowingLinear(info) && trip->type == info->type) {
+ if (HInductionVarAnalysis::IsNarrowingLinear(info) || trip->type != type) {
return false;
}
diff --git a/test/618-checker-induction/src/Main.java b/test/618-checker-induction/src/Main.java
index 7f17f30528..824a8dbd17 100644
--- a/test/618-checker-induction/src/Main.java
+++ b/test/618-checker-induction/src/Main.java
@@ -884,6 +884,32 @@ public class Main {
return k;
}
+ /// CHECK-START: long Main.closedLinearInductionUnmatchedTypesNotOptimized() loop_optimization (before)
+ /// CHECK-DAG: <<Phi1:i\d+>> Phi loop:<<Loop:B\d+>> outer_loop:none
+ /// CHECK-DAG: <<Phi2:j\d+>> Phi loop:<<Loop>> outer_loop:none
+ //
+ /// CHECK-START: long Main.closedLinearInductionUnmatchedTypesNotOptimized() loop_optimization (after)
+ /// CHECK-DAG: <<Phi1:i\d+>> Phi loop:<<Loop:B\d+>> outer_loop:none
+ /// CHECK-DAG: <<Phi2:j\d+>> Phi loop:<<Loop>> outer_loop:none
+ private static long closedLinearInductionUnmatchedTypesNotOptimized() {
+ long sum = 0;
+ for (int i = 0; i < 10; ++i) {
+ ++sum;
+ }
+ return sum;
+ }
+
+ /// CHECK-START: short Main.closedLinearInductionNarrowingNotOptimized() loop_optimization (before)
+ /// CHECK-DAG: <<Phi1:i\d+>> Phi loop:<<Loop:B\d+>> outer_loop:none
+ //
+ /// CHECK-START: short Main.closedLinearInductionNarrowingNotOptimized() loop_optimization (after)
+ /// CHECK-DAG: <<Phi1:i\d+>> Phi loop:<<Loop:B\d+>> outer_loop:none
+ private static short closedLinearInductionNarrowingNotOptimized() {
+ short i = 0;
+ for (; i < 10; ++i);
+ return i;
+ }
+
public static void main(String[] args) {
deadSingleLoop();
deadSingleLoopN(4);
@@ -983,6 +1009,9 @@ public class Main {
expectEquals(-41, exceptionExitBeforeAdd());
expectEquals(-51, exceptionExitAfterAdd());
+ expectEquals(10, closedLinearInductionUnmatchedTypesNotOptimized());
+ expectEquals(10, closedLinearInductionNarrowingNotOptimized());
+
System.out.println("passed");
}