Message ID | 5C0A9563.2030201@foss.arm.com |
---|---|
State | New |
Headers | show |
Series | [AArch64,1/2] Implement TARGET_ESTIMATED_POLY_VALUE | expand |
"Kyrill Tkachov" <kyrylo.tkachov@foss.arm.com> writes: > @@ -10834,6 +10836,34 @@ aarch64_parse_tune_string (const char *tune_string, > "tune="); > } > > +/* Parse the sve_width tuning moverride string in TUNE_STRING. > + Accept the valid SVE vector widths allowed by > + aarch64_sve_vector_bits_enum and use it to override sve_width > + in TUNE. */ > + > +static void > +aarch64_parse_sve_width_string (const char *tune_string, > + struct tune_params *tune) > +{ > + int width = -1; > + > + int n = sscanf (tune_string, "%d", &width); > + if (n == EOF) > + error ("invalid format for sve_width"); Should probably return here, otherwise we'll report a second error for width == -1. > + switch (width) > + { > + case SVE_128: > + case SVE_256: > + case SVE_512: > + case SVE_1024: > + case SVE_2048: > + break; > + default: > + error ("invalid sve_width value: %d", width); > + } > + tune->sve_width = (enum aarch64_sve_vector_bits_enum) width; > +} Formatting nit: cases should line up with the "{". OK with those changes, thanks. Richard
On 07/12/18 16:32, Richard Sandiford wrote: > "Kyrill Tkachov" <kyrylo.tkachov@foss.arm.com> writes: >> @@ -10834,6 +10836,34 @@ aarch64_parse_tune_string (const char *tune_string, >> "tune="); >> } >> >> +/* Parse the sve_width tuning moverride string in TUNE_STRING. >> + Accept the valid SVE vector widths allowed by >> + aarch64_sve_vector_bits_enum and use it to override sve_width >> + in TUNE. */ >> + >> +static void >> +aarch64_parse_sve_width_string (const char *tune_string, >> + struct tune_params *tune) >> +{ >> + int width = -1; >> + >> + int n = sscanf (tune_string, "%d", &width); >> + if (n == EOF) >> + error ("invalid format for sve_width"); > Should probably return here, otherwise we'll report a second > error for width == -1. > >> + switch (width) >> + { >> + case SVE_128: >> + case SVE_256: >> + case SVE_512: >> + case SVE_1024: >> + case SVE_2048: >> + break; >> + default: >> + error ("invalid sve_width value: %d", width); >> + } >> + tune->sve_width = (enum aarch64_sve_vector_bits_enum) width; >> +} > Formatting nit: cases should line up with the "{". > > OK with those changes, thanks. Thanks Richard. This is what I've committed with r266898. Kyrill > Richard diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index 7ccc6b78d5872d6b43491badbfa9f2d70580015c..da050b88bdc4859e6c3eb7f90023a05868536399 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -1086,12 +1086,14 @@ struct aarch64_tuning_override_function static void aarch64_parse_fuse_string (const char*, struct tune_params*); static void aarch64_parse_tune_string (const char*, struct tune_params*); +static void aarch64_parse_sve_width_string (const char*, struct tune_params*); static const struct aarch64_tuning_override_function aarch64_tuning_override_functions[] = { { "fuse", aarch64_parse_fuse_string }, { "tune", aarch64_parse_tune_string }, + { "sve_width", aarch64_parse_sve_width_string }, { NULL, NULL } }; @@ -10834,6 +10836,37 @@ aarch64_parse_tune_string (const char *tune_string, "tune="); } +/* Parse the sve_width tuning moverride string in TUNE_STRING. + Accept the valid SVE vector widths allowed by + aarch64_sve_vector_bits_enum and use it to override sve_width + in TUNE. */ + +static void +aarch64_parse_sve_width_string (const char *tune_string, + struct tune_params *tune) +{ + int width = -1; + + int n = sscanf (tune_string, "%d", &width); + if (n == EOF) + { + error ("invalid format for sve_width"); + return; + } + switch (width) + { + case SVE_128: + case SVE_256: + case SVE_512: + case SVE_1024: + case SVE_2048: + break; + default: + error ("invalid sve_width value: %d", width); + } + tune->sve_width = (enum aarch64_sve_vector_bits_enum) width; +} + /* Parse TOKEN, which has length LENGTH to see if it is a tuning option we understand. If it is, extract the option string and handoff to the appropriate function. */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/override_sve_width_1.c b/gcc/testsuite/gcc.target/aarch64/sve/override_sve_width_1.c new file mode 100644 index 0000000000000000000000000000000000000000..3752fdc2a7198783d2ed5c5f502c3227f98029b8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/override_sve_width_1.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -moverride=sve_width=512" } */ + +void __attribute__((noinline, noclone)) +vadd (int *dst, int *op1, int *op2, int count) +{ + for (int i = 0; i < count; ++i) + dst[i] = op1[i] + op2[i]; +}
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index 7ccc6b78d5872d6b43491badbfa9f2d70580015c..bad687d33479f4b6f8cbeaca799824e29b8e9ed1 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -1086,12 +1086,14 @@ struct aarch64_tuning_override_function static void aarch64_parse_fuse_string (const char*, struct tune_params*); static void aarch64_parse_tune_string (const char*, struct tune_params*); +static void aarch64_parse_sve_width_string (const char*, struct tune_params*); static const struct aarch64_tuning_override_function aarch64_tuning_override_functions[] = { { "fuse", aarch64_parse_fuse_string }, { "tune", aarch64_parse_tune_string }, + { "sve_width", aarch64_parse_sve_width_string }, { NULL, NULL } }; @@ -10834,6 +10836,34 @@ aarch64_parse_tune_string (const char *tune_string, "tune="); } +/* Parse the sve_width tuning moverride string in TUNE_STRING. + Accept the valid SVE vector widths allowed by + aarch64_sve_vector_bits_enum and use it to override sve_width + in TUNE. */ + +static void +aarch64_parse_sve_width_string (const char *tune_string, + struct tune_params *tune) +{ + int width = -1; + + int n = sscanf (tune_string, "%d", &width); + if (n == EOF) + error ("invalid format for sve_width"); + switch (width) + { + case SVE_128: + case SVE_256: + case SVE_512: + case SVE_1024: + case SVE_2048: + break; + default: + error ("invalid sve_width value: %d", width); + } + tune->sve_width = (enum aarch64_sve_vector_bits_enum) width; +} + /* Parse TOKEN, which has length LENGTH to see if it is a tuning option we understand. If it is, extract the option string and handoff to the appropriate function. */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/override_sve_width_1.c b/gcc/testsuite/gcc.target/aarch64/sve/override_sve_width_1.c new file mode 100644 index 0000000000000000000000000000000000000000..3752fdc2a7198783d2ed5c5f502c3227f98029b8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/override_sve_width_1.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -moverride=sve_width=512" } */ + +void __attribute__((noinline, noclone)) +vadd (int *dst, int *op1, int *op2, int count) +{ + for (int i = 0; i < count; ++i) + dst[i] = op1[i] + op2[i]; +}