From 126a5a2d09599b4d8a24c73f0f235329eb525b67 Mon Sep 17 00:00:00 2001 From: ktkachov Date: Fri, 26 Feb 2016 16:02:21 +0000 Subject: [PATCH] [AArch64] Set TREE_TARGET_GLOBALS in aarch64_set_current_function when new tree is the default node to recalculate optab availability PR target/69245 * config/aarch64/aarch64.c (aarch64_set_current_function): Save/restore target globals when switching to target_option_default_node. * gcc.target/aarch64/pr69245_1.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@233745 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 7 +++++++ gcc/config/aarch64/aarch64.c | 2 +- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.target/aarch64/pr69245_1.c | 18 ++++++++++++++++++ 4 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/aarch64/pr69245_1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 916c381529a..a34883eb2e8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,12 @@ 2016-02-26 Kyrylo Tkachov + PR target/69245 + * config/aarch64/aarch64.c (aarch64_set_current_function): + Save/restore target globals when switching to + target_option_default_node. + +2016-02-26 Kyrylo Tkachov + PR target/69613 * config/aarch64/aarch64.c (aarch64_shift_truncation_mask): Return 0 if !SHIFT_COUNT_TRUNCATED. diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index 30d6f4176b8..3519c7bf3ab 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -8576,7 +8576,7 @@ aarch64_set_current_function (tree fndecl) if (old_tree == new_tree) ; - else if (new_tree && new_tree != target_option_default_node) + else if (new_tree) { cl_target_option_restore (&global_options, TREE_TARGET_OPTION (new_tree)); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d5b890ddc1f..99e0f2ff1d6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2016-02-26 Kyrylo Tkachov + PR target/69245 + * gcc.target/aarch64/pr69245_1.c: New test. + +2016-02-26 Kyrylo Tkachov + PR target/69613 * gcc.dg/torture/pr69613.c: New test. diff --git a/gcc/testsuite/gcc.target/aarch64/pr69245_1.c b/gcc/testsuite/gcc.target/aarch64/pr69245_1.c new file mode 100644 index 00000000000..dcc542b2a86 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/pr69245_1.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=armv8-a+fp -fomit-frame-pointer" } */ + +#pragma GCC target "arch=armv8-a+nofp" +long a; +static void +fn1 () +{ +} + +#pragma GCC target "arch=armv8-a+fp" +float +fn2 (float a) +{ + return a + 2.0; +} + +/* { dg-final { scan-assembler-not "__addsf3" } } */ -- 2.11.4.GIT