https://gcc.gnu.org/g:e8fc954631a85dcb9b1de4d936a5110d72a4986b
commit r15-5880-ge8fc954631a85dcb9b1de4d936a5110d72a4986b Author: Richard Sandiford <richard.sandif...@arm.com> Date: Tue Dec 3 09:53:59 2024 +0000 aarch64: Move some diagnostic functions to aarch64.cc Some of the diagnostics reported for SVE builtins would also be useful for Advanced SIMD builtins, so this patch moves them from aarch64-sve-builtins.cc to aarch64.cc. I put them in a new aarch64 namespace for now -- perhaps in future they should be generic. gcc/ * config/aarch64/aarch64-sve-builtins.cc (report_non_ice) (report_out_of_range, report_neither_nor, report_not_one_of) (report_not_enum): Move to... * config/aarch64/aarch64.cc: ...here, putting them in the aarch64 namespace, and... * config/aarch64/aarch64-protos.h: ...declare them here. Diff: --- gcc/config/aarch64/aarch64-protos.h | 12 ++++++ gcc/config/aarch64/aarch64-sve-builtins.cc | 65 +----------------------------- gcc/config/aarch64/aarch64.cc | 64 +++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+), 63 deletions(-) diff --git a/gcc/config/aarch64/aarch64-protos.h b/gcc/config/aarch64/aarch64-protos.h index c6ce62190bce..cad6e0b0a6f0 100644 --- a/gcc/config/aarch64/aarch64-protos.h +++ b/gcc/config/aarch64/aarch64-protos.h @@ -1119,6 +1119,18 @@ bool aarch64_general_check_builtin_call (location_t, vec<location_t>, unsigned int, tree, unsigned int, tree *); +namespace aarch64 { + void report_non_ice (location_t, tree, unsigned int); + void report_out_of_range (location_t, tree, unsigned int, HOST_WIDE_INT, + HOST_WIDE_INT, HOST_WIDE_INT); + void report_neither_nor (location_t, tree, unsigned int, HOST_WIDE_INT, + HOST_WIDE_INT, HOST_WIDE_INT); + void report_not_one_of (location_t, tree, unsigned int, HOST_WIDE_INT, + HOST_WIDE_INT, HOST_WIDE_INT, HOST_WIDE_INT, + HOST_WIDE_INT); + void report_not_enum (location_t, tree, unsigned int, HOST_WIDE_INT, tree); +} + namespace aarch64_sve { void init_builtins (); void handle_arm_sve_h (bool); diff --git a/gcc/config/aarch64/aarch64-sve-builtins.cc b/gcc/config/aarch64/aarch64-sve-builtins.cc index 79dc81fcbb73..8e94a2d2cfe4 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins.cc +++ b/gcc/config/aarch64/aarch64-sve-builtins.cc @@ -55,6 +55,8 @@ #include "aarch64-sve-builtins-shapes.h" #include "aarch64-builtins.h" +using namespace aarch64; + namespace aarch64_sve { /* Static information about each single-predicate or single-vector @@ -1150,69 +1152,6 @@ lookup_fndecl (tree fndecl) } -/* Report that LOCATION has a call to FNDECL in which argument ARGNO - was not an integer constant expression. ARGNO counts from zero. */ -static void -report_non_ice (location_t location, tree fndecl, unsigned int argno) -{ - error_at (location, "argument %d of %qE must be an integer constant" - " expression", argno + 1, fndecl); -} - -/* Report that LOCATION has a call to FNDECL in which argument ARGNO has - the value ACTUAL, whereas the function requires a value in the range - [MIN, MAX]. ARGNO counts from zero. */ -static void -report_out_of_range (location_t location, tree fndecl, unsigned int argno, - HOST_WIDE_INT actual, HOST_WIDE_INT min, - HOST_WIDE_INT max) -{ - if (min == max) - error_at (location, "passing %wd to argument %d of %qE, which expects" - " the value %wd", actual, argno + 1, fndecl, min); - else - error_at (location, "passing %wd to argument %d of %qE, which expects" - " a value in the range [%wd, %wd]", actual, argno + 1, fndecl, - min, max); -} - -/* Report that LOCATION has a call to FNDECL in which argument ARGNO has - the value ACTUAL, whereas the function requires either VALUE0 or - VALUE1. ARGNO counts from zero. */ -static void -report_neither_nor (location_t location, tree fndecl, unsigned int argno, - HOST_WIDE_INT actual, HOST_WIDE_INT value0, - HOST_WIDE_INT value1) -{ - error_at (location, "passing %wd to argument %d of %qE, which expects" - " either %wd or %wd", actual, argno + 1, fndecl, value0, value1); -} - -/* Report that LOCATION has a call to FNDECL in which argument ARGNO has - the value ACTUAL, whereas the function requires one of VALUE0..3. - ARGNO counts from zero. */ -static void -report_not_one_of (location_t location, tree fndecl, unsigned int argno, - HOST_WIDE_INT actual, HOST_WIDE_INT value0, - HOST_WIDE_INT value1, HOST_WIDE_INT value2, - HOST_WIDE_INT value3) -{ - error_at (location, "passing %wd to argument %d of %qE, which expects" - " %wd, %wd, %wd or %wd", actual, argno + 1, fndecl, value0, value1, - value2, value3); -} - -/* Report that LOCATION has a call to FNDECL in which argument ARGNO has - the value ACTUAL, whereas the function requires a valid value of - enum type ENUMTYPE. ARGNO counts from zero. */ -static void -report_not_enum (location_t location, tree fndecl, unsigned int argno, - HOST_WIDE_INT actual, tree enumtype) -{ - error_at (location, "passing %wd to argument %d of %qE, which expects" - " a valid %qT value", actual, argno + 1, fndecl, enumtype); -} - /* Try to fold constant arguments ARG1 and ARG2 using the given tree_code. Operations are not treated as overflowing. */ static tree diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc index 24c207cc8e03..cc401befde4f 100644 --- a/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc @@ -30944,6 +30944,70 @@ aarch64_retrieve_sysreg (const char *regname, bool write_p, bool is128op) return sysreg->encoding; } +/* Report that LOCATION has a call to FNDECL in which argument ARGNO + was not an integer constant expression. ARGNO counts from zero. */ +void +aarch64::report_non_ice (location_t location, tree fndecl, unsigned int argno) +{ + error_at (location, "argument %d of %qE must be an integer constant" + " expression", argno + 1, fndecl); +} + +/* Report that LOCATION has a call to FNDECL in which argument ARGNO has + the value ACTUAL, whereas the function requires a value in the range + [MIN, MAX]. ARGNO counts from zero. */ +void +aarch64::report_out_of_range (location_t location, tree fndecl, + unsigned int argno, HOST_WIDE_INT actual, + HOST_WIDE_INT min, HOST_WIDE_INT max) +{ + if (min == max) + error_at (location, "passing %wd to argument %d of %qE, which expects" + " the value %wd", actual, argno + 1, fndecl, min); + else + error_at (location, "passing %wd to argument %d of %qE, which expects" + " a value in the range [%wd, %wd]", actual, argno + 1, fndecl, + min, max); +} + +/* Report that LOCATION has a call to FNDECL in which argument ARGNO has + the value ACTUAL, whereas the function requires either VALUE0 or + VALUE1. ARGNO counts from zero. */ +void +aarch64::report_neither_nor (location_t location, tree fndecl, + unsigned int argno, HOST_WIDE_INT actual, + HOST_WIDE_INT value0, HOST_WIDE_INT value1) +{ + error_at (location, "passing %wd to argument %d of %qE, which expects" + " either %wd or %wd", actual, argno + 1, fndecl, value0, value1); +} + +/* Report that LOCATION has a call to FNDECL in which argument ARGNO has + the value ACTUAL, whereas the function requires one of VALUE0..3. + ARGNO counts from zero. */ +void +aarch64::report_not_one_of (location_t location, tree fndecl, + unsigned int argno, HOST_WIDE_INT actual, + HOST_WIDE_INT value0, HOST_WIDE_INT value1, + HOST_WIDE_INT value2, + HOST_WIDE_INT value3) +{ + error_at (location, "passing %wd to argument %d of %qE, which expects" + " %wd, %wd, %wd or %wd", actual, argno + 1, fndecl, value0, value1, + value2, value3); +} + +/* Report that LOCATION has a call to FNDECL in which argument ARGNO has + the value ACTUAL, whereas the function requires a valid value of + enum type ENUMTYPE. ARGNO counts from zero. */ +void +aarch64::report_not_enum (location_t location, tree fndecl, unsigned int argno, + HOST_WIDE_INT actual, tree enumtype) +{ + error_at (location, "passing %wd to argument %d of %qE, which expects" + " a valid %qT value", actual, argno + 1, fndecl, enumtype); +} + /* Target-specific selftests. */ #if CHECKING_P