From 2558abeb7acd49b7de357ca43b0c34354c20a3a0 Mon Sep 17 00:00:00 2001 From: Artem Serov Date: Wed, 14 Oct 2020 18:01:37 +0100 Subject: ARM64: Adjust SIMD checker tests for SVE. Adds SVE-specific checker line for SIMD tests using isaHasFeature() function. Test: test-art-target with Neon. Test: art tests on FVP (steps in test/README.arm_fvp.md) with FVP arg: -C SVE.ScalableVectorExtension.veclen=[2,4] (SVE vector [128,256] bits wide) Change-Id: I8f2134861b47437823797da48a3ffb680bafc544 --- test/527-checker-array-access-simd/src/Main.java | 399 +++++++++++++++++------ 1 file changed, 298 insertions(+), 101 deletions(-) (limited to 'test/527-checker-array-access-simd/src/Main.java') diff --git a/test/527-checker-array-access-simd/src/Main.java b/test/527-checker-array-access-simd/src/Main.java index 8af5465faf..173165a0a0 100644 --- a/test/527-checker-array-access-simd/src/Main.java +++ b/test/527-checker-array-access-simd/src/Main.java @@ -25,47 +25,105 @@ public class Main { /// CHECK-START-ARM64: void Main.checkIntCase(int[]) instruction_simplifier_arm64 (before) /// CHECK-DAG: <> ParameterValue /// CHECK-DAG: <> IntConstant 5 - /// CHECK-DAG: <> VecReplicateScalar [<>] - // -------------- Loop - /// CHECK-DAG: <> Phi - /// CHECK-DAG: If - /// CHECK-DAG: <> VecLoad [<>,<>] - /// CHECK-DAG: <> VecAdd [<>,<>] - /// CHECK-DAG: VecStore [<>,<>,<>] + /// CHECK-IF: hasIsaFeature("sve") + // + /// CHECK-DAG: <> VecReplicateScalar [<>,{{j\d+}}] + // -------------- Loop + /// CHECK-DAG: <> Phi + /// CHECK-DAG: <> VecPredWhile + /// CHECK-DAG: If + /// CHECK-DAG: <> VecLoad [<>,<>,<>] + /// CHECK-DAG: <> VecAdd [<>,<>,<>] + /// CHECK-DAG: VecStore [<>,<>,<>,<>] + // + /// CHECK-ELSE: + // + /// CHECK-DAG: <> VecReplicateScalar [<>] + // -------------- Loop + /// CHECK-DAG: <> Phi + /// CHECK-DAG: If + /// CHECK-DAG: <> VecLoad [<>,<>] + /// CHECK-DAG: <> VecAdd [<>,<>] + /// CHECK-DAG: VecStore [<>,<>,<>] + // + /// CHECK-FI: /// CHECK-START-ARM64: void Main.checkIntCase(int[]) instruction_simplifier_arm64 (after) /// CHECK-DAG: <> ParameterValue /// CHECK-DAG: <> IntConstant 5 - /// CHECK-DAG: <> IntConstant 12 - /// CHECK-DAG: <> IntConstant 2 - /// CHECK-DAG: <> VecReplicateScalar [<>] - // -------------- Loop - /// CHECK-DAG: <> Phi - /// CHECK-DAG: If - /// CHECK-DAG: <> IntermediateAddressIndex [<>,<>,<>] - /// CHECK-DAG: <> VecLoad [<>,<>] - /// CHECK-DAG: <> VecAdd [<>,<>] - /// CHECK-DAG: <> IntermediateAddressIndex [<>,<>,<>] - /// CHECK-DAG: VecStore [<>,<>,<>] + /// CHECK-IF: hasIsaFeature("sve") + // + // IntermediateAddressIndex is not supported for SVE. + /// CHECK-DAG: <> VecReplicateScalar [<>,{{j\d+}}] + // -------------- Loop + /// CHECK-DAG: <> VecPredWhile + /// CHECK-DAG: <> Phi + /// CHECK-DAG: If + /// CHECK-DAG: <> VecLoad [<>,<>,<>] + /// CHECK-DAG: <> VecAdd [<>,<>,<>] + /// CHECK-DAG: VecStore [<>,<>,<>,<>] + // + /// CHECK-ELSE: + // + /// CHECK-DAG: <> IntConstant 2 + /// CHECK-DAG: <> IntConstant 12 + /// CHECK-DAG: <> VecReplicateScalar [<>] + // -------------- Loop + /// CHECK-DAG: <> Phi + /// CHECK-DAG: If + /// CHECK-DAG: <> IntermediateAddressIndex [<>,<>,<>] + /// CHECK-DAG: <> VecLoad [<>,<>] + /// CHECK-DAG: <> VecAdd [<>,<>] + /// CHECK-DAG: <> IntermediateAddressIndex [<>,<>,<>] + /// CHECK-DAG: VecStore [<>,<>,<>] + // + /// CHECK-FI: /// CHECK-START-ARM64: void Main.checkIntCase(int[]) GVN$after_arch (after) /// CHECK-DAG: <> ParameterValue /// CHECK-DAG: <> IntConstant 5 - /// CHECK-DAG: <> IntConstant 12 - /// CHECK-DAG: <> IntConstant 2 - /// CHECK-DAG: <> VecReplicateScalar [<>] - // -------------- Loop - /// CHECK-DAG: <> Phi - /// CHECK-DAG: If - /// CHECK-DAG: <> IntermediateAddressIndex [<>,<>,<>] - /// CHECK-DAG: <> VecLoad [<>,<>] - /// CHECK-DAG: <> VecAdd [<>,<>] - /// CHECK-NOT: IntermediateAddress - /// CHECK-DAG: VecStore [<>,<>,<>] + /// CHECK-IF: hasIsaFeature("sve") + // + // IntermediateAddressIndex is not supported for SVE. + /// CHECK-DAG: <> VecReplicateScalar [<>,{{j\d+}}] + // -------------- Loop + /// CHECK-DAG: <> VecPredWhile + /// CHECK-DAG: <> Phi + /// CHECK-DAG: If + /// CHECK-DAG: <> VecLoad [<>,<>,<>] + /// CHECK-DAG: <> VecAdd [<>,<>,<>] + /// CHECK-NOT: IntermediateAddress + /// CHECK-DAG: VecStore [<>,<>,<>,<>] + // + /// CHECK-ELSE: + // + /// CHECK-DAG: <> IntConstant 12 + /// CHECK-DAG: <> IntConstant 2 + /// CHECK-DAG: <> VecReplicateScalar [<>] + // -------------- Loop + /// CHECK-DAG: <> Phi + /// CHECK-DAG: If + /// CHECK-DAG: <> IntermediateAddressIndex [<>,<>,<>] + /// CHECK-DAG: <> VecLoad [<>,<>] + /// CHECK-DAG: <> VecAdd [<>,<>] + /// CHECK-NOT: IntermediateAddress + /// CHECK-DAG: VecStore [<>,<>,<>] + // + /// CHECK-FI: /// CHECK-START-ARM64: void Main.checkIntCase(int[]) disassembly (after) - /// CHECK: IntermediateAddressIndex - /// CHECK-NEXT: add w{{[0-9]+}}, w{{[0-9]+}}, w{{[0-9]+}}, lsl #2 + /// CHECK-IF: hasIsaFeature("sve") + // + // IntermediateAddressIndex is not supported for SVE. + /// CHECK-NOT: IntermediateAddressIndex + /// CHECK-NOT: IntermediateAddress + // + /// CHECK-ELSE: + // + /// CHECK: IntermediateAddressIndex + /// CHECK-NEXT: add w{{[0-9]+}}, w{{[0-9]+}}, w{{[0-9]+}}, lsl #2 + // + /// CHECK-FI: public static void checkIntCase(int[] a) { for (int i = 0; i < 128; i++) { a[i] += 5; @@ -75,51 +133,109 @@ public class Main { /// CHECK-START-ARM64: void Main.checkByteCase(byte[]) instruction_simplifier_arm64 (before) /// CHECK-DAG: <> ParameterValue /// CHECK-DAG: <> IntConstant 5 - /// CHECK-DAG: <> VecReplicateScalar [<>] - // -------------- Loop - /// CHECK-DAG: <> Phi - /// CHECK-DAG: If - /// CHECK-DAG: <> VecLoad [<>,<>] - /// CHECK-DAG: <> VecAdd [<>,<>] - /// CHECK-DAG: VecStore [<>,<>,<>] + /// CHECK-IF: hasIsaFeature("sve") + // + /// CHECK-DAG: <> VecReplicateScalar [<>,{{j\d+}}] + // -------------- Loop + /// CHECK-DAG: <> VecPredWhile + /// CHECK-DAG: <> Phi + /// CHECK-DAG: If + /// CHECK-DAG: <> VecLoad [<>,<>,<>] + /// CHECK-DAG: <> VecAdd [<>,<>,<>] + /// CHECK-DAG: VecStore [<>,<>,<>,<>] + // + /// CHECK-ELSE: + // + /// CHECK-DAG: <> VecReplicateScalar [<>] + // -------------- Loop + /// CHECK-DAG: <> Phi + /// CHECK-DAG: If + /// CHECK-DAG: <> VecLoad [<>,<>] + /// CHECK-DAG: <> VecAdd [<>,<>] + + // + /// CHECK-FI: /// CHECK-START-ARM64: void Main.checkByteCase(byte[]) instruction_simplifier_arm64 (after) /// CHECK-DAG: <> ParameterValue /// CHECK-DAG: <> IntConstant 0 /// CHECK-DAG: <> IntConstant 5 - /// CHECK-DAG: <> IntConstant 12 - /// CHECK-DAG: <> VecReplicateScalar [<>] - // -------------- Loop - /// CHECK-DAG: <> Phi - /// CHECK-DAG: If - /// CHECK-DAG: <> IntermediateAddressIndex [<>,<>,<>] - /// CHECK-DAG: <> VecLoad [<>,<>] - /// CHECK-DAG: <> VecAdd [<>,<>] - /// CHECK-DAG: <> IntermediateAddressIndex [<>,<>,<>] - /// CHECK-DAG: VecStore [<>,<>,<>] + /// CHECK-IF: hasIsaFeature("sve") + // + // IntermediateAddressIndex is not supported for SVE. + /// CHECK-DAG: <> VecReplicateScalar [<>,{{j\d+}}] + // -------------- Loop + /// CHECK-DAG: <> VecPredWhile + /// CHECK-DAG: <> Phi + /// CHECK-DAG: If + /// CHECK-DAG: <> VecLoad [<>,<>,<>] + /// CHECK-DAG: <> VecAdd [<>,<>,<>] + /// CHECK-DAG: VecStore [<>,<>,<>,<>] + // + /// CHECK-ELSE: + // + /// CHECK-DAG: <> IntConstant 12 + /// CHECK-DAG: <> VecReplicateScalar [<>] + // -------------- Loop + /// CHECK-DAG: <> Phi + /// CHECK-DAG: If + /// CHECK-DAG: <> IntermediateAddressIndex [<>,<>,<>] + /// CHECK-DAG: <> VecLoad [<>,<>] + /// CHECK-DAG: <> VecAdd [<>,<>] + /// CHECK-DAG: <> IntermediateAddressIndex [<>,<>,<>] + /// CHECK-DAG: VecStore [<>,<>,<>] + // + /// CHECK-FI: /// CHECK-START-ARM64: void Main.checkByteCase(byte[]) GVN$after_arch (after) /// CHECK-DAG: <> ParameterValue /// CHECK-DAG: <> IntConstant 0 /// CHECK-DAG: <> IntConstant 5 - /// CHECK-DAG: <> IntConstant 12 - /// CHECK-DAG: <> VecReplicateScalar [<>] - // -------------- Loop - /// CHECK-DAG: <> Phi - /// CHECK-DAG: If - /// CHECK-DAG: <> IntermediateAddressIndex [<>,<>,<>] - /// CHECK-DAG: <> VecLoad [<>,<>] - /// CHECK-DAG: <> VecAdd [<>,<>] - /// CHECK-NOT: IntermediateAddress - /// CHECK-DAG: VecStore [<>,<>,<>] + /// CHECK-IF: hasIsaFeature("sve") + // + // IntermediateAddressIndex is not supported for SVE. + /// CHECK-DAG: <> VecReplicateScalar [<>,{{j\d+}}] + // -------------- Loop + /// CHECK-DAG: <> VecPredWhile + /// CHECK-DAG: <> Phi + /// CHECK-DAG: If + /// CHECK-DAG: <> VecLoad [<>,<>,<>] + /// CHECK-DAG: <> VecAdd [<>,<>,<>] + /// CHECK-NOT: IntermediateAddress + /// CHECK-DAG: VecStore [<>,<>,<>,<>] + // + /// CHECK-ELSE: + // + /// CHECK-DAG: <> IntConstant 12 + /// CHECK-DAG: <> VecReplicateScalar [<>] + // -------------- Loop + /// CHECK-DAG: <> Phi + /// CHECK-DAG: If + /// CHECK-DAG: <> IntermediateAddressIndex [<>,<>,<>] + /// CHECK-DAG: <> VecLoad [<>,<>] + /// CHECK-DAG: <> VecAdd [<>,<>] + /// CHECK-NOT: IntermediateAddress + /// CHECK-DAG: VecStore [<>,<>,<>] + // + /// CHECK-FI: /// CHECK-START-ARM64: void Main.checkByteCase(byte[]) disassembly (after) - /// CHECK: IntermediateAddressIndex - /// CHECK-NEXT: add w{{[0-9]+}}, w{{[0-9]+}}, #0x{{[0-9a-fA-F]+}} - /// CHECK: VecLoad - /// CHECK-NEXT: ldr q{{[0-9]+}}, [x{{[0-9]+}}, x{{[0-9]+}}] - /// CHECK: VecStore - /// CHECK-NEXT: str q{{[0-9]+}}, [x{{[0-9]+}}, x{{[0-9]+}}] + /// CHECK-IF: hasIsaFeature("sve") + // + // IntermediateAddressIndex is not supported for SVE. + /// CHECK-NOT: IntermediateAddressIndex + /// CHECK-NOT: IntermediateAddress + // + /// CHECK-ELSE: + // + /// CHECK: IntermediateAddressIndex + /// CHECK-NEXT: add w{{[0-9]+}}, w{{[0-9]+}}, #0x{{[0-9a-fA-F]+}} + /// CHECK: VecLoad + /// CHECK-NEXT: ldr q{{[0-9]+}}, [x{{[0-9]+}}, x{{[0-9]+}}] + /// CHECK: VecStore + /// CHECK-NEXT: str q{{[0-9]+}}, [x{{[0-9]+}}, x{{[0-9]+}}] + // + /// CHECK-FI: public static void checkByteCase(byte[] a) { for (int i = 0; i < 128; i++) { a[i] += 5; @@ -129,21 +245,48 @@ public class Main { /// CHECK-START-ARM64: void Main.checkSingleAccess(int[]) instruction_simplifier_arm64 (before) /// CHECK-DAG: <> ParameterValue /// CHECK-DAG: <> IntConstant 5 - /// CHECK-DAG: <> VecReplicateScalar [<>] - // -------------- Loop - /// CHECK-DAG: <> Phi - /// CHECK-DAG: If - /// CHECK-DAG: VecStore [<>,<>,<>] + /// CHECK-IF: hasIsaFeature("sve") + // + /// CHECK-DAG: <> VecReplicateScalar [<>,{{j\d+}}] + // -------------- Loop + /// CHECK-DAG: <> Phi + /// CHECK-DAG: <> VecPredWhile + /// CHECK-DAG: If + /// CHECK-DAG: VecStore [<>,<>,<>,<>] + // + /// CHECK-ELSE: + // + /// CHECK-DAG: <> VecReplicateScalar [<>] + // -------------- Loop + /// CHECK-DAG: <> Phi + /// CHECK-DAG: If + /// CHECK-DAG: VecStore [<>,<>,<>] + // + /// CHECK-FI: /// CHECK-START-ARM64: void Main.checkSingleAccess(int[]) instruction_simplifier_arm64 (after) /// CHECK-DAG: <> ParameterValue /// CHECK-DAG: <> IntConstant 0 /// CHECK-DAG: <> IntConstant 5 - /// CHECK-DAG: <> VecReplicateScalar [<>] - // -------------- Loop - /// CHECK-DAG: <> Phi - /// CHECK-DAG: If - /// CHECK-DAG: VecStore [<>,<>,<>] + /// CHECK-IF: hasIsaFeature("sve") + // + /// CHECK-DAG: <> VecReplicateScalar [<>,{{j\d+}}] + // -------------- Loop + /// CHECK-DAG: <> VecPredWhile + /// CHECK-DAG: <> Phi + /// CHECK-DAG: If + /// CHECK-DAG: VecStore [<>,<>,<>,<>] + // + /// CHECK-ELSE: + // + /// CHECK-DAG: <> VecReplicateScalar [<>] + // -------------- Loop + /// CHECK-DAG: <> Phi + /// CHECK-DAG: If + /// CHECK-DAG: VecStore [<>,<>,<>] + // + /// CHECK-FI: + // /// CHECK-NOT: IntermediateAddress public static void checkSingleAccess(int[] a) { for (int i = 0; i < 128; i++) { @@ -155,43 +298,97 @@ public class Main { /// CHECK-DAG: <> ParameterValue /// CHECK-DAG: <> ParameterValue // -------------- Loop - /// CHECK-DAG: <> Phi - /// CHECK-DAG: If - /// CHECK-DAG: <> VecLoad [<>,<>] - /// CHECK-DAG: <> VecCnv [<>] - /// CHECK-DAG: VecStore [<>,<>,<>] + /// CHECK-IF: hasIsaFeature("sve") + // + /// CHECK-DAG: <> VecPredWhile + /// CHECK-DAG: <> Phi + /// CHECK-DAG: If + /// CHECK-DAG: <> VecLoad [<>,<>,<>] + /// CHECK-DAG: <> VecCnv [<>,<>] + /// CHECK-DAG: VecStore [<>,<>,<>,<>] + // + /// CHECK-ELSE: + // + /// CHECK-DAG: <> Phi + /// CHECK-DAG: If + /// CHECK-DAG: <> VecLoad [<>,<>] + /// CHECK-DAG: <> VecCnv [<>] + /// CHECK-DAG: VecStore [<>,<>,<>] + // + /// CHECK-FI: /// CHECK-START-ARM64: void Main.checkInt2Float(int[], float[]) instruction_simplifier_arm64 (after) /// CHECK-DAG: <> ParameterValue /// CHECK-DAG: <> ParameterValue - /// CHECK-DAG: <> IntConstant 12 - /// CHECK-DAG: <> IntConstant 2 - // -------------- Loop - /// CHECK-DAG: <> Phi - /// CHECK-DAG: If - /// CHECK-DAG: <> IntermediateAddressIndex [<>,<>,<>] - /// CHECK-DAG: <> VecLoad [<>,<>] - /// CHECK-DAG: <> VecCnv [<>] - /// CHECK-DAG: <> IntermediateAddressIndex [<>,<>,<>] - /// CHECK-DAG: VecStore [<>,<>,<>] + /// CHECK-IF: hasIsaFeature("sve") + // + // IntermediateAddressIndex is not supported for SVE. + // -------------- Loop + /// CHECK-DAG: <> VecPredWhile + /// CHECK-DAG: <> Phi + /// CHECK-DAG: If + /// CHECK-DAG: <> VecLoad [<>,<>,<>] + /// CHECK-DAG: <> VecCnv [<>,<>] + /// CHECK-DAG: VecStore [<>,<>,<>,<>] + // + /// CHECK-ELSE: + // + /// CHECK-DAG: <> IntConstant 12 + /// CHECK-DAG: <> IntConstant 2 + // -------------- Loop + /// CHECK-DAG: <> Phi + /// CHECK-DAG: If + /// CHECK-DAG: <> IntermediateAddressIndex [<>,<>,<>] + /// CHECK-DAG: <> VecLoad [<>,<>] + /// CHECK-DAG: <> VecCnv [<>] + /// CHECK-DAG: <> IntermediateAddressIndex [<>,<>,<>] + /// CHECK-DAG: VecStore [<>,<>,<>] + // + /// CHECK-FI: /// CHECK-START-ARM64: void Main.checkInt2Float(int[], float[]) GVN$after_arch (after) /// CHECK-DAG: <> ParameterValue /// CHECK-DAG: <> ParameterValue - /// CHECK-DAG: <> IntConstant 12 - /// CHECK-DAG: <> IntConstant 2 - // -------------- Loop - /// CHECK-DAG: <> Phi - /// CHECK-DAG: If - /// CHECK-DAG: <> IntermediateAddressIndex [<>,<>,<>] - /// CHECK-DAG: <> VecLoad [<>,<>] - /// CHECK-DAG: <> VecCnv [<>] - /// CHECK-NOT: IntermediateAddress - /// CHECK-DAG: VecStore [<>,<>,<>] + /// CHECK-IF: hasIsaFeature("sve") + // + // IntermediateAddressIndex is not supported for SVE. + // -------------- Loop + /// CHECK-DAG: <> VecPredWhile + /// CHECK-DAG: <> Phi + /// CHECK-DAG: If + /// CHECK-DAG: <> VecLoad [<>,<>,<>] + /// CHECK-DAG: <> VecCnv [<>,<>] + /// CHECK-NOT: IntermediateAddress + /// CHECK-DAG: VecStore [<>,<>,<>,<>] + // + /// CHECK-ELSE: + // + /// CHECK-DAG: <> IntConstant 12 + /// CHECK-DAG: <> IntConstant 2 + // -------------- Loop + /// CHECK-DAG: <> Phi + /// CHECK-DAG: If + /// CHECK-DAG: <> IntermediateAddressIndex [<>,<>,<>] + /// CHECK-DAG: <> VecLoad [<>,<>] + /// CHECK-DAG: <> VecCnv [<>] + /// CHECK-NOT: IntermediateAddress + /// CHECK-DAG: VecStore [<>,<>,<>] + // + /// CHECK-FI: /// CHECK-START-ARM64: void Main.checkInt2Float(int[], float[]) disassembly (after) - /// CHECK: IntermediateAddressIndex - /// CHECK-NEXT: add w{{[0-9]+}}, w{{[0-9]+}}, w{{[0-9]+}}, lsl #2 + /// CHECK-IF: hasIsaFeature("sve") + // + // IntermediateAddressIndex is not supported for SVE. + /// CHECK-NOT: IntermediateAddressIndex + /// CHECK-NOT: IntermediateAddress + // + /// CHECK-ELSE: + // + /// CHECK: IntermediateAddressIndex + /// CHECK-NEXT: add w{{[0-9]+}}, w{{[0-9]+}}, w{{[0-9]+}}, lsl #2 + // + /// CHECK-FI: public static void checkInt2Float(int[] a, float[] b) { for (int i = 0; i < 128; i++) { b[i] = (float) a[i]; -- cgit v1.2.3-59-g8ed1b