aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@acm.org>2016-05-20 19:52:50 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2016-05-20 19:52:50 +0000
commitae578943c00e669b6b18ce2588a29efcfb74ae19 (patch)
treefa0da02b164cdefd6cd94eb6b8a95b1b946db452
parent15c671a79ca66df5b1de70dd1a0b78414fe003ef (diff)
downloadgcc-ae578943c00e669b6b18ce2588a29efcfb74ae19.zip
gcc-ae578943c00e669b6b18ce2588a29efcfb74ae19.tar.gz
gcc-ae578943c00e669b6b18ce2588a29efcfb74ae19.tar.bz2
nptx.c (nvptx_option_override): Only set flag_toplevel_reorder, if not explicitly specified.
* config/nvptx/nptx.c (nvptx_option_override): Only set flag_toplevel_reorder, if not explicitly specified. Set flag_no_common, unless explicitly specified. testsuite/ * gcc.target/nvptx/uninit-decl.c: Force common storage, add non-common cases. * gcc.dg/tree-ssa/ssa-store-ccp-2.c: Add -fcommon. From-SVN: r236532
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/nvptx/nvptx.c15
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-store-ccp-2.c2
-rw-r--r--gcc/testsuite/gcc.target/nvptx/uninit-decl.c18
4 files changed, 36 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 32813b4..3f65d05 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2016-05-20 Nathan Sidwell <nathan@acm.org>
+
+ * config/nvptx/nptx.c (nvptx_option_override): Only set
+ flag_toplevel_reorder, if not explicitly specified. Set
+ flag_no_common, unless explicitly specified.
+
2016-05-20 David Malcolm <dmalcolm@redhat.com>
* calls.c (can_implement_as_sibling_call_p): Mark param
diff --git a/gcc/config/nvptx/nvptx.c b/gcc/config/nvptx/nvptx.c
index d4a8f29..1bd1871 100644
--- a/gcc/config/nvptx/nvptx.c
+++ b/gcc/config/nvptx/nvptx.c
@@ -155,8 +155,19 @@ static void
nvptx_option_override (void)
{
init_machine_status = nvptx_init_machine_status;
- /* Gives us a predictable order, which we need especially for variables. */
- flag_toplevel_reorder = 1;
+
+ /* Set toplevel_reorder, unless explicitly disabled. We need
+ reordering so that we emit necessary assembler decls of
+ undeclared variables. */
+ if (!global_options_set.x_flag_toplevel_reorder)
+ flag_toplevel_reorder = 1;
+
+ /* Set flag_no_common, unless explicitly disabled. We fake common
+ using .weak, and that's not entirely accurate, so avoid it
+ unless forced. */
+ if (!global_options_set.x_flag_no_common)
+ flag_no_common = 1;
+
/* Assumes that it will see only hard registers. */
flag_var_tracking = 0;
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-store-ccp-2.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-store-ccp-2.c
index cdc0420..51fc1b3 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-store-ccp-2.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-store-ccp-2.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-optimized" } */
+/* { dg-options "-O2 -fdump-tree-optimized -fcommon" } */
const int conststaticvariable;
diff --git a/gcc/testsuite/gcc.target/nvptx/uninit-decl.c b/gcc/testsuite/gcc.target/nvptx/uninit-decl.c
index 65c44f5..115d703 100644
--- a/gcc/testsuite/gcc.target/nvptx/uninit-decl.c
+++ b/gcc/testsuite/gcc.target/nvptx/uninit-decl.c
@@ -1,7 +1,21 @@
/* { dg-do compile } */
-int __attribute__ ((used)) common;
-static int __attribute__ ((used)) local;
+int __attribute__ ((common)) common;
+static int local;
+extern int external_decl;
+int external_defn;
+
+int foo ()
+{
+ return common + local + external_decl + external_defn;
+}
+
+void bar (int i)
+{
+ common = local = external_decl = external_defn = i;
+}
/* { dg-final { scan-assembler "\[\n\r\]\[\t \]*.weak .global\[^,\n\r\]*common" } } */
/* { dg-final { scan-assembler "\[\n\r\]\[\t \]*.global\[^,\n\r\]*local" } } */
+/* { dg-final { scan-assembler "\[\n\r\]\[\t \]*.extern .global\[^,\n\r\]*external_decl" } } */
+/* { dg-final { scan-assembler "\[\n\r\]\[\t \]*.visible .global\[^,\n\r\]*external_defn" } } */