https://gcc.gnu.org/g:6b454e69b7ba2c0a17c67f666bff7e203723ab69
commit r16-5618-g6b454e69b7ba2c0a17c67f666bff7e203723ab69 Author: Soumya AR <[email protected]> Date: Wed Jul 16 06:31:33 2025 -0700 aarch64: Regression tests for parsing of user-provided AArch64 CPU tuning parameters Signed-off-by: Soumya AR <[email protected]> gcc/testsuite/ChangeLog: * gcc.target/aarch64/aarch64-json-tunings/aarch64-json-tunings.exp: New test. * gcc.target/aarch64/aarch64-json-tunings/boolean-1.c: New test. * gcc.target/aarch64/aarch64-json-tunings/boolean-1.json: New test. * gcc.target/aarch64/aarch64-json-tunings/boolean-2.c: New test. * gcc.target/aarch64/aarch64-json-tunings/boolean-2.json: New test. * gcc.target/aarch64/aarch64-json-tunings/empty-brackets.c: New test. * gcc.target/aarch64/aarch64-json-tunings/empty-brackets.json: New test. * gcc.target/aarch64/aarch64-json-tunings/empty.c: New test. * gcc.target/aarch64/aarch64-json-tunings/empty.json: New test. * gcc.target/aarch64/aarch64-json-tunings/enum-1.c: New test. * gcc.target/aarch64/aarch64-json-tunings/enum-1.json: New test. * gcc.target/aarch64/aarch64-json-tunings/enum-2.c: New test. * gcc.target/aarch64/aarch64-json-tunings/enum-2.json: New test. * gcc.target/aarch64/aarch64-json-tunings/integer-1.c: New test. * gcc.target/aarch64/aarch64-json-tunings/integer-1.json: New test. * gcc.target/aarch64/aarch64-json-tunings/integer-2.c: New test. * gcc.target/aarch64/aarch64-json-tunings/integer-2.json: New test. * gcc.target/aarch64/aarch64-json-tunings/integer-3.c: New test. * gcc.target/aarch64/aarch64-json-tunings/integer-3.json: New test. * gcc.target/aarch64/aarch64-json-tunings/string-1.c: New test. * gcc.target/aarch64/aarch64-json-tunings/string-1.json: New test. * gcc.target/aarch64/aarch64-json-tunings/string-2.c: New test. * gcc.target/aarch64/aarch64-json-tunings/string-2.json: New test. * gcc.target/aarch64/aarch64-json-tunings/test-all.c: New test. * gcc.target/aarch64/aarch64-json-tunings/test-all.json: New test. * gcc.target/aarch64/aarch64-json-tunings/unidentified-key.c: New test. * gcc.target/aarch64/aarch64-json-tunings/unidentified-key.json: New test. * gcc.target/aarch64/aarch64-json-tunings/unsigned-1.c: New test. * gcc.target/aarch64/aarch64-json-tunings/unsigned-1.json: New test. * gcc.target/aarch64/aarch64-json-tunings/unsigned-2.c: New test. * gcc.target/aarch64/aarch64-json-tunings/unsigned-2.json: New test. * gcc.target/aarch64/aarch64-json-tunings/unsigned-3.c: New test. * gcc.target/aarch64/aarch64-json-tunings/unsigned-3.json: New test. Diff: --- .../aarch64-json-tunings/aarch64-json-tunings.exp | 35 +++++++++++++ .../aarch64/aarch64-json-tunings/boolean-1.c | 7 +++ .../aarch64/aarch64-json-tunings/boolean-1.json | 9 ++++ .../aarch64/aarch64-json-tunings/boolean-2.c | 8 +++ .../aarch64/aarch64-json-tunings/boolean-2.json | 9 ++++ .../aarch64/aarch64-json-tunings/empty-brackets.c | 7 +++ .../aarch64-json-tunings/empty-brackets.json | 1 + .../aarch64/aarch64-json-tunings/empty.c | 6 +++ .../aarch64/aarch64-json-tunings/empty.json | 0 .../aarch64/aarch64-json-tunings/enum-1.c | 9 ++++ .../aarch64/aarch64-json-tunings/enum-1.json | 7 +++ .../aarch64/aarch64-json-tunings/enum-2.c | 8 +++ .../aarch64/aarch64-json-tunings/enum-2.json | 7 +++ .../aarch64/aarch64-json-tunings/integer-1.c | 8 +++ .../aarch64/aarch64-json-tunings/integer-1.json | 6 +++ .../aarch64/aarch64-json-tunings/integer-2.c | 8 +++ .../aarch64/aarch64-json-tunings/integer-2.json | 5 ++ .../aarch64/aarch64-json-tunings/integer-3.c | 8 +++ .../aarch64/aarch64-json-tunings/integer-3.json | 5 ++ .../aarch64/aarch64-json-tunings/string-1.c | 9 ++++ .../aarch64/aarch64-json-tunings/string-1.json | 7 +++ .../aarch64/aarch64-json-tunings/string-2.c | 8 +++ .../aarch64/aarch64-json-tunings/string-2.json | 5 ++ .../aarch64/aarch64-json-tunings/test-all.c | 59 ++++++++++++++++++++++ .../aarch64/aarch64-json-tunings/test-all.json | 39 ++++++++++++++ .../aarch64-json-tunings/unidentified-key.c | 7 +++ .../aarch64-json-tunings/unidentified-key.json | 5 ++ .../aarch64/aarch64-json-tunings/unsigned-1.c | 8 +++ .../aarch64/aarch64-json-tunings/unsigned-1.json | 6 +++ .../aarch64/aarch64-json-tunings/unsigned-2.c | 8 +++ .../aarch64/aarch64-json-tunings/unsigned-2.json | 6 +++ .../aarch64/aarch64-json-tunings/unsigned-3.c | 8 +++ .../aarch64/aarch64-json-tunings/unsigned-3.json | 5 ++ 33 files changed, 333 insertions(+) diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/aarch64-json-tunings.exp b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/aarch64-json-tunings.exp new file mode 100644 index 000000000000..974af6d78a2a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/aarch64-json-tunings.exp @@ -0,0 +1,35 @@ +# Copyright (C) 2025 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +# GCC testsuite that uses the `dg.exp' driver. + +# Exit immediately if this isn't an AArch64 target. +if ![istarget aarch64*-*-*] then { + return +} + +# Load support procs. +load_lib gcc-dg.exp + +# Initialize `dg'. +dg-init + +# Main loop. +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cCS\]]] \ + "" "" + +# All done. +dg-finish diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/boolean-1.c b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/boolean-1.c new file mode 100644 index 000000000000..d0a6c35fae0f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/boolean-1.c @@ -0,0 +1,7 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-muser-provided-CPU=${srcdir}/gcc.target/aarch64/aarch64-json-tunings/boolean-1.json -fdump-tuning-model=temp.json" } */ + +/* { dg-warning "JSON tuning file does not contain version information" "" { target *-*-* } 0 } */ +/* { dg-final { scan-file "temp.json" "\"non_exec_costs_exec\": false" } } */ + +int main () {} \ No newline at end of file diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/boolean-1.json b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/boolean-1.json new file mode 100644 index 000000000000..b7bd3dd4f9ac --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/boolean-1.json @@ -0,0 +1,9 @@ +{ + "tune_params": { + "insn_extra_cost": { + "alu": { + "non_exec_costs_exec": false + } + } + } +} diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/boolean-2.c b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/boolean-2.c new file mode 100644 index 000000000000..aef632f1d042 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/boolean-2.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-muser-provided-CPU=${srcdir}/gcc.target/aarch64/aarch64-json-tunings/boolean-2.json -fdump-tuning-model=temp.json" } */ + +/* { dg-warning "JSON tuning file does not contain version information" "" { target *-*-* } 0 } */ +/* { dg-error "key .* expected to be a boolean" "" { target *-*-* } 0 } */ +/* { dg-error "validation failed for the provided JSON data" "" { target *-*-* } 0 } */ + +int main () {} \ No newline at end of file diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/boolean-2.json b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/boolean-2.json new file mode 100644 index 000000000000..d43e5b1a2918 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/boolean-2.json @@ -0,0 +1,9 @@ +{ + "tune_params": { + "insn_extra_cost": { + "alu": { + "non_exec_costs_exec": 0 + } + } + } +} diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/empty-brackets.c b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/empty-brackets.c new file mode 100644 index 000000000000..4df72dbaf7ab --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/empty-brackets.c @@ -0,0 +1,7 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-muser-provided-CPU=${srcdir}/gcc.target/aarch64/aarch64-json-tunings/empty-brackets.json -fdump-tuning-model=temp.json" } */ + +/* { dg-warning "JSON tuning file does not contain version information" "" { target *-*-* } 0 } */ +/* { dg-warning "key 'tune_params' not found in JSON data" "" { target *-*-* } 0 } */ + +int main () {} \ No newline at end of file diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/empty-brackets.json b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/empty-brackets.json new file mode 100644 index 000000000000..0967ef424bce --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/empty-brackets.json @@ -0,0 +1 @@ +{} diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/empty.c b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/empty.c new file mode 100644 index 000000000000..0e722994fffb --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/empty.c @@ -0,0 +1,6 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-muser-provided-CPU=${srcdir}/gcc.target/aarch64/aarch64-json-tunings/empty.json -fdump-tuning-model=temp.json" } */ + +/* { dg-error "expected a JSON value but got EOF" "" { target *-*-* } 0 } */ + +int main () {} \ No newline at end of file diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/empty.json b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/empty.json new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/enum-1.c b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/enum-1.c new file mode 100644 index 000000000000..48daf324d33b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/enum-1.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-muser-provided-CPU=${srcdir}/gcc.target/aarch64/aarch64-json-tunings/enum-1.json -fdump-tuning-model=temp.json" } */ + +/* { dg-warning "JSON tuning file does not contain version information" "" { target *-*-* } 0 } */ +/* { dg-final { scan-file "temp.json" "\"autoprefetcher_model\": \"AUTOPREFETCHER_OFF\"" } } */ +/* { dg-final { scan-file "temp.json" "\"ldp_policy_model\": \"AARCH64_LDP_STP_POLICY_NEVER\"" } } */ +/* { dg-final { scan-file "temp.json" "\"stp_policy_model\": \"AARCH64_LDP_STP_POLICY_DEFAULT\"" } } */ + +int main () {} \ No newline at end of file diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/enum-1.json b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/enum-1.json new file mode 100644 index 000000000000..492af1c14e0b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/enum-1.json @@ -0,0 +1,7 @@ +{ + "tune_params": { + "autoprefetcher_model": "AUTOPREFETCHER_OFF", + "ldp_policy_model": "AARCH64_LDP_STP_POLICY_NEVER", + "stp_policy_model": "AARCH64_LDP_STP_POLICY_DEFAULT" + } +} diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/enum-2.c b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/enum-2.c new file mode 100644 index 000000000000..c53bc5292d52 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/enum-2.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-muser-provided-CPU=${srcdir}/gcc.target/aarch64/aarch64-json-tunings/enum-2.json -fdump-tuning-model=temp.json" } */ + +/* { dg-warning "JSON tuning file does not contain version information" "" { target *-*-* } 0 } */ +/* { dg-warning "autoprefetcher_model not recognized, defaulting to 'AUTOPREFETCHER_OFF'" "" { target *-*-* } 0 } */ +/* { dg-warning "ldp_policy_model not recognized, defaulting to 'AARCH64_LDP_STP_POLICY_DEFAULT'" "" { target *-*-* } 0 } */ + +int main () {} \ No newline at end of file diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/enum-2.json b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/enum-2.json new file mode 100644 index 000000000000..61204071fd31 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/enum-2.json @@ -0,0 +1,7 @@ +{ + "tune_params": { + "autoprefetcher_model": "null", + "ldp_policy_model": "null", + "stp_policy_model": "AARCH64_LDP_STP_POLICY_DEFAULT" + } +} diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/integer-1.c b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/integer-1.c new file mode 100644 index 000000000000..5d80560038c8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/integer-1.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-muser-provided-CPU=${srcdir}/gcc.target/aarch64/aarch64-json-tunings/integer-1.json -fdump-tuning-model=temp.json" } */ + +/* { dg-warning "JSON tuning file does not contain version information" "" { target *-*-* } 0 } */ +/* { dg-final { scan-file "temp.json" "\"sve_width\": 256" } } */ +/* { dg-final { scan-file "temp.json" "\"issue_rate\": 4" } } */ + +int main () {} \ No newline at end of file diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/integer-1.json b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/integer-1.json new file mode 100644 index 000000000000..8db0efad28e6 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/integer-1.json @@ -0,0 +1,6 @@ +{ + "tune_params": { + "sve_width": 256, + "issue_rate": 4 + } +} diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/integer-2.c b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/integer-2.c new file mode 100644 index 000000000000..093c86048ce9 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/integer-2.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-muser-provided-CPU=${srcdir}/gcc.target/aarch64/aarch64-json-tunings/integer-2.json -fdump-tuning-model=temp.json" } */ + +/* { dg-warning "JSON tuning file does not contain version information" "" { target *-*-* } 0 } */ +/* { dg-error "key .* value .* is out of range for 'int' type" "" { target *-*-* } 0 } */ +/* { dg-error "validation failed for the provided JSON data" "" { target *-*-* } 0 } */ + +int main () {} \ No newline at end of file diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/integer-2.json b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/integer-2.json new file mode 100644 index 000000000000..5a897f164898 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/integer-2.json @@ -0,0 +1,5 @@ +{ + "tune_params": { + "int_reassoc_width": 12097307449014 + } +} diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/integer-3.c b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/integer-3.c new file mode 100644 index 000000000000..438685c6002c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/integer-3.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-muser-provided-CPU=${srcdir}/gcc.target/aarch64/aarch64-json-tunings/integer-3.json -fdump-tuning-model=temp.json" } */ + +/* { dg-warning "JSON tuning file does not contain version information" "" { target *-*-* } 0 } */ +/* { dg-error "key .* expected to be an integer" "" { target *-*-* } 0 } */ +/* { dg-error "validation failed for the provided JSON data" "" { target *-*-* } 0 } */ + +int main () {} \ No newline at end of file diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/integer-3.json b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/integer-3.json new file mode 100644 index 000000000000..94fd12328406 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/integer-3.json @@ -0,0 +1,5 @@ +{ + "tune_params": { + "issue_rate": "10" + } +} diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/string-1.c b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/string-1.c new file mode 100644 index 000000000000..419ab8691567 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/string-1.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-muser-provided-CPU=${srcdir}/gcc.target/aarch64/aarch64-json-tunings/string-1.json -fdump-tuning-model=temp.json" } */ + +/* { dg-warning "JSON tuning file does not contain version information" "" { target *-*-* } 0 } */ +/* { dg-final { scan-file "temp.json" "\"function_align\": \"16\"" } } */ +/* { dg-final { scan-file "temp.json" "\"jump_align\": \"2\"" } } */ +/* { dg-final { scan-file "temp.json" "\"loop_align\": \"8\"" } } */ + +int main () {} \ No newline at end of file diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/string-1.json b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/string-1.json new file mode 100644 index 000000000000..fe78f324a5c0 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/string-1.json @@ -0,0 +1,7 @@ +{ + "tune_params": { + "function_align": "16", + "jump_align": "2", + "loop_align": "8" + } +} diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/string-2.c b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/string-2.c new file mode 100644 index 000000000000..ad3ea1422bad --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/string-2.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-muser-provided-CPU=${srcdir}/gcc.target/aarch64/aarch64-json-tunings/string-2.json -fdump-tuning-model=temp.json" } */ + +/* { dg-warning "JSON tuning file does not contain version information" "" { target *-*-* } 0 } */ +/* { dg-error "key .* expected to be a string" "" { target *-*-* } 0 } */ +/* { dg-error "validation failed for the provided JSON data" "" { target *-*-* } 0 } */ + +int main () {} \ No newline at end of file diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/string-2.json b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/string-2.json new file mode 100644 index 000000000000..5b1df22784b6 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/string-2.json @@ -0,0 +1,5 @@ +{ + "tune_params": { + "function_align": 16 + } +} diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/test-all.c b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/test-all.c new file mode 100644 index 000000000000..3d6d5c14034a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/test-all.c @@ -0,0 +1,59 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-muser-provided-CPU=${srcdir}/gcc.target/aarch64/aarch64-json-tunings/test-all.json -fdump-tuning-model=temp.json" } */ +/* { dg-warning "JSON tuning file does not contain version information" "" { target *-*-* } 0 } */ + +/* Test round-trip parsing: load JSON, dump it, verify key values are preserved */ + +/* Check basic structure values */ +/* { dg-final { scan-file "temp.json" "\"issue_rate\": 3" } } */ +/* { dg-final { scan-file "temp.json" "\"fusible_ops\": 48" } } */ +/* { dg-final { scan-file "temp.json" "\"function_align\": \"32:16\"" } } */ + +/* Check alu costs */ +/* { dg-final { scan-file "temp.json" "\"arith\": 0" } } */ +/* { dg-final { scan-file "temp.json" "\"logical\": 0" } } */ +/* { dg-final { scan-file "temp.json" "\"shift\": 0" } } */ +/* { dg-final { scan-file "temp.json" "\"arith_shift\": 4" } } */ + +/* Check load/store costs */ +/* { dg-final { scan-file "temp.json" "\"load\": 12" } } */ +/* { dg-final { scan-file "temp.json" "\"store\": 0" } } */ +/* { dg-final { scan-file "temp.json" "\"loadf\": 16" } } */ +/* { dg-final { scan-file "temp.json" "\"storef\": 0" } } */ + +/* Check regmove costs */ +/* { dg-final { scan-file "temp.json" "\"GP2GP\": 1" } } */ +/* { dg-final { scan-file "temp.json" "\"GP2FP\": 5" } } */ +/* { dg-final { scan-file "temp.json" "\"FP2GP\": 5" } } */ +/* { dg-final { scan-file "temp.json" "\"FP2FP\": 2" } } */ + +/* Check vec_costs scalar fields */ +/* { dg-final { scan-file "temp.json" "\"scalar_int_stmt_cost\": 1" } } */ +/* { dg-final { scan-file "temp.json" "\"scalar_fp_stmt_cost\": 1" } } */ +/* { dg-final { scan-file "temp.json" "\"cond_taken_branch_cost\": 3" } } */ + +/* Check vec_costs advsimd nested fields */ +/* { dg-final { scan-file "temp.json" "\"int_stmt_cost\": 1" } } */ +/* { dg-final { scan-file "temp.json" "\"fp_stmt_cost\": 1" } } */ +/* { dg-final { scan-file "temp.json" "\"permute_cost\": 2" } } */ +/* { dg-final { scan-file "temp.json" "\"vec_to_scalar_cost\": 2" } } */ + +/* Check vec_costs sve nested fields */ +/* { dg-final { scan-file "temp.json" "\"clast_cost\": 2" } } */ +/* { dg-final { scan-file "temp.json" "\"fadda_f32_cost\": 2" } } */ +/* { dg-final { scan-file "temp.json" "\"gather_load_x32_cost\": 4" } } */ + +/* Check enum values */ +/* { dg-final { scan-file "temp.json" "\"autoprefetcher_model\": \"AUTOPREFETCHER_WEAK\"" } } */ +/* { dg-final { scan-file "temp.json" "\"ldp_policy_model\": \"AARCH64_LDP_STP_POLICY_ALWAYS\"" } } */ +/* { dg-final { scan-file "temp.json" "\"stp_policy_model\": \"AARCH64_LDP_STP_POLICY_ALWAYS\"" } } */ + +/* Check boolean values */ +/* { dg-final { scan-file "temp.json" "\"non_exec_costs_exec\": true" } } */ +/* { dg-final { scan-file "temp.json" "\"prefetch_dynamic_strides\": true" } } */ + +/* Check nested array values (mult costs) */ +/* { dg-final { scan-file "temp.json" "\"simple\": 4" } } */ +/* { dg-final { scan-file "temp.json" "\"idiv\": 24" } } */ + +int main () {} \ No newline at end of file diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/test-all.json b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/test-all.json new file mode 100644 index 000000000000..8851000c05c9 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/test-all.json @@ -0,0 +1,39 @@ +{ + "tune_params": { + "insn_extra_cost": { + "alu": { + "arith": 0, + "logical": 0, + "shift": 0, + "arith_shift": 4 + }, + "mult": [ + { + "simple": 4, + "idiv": 24 + } + ], + "ldst": { + "load": 12, + "store": 0, + "loadf": 16, + "storef": 0 + } + }, + "regmove_cost": { + "GP2GP": 1, + "GP2FP": 5, + "FP2GP": 5, + "FP2FP": 2 + }, + "issue_rate": 3, + "fusible_ops": 48, + "function_align": "32:16", + "autoprefetcher_model": "AUTOPREFETCHER_WEAK", + "ldp_policy_model": "AARCH64_LDP_STP_POLICY_ALWAYS", + "stp_policy_model": "AARCH64_LDP_STP_POLICY_ALWAYS", + "prefetch": { + "prefetch_dynamic_strides": true + } + } +} diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/unidentified-key.c b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/unidentified-key.c new file mode 100644 index 000000000000..bafbda8a1ef5 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/unidentified-key.c @@ -0,0 +1,7 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-muser-provided-CPU=${srcdir}/gcc.target/aarch64/aarch64-json-tunings/unidentified-key.json -fdump-tuning-model=temp.json" } */ + +/* { dg-warning "JSON tuning file does not contain version information" "" { target *-*-* } 0 } */ +/* { dg-warning "key .* is not a tuning parameter, skipping" "" { target *-*-* } 0 } */ + +int main () {} \ No newline at end of file diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/unidentified-key.json b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/unidentified-key.json new file mode 100644 index 000000000000..89e69b2c690e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/unidentified-key.json @@ -0,0 +1,5 @@ +{ + "tune_params": { + "unidentified_key": "10" + } +} diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/unsigned-1.c b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/unsigned-1.c new file mode 100644 index 000000000000..b176ae302366 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/unsigned-1.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-muser-provided-CPU=${srcdir}/gcc.target/aarch64/aarch64-json-tunings/unsigned-1.json -fdump-tuning-model=temp.json" } */ + +/* { dg-warning "JSON tuning file does not contain version information" "" { target *-*-* } 0 } */ +/* { dg-final { scan-file "temp.json" "\"sve_width\": 512" } } */ +/* { dg-final { scan-file "temp.json" "\"extra_tuning_flags\": 16" } } */ + +int main () {} diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/unsigned-1.json b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/unsigned-1.json new file mode 100644 index 000000000000..0de87e152600 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/unsigned-1.json @@ -0,0 +1,6 @@ +{ + "tune_params": { + "sve_width": 512, + "extra_tuning_flags": 16 + } +} diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/unsigned-2.c b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/unsigned-2.c new file mode 100644 index 000000000000..ce1989d8e31d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/unsigned-2.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-muser-provided-CPU=${srcdir}/gcc.target/aarch64/aarch64-json-tunings/unsigned-2.json -fdump-tuning-model=temp.json" } */ + +/* { dg-warning "JSON tuning file does not contain version information" "" { target *-*-* } 0 } */ +/* { dg-error "key .* value .* is out of range for 'uint' type" "" { target *-*-* } 0 } */ +/* { dg-error "validation failed for the provided JSON data" "" { target *-*-* } 0 } */ + +int main () {} diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/unsigned-2.json b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/unsigned-2.json new file mode 100644 index 000000000000..15da31999395 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/unsigned-2.json @@ -0,0 +1,6 @@ +{ + "tune_params": { + "sve_width": -128, + "extra_tuning_flags": 0 + } +} diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/unsigned-3.c b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/unsigned-3.c new file mode 100644 index 000000000000..20a661f55702 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/unsigned-3.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-muser-provided-CPU=${srcdir}/gcc.target/aarch64/aarch64-json-tunings/unsigned-3.json -fdump-tuning-model=temp.json" } */ + +/* { dg-warning "JSON tuning file does not contain version information" "" { target *-*-* } 0 } */ +/* { dg-error "key .* value .* is out of range for 'uint' type" "" { target *-*-* } 0 } */ +/* { dg-error "validation failed for the provided JSON data" "" { target *-*-* } 0 } */ + +int main () {} diff --git a/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/unsigned-3.json b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/unsigned-3.json new file mode 100644 index 000000000000..27411595f4b2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/unsigned-3.json @@ -0,0 +1,5 @@ +{ + "tune_params": { + "sve_width": 5000000000 + } +}
