diff options
Diffstat (limited to 'test/623-checker-loop-regressions/src/Main.java')
-rw-r--r-- | test/623-checker-loop-regressions/src/Main.java | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/test/623-checker-loop-regressions/src/Main.java b/test/623-checker-loop-regressions/src/Main.java index 134e90c6c5..5e9b3d7e15 100644 --- a/test/623-checker-loop-regressions/src/Main.java +++ b/test/623-checker-loop-regressions/src/Main.java @@ -977,6 +977,39 @@ public class Main { return s0 + s1; } + // Regression test for the case, where a loop is vectorized in predicated mode, and there is + // a disambiguation scalar loop added. Make sure that the set, which records instructions + // inserted outside of new loops, is not reset until the full vectorization process has + // happened. + // + // Based on void android.util.Spline$MonotoneCubicSpline.<init>(float[], float[]). + // + /// CHECK-START-ARM64: void Main.$noinline$testExternalSetForLoopWithDisambiguation(int[], int[]) loop_optimization (after) + /// CHECK-IF: hasIsaFeature("sve") and os.environ.get('ART_FORCE_TRY_PREDICATED_SIMD') == 'true' + // + /// CHECK-DAG: <<Pred:j\d+>> VecPredSetAll loop:none + /// CHECK-DAG: VecReplicateScalar [{{i\d+}},<<Pred>>] loop:none + // + /// CHECK-ELSE: + // + /// CHECK-DAG: VecReplicateScalar loop:none + // + /// CHECK-FI: + // + // Vector loop. + /// CHECK-DAG: Phi loop:<<VectorLoop:B\d+>> outer_loop:none + /// CHECK-DAG: VecLoad loop:<<VectorLoop>> outer_loop:none + // + // Backup scalar loop. + /// CHECK-DAG: Phi loop:<<ScalarLoop:B\d+>> outer_loop:none + /// CHECK-DAG: ArrayGet loop:<<ScalarLoop>> outer_loop:none + public static void $noinline$testExternalSetForLoopWithDisambiguation(int[] d, int[] m) { + m[0] = d[0]; + for (int i = 1; i < m.length; i++) { + m[i] = (d[i - 1] + d[i]) * 53; + } + } + public static final int ARRAY_SIZE = 512; private static byte[] createAndInitByteArray(int x) { @@ -1253,6 +1286,17 @@ public class Main { byte[] b_b = createAndInitByteArray(2); expectEquals(1278, testSADAndDotProdCombined1(b_a, b_b)); } + { + int[] i_a = createAndInitIntArray(1); + int[] i_b = createAndInitIntArray(2); + $noinline$testExternalSetForLoopWithDisambiguation(i_a, i_b); + + int sum = 0; + for (int i = 0; i < i_b.length; i++) { + sum += i_b[i]; + } + expectEquals(-13839413, sum); + } System.out.println("passed"); } |