From 0700b69cb0c81c3590726be7fbe5b98531cec76b Mon Sep 17 00:00:00 2001 From: Raphael Gault Date: Wed, 30 Sep 2020 08:33:10 +0000 Subject: SVE: Extract Intermediate Address for SVE Vector Memory Operations This patch introduces an optimization that extracts and factorizes the "base + offset" common part for the address computation when performing an SVE vector memory operation (VecStore/VecLoad). With SVE enabled by default: Test: ./art/test.py --simulate-arm64 --run-test --optimizing \ (With the VIXL simulator patch) Test: ./art/test.py --target --64 --optimizing \ (On Arm FVP with SVE - See steps in test/README.arm_fvp.md) Test: 527-checker-array-access, 655-checker-simd-arm. Change-Id: Icd49e57d5550d1530445a94e5d49e217a999d06d --- test/527-checker-array-access-simd/src/Main.java | 43 +++++++++++++----------- 1 file changed, 24 insertions(+), 19 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 173165a0a0..a08b1f09b4 100644 --- a/test/527-checker-array-access-simd/src/Main.java +++ b/test/527-checker-array-access-simd/src/Main.java @@ -59,9 +59,11 @@ public class Main { /// CHECK-DAG: <> VecPredWhile /// CHECK-DAG: <> Phi /// CHECK-DAG: If - /// CHECK-DAG: <> VecLoad [<>,<>,<>] + /// CHECK-DAG: <> IntermediateAddress [<>,{{i\d+}}] + /// CHECK-DAG: <> VecLoad [<>,<>,<>] /// CHECK-DAG: <> VecAdd [<>,<>,<>] - /// CHECK-DAG: VecStore [<>,<>,<>,<>] + /// CHECK-DAG: <> IntermediateAddress [<>,{{i\d+}}] + /// CHECK-DAG: VecStore [<>,<>,<>,<>] // /// CHECK-ELSE: // @@ -90,10 +92,10 @@ public class Main { /// CHECK-DAG: <> VecPredWhile /// CHECK-DAG: <> Phi /// CHECK-DAG: If - /// CHECK-DAG: <> VecLoad [<>,<>,<>] + /// CHECK-DAG: <> IntermediateAddress [<>,{{i\d+}}] + /// CHECK-DAG: <> VecLoad [<>,<>,<>] /// CHECK-DAG: <> VecAdd [<>,<>,<>] - /// CHECK-NOT: IntermediateAddress - /// CHECK-DAG: VecStore [<>,<>,<>,<>] + /// CHECK-DAG: VecStore [<>,<>,<>,<>] // /// CHECK-ELSE: // @@ -116,7 +118,6 @@ public class Main { // // IntermediateAddressIndex is not supported for SVE. /// CHECK-NOT: IntermediateAddressIndex - /// CHECK-NOT: IntermediateAddress // /// CHECK-ELSE: // @@ -168,9 +169,11 @@ public class Main { /// CHECK-DAG: <> VecPredWhile /// CHECK-DAG: <> Phi /// CHECK-DAG: If - /// CHECK-DAG: <> VecLoad [<>,<>,<>] + /// CHECK-DAG: <> IntermediateAddress [<>,{{i\d+}}] + /// CHECK-DAG: <> VecLoad [<>,<>,<>] /// CHECK-DAG: <> VecAdd [<>,<>,<>] - /// CHECK-DAG: VecStore [<>,<>,<>,<>] + /// CHECK-DAG: <> IntermediateAddress [<>,{{i\d+}}] + /// CHECK-DAG: VecStore [<>,<>,<>,<>] // /// CHECK-ELSE: // @@ -199,10 +202,10 @@ public class Main { /// CHECK-DAG: <> VecPredWhile /// CHECK-DAG: <> Phi /// CHECK-DAG: If - /// CHECK-DAG: <> VecLoad [<>,<>,<>] + /// CHECK-DAG: <> IntermediateAddress [<>,{{i\d+}}] + /// CHECK-DAG: <> VecLoad [<>,<>,<>] /// CHECK-DAG: <> VecAdd [<>,<>,<>] - /// CHECK-NOT: IntermediateAddress - /// CHECK-DAG: VecStore [<>,<>,<>,<>] + /// CHECK-DAG: VecStore [<>,<>,<>,<>] // /// CHECK-ELSE: // @@ -224,7 +227,6 @@ public class Main { // // IntermediateAddressIndex is not supported for SVE. /// CHECK-NOT: IntermediateAddressIndex - /// CHECK-NOT: IntermediateAddress // /// CHECK-ELSE: // @@ -275,7 +277,8 @@ public class Main { /// CHECK-DAG: <> VecPredWhile /// CHECK-DAG: <> Phi /// CHECK-DAG: If - /// CHECK-DAG: VecStore [<>,<>,<>,<>] + /// CHECK-DAG: <> IntermediateAddress [<>,{{i\d+}}] + /// CHECK-DAG: VecStore [<>,<>,<>,<>] // /// CHECK-ELSE: // @@ -327,9 +330,11 @@ public class Main { /// CHECK-DAG: <> VecPredWhile /// CHECK-DAG: <> Phi /// CHECK-DAG: If - /// CHECK-DAG: <> VecLoad [<>,<>,<>] + /// CHECK-DAG: <> IntermediateAddress [<>,{{i\d+}}] + /// CHECK-DAG: <> VecLoad [<>,<>,<>] /// CHECK-DAG: <> VecCnv [<>,<>] - /// CHECK-DAG: VecStore [<>,<>,<>,<>] + /// CHECK-DAG: <> IntermediateAddress [<>,{{i\d+}}] + /// CHECK-DAG: VecStore [<>,<>,<>,<>] // /// CHECK-ELSE: // @@ -356,10 +361,11 @@ public class Main { /// CHECK-DAG: <> VecPredWhile /// CHECK-DAG: <> Phi /// CHECK-DAG: If - /// CHECK-DAG: <> VecLoad [<>,<>,<>] + /// CHECK-DAG: <> IntermediateAddress [<>,{{i\d+}}] + /// CHECK-DAG: <> VecLoad [<>,<>,<>] /// CHECK-DAG: <> VecCnv [<>,<>] - /// CHECK-NOT: IntermediateAddress - /// CHECK-DAG: VecStore [<>,<>,<>,<>] + /// CHECK-DAG: <> IntermediateAddress [<>,{{i\d+}}] + /// CHECK-DAG: VecStore [<>,<>,<>,<>] // /// CHECK-ELSE: // @@ -381,7 +387,6 @@ public class Main { // // IntermediateAddressIndex is not supported for SVE. /// CHECK-NOT: IntermediateAddressIndex - /// CHECK-NOT: IntermediateAddress // /// CHECK-ELSE: // -- cgit v1.2.3-59-g8ed1b