blob: 3960c40bcc40950923ab79273788d06318ac0043 [file] [log] [blame]
/*
* Copyright (C) 2017 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.
*/
/**
* Tests for zero vectorization.
*/
public class Main {
/// CHECK-START: void Main.zeroz(boolean[]) loop_optimization (before)
/// CHECK-DAG: <<Zero:i\d+>> IntConstant 0 loop:none
/// CHECK-DAG: <<Phi:i\d+>> Phi loop:<<Loop:B\d+>> outer_loop:none
/// CHECK-DAG: ArraySet [{{l\d+}},<<Phi>>,<<Zero>>] loop:<<Loop>> outer_loop:none
//
/// CHECK-START-ARM64: void Main.zeroz(boolean[]) loop_optimization (after)
/// CHECK-DAG: <<Zero:i\d+>> IntConstant 0 loop:none
/// CHECK-IF: hasIsaFeature("sve")
//
/// CHECK-DAG: <<Repl:d\d+>> VecReplicateScalar [<<Zero>>,{{j\d+}}] loop:none
/// CHECK-DAG: <<Phi:i\d+>> Phi loop:<<Loop:B\d+>> outer_loop:none
/// CHECK-DAG: VecStore [{{l\d+}},<<Phi>>,<<Repl>>,{{j\d+}}] loop:<<Loop>> outer_loop:none
//
/// CHECK-ELSE:
//
/// CHECK-DAG: <<Repl:d\d+>> VecReplicateScalar [<<Zero>>] loop:none
/// CHECK-DAG: <<Phi:i\d+>> Phi loop:<<Loop:B\d+>> outer_loop:none
/// CHECK-DAG: VecStore [{{l\d+}},<<Phi>>,<<Repl>>] loop:<<Loop>> outer_loop:none
//
/// CHECK-FI:
private static void zeroz(boolean[] x) {
for (int i = 0; i < x.length; i++) {
x[i] = false;
}
}
/// CHECK-START: void Main.zerob(byte[]) loop_optimization (before)
/// CHECK-DAG: <<Zero:i\d+>> IntConstant 0 loop:none
/// CHECK-DAG: <<Phi:i\d+>> Phi loop:<<Loop:B\d+>> outer_loop:none
/// CHECK-DAG: ArraySet [{{l\d+}},<<Phi>>,<<Zero>>] loop:<<Loop>> outer_loop:none
//
/// CHECK-START-ARM64: void Main.zerob(byte[]) loop_optimization (after)
/// CHECK-DAG: <<Zero:i\d+>> IntConstant 0 loop:none
/// CHECK-IF: hasIsaFeature("sve")
//
/// CHECK-DAG: <<Repl:d\d+>> VecReplicateScalar [<<Zero>>,{{j\d+}}] loop:none
/// CHECK-DAG: <<Phi:i\d+>> Phi loop:<<Loop:B\d+>> outer_loop:none
/// CHECK-DAG: VecStore [{{l\d+}},<<Phi>>,<<Repl>>,{{j\d+}}] loop:<<Loop>> outer_loop:none
//
/// CHECK-ELSE:
//
/// CHECK-DAG: <<Repl:d\d+>> VecReplicateScalar [<<Zero>>] loop:none
/// CHECK-DAG: <<Phi:i\d+>> Phi loop:<<Loop:B\d+>> outer_loop:none
/// CHECK-DAG: VecStore [{{l\d+}},<<Phi>>,<<Repl>>] loop:<<Loop>> outer_loop:none
//
/// CHECK-FI:
private static void zerob(byte[] x) {
for (int i = 0; i < x.length; i++) {
x[i] = 0;
}
}
/// CHECK-START: void Main.zeroc(char[]) loop_optimization (before)
/// CHECK-DAG: <<Zero:i\d+>> IntConstant 0 loop:none
/// CHECK-DAG: <<Phi:i\d+>> Phi loop:<<Loop:B\d+>> outer_loop:none
/// CHECK-DAG: ArraySet [{{l\d+}},<<Phi>>,<<Zero>>] loop:<<Loop>> outer_loop:none
//
/// CHECK-START-ARM64: void Main.zeroc(char[]) loop_optimization (after)
/// CHECK-DAG: <<Zero:i\d+>> IntConstant 0 loop:none
/// CHECK-IF: hasIsaFeature("sve")
//
/// CHECK-DAG: <<Repl:d\d+>> VecReplicateScalar [<<Zero>>,{{j\d+}}] loop:none
/// CHECK-DAG: <<Phi:i\d+>> Phi loop:<<Loop:B\d+>> outer_loop:none
/// CHECK-DAG: VecStore [{{l\d+}},<<Phi>>,<<Repl>>,{{j\d+}}] loop:<<Loop>> outer_loop:none
//
/// CHECK-ELSE:
//
/// CHECK-DAG: <<Repl:d\d+>> VecReplicateScalar [<<Zero>>] loop:none
/// CHECK-DAG: <<Phi:i\d+>> Phi loop:<<Loop:B\d+>> outer_loop:none
/// CHECK-DAG: VecStore [{{l\d+}},<<Phi>>,<<Repl>>] loop:<<Loop>> outer_loop:none
//
/// CHECK-FI:
private static void zeroc(char[] x) {
for (int i = 0; i < x.length; i++) {
x[i] = 0;
}
}
/// CHECK-START: void Main.zeros(short[]) loop_optimization (before)
/// CHECK-DAG: <<Zero:i\d+>> IntConstant 0 loop:none
/// CHECK-DAG: <<Phi:i\d+>> Phi loop:<<Loop:B\d+>> outer_loop:none
/// CHECK-DAG: ArraySet [{{l\d+}},<<Phi>>,<<Zero>>] loop:<<Loop>> outer_loop:none
//
/// CHECK-START-ARM64: void Main.zeros(short[]) loop_optimization (after)
/// CHECK-DAG: <<Zero:i\d+>> IntConstant 0 loop:none
/// CHECK-IF: hasIsaFeature("sve")
//
/// CHECK-DAG: <<Repl:d\d+>> VecReplicateScalar [<<Zero>>,{{j\d+}}] loop:none
/// CHECK-DAG: <<Phi:i\d+>> Phi loop:<<Loop:B\d+>> outer_loop:none
/// CHECK-DAG: VecStore [{{l\d+}},<<Phi>>,<<Repl>>,{{j\d+}}] loop:<<Loop>> outer_loop:none
//
/// CHECK-ELSE:
//
/// CHECK-DAG: <<Repl:d\d+>> VecReplicateScalar [<<Zero>>] loop:none
/// CHECK-DAG: <<Phi:i\d+>> Phi loop:<<Loop:B\d+>> outer_loop:none
/// CHECK-DAG: VecStore [{{l\d+}},<<Phi>>,<<Repl>>] loop:<<Loop>> outer_loop:none
//
/// CHECK-FI:
private static void zeros(short[] x) {
for (int i = 0; i < x.length; i++) {
x[i] = 0;
}
}
/// CHECK-START: void Main.zeroi(int[]) loop_optimization (before)
/// CHECK-DAG: <<Zero:i\d+>> IntConstant 0 loop:none
/// CHECK-DAG: <<Phi:i\d+>> Phi loop:<<Loop:B\d+>> outer_loop:none
/// CHECK-DAG: ArraySet [{{l\d+}},<<Phi>>,<<Zero>>] loop:<<Loop>> outer_loop:none
//
/// CHECK-START-ARM64: void Main.zeroi(int[]) loop_optimization (after)
/// CHECK-DAG: <<Zero:i\d+>> IntConstant 0 loop:none
/// CHECK-IF: hasIsaFeature("sve")
//
/// CHECK-DAG: <<Repl:d\d+>> VecReplicateScalar [<<Zero>>,{{j\d+}}] loop:none
/// CHECK-DAG: <<Phi:i\d+>> Phi loop:<<Loop:B\d+>> outer_loop:none
/// CHECK-DAG: VecStore [{{l\d+}},<<Phi>>,<<Repl>>,{{j\d+}}] loop:<<Loop>> outer_loop:none
//
/// CHECK-ELSE:
//
/// CHECK-DAG: <<Repl:d\d+>> VecReplicateScalar [<<Zero>>] loop:none
/// CHECK-DAG: <<Phi:i\d+>> Phi loop:<<Loop:B\d+>> outer_loop:none
/// CHECK-DAG: VecStore [{{l\d+}},<<Phi>>,<<Repl>>] loop:<<Loop>> outer_loop:none
//
/// CHECK-FI:
private static void zeroi(int[] x) {
for (int i = 0; i < x.length; i++) {
x[i] = 0;
}
}
/// CHECK-START: void Main.zerol(long[]) loop_optimization (before)
/// CHECK-DAG: <<Zero:j\d+>> LongConstant 0 loop:none
/// CHECK-DAG: <<Phi:i\d+>> Phi loop:<<Loop:B\d+>> outer_loop:none
/// CHECK-DAG: ArraySet [{{l\d+}},<<Phi>>,<<Zero>>] loop:<<Loop>> outer_loop:none
//
/// CHECK-START-ARM64: void Main.zerol(long[]) loop_optimization (after)
/// CHECK-DAG: <<Zero:j\d+>> LongConstant 0 loop:none
/// CHECK-IF: hasIsaFeature("sve")
//
/// CHECK-DAG: <<Repl:d\d+>> VecReplicateScalar [<<Zero>>,{{j\d+}}] loop:none
/// CHECK-DAG: <<Phi:i\d+>> Phi loop:<<Loop:B\d+>> outer_loop:none
/// CHECK-DAG: VecStore [{{l\d+}},<<Phi>>,<<Repl>>,{{j\d+}}] loop:<<Loop>> outer_loop:none
//
/// CHECK-ELSE:
//
/// CHECK-DAG: <<Repl:d\d+>> VecReplicateScalar [<<Zero>>] loop:none
/// CHECK-DAG: <<Phi:i\d+>> Phi loop:<<Loop:B\d+>> outer_loop:none
/// CHECK-DAG: VecStore [{{l\d+}},<<Phi>>,<<Repl>>] loop:<<Loop>> outer_loop:none
//
/// CHECK-FI:
private static void zerol(long[] x) {
for (int i = 0; i < x.length; i++) {
x[i] = 0;
}
}
/// CHECK-START: void Main.zerof(float[]) loop_optimization (before)
/// CHECK-DAG: <<Zero:f\d+>> FloatConstant 0 loop:none
/// CHECK-DAG: <<Phi:i\d+>> Phi loop:<<Loop:B\d+>> outer_loop:none
/// CHECK-DAG: ArraySet [{{l\d+}},<<Phi>>,<<Zero>>] loop:<<Loop>> outer_loop:none
//
/// CHECK-START-ARM64: void Main.zerof(float[]) loop_optimization (after)
/// CHECK-DAG: <<Zero:f\d+>> FloatConstant 0 loop:none
/// CHECK-IF: hasIsaFeature("sve")
//
/// CHECK-DAG: <<Repl:d\d+>> VecReplicateScalar [<<Zero>>,{{j\d+}}] loop:none
/// CHECK-DAG: <<Phi:i\d+>> Phi loop:<<Loop:B\d+>> outer_loop:none
/// CHECK-DAG: VecStore [{{l\d+}},<<Phi>>,<<Repl>>,{{j\d+}}] loop:<<Loop>> outer_loop:none
//
/// CHECK-ELSE:
//
/// CHECK-DAG: <<Repl:d\d+>> VecReplicateScalar [<<Zero>>] loop:none
/// CHECK-DAG: <<Phi:i\d+>> Phi loop:<<Loop:B\d+>> outer_loop:none
/// CHECK-DAG: VecStore [{{l\d+}},<<Phi>>,<<Repl>>] loop:<<Loop>> outer_loop:none
//
/// CHECK-FI:
private static void zerof(float[] x) {
for (int i = 0; i < x.length; i++) {
x[i] = 0;
}
}
/// CHECK-START: void Main.zerod(double[]) loop_optimization (before)
/// CHECK-DAG: <<Zero:d\d+>> DoubleConstant 0 loop:none
/// CHECK-DAG: <<Phi:i\d+>> Phi loop:<<Loop:B\d+>> outer_loop:none
/// CHECK-DAG: ArraySet [{{l\d+}},<<Phi>>,<<Zero>>] loop:<<Loop>> outer_loop:none
//
/// CHECK-START-ARM64: void Main.zerod(double[]) loop_optimization (after)
/// CHECK-DAG: <<Zero:d\d+>> DoubleConstant 0 loop:none
/// CHECK-IF: hasIsaFeature("sve")
//
/// CHECK-DAG: <<Repl:d\d+>> VecReplicateScalar [<<Zero>>,{{j\d+}}] loop:none
/// CHECK-DAG: <<Phi:i\d+>> Phi loop:<<Loop:B\d+>> outer_loop:none
/// CHECK-DAG: VecStore [{{l\d+}},<<Phi>>,<<Repl>>,{{j\d+}}] loop:<<Loop>> outer_loop:none
//
/// CHECK-ELSE:
//
/// CHECK-DAG: <<Repl:d\d+>> VecReplicateScalar [<<Zero>>] loop:none
/// CHECK-DAG: <<Phi:i\d+>> Phi loop:<<Loop:B\d+>> outer_loop:none
/// CHECK-DAG: VecStore [{{l\d+}},<<Phi>>,<<Repl>>] loop:<<Loop>> outer_loop:none
//
/// CHECK-FI:
private static void zerod(double[] x) {
for (int i = 0; i < x.length; i++) {
x[i] = 0;
}
}
public static void main(String[] args) {
int total = 1111;
boolean[] xz = new boolean[total];
byte[] xb = new byte[total];
char[] xc = new char[total];
short[] xs = new short[total];
int[] xi = new int[total];
long[] xl = new long[total];
float[] xf = new float[total];
double[] xd = new double[total];
for (int i = 0; i < total; i++) {
xz[i] = true;
xb[i] = 1;
xc[i] = 1;
xs[i] = 1;
xi[i] = 1;
xl[i] = 1;
xf[i] = 1;
xd[i] = 1;
}
for (int i = 0; i < total; i++) {
expectEquals(true, xz[i]);
expectEquals(1, xb[i]);
expectEquals(1, xc[i]);
expectEquals(1, xs[i]);
expectEquals(1, xi[i]);
expectEquals(1, xl[i]);
expectEquals(1, xf[i]);
expectEquals(1, xd[i]);
}
zeroz(xz);
zerob(xb);
zeroc(xc);
zeros(xs);
zeroi(xi);
zerol(xl);
zerof(xf);
zerod(xd);
for (int i = 0; i < total; i++) {
expectEquals(false, xz[i]);
expectEquals(0, xb[i]);
expectEquals(0, xc[i]);
expectEquals(0, xs[i]);
expectEquals(0, xi[i]);
expectEquals(0, xl[i]);
expectEquals(0, xf[i]);
expectEquals(0, xd[i]);
}
System.out.println("passed");
}
private static void expectEquals(boolean expected, boolean result) {
if (expected != result) {
throw new Error("Expected: " + expected + ", found: " + result);
}
}
private static void expectEquals(int expected, int result) {
if (expected != result) {
throw new Error("Expected: " + expected + ", found: " + result);
}
}
private static void expectEquals(long expected, long result) {
if (expected != result) {
throw new Error("Expected: " + expected + ", found: " + result);
}
}
private static void expectEquals(float expected, float result) {
if (expected != result) {
throw new Error("Expected: " + expected + ", found: " + result);
}
}
private static void expectEquals(double expected, double result) {
if (expected != result) {
throw new Error("Expected: " + expected + ", found: " + result);
}
}
}