New avr-passes.def to register AVR specific passes.
authorGeorg-Johann Lay <avr@gjlay.de>
Tue, 11 Oct 2016 08:02:48 +0000 (08:02 +0000)
committerGeorg-Johann Lay <gjl@gcc.gnu.org>
Tue, 11 Oct 2016 08:02:48 +0000 (08:02 +0000)
* config/avr/avr-passes.def: New file.
* config/avr/t-avr (PASSES_EXTRA): Add avr-passes.def.
* config/avr/avr-protos.h (gcc::context, rtl_opt_pass): Declare.
(make_avr_pass_recompute_note): New proto.
* config/avr/avr.c (make_avr_pass_recompute_notes): New function.
(avr_pass_recompute_notes): Use anonymous namespace.
(avr_register_passes): Remove function...
(avr_option_override): ...and its call.

From-SVN: r240966

gcc/ChangeLog
gcc/config/avr/avr-passes.def [new file with mode: 0644]
gcc/config/avr/avr-protos.h
gcc/config/avr/avr.c
gcc/config/avr/t-avr

index a8860a5fc2551c60688aa4effdc5ed054699bb78..8dbf87c884c234fc1f05948d8d3295e007d468dc 100644 (file)
@@ -1,3 +1,16 @@
+2016-10-11  Georg-Johann Lay  <avr@gjlay.de>
+
+       New avr-passes.def to register AVR specific passes.
+
+       * config/avr/avr-passes.def: New file.
+       * config/avr/t-avr (PASSES_EXTRA): Add avr-passes.def.
+       * config/avr/avr-protos.h (gcc::context, rtl_opt_pass): Declare.
+       (make_avr_pass_recompute_note): New proto.
+       * config/avr/avr.c (make_avr_pass_recompute_notes): New function.
+       (avr_pass_recompute_notes): Use anonymous namespace.
+       (avr_register_passes): Remove function...
+       (avr_option_override): ...and its call.
+
 2016-10-11  Robert Suchanek  <robert.suchanek@imgtec.com>
 
        * config/mips/mips-cpus.def: Replace PTF_AVOID_BRANCHLIKELY with
diff --git a/gcc/config/avr/avr-passes.def b/gcc/config/avr/avr-passes.def
new file mode 100644 (file)
index 0000000..64d9ce4
--- /dev/null
@@ -0,0 +1,28 @@
+/* Description of target passes for AVR.
+   Copyright (C) 2016 Free Software Foundation, Inc. */
+
+/* This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it under
+   the terms of the GNU General Public License as published by the Free
+   Software Foundation; either version 3, or (at your option) any later
+   version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+   WARRANTY; without even the implied warranty of MERCHANTABILITY or
+   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+   for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+/* This avr-specific pass (re)computes insn notes, in particular REG_DEAD
+   notes which are used by `avr.c::reg_unused_after' and branch offset
+   computations.  These notes must be correct, i.e. there must be no
+   dangling REG_DEAD notes; otherwise wrong code might result, cf. PR64331.
+
+   DF needs (correct) CFG, hence right before free_cfg is the last
+   opportunity to rectify notes.  */
+
+INSERT_PASS_BEFORE (pass_free_cfg, 1, avr_pass_recompute_notes);
index ddc3047b32bc3b100c4b225009cdc2d5f5e94c40..1a5efa8fb3160dea29ca55d5fdbe8247c6209835 100644 (file)
@@ -154,6 +154,11 @@ extern void asm_output_float (FILE *file, REAL_VALUE_TYPE n);
 
 extern bool avr_have_dimode;
 
+namespace gcc { class context; }
+class rtl_opt_pass;
+
+extern rtl_opt_pass *make_avr_pass_recompute_notes (gcc::context *);
+
 /* From avr-log.c */
 
 #define avr_dump(...) avr_vdump (NULL, __FUNCTION__, __VA_ARGS__)
index 9cb81061dc09817302cebfe65860eb657b7c44de..7310b54f9ed46252e2001fcae4b606def4197757 100644 (file)
@@ -295,6 +295,7 @@ avr_to_int_mode (rtx x)
     : simplify_gen_subreg (int_mode_for_mode (mode), x, mode, 0);
 }
 
+namespace {
 
 static const pass_data avr_pass_data_recompute_notes =
 {
@@ -328,20 +329,12 @@ public:
   }
 }; // avr_pass_recompute_notes
 
+} // anon namespace
 
-static void
-avr_register_passes (void)
+rtl_opt_pass*
+make_avr_pass_recompute_notes (gcc::context *ctxt)
 {
-  /* This avr-specific pass (re)computes insn notes, in particular REG_DEAD
-     notes which are used by `avr.c::reg_unused_after' and branch offset
-     computations.  These notes must be correct, i.e. there must be no
-     dangling REG_DEAD notes; otherwise wrong code might result, cf. PR64331.
-
-     DF needs (correct) CFG, hence right before free_cfg is the last
-     opportunity to rectify notes.  */
-
-  register_pass (new avr_pass_recompute_notes (g, "avr-notes-free-cfg"),
-                 PASS_POS_INSERT_BEFORE, "*free_cfg", 1);
+  return new avr_pass_recompute_notes (ctxt, "avr-notes-free-cfg");
 }
 
 
@@ -464,11 +457,6 @@ avr_option_override (void)
   init_machine_status = avr_init_machine_status;
 
   avr_log_set_avr_log();
-
-  /* Register some avr-specific pass(es).  There is no canonical place for
-     pass registration.  This function is convenient.  */
-
-  avr_register_passes ();
 }
 
 /* Function to set up the backend function structure.  */
index 48b77013dde7583d8fdbd99ff4ace11493107eda..ffa5b5010a136300921619a17a76015e9159de31 100644 (file)
@@ -16,6 +16,8 @@
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
+PASSES_EXTRA += $(srcdir)/config/avr/avr-passes.def
+
 driver-avr.o: $(srcdir)/config/avr/driver-avr.c \
   $(CONFIG_H) $(SYSTEM_H) coretypes.h \
   $(srcdir)/config/avr/avr-arch.h $(TM_H)