diff options
19 files changed, 218 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 540cf1b..2325476 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2020-04-03 Tamar Christina <tamar.christina@arm.com> + + PR target/94396 + * common/config/aarch64/aarch64-common.c + (aarch64_get_extension_string_for_isa_flags): Handle default flags. + 2020-04-03 Richard Biener <rguenther@suse.de> PR middle-end/94465 diff --git a/gcc/common/config/aarch64/aarch64-common.c b/gcc/common/config/aarch64/aarch64-common.c index 8d24c14..0bddcc8 100644 --- a/gcc/common/config/aarch64/aarch64-common.c +++ b/gcc/common/config/aarch64/aarch64-common.c @@ -391,7 +391,22 @@ aarch64_get_extension_string_for_isa_flags (uint64_t isa_flags, /* We remove all the dependent bits, to prevent them from being turned on twice. This only works because we assume that all there are individual options to set all bits standalone. */ - isa_flag_bits &= ~opt->flags_on; + + /* PR target/94396. + + For flags which would already imply a bit that's on by default (e.g + fp16fml which implies +fp,+fp16) we must emit the flags that are not + on by default. i.e. in Armv8.4-a +fp16fml is default if +fp16. So + if a user passes armv8.4-a+fp16 (or +fp16fml) then we need to emit + +fp16. But if +fp16fml is used in an architecture where it is + completely optional we only have to emit the canonical flag. */ + uint64_t toggle_bits = opt->flags_on & default_arch_flags; + /* Now check to see if the canonical flag is on by default. If it + is not then enabling it will enable all bits in flags_on. */ + if ((opt->flag_canonical & default_arch_flags) == 0) + toggle_bits = opt->flags_on; + + isa_flag_bits &= ~toggle_bits; isa_flag_bits |= opt->flag_canonical; } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 927abc8..2b01667 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,23 @@ +2020-04-03 Tamar Christina <tamar.christina@arm.com> + + PR target/94396 + * gcc.target/aarch64/options_set_11.c: New test. + * gcc.target/aarch64/options_set_12.c: New test. + * gcc.target/aarch64/options_set_13.c: New test. + * gcc.target/aarch64/options_set_14.c: New test. + * gcc.target/aarch64/options_set_15.c: New test. + * gcc.target/aarch64/options_set_16.c: New test. + * gcc.target/aarch64/options_set_17.c: New test. + * gcc.target/aarch64/options_set_18.c: New test. + * gcc.target/aarch64/options_set_19.c: New test. + * gcc.target/aarch64/options_set_20.c: New test. + * gcc.target/aarch64/options_set_21.c: New test. + * gcc.target/aarch64/options_set_22.c: New test. + * gcc.target/aarch64/options_set_23.c: New test. + * gcc.target/aarch64/options_set_24.c: New test. + * gcc.target/aarch64/options_set_25.c: New test. + * gcc.target/aarch64/options_set_26.c: New test. + 2020-04-03 Kewen Lin <linkw@gcc.gnu.org> PR tree-optimization/94443 diff --git a/gcc/testsuite/gcc.target/aarch64/options_set_11.c b/gcc/testsuite/gcc.target/aarch64/options_set_11.c new file mode 100644 index 0000000..d083bfd --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/options_set_11.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=armv8.2-a+fp" } */ + +int main () +{ + return 0; +} + +/* { dg-final { scan-assembler {\.arch armv8\.2-a\+crc} } } */ + + /* FP is default on, no need to pass on to assembler. */ diff --git a/gcc/testsuite/gcc.target/aarch64/options_set_12.c b/gcc/testsuite/gcc.target/aarch64/options_set_12.c new file mode 100644 index 0000000..58a09fd --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/options_set_12.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=armv8.2-a+fp16" } */ + +int main () +{ + return 0; +} + +/* { dg-final { scan-assembler {\.arch armv8\.2-a\+crc\+fp16} } } */ + + /* fp16 not default, should be emitted. */ diff --git a/gcc/testsuite/gcc.target/aarch64/options_set_13.c b/gcc/testsuite/gcc.target/aarch64/options_set_13.c new file mode 100644 index 0000000..2a517ec --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/options_set_13.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=armv8.2-a+fp16+fp" } */ + +int main () +{ + return 0; +} + +/* { dg-final { scan-assembler {\.arch armv8\.2-a\+crc\+fp16} } } */ + + /* FP is part of FP16, don't emit it. */ diff --git a/gcc/testsuite/gcc.target/aarch64/options_set_14.c b/gcc/testsuite/gcc.target/aarch64/options_set_14.c new file mode 100644 index 0000000..c192bf6 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/options_set_14.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=armv8.2-a+fp16fml" } */ + +int main () +{ + return 0; +} + +/* { dg-final { scan-assembler {\.arch armv8\.2-a\+crc\+fp16fml} } } */ + + /* fmp16fml is smallest option to emit. */ diff --git a/gcc/testsuite/gcc.target/aarch64/options_set_15.c b/gcc/testsuite/gcc.target/aarch64/options_set_15.c new file mode 100644 index 0000000..32ec3ea --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/options_set_15.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=armv8.2-a+fp16fml+fp" } */ + +int main () +{ + return 0; +} + +/* { dg-final { scan-assembler {\.arch armv8\.2-a\+crc\+fp16fml*} } } */ + + /* fp included in fp16fml, only emit latter. */ diff --git a/gcc/testsuite/gcc.target/aarch64/options_set_16.c b/gcc/testsuite/gcc.target/aarch64/options_set_16.c new file mode 100644 index 0000000..b45c01a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/options_set_16.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=armv8.2-a+fp16fml+fp16+fp" } */ + +int main () +{ + return 0; +} + +/* { dg-final { scan-assembler {\.arch armv8\.2-a\+crc\+fp16fml} } } */ + + /* fp16fml is smallest options to emit. */ diff --git a/gcc/testsuite/gcc.target/aarch64/options_set_17.c b/gcc/testsuite/gcc.target/aarch64/options_set_17.c new file mode 100644 index 0000000..c490e1f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/options_set_17.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=armv8.2-a+dotprod" } */ + +int main () +{ + return 0; +} + +/* { dg-final { scan-assembler {\.arch armv8\.2-a\+crc\+dotprod} } } */ + + /* dotprod needs to be emitted pre armv8.4. */ diff --git a/gcc/testsuite/gcc.target/aarch64/options_set_18.c b/gcc/testsuite/gcc.target/aarch64/options_set_18.c new file mode 100644 index 0000000..61587db --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/options_set_18.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=armv8.4-a+dotprod" } */ + +int main () +{ + return 0; +} + +/* { dg-final { scan-assembler {\.arch armv8\.4-a\+crc} } } */ + + /* dotprod is default in armv8.4-a, don't emit. */ diff --git a/gcc/testsuite/gcc.target/aarch64/options_set_19.c b/gcc/testsuite/gcc.target/aarch64/options_set_19.c new file mode 100644 index 0000000..72b5812 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/options_set_19.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=armv8.4-a+fp" } */ + +int main () +{ + return 0; +} + +/* { dg-final { scan-assembler {\.arch armv8\.4-a\+crc} } } */ + + /* fp default, don't emit. */ diff --git a/gcc/testsuite/gcc.target/aarch64/options_set_20.c b/gcc/testsuite/gcc.target/aarch64/options_set_20.c new file mode 100644 index 0000000..b383e0a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/options_set_20.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=armv8.4-a+fp16" } */ + +int main () +{ + return 0; +} + +/* { dg-final { scan-assembler {\.arch armv8\.4-a\+crc\+fp16} } } */ + + /* fp16 smallest set to emit. */ diff --git a/gcc/testsuite/gcc.target/aarch64/options_set_21.c b/gcc/testsuite/gcc.target/aarch64/options_set_21.c new file mode 100644 index 0000000..19fcd6f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/options_set_21.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=armv8.4-a+fp16+fp" } */ + +int main () +{ + return 0; +} + +/* { dg-final { scan-assembler {\.arch armv8\.4-a\+crc\+fp16} } } */ + + /* fp16 smallest set to emit. */ diff --git a/gcc/testsuite/gcc.target/aarch64/options_set_22.c b/gcc/testsuite/gcc.target/aarch64/options_set_22.c new file mode 100644 index 0000000..77ae408 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/options_set_22.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=armv8.4-a+fp16fml" } */ + +int main () +{ + return 0; +} + +/* { dg-final { scan-assembler {\.arch armv8\.4-a\+crc\+fp16} } } */ + + /* fp16 smallest set to emit. */ diff --git a/gcc/testsuite/gcc.target/aarch64/options_set_23.c b/gcc/testsuite/gcc.target/aarch64/options_set_23.c new file mode 100644 index 0000000..dee637c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/options_set_23.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=armv8.4-a+fp16fml+fp" } */ + +int main () +{ + return 0; +} + +/* { dg-final { scan-assembler {\.arch armv8\.4-a\+crc\+fp16} } } */ + + /* fp16 smallest set to emit. */ diff --git a/gcc/testsuite/gcc.target/aarch64/options_set_24.c b/gcc/testsuite/gcc.target/aarch64/options_set_24.c new file mode 100644 index 0000000..54b0e3d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/options_set_24.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=armv8.4-a+fp16fml+fp16" } */ + +int main () +{ + return 0; +} + +/* { dg-final { scan-assembler {\.arch armv8\.4-a\+crc\+fp16} } } */ + + /* fp16 smallest set to emit. */ diff --git a/gcc/testsuite/gcc.target/aarch64/options_set_25.c b/gcc/testsuite/gcc.target/aarch64/options_set_25.c new file mode 100644 index 0000000..a3b2d63 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/options_set_25.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=armv8.4-a+fp16fml+fp+fp16" } */ + +int main () +{ + return 0; +} + +/* { dg-final { scan-assembler {\.arch armv8\.4-a\+crc\+fp16} } } */ + + /* fp16 smallest set to emit. */ diff --git a/gcc/testsuite/gcc.target/aarch64/options_set_26.c b/gcc/testsuite/gcc.target/aarch64/options_set_26.c new file mode 100644 index 0000000..b383e0a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/options_set_26.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=armv8.4-a+fp16" } */ + +int main () +{ + return 0; +} + +/* { dg-final { scan-assembler {\.arch armv8\.4-a\+crc\+fp16} } } */ + + /* fp16 smallest set to emit. */ |