This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch] Banish RTL from the front ends


Hi,

After this patch, no front end will ever include rtl.h and still build.

Well, almost anyway. There are three files that still need to include
rtl.h, but I would like to work on those after first making sure
nothing new can show up ever again. The c-common.c bit is easy, the
java bit is a bit more difficult, and I sent out an RFH for the ada
bits yesterday because I have no idea what to do there.

I have looked through the target specific code, and I think I've got
everything covered there also, but should something break anyway, let
me know and I'll fix it ASAP.

The Makefile bits have been approved already
(http://gcc.gnu.org/ml/gcc/2010-05/msg00609.html), and so has the
system.h changeto system.h
(http://gcc.gnu.org/ml/gcc/2010-05/msg00596.html)

So I still need the OK from the front end folks.

Bootstrapped (all languages) on x86_64-unknown-linux-gnu.
OK for trunk?

Ciao!
Steven




gcc/ChangeLog:
        * Makefile.in (ALL_CFLAGS): Add file-specific CFLAGS.
        (ALL_HOST_FRONTEND_OBJS): New, for all front-end specific objects.
        (ALL_HOST_BACKEND_OBJS): New, for all backend and target objects.
        (ALL_HOST_OBJS): Now a union of the above two.
        <section "Language makefile fragments">: Add -DIN_GCC_FRONTEND for
        all files in ALL_HOST_FRONTEND_OBJS.
        * system.h: Poison GCC_RTL_H if IN_GCC_FRONTEND is defined.
        * c-common.c: Pretend to be a backend file by undefining
        IN_GCC_FRONTEND (still need rtl.h here).

java/ChangeLog:
        * buildings.c: Pretend to be a backend file by undefining
        IN_GCC_FRONTEND (still need rtl.h here).

ada/ChangeLog:
        * gcc-interface/decl.c: Pretend to be a backend file by undefining
        IN_GCC_FRONTEND (still need rtl.h here).

Index: Makefile.in
===================================================================
--- Makefile.in (revision 159912)
+++ Makefile.in (working copy)
@@ -974,7 +974,7 @@ INTERNAL_CFLAGS = -DIN_GCC @CROSS@

 # This is the variable actually used when we compile. If you change this,
 # you probably want to update BUILD_CFLAGS in configure.ac
-ALL_CFLAGS = $(T_CFLAGS) \
+ALL_CFLAGS = $(T_CFLAGS) $(CFLAGS-$@) \
   $(CFLAGS) $(INTERNAL_CFLAGS) $(COVERAGE_FLAGS) $(WARN_CFLAGS) @DEFS@

 # The C++ version.
@@ -1445,15 +1445,19 @@ OBJS = $(OBJS-common) $(OBJS-md) $(OBJS-

 OBJS-onestep = libbackend.o $(OBJS-archive)

-# This lists all host object files, whether they are included in this
-# compilation or not.
-ALL_HOST_OBJS = $(GCC_OBJS) $(C_OBJS) $(OBJS) libbackend.o \
+# This lists all host objects for the front ends.
+ALL_HOST_FRONTEND_OBJS = $(C_OBJS) \
+  $(foreach v,$(CONFIG_LANGUAGES),$($(v)_OBJS))
+
+ALL_HOST_BACKEND_OBJS = $(GCC_OBJS) $(OBJS) libbackend.o \
   @TREEBROWSER@ main.o gccspec.o version.o intl.o prefix.o cppspec.o \
-  $(foreach v,$(CONFIG_LANGUAGES),$($(v)_OBJS)) \
-  $(COLLECT2_OBJS) $(EXTRA_GCC_OBJS) \
-  mips-tfile.o mips-tdump.o \
+  $(COLLECT2_OBJS) $(EXTRA_GCC_OBJS) mips-tfile.o mips-tdump.o \
   $(GCOV_OBJS) $(GCOV_DUMP_OBJS)

+# This lists all host object files, whether they are included in this
+# compilation or not.
+ALL_HOST_OBJS = $(ALL_HOST_FRONTEND_OBJS) $(ALL_HOST_BACKEND_OBJS)
+
 BACKEND = main.o @TREEBROWSER@ libbackend.a $(CPPLIB) $(LIBDECNUMBER)

 MOSTLYCLEANFILES = insn-flags.h insn-config.h insn-codes.h \
@@ -1571,6 +1575,13 @@ s-alltree: Makefile
        $(SHELL) $(srcdir)/../move-if-change tmp-all-tree.def all-tree.def
        $(STAMP) s-alltree

+# Now that LANG_MAKEFRAGS are included, we can add special flags to the
+# objects that belong to the front ends.  We add an extra define that
+# causes back-end specific include files to be poisoned, in the hope that
+# we can avoid introducing dependencies of the front ends on things that
+# no front end should ever look at (e.g. everything RTL related).
+$(foreach file,$(ALL_HOST_FRONTEND_OBJS),$(eval CFLAGS-$(file) +=
-DIN_GCC_FRONTEND))
+
 #


 # -----------------------------
Index: system.h
===================================================================
--- system.h    (revision 159912)
+++ system.h    (working copy)
@@ -789,6 +789,12 @@ extern void fancy_abort (const char *, i
   VA_FIXEDARG VA_CLOSE VA_START
 #endif /* IN_GCC */

+/* Front ends should never have to include middle-end headers.  Enforce
+   this by poisoning the header double-include protection defines.  */
+#ifdef IN_GCC_FRONTEND
+#pragma GCC poison GCC_RTL_H
+#endif
+
 /* Note: not all uses of the `index' token (e.g. variable names and
    structure members) have been eliminated.  */
 #undef bcopy
Index: c-common.c
===================================================================
--- c-common.c  (revision 159912)
+++ c-common.c  (working copy)
@@ -19,6 +19,10 @@ You should have received a copy of the G
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */

+/* FIXME: Still need to include rtl.h here (via expr.h) in a front-end file.
+   Pretend this is a back-end file.  */
+#undef IN_GCC_FRONTEND
+
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
@@ -47,9 +51,6 @@ along with GCC; see the file COPYING3.
 #include "target-def.h"
 #include "libfuncs.h"

-/* FIXME: Still need to include rtl.h here (via expr.h) in a front-end file.
-   Pretend this is a back-end file.  */
-#define IN_GCC_BACKEND
 #include "expr.h" /* For vector_mode_valid_p */

 /* FIXME: Needed for TARGET_ENUM_VA_LIST, which should be a target hook.  */
Index: java/builtins.c
===================================================================
--- java/builtins.c     (revision 159912)
+++ java/builtins.c     (working copy)
@@ -24,6 +24,9 @@ The Free Software Foundation is independ

 /* Written by Tom Tromey <tromey@redhat.com>.  */

+/* FIXME: Still need to include rtl.h here (see below).  */
+#undef IN_GCC_FRONTEND
+
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
Index: ada/gcc-interface/decl.c
===================================================================
--- ada/gcc-interface/decl.c    (revision 159912)
+++ ada/gcc-interface/decl.c    (working copy)
@@ -23,6 +23,10 @@
  *                                                                          *
  ****************************************************************************/

+/* FIXME: Still need to include rtl.h here (via expr.h) because this file
+   actually generates RTL (search for gen_rtx_* in gnat_to_gnu_entity).  */
+#undef IN_GCC_FRONTEND
+
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]