public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [patch 0/9] Flattening and initial module rebuilding
@ 2015-07-07 13:40 Andrew MacLeod
  2015-07-07 13:43 ` [patch 1/9] header additions and aggregators Andrew MacLeod
                   ` (9 more replies)
  0 siblings, 10 replies; 22+ messages in thread
From: Andrew MacLeod @ 2015-07-07 13:40 UTC (permalink / raw)
  To: gcc-patches

This is a series of 9 patches which does some flattening, some module 
building, and some basic cleanups.

  I am presenting them as 9 patches for easier review. The latter couple 
of patches affect a lot of the same files that follow on patches then 
adjust, I've decided NOT to put the automated changes in with each of 
those patches.

There are 8 patches showing the key changes, and then the 9th patch is 
an aggregate of the first 8 key changes, plus the final result of the 
impact on all the source files.  This is the only patch I'd like to commit.

  The automated tools which generate the source changes have been 
significantly enhanced.  When a header is flattened, the source file is 
checked for the existence of the headers which need moving, and any 
which are already present are left if they are in the right order. Any 
duplicate are also removed.

  A similar process is used when an aggregation file like backend.h or 
ssa.h is processed. Any occurrences of the aggregated headers are 
removed from the source file so there are no duplicates.  The aggregated 
headers are typically only placed in a source file if 3 or more of the 
headers would be replaced.  (ie, if only bitmap.h is included, I don't 
just blindly put backend.h in the file.)   This number came from 
analysis of a fully flattened and include-reduced tree, and seemed to be 
the sweet spot.

  With the aggregation and flattening, the order of some includes can 
get shifted around with other files in between, so the tools also ensure 
there is a "blessed" order which will make sure than any pre-reqs are 
always available.  Right now, its primarily:

config.h
system.h
coretypes.h
backend.h
tree.h
gimple.h
rtl.h
df.h
ssa.h

And if any of the aggregators are not present, then any headers which 
make up the aggregator are in the same relative position.

The tools actually produced all these patches with no tweaking to solve 
compilation failures.. which was very helpful.  The old ones needed some 
guidance and were a bit finicky.

I can adjust any of this quite easily, or present them in a different 
way if you don't like it this way.  Again, my goal is to check in just 
the final patch which does all the work of first 8 patches.    It would 
be a lot less turmoil on the branch.   I can do it in smaller chunks if 
need be.

Andrew

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [patch 1/9] header additions and aggregators
  2015-07-07 13:40 [patch 0/9] Flattening and initial module rebuilding Andrew MacLeod
@ 2015-07-07 13:43 ` Andrew MacLeod
  2015-07-07 13:44 ` [patch 2/9] flatten regset.h Andrew MacLeod
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 22+ messages in thread
From: Andrew MacLeod @ 2015-07-07 13:43 UTC (permalink / raw)
  To: gcc-patches

[-- Attachment #1: Type: text/plain, Size: 2452 bytes --]

This patch implements most of the core concepts described in my previous 
email (https://gcc.gnu.org/ml/gcc-patches/2015-06/msg01846.html)  It 
goes into detail of the analysis which resulted in this layout.  Most of 
the unnecessary prerequisites have been removed, so we can start 
introducing back some of the required files.

  The changes in this patch:

* symtab.h is required for tree-core.h to compile, so include it.

* rtl.h does not require flagfs.h, but it does need hard-reg-set.h, and 
it turns out that any build files which need rtl.h actually have 
hard-reg-set.h available... so we can simply include it there.
   Furthermore, now that hard-reg-set.h is being included, all the 
conditional compilation code on HARD_CONST can also be removed. This 
removes a subtle ordering that you needed to make sure hard-reg-set.h 
was included before rtl.h, or certain routines didn't appear to be 
available.

* regs.h includes both hard-reg-set.h and rtl.h.  Turns out 153 of the 
155 files which include regs.h also included rtl.h already... so simple 
remove the includes.

* cfg.h requires dominance to compile, so include it.

* gimple.h requires tree-ssa-alias.h and gimple-expr.h to compile, so 
include them

* introduce backend.h which includes the files most frequently required 
by libbackend.a objects. they are tm.h, function.h, bitmap.h, sbitmap.h, 
predict.h, basic-block.h, and cfg.h

gimple-ssa.h does not need tree-hasher.h., so remove it.

* Introduce ssa.h as an aggregator for commonly needs ssa files.  I 
originally thought I could use tree-ssa-operands.h, but alas, there are 
ordering issues where many of the headers require the contents of 
tree-ssa-operands.h.  So I'd either have to put all these includes at 
the bottom of the file, or create a new file.  I think a new file is a 
better solution.

This patch actually compiles as is, but there are  a number of followup 
manipulations in the final source update. For each source file, any 
includes which occur in one of these files are removed, avoiding 
duplicates.

In the case of backend.h and ssa.h, any backend file which used 3 or 
more of the aggregated includes are replaced with the aggregator.

Further aggregations may be done for front end and other components 
after the include reduction is eventually performed.

Bootstraps from scratch on x86_64-unknown-linux-gnu with no new 
regressions. Also compiles all the files in config-list.mk.

Andrew


[-- Attachment #2: 1-module.patch --]
[-- Type: text/x-patch, Size: 7859 bytes --]


	* tree-core.h: Include symtab.h.
	* rtl.h: Include hard-reg-set.h but not flags.h.
	(HARD_CONST): Remove condition compilation involving HARD_CONST since 
	hard-reg-set.h is always included.
	* regs.h: Don't include hard-reg-set.h or rtl.h.
	* cfg.h: Include dominance.h.
	* gimple.h: Include tree-ssa-alias.h and gimple-expr.h.
	* backend.h: New.  Aggregate commonly used backend header files.
	* gimple-ssa.h: Don't include tree-hasher.h.
	* ssa.h: New.  Aggregate commonly used SSA header files.

Index: tree-core.h
===================================================================
*** tree-core.h	(revision 224988)
--- tree-core.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 20,25 ****
--- 20,27 ----
  #ifndef GCC_TREE_CORE_H
  #define GCC_TREE_CORE_H
  
+ #include "symtab.h"
+ 
  /* This file contains all the data structures that define the 'tree' type.
     There are no accessor macros nor functions in this file. Only the
     basic data structures, extern declarations and type definitions.  */
Index: rtl.h
===================================================================
*** rtl.h	(revision 224988)
--- rtl.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 38,44 ****
  #include "is-a.h"
  #endif  /* GENERATOR_FILE */
  
! #include "flags.h"
  
  /* Value used by some passes to "recognize" noop moves as valid
   instructions.  */
--- 38,44 ----
  #include "is-a.h"
  #endif  /* GENERATOR_FILE */
  
! #include "hard-reg-set.h"
  
  /* Value used by some passes to "recognize" noop moves as valid
   instructions.  */
*************** extern bool val_signbit_known_clear_p (m
*** 2880,2888 ****
  /* In reginfo.c  */
  extern machine_mode choose_hard_reg_mode (unsigned int, unsigned int,
  					       bool);
- #ifdef HARD_CONST
  extern const HARD_REG_SET &simplifiable_subregs (const subreg_shape &);
- #endif
  
  /* In emit-rtl.c  */
  extern rtx set_for_reg_notes (rtx);
--- 2880,2886 ----
*************** extern int reg_overlap_mentioned_p (cons
*** 2939,2948 ****
  extern const_rtx set_of (const_rtx, const_rtx);
  extern void record_hard_reg_sets (rtx, const_rtx, void *);
  extern void record_hard_reg_uses (rtx *, void *);
- #ifdef HARD_CONST
  extern void find_all_hard_regs (const_rtx, HARD_REG_SET *);
  extern void find_all_hard_reg_sets (const rtx_insn *, HARD_REG_SET *, bool);
- #endif
  extern void note_stores (const_rtx, void (*) (rtx, const_rtx, void *), void *);
  extern void note_uses (rtx *, void (*) (rtx *, void *), void *);
  extern int dead_or_set_p (const_rtx, const_rtx);
--- 2937,2944 ----
*************** extern bool can_assign_to_reg_without_cl
*** 3572,3580 ****
  extern rtx fis_get_condition (rtx_insn *);
  
  /* In ira.c */
- #ifdef HARD_CONST
  extern HARD_REG_SET eliminable_regset;
- #endif
  extern void mark_elimination (int, int);
  
  /* In reginfo.c */
--- 3568,3574 ----
*************** extern void init_reg_sets (void);
*** 3590,3598 ****
  extern void regclass (rtx, int);
  extern void reg_scan (rtx_insn *, unsigned int);
  extern void fix_register (const char *, int, int);
- #ifdef HARD_CONST
  extern const HARD_REG_SET *valid_mode_changes_for_regno (unsigned int);
- #endif
  
  /* In reload1.c */
  extern int function_invariant_p (const_rtx);
--- 3584,3590 ----
*************** extern void _fatal_insn (const char *, c
*** 3709,3715 ****
  /* reginfo.c */
  extern tree GTY(()) global_regs_decl[FIRST_PSEUDO_REGISTER];
  
- #ifdef HARD_CONST
  /* Information about the function that is propagated by the RTL backend.
     Available only for functions that has been already assembled.  */
  
--- 3701,3706 ----
*************** struct GTY(()) cgraph_rtl_info {
*** 3723,3729 ****
    /* Set if function_used_regs is valid.  */
    unsigned function_used_regs_valid: 1;
  };
- #endif
  
  
  #endif /* ! GCC_RTL_H */
--- 3714,3719 ----
Index: regs.h
===================================================================
*** regs.h	(revision 225452)
--- regs.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 20,28 ****
  #ifndef GCC_REGS_H
  #define GCC_REGS_H
  
- #include "hard-reg-set.h"
- #include "rtl.h"
- 
  #define REG_BYTES(R) mode_size[(int) GET_MODE (R)]
  
  /* When you only have the mode of a pseudo register before it has a hard
--- 20,25 ----
Index: cfg.h
===================================================================
*** cfg.h	(revision 224988)
--- cfg.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 20,25 ****
--- 20,27 ----
  #ifndef GCC_CFG_H
  #define GCC_CFG_H
  
+ #include "dominance.h"
+ 
  /* What sort of profiling information we have.  */
  enum profile_status_d
  {
Index: gimple.h
===================================================================
*** gimple.h	(revision 224989)
--- gimple.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 22,27 ****
--- 22,30 ----
  #ifndef GCC_GIMPLE_H
  #define GCC_GIMPLE_H
  
+ #include "tree-ssa-alias.h"
+ #include "gimple-expr.h"
+ 
  typedef gimple gimple_seq_node;
  
  enum gimple_code {
Index: backend.h
===================================================================
*** backend.h	(revision 0)
--- backend.h	(working copy)
***************
*** 0 ****
--- 1,33 ----
+ /* Common Backend requirements. 
+ 
+    Copyright (C) 2015 Free Software Foundation, Inc.
+    Contributed by Andrew MacLeod <amacleod@redhat.com>
+ 
+ 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/>.  */
+ 
+ #ifndef GCC_BACKEND_H
+ #define GCC_BACKEND_H
+ 
+ #include "tm.h"
+ #include "function.h"
+ #include "bitmap.h"
+ #include "sbitmap.h"
+ #include "predict.h"
+ #include "basic-block.h"
+ #include "cfg.h"
+ 
+ #endif /*GCC_BACKEND_H */
Index: gimple-ssa.h
===================================================================
*** gimple-ssa.h	(revision 224988)
--- gimple-ssa.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 21,27 ****
  #ifndef GCC_GIMPLE_SSA_H
  #define GCC_GIMPLE_SSA_H
  
- #include "tree-hasher.h"
  #include "tree-ssa-operands.h"
  
  /* This structure is used to map a gimple statement to a label,
--- 21,26 ----
Index: ssa.h
===================================================================
*** ssa.h	(revision 0)
--- ssa.h	(working copy)
***************
*** 0 ****
--- 1,29 ----
+ /* Common SSA files
+    Copyright (C) 2015 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/>.  */
+ 
+ #ifndef GCC_SSA_H
+ #define GCC_SSA_H
+ 
+ #include "stringpool.h"
+ #include "gimple-ssa.h"
+ #include "tree-ssanames.h"
+ #include "tree-phinodes.h"
+ #include "ssa-iterators.h" 
+ 
+ #endif  /* GCC_SSA_H  */

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [patch 2/9]  flatten regset.h
  2015-07-07 13:40 [patch 0/9] Flattening and initial module rebuilding Andrew MacLeod
  2015-07-07 13:43 ` [patch 1/9] header additions and aggregators Andrew MacLeod
@ 2015-07-07 13:44 ` Andrew MacLeod
  2015-07-07 13:45 ` [patch 3/9] Flatten lra-int.h Andrew MacLeod
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 22+ messages in thread
From: Andrew MacLeod @ 2015-07-07 13:44 UTC (permalink / raw)
  To: gcc-patches

[-- Attachment #1: Type: text/plain, Size: 622 bytes --]

This patch flattens regset.h.  it only includes bitmap.h which will come 
from backend.h and hard-reg-set.h which is going to be included by 
rtl.h.  The vast majority of files which include regset already include 
rtl.h, so its almost never needed.

This patch shows the result on all files in a virgin state (ie, as if no 
other patch has been applied) note sel-sched-ir.h and df.h both include 
regset.h.. its flattened into them as well, but will later come out when 
those 2 are flattened.

bootstraps from scratch on x86_64-unknown-linux-gnu with no new 
regressions. Also compiles all the files in config-list.mk.


[-- Attachment #2: 2-regset.patch --]
[-- Type: text/x-patch, Size: 2820 bytes --]


	* regset.h: Remove bitmap.h and hard-reg-set.h #includes.
	* sel-sched-ir.h: Adjust includes.
	* df.h: Likewise.
	* dse.c: Likewise.
	* cgraphunit.c: Likewise.

Index: regset.h
===================================================================
*** regset.h	(revision 225452)
--- regset.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 30,37 ****
     the latter option, a good start would be to change everything allocated
     on the reg_obstack to regset.  */
  
- #include "bitmap.h"		/* For bitmap_iterator.  */
- #include "hard-reg-set.h"
  
  /* Head of register set linked list.  */
  typedef bitmap_head regset_head;
--- 30,35 ----
Index: sel-sched-ir.h
===================================================================
*** sel-sched-ir.h	(revision 225452)
--- sel-sched-ir.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 23,32 ****
  
  /* For state_t.  */
  #include "insn-attr.h"
  #include "regset.h"
  /* For reg_note.  */
  #include "rtl.h"
- #include "bitmap.h"
  #include "sched-int.h"
  #include "cfgloop.h"
  
--- 23,33 ----
  
  /* For state_t.  */
  #include "insn-attr.h"
+ #include "bitmap.h"
+ #include "hard-reg-set.h"
  #include "regset.h"
  /* For reg_note.  */
  #include "rtl.h"
  #include "sched-int.h"
  #include "cfgloop.h"
  
Index: df.h
===================================================================
*** df.h	(revision 225452)
--- df.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 26,36 ****
  #define GCC_DF_H
  
  #include "bitmap.h"
  #include "regset.h"
  #include "sbitmap.h"
  #include "predict.h"
  #include "tm.h"
- #include "hard-reg-set.h"
  #include "function.h"
  #include "alloc-pool.h"
  #include "timevar.h"
--- 26,36 ----
  #define GCC_DF_H
  
  #include "bitmap.h"
+ #include "hard-reg-set.h"
  #include "regset.h"
  #include "sbitmap.h"
  #include "predict.h"
  #include "tm.h"
  #include "function.h"
  #include "alloc-pool.h"
  #include "timevar.h"
Index: dse.c
===================================================================
*** dse.c	(revision 225452)
--- dse.c	(working copy)
*************** along with GCC; see the file COPYING3.
*** 35,40 ****
--- 35,41 ----
  #include "tm_p.h"
  #include "regs.h"
  #include "hard-reg-set.h"
+ #include "bitmap.h"
  #include "regset.h"
  #include "flags.h"
  #include "dominance.h"
Index: cgraphunit.c
===================================================================
*** cgraphunit.c	(revision 225452)
--- cgraphunit.c	(working copy)
*************** along with GCC; see the file COPYING3.
*** 214,219 ****
--- 214,220 ----
  #include "lto-streamer.h"
  #include "except.h"
  #include "cfgloop.h"
+ #include "bitmap.h"
  #include "regset.h"     /* FIXME: For reg_obstack.  */
  #include "context.h"
  #include "pass_manager.h"

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [patch 3/9] Flatten lra-int.h
  2015-07-07 13:40 [patch 0/9] Flattening and initial module rebuilding Andrew MacLeod
  2015-07-07 13:43 ` [patch 1/9] header additions and aggregators Andrew MacLeod
  2015-07-07 13:44 ` [patch 2/9] flatten regset.h Andrew MacLeod
@ 2015-07-07 13:45 ` Andrew MacLeod
  2015-07-07 13:46 ` [patch 5/9] Flatten ira-int.h Andrew MacLeod
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 22+ messages in thread
From: Andrew MacLeod @ 2015-07-07 13:45 UTC (permalink / raw)
  To: gcc-patches

[-- Attachment #1: Type: text/plain, Size: 301 bytes --]

This patch flattens lra-int.h.  It currently clumps 7 includes, which no 
file needs more than 4.  Flatten it here and find a better aggregator 
for rtl related files later.

Bootstraps from scratch on x86_64-unknown-linux-gnu with no new 
regressions. Also compiles all the files in config-list.mk.


[-- Attachment #2: 3-lra.patch --]
[-- Type: text/x-patch, Size: 4544 bytes --]


	* lra-int.h: Flatten completely.
	* lra-assigns.c: Adjust includes.
	* lra-coalesce.c: Likewise.
	* lra-constraints.c: Likewise.
	* lra-eliminations.c: Likewise.
	* lra-lives.c: Likewise.
	* lra-remat.c: Likewise.
	* lra-spills.c: Likewise.
	* lra.c: Likewise.

Index: lra-int.h
===================================================================
*** lra-int.h	(revision 225452)
--- lra-int.h	(working copy)
*************** along with GCC; see the file COPYING3.	I
*** 21,34 ****
  #ifndef GCC_LRA_INT_H
  #define GCC_LRA_INT_H
  
- #include "lra.h"
- #include "bitmap.h"
- #include "recog.h"
- #include "insn-attr.h"
- #include "insn-codes.h"
- #include "insn-config.h"
- #include "regs.h"
- 
  #define lra_assert(c) gcc_checking_assert (c)
  
  /* The parameter used to prevent infinite reloading for an insn.  Each
--- 21,26 ----
Index: lra-assigns.c
===================================================================
*** lra-assigns.c	(revision 225452)
--- lra-assigns.c	(working copy)
*************** along with GCC; see the file COPYING3.	I
*** 109,114 ****
--- 109,118 ----
  #include "ira.h"
  #include "sparseset.h"
  #include "params.h"
+ #include "lra.h"
+ #include "bitmap.h"
+ #include "insn-attr.h"
+ #include "insn-codes.h"
  #include "lra-int.h"
  
  /* Current iteration number of the pass and current iteration number
Index: lra-coalesce.c
===================================================================
*** lra-coalesce.c	(revision 225452)
--- lra-coalesce.c	(working copy)
*************** along with GCC; see the file COPYING3.	I
*** 74,79 ****
--- 74,83 ----
  #include "timevar.h"
  #include "ira.h"
  #include "alloc-pool.h"
+ #include "lra.h"
+ #include "bitmap.h"
+ #include "insn-attr.h"
+ #include "insn-codes.h"
  #include "lra-int.h"
  #include "df.h"
  
Index: lra-constraints.c
===================================================================
*** lra-constraints.c	(revision 225452)
--- lra-constraints.c	(working copy)
***************
*** 144,149 ****
--- 144,152 ----
  #include "ira.h"
  #include "rtl-error.h"
  #include "params.h"
+ #include "lra.h"
+ #include "bitmap.h"
+ #include "insn-attr.h"
  #include "lra-int.h"
  
  /* Value of LRA_CURR_RELOAD_NUM at the beginning of BB of the current
Index: lra-eliminations.c
===================================================================
*** lra-eliminations.c	(revision 225452)
--- lra-eliminations.c	(working copy)
*************** along with GCC; see the file COPYING3.	I
*** 87,92 ****
--- 87,95 ----
  #include "df.h"
  #include "ira.h"
  #include "rtl-error.h"
+ #include "lra.h"
+ #include "bitmap.h"
+ #include "insn-attr.h"
  #include "lra-int.h"
  
  /* This structure is used to record information about hard register
Index: lra-lives.c
===================================================================
*** lra-lives.c	(revision 225452)
--- lra-lives.c	(working copy)
*************** along with GCC; see the file COPYING3.	I
*** 58,63 ****
--- 58,67 ----
  #include "df.h"
  #include "ira.h"
  #include "sparseset.h"
+ #include "lra.h"
+ #include "bitmap.h"
+ #include "insn-attr.h"
+ #include "insn-codes.h"
  #include "lra-int.h"
  
  /* Program points are enumerated by numbers from range
Index: lra-remat.c
===================================================================
*** lra-remat.c	(revision 225452)
--- lra-remat.c	(working copy)
*************** along with GCC; see the file COPYING3.	I
*** 87,92 ****
--- 87,96 ----
  #include "ira.h"
  #include "sparseset.h"
  #include "params.h"
+ #include "lra.h"
+ #include "bitmap.h"
+ #include "insn-attr.h"
+ #include "insn-codes.h"
  #include "lra-int.h"
  
  /* Number of candidates for rematerialization.  */
Index: lra-spills.c
===================================================================
*** lra-spills.c	(revision 225452)
--- lra-spills.c	(working copy)
*************** along with GCC; see the file COPYING3.	I
*** 88,93 ****
--- 88,97 ----
  #include "timevar.h"
  #include "target.h"
  #include "alloc-pool.h"
+ #include "lra.h"
+ #include "bitmap.h"
+ #include "insn-attr.h"
+ #include "insn-codes.h"
  #include "lra-int.h"
  #include "ira.h"
  #include "df.h"
Index: lra.c
===================================================================
*** lra.c	(revision 225452)
--- lra.c	(working copy)
*************** along with GCC; see the file COPYING3.	I
*** 139,144 ****
--- 139,147 ----
  #include "target.h"
  #include "ira.h"
  #include "alloc-pool.h"
+ #include "lra.h"
+ #include "bitmap.h"
+ #include "insn-attr.h"
  #include "lra-int.h"
  #include "df.h"
  

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [patch 4/9] Flatten sel-sched-dump.h and sel-sched-ir.h
  2015-07-07 13:40 [patch 0/9] Flattening and initial module rebuilding Andrew MacLeod
                   ` (3 preceding siblings ...)
  2015-07-07 13:46 ` [patch 5/9] Flatten ira-int.h Andrew MacLeod
@ 2015-07-07 13:46 ` Andrew MacLeod
  2015-07-07 14:01   ` Alexander Monakov
  2015-07-07 13:47 ` [patch 6/9] Flatten gimple-streamer.h Andrew MacLeod
                   ` (4 subsequent siblings)
  9 siblings, 1 reply; 22+ messages in thread
From: Andrew MacLeod @ 2015-07-07 13:46 UTC (permalink / raw)
  To: gcc-patches

[-- Attachment #1: Type: text/plain, Size: 364 bytes --]

This patch flattens both sel-sched-dump.h and sel-sched-ir.h. Both these 
files end up including cfgloop.h, so in preparation for flattening 
cfgloop.h, flatten these.  Note they actually have only a small effect 
on what includes them.

Bootstraps from scratch on x86_64-unknown-linux-gnu with no new 
regressions. Also compiles all the files in config-list.mk.


[-- Attachment #2: 4-sel-sched.patch --]
[-- Type: text/x-patch, Size: 2704 bytes --]


	* sel-sched-dump.h: Flatten includes.
	* sel-sched-ir.h: Flatten includes.
	* sel-sched-dump.c: Adjust includes.
	* sel-sched-ir.c: Adjust includes.
	* sel-sched.c: Adjust includes.

Index: sel-sched-dump.h
===================================================================
*** sel-sched-dump.h	(revision 225452)
--- sel-sched-dump.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 21,29 ****
  #ifndef GCC_SEL_SCHED_DUMP_H
  #define GCC_SEL_SCHED_DUMP_H
  
- #include "sel-sched-ir.h"
- 
- 
  /* These values control the dumping of control flow graph to the .dot file.  */
  enum sel_dump_cfg_def
    {
--- 21,26 ----
Index: sel-sched-ir.h
===================================================================
*** sel-sched-ir.h	(revision 225452)
--- sel-sched-ir.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 21,35 ****
  #ifndef GCC_SEL_SCHED_IR_H
  #define GCC_SEL_SCHED_IR_H
  
- /* For state_t.  */
- #include "insn-attr.h"
- #include "regset.h"
- /* For reg_note.  */
- #include "rtl.h"
- #include "bitmap.h"
- #include "sched-int.h"
- #include "cfgloop.h"
- 
  /* tc_t is a short for target context.  This is a state of the target
     backend.  */
  typedef void *tc_t;
--- 21,26 ----
Index: sel-sched-dump.c
===================================================================
*** sel-sched-dump.c	(revision 225452)
--- sel-sched-dump.c	(working copy)
*************** along with GCC; see the file COPYING3.
*** 40,45 ****
--- 40,49 ----
  #include "target.h"
  
  #ifdef INSN_SCHEDULING
+ #include "regset.h"
+ #include "bitmap.h"
+ #include "sched-int.h"
+ #include "cfgloop.h"
  #include "sel-sched-ir.h"
  #include "sel-sched-dump.h"
  \f
Index: sel-sched-ir.c
===================================================================
*** sel-sched-ir.c	(revision 225452)
--- sel-sched-ir.c	(working copy)
*************** along with GCC; see the file COPYING3.
*** 49,54 ****
--- 49,57 ----
  #include "emit-rtl.h"  /* FIXME: Can go away once crtl is moved to rtl.h.  */
  
  #ifdef INSN_SCHEDULING
+ #include "regset.h"
+ #include "bitmap.h"
+ #include "cfgloop.h"
  #include "sel-sched-ir.h"
  /* We don't have to use it except for sel_print_insn.  */
  #include "sel-sched-dump.h"
Index: sel-sched.c
===================================================================
*** sel-sched.c	(revision 225452)
--- sel-sched.c	(working copy)
*************** along with GCC; see the file COPYING3.
*** 49,54 ****
--- 49,58 ----
  #include "rtl-iter.h"
  
  #ifdef INSN_SCHEDULING
+ #include "regset.h"
+ #include "rtl.h"
+ #include "bitmap.h"
+ #include "cfgloop.h"
  #include "sel-sched-ir.h"
  #include "sel-sched-dump.h"
  #include "sel-sched.h"

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [patch 5/9] Flatten ira-int.h
  2015-07-07 13:40 [patch 0/9] Flattening and initial module rebuilding Andrew MacLeod
                   ` (2 preceding siblings ...)
  2015-07-07 13:45 ` [patch 3/9] Flatten lra-int.h Andrew MacLeod
@ 2015-07-07 13:46 ` Andrew MacLeod
  2015-07-07 13:46 ` [patch 4/9] Flatten sel-sched-dump.h and sel-sched-ir.h Andrew MacLeod
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 22+ messages in thread
From: Andrew MacLeod @ 2015-07-07 13:46 UTC (permalink / raw)
  To: gcc-patches

[-- Attachment #1: Type: text/plain, Size: 372 bytes --]

  Flatten ira-int.h, yet another header that includes cfgloop.h. Most of 
the includes from here do actually make it into the source files, so 
once the include reduction is completed and we see if they are actually 
needed, some may go back in.

Bootstraps from scratch on x86_64-unknown-linux-gnu with no new 
regressions. Also compiles all the files in config-list.mk.

[-- Attachment #2: 5-ira.patch --]
[-- Type: text/x-patch, Size: 4291 bytes --]


	* ira-int.h: Flatten includes.
	* ira-build.c: Adjust includes.
	* ira-color.c: Likewise.
	* ira-conflicts.c: Likewise.
	* ira-costs.c: Likewise.
	* ira-emit.c: Likewise.
	* ira-lives.c: Likewise.
	* ira.c: Likewise.
	* target-globals.c: Likewise.

Index: ira-int.h
===================================================================
*** ira-int.h	(revision 225452)
--- ira-int.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 21,30 ****
  #ifndef GCC_IRA_INT_H
  #define GCC_IRA_INT_H
  
- #include "cfgloop.h"
- #include "ira.h"
- #include "alloc-pool.h"
- 
  /* To provide consistency in naming, all IRA external variables,
     functions, common typedefs start with prefix ira_.  */
  
--- 21,26 ----
Index: ira-build.c
===================================================================
*** ira-build.c	(revision 225452)
--- ira-build.c	(working copy)
*************** along with GCC; see the file COPYING3.
*** 40,45 ****
--- 40,48 ----
  #include "df.h"
  #include "reload.h"
  #include "sparseset.h"
+ #include "cfgloop.h"
+ #include "ira.h"
+ #include "alloc-pool.h"
  #include "ira-int.h"
  #include "emit-rtl.h"  /* FIXME: Can go away once crtl is moved to rtl.h.  */
  
Index: ira-color.c
===================================================================
*** ira-color.c	(revision 225452)
--- ira-color.c	(working copy)
*************** along with GCC; see the file COPYING3.
*** 51,56 ****
--- 51,59 ----
  #include "reload.h"
  #include "params.h"
  #include "df.h"
+ #include "cfgloop.h"
+ #include "ira.h"
+ #include "alloc-pool.h"
  #include "ira-int.h"
  
  typedef struct allocno_hard_regs *allocno_hard_regs_t;
Index: ira-conflicts.c
===================================================================
*** ira-conflicts.c	(revision 225452)
--- ira-conflicts.c	(working copy)
*************** along with GCC; see the file COPYING3.
*** 37,42 ****
--- 37,45 ----
  #include "params.h"
  #include "df.h"
  #include "sparseset.h"
+ #include "cfgloop.h"
+ #include "ira.h"
+ #include "alloc-pool.h"
  #include "ira-int.h"
  #include "addresses.h"
  
Index: ira-costs.c
===================================================================
*** ira-costs.c	(revision 225452)
--- ira-costs.c	(working copy)
*************** along with GCC; see the file COPYING3.
*** 50,55 ****
--- 50,58 ----
  #include "diagnostic-core.h"
  #include "target.h"
  #include "params.h"
+ #include "cfgloop.h"
+ #include "ira.h"
+ #include "alloc-pool.h"
  #include "ira-int.h"
  
  /* The flags is set up every time when we calculate pseudo register
Index: ira-emit.c
===================================================================
*** ira-emit.c	(revision 225452)
--- ira-emit.c	(working copy)
*************** along with GCC; see the file COPYING3.
*** 100,105 ****
--- 100,108 ----
  #include "params.h"
  #include "reload.h"
  #include "df.h"
+ #include "cfgloop.h"
+ #include "ira.h"
+ #include "alloc-pool.h"
  #include "ira-int.h"
  
  
Index: ira-lives.c
===================================================================
*** ira-lives.c	(revision 225452)
--- ira-lives.c	(working copy)
*************** along with GCC; see the file COPYING3.
*** 39,44 ****
--- 39,47 ----
  #include "df.h"
  #include "sbitmap.h"
  #include "sparseset.h"
+ #include "cfgloop.h"
+ #include "ira.h"
+ #include "alloc-pool.h"
  #include "ira-int.h"
  
  /* The code in this file is similar to one in global but the code
Index: ira.c
===================================================================
*** ira.c	(revision 225452)
--- ira.c	(working copy)
*************** along with GCC; see the file COPYING3.
*** 403,408 ****
--- 403,411 ----
  #include "except.h"
  #include "reload.h"
  #include "diagnostic-core.h"
+ #include "cfgloop.h"
+ #include "ira.h"
+ #include "alloc-pool.h"
  #include "ira-int.h"
  #include "lra.h"
  #include "dce.h"
Index: target-globals.c
===================================================================
*** target-globals.c	(revision 225452)
--- target-globals.c	(working copy)
*************** along with GCC; see the file COPYING3.
*** 45,50 ****
--- 45,52 ----
  #include "optabs.h"
  #include "libfuncs.h"
  #include "cfgloop.h"
+ #include "ira.h"
+ #include "alloc-pool.h"
  #include "ira-int.h"
  #include "builtins.h"
  #include "gcse.h"

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [patch 6/9] Flatten gimple-streamer.h
  2015-07-07 13:40 [patch 0/9] Flattening and initial module rebuilding Andrew MacLeod
                   ` (4 preceding siblings ...)
  2015-07-07 13:46 ` [patch 4/9] Flatten sel-sched-dump.h and sel-sched-ir.h Andrew MacLeod
@ 2015-07-07 13:47 ` Andrew MacLeod
  2015-07-07 13:49 ` [patch 7/9] Flatten cfgloop.h Andrew MacLeod
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 22+ messages in thread
From: Andrew MacLeod @ 2015-07-07 13:47 UTC (permalink / raw)
  To: gcc-patches

[-- Attachment #1: Type: text/plain, Size: 234 bytes --]

This one is amusing... 3 header files, all of them already included in 
all the files which include this.

Bootstraps from scratch on x86_64-unknown-linux-gnu with no new 
regressions. Also compiles all the files in config-list.mk.



[-- Attachment #2: 6-gimple-streamer.patch --]
[-- Type: text/x-patch, Size: 501 bytes --]


	* gimple-streamer.h: Remove all includes.

Index: gimple-streamer.h
===================================================================
*** gimple-streamer.h	(revision 225452)
--- gimple-streamer.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 22,30 ****
  #ifndef GCC_GIMPLE_STREAMER_H
  #define GCC_GIMPLE_STREAMER_H
  
- #include "tm.h"
- #include "hard-reg-set.h"
- #include "function.h"
  #include "lto-streamer.h"
  
  /* In gimple-streamer-in.c  */
--- 22,27 ----

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [patch 7/9] Flatten cfgloop.h
  2015-07-07 13:40 [patch 0/9] Flattening and initial module rebuilding Andrew MacLeod
                   ` (5 preceding siblings ...)
  2015-07-07 13:47 ` [patch 6/9] Flatten gimple-streamer.h Andrew MacLeod
@ 2015-07-07 13:49 ` Andrew MacLeod
  2015-07-07 13:50 ` [patch 8/9] Flatten df.h Andrew MacLeod
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 22+ messages in thread
From: Andrew MacLeod @ 2015-07-07 13:49 UTC (permalink / raw)
  To: gcc-patches

[-- Attachment #1: Type: text/plain, Size: 473 bytes --]

This patch flattens cfgloop.h.  cfgloopmanip.h is utilized by numerous 
files which include cfgloop.h, so it seems to make sense to leave it 
here. The other 3 header files are going to form part of backend.h, so 
take them out.

I didn't bother posting the changes to all the source files since 
aggregating with backend.h would undo every one.

Bootstraps from scratch on x86_64-unknown-linux-gnu with no new 
regressions. Also compiles all the files in config-list.mk.


[-- Attachment #2: 7-cfgloop.patch --]
[-- Type: text/x-patch, Size: 503 bytes --]


	* cfgloop.h: Remove all #includes except cfgloopmanip.h.

Index: cfgloop.h
===================================================================
*** cfgloop.h	(revision 225452)
--- cfgloop.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 20,28 ****
  #ifndef GCC_CFGLOOP_H
  #define GCC_CFGLOOP_H
  
- #include "bitmap.h"
- #include "sbitmap.h"
- #include "function.h"
  #include "cfgloopmanip.h"
  
  /* Structure to hold decision about unrolling/peeling.  */
--- 20,25 ----

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [patch 8/9] Flatten df.h
  2015-07-07 13:40 [patch 0/9] Flattening and initial module rebuilding Andrew MacLeod
                   ` (6 preceding siblings ...)
  2015-07-07 13:49 ` [patch 7/9] Flatten cfgloop.h Andrew MacLeod
@ 2015-07-07 13:50 ` Andrew MacLeod
  2015-07-07 13:51 ` [patch 9/9] Final patch with all changes Andrew MacLeod
  2015-07-07 22:21 ` [patch 0/9] Flattening and initial module rebuilding Jeff Law
  9 siblings, 0 replies; 22+ messages in thread
From: Andrew MacLeod @ 2015-07-07 13:50 UTC (permalink / raw)
  To: gcc-patches

[-- Attachment #1: Type: text/plain, Size: 714 bytes --]

This patch fixes up df.h. It contains 5 headers that will form part of 
backend.has well as hard-reg-set.h which is now going to be included by 
rtl.h.

The other 3 includes are required for df.h to compile, and it makes 
sense to leave them here.

furthermore, resource.h, sched-int.h and valtrack.h all include df.h, 
amongst other things, so flatten them as well. Now only source files 
will include df.h and we can see if it may belong in some other 
aggregator (or even become one) after include reduction.

All the requisite adjustments to source files will be in the final patch.

Bootstraps from scratch on x86_64-unknown-linux-gnu with no new 
regressions. Also compiles all the files in config-list.mk.


[-- Attachment #2: 8-df.patch --]
[-- Type: text/x-patch, Size: 2146 bytes --]


	* resource.h: Flatten hard-reg-set.h and df.h.
	* sched-int.h: Flatten insn-arrt.h and df.h.
	* valtrack.h: flatten bitmap.h, df.h, and rtl.h
	* df.h: Flatten includes, leaving regset.h, alloc-pool.h and timevar.h.

Index: resource.h
===================================================================
*** resource.h	(revision 225452)
--- resource.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 20,28 ****
  #ifndef GCC_RESOURCE_H
  #define GCC_RESOURCE_H
  
- #include "hard-reg-set.h"
- #include "df.h"
- 
  /* Macro to clear all resources.  */
  #define CLEAR_RESOURCE(RES)	\
   do { (RES)->memory = (RES)->volatil = (RES)->cc = 0; \
--- 20,25 ----
Index: sched-int.h
===================================================================
*** sched-int.h	(revision 225452)
--- sched-int.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 21,32 ****
  #ifndef GCC_SCHED_INT_H
  #define GCC_SCHED_INT_H
  
- #include "insn-attr.h"
- 
  #ifdef INSN_SCHEDULING
  
- #include "df.h"
- 
  /* Identificator of a scheduler pass.  */
  enum sched_pass_id_t { SCHED_PASS_UNKNOWN, SCHED_RGN_PASS, SCHED_EBB_PASS,
  		       SCHED_SMS_PASS, SCHED_SEL_PASS };
--- 21,28 ----
Index: valtrack.h
===================================================================
*** valtrack.h	(revision 225452)
--- valtrack.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 22,31 ****
  #ifndef GCC_VALTRACK_H
  #define GCC_VALTRACK_H
  
- #include "bitmap.h"
- #include "df.h"
- #include "rtl.h"
- 
  /* Debug uses of dead regs.  */
  
  /* Entry that maps a dead pseudo (REG) used in a debug insns that dies
--- 22,27 ----
Index: df.h
===================================================================
*** df.h	(revision 225452)
--- df.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 25,37 ****
  #ifndef GCC_DF_H
  #define GCC_DF_H
  
- #include "bitmap.h"
  #include "regset.h"
- #include "sbitmap.h"
- #include "predict.h"
- #include "tm.h"
- #include "hard-reg-set.h"
- #include "function.h"
  #include "alloc-pool.h"
  #include "timevar.h"
  
--- 25,31 ----

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [patch 9/9]  Final patch with all changes
  2015-07-07 13:40 [patch 0/9] Flattening and initial module rebuilding Andrew MacLeod
                   ` (7 preceding siblings ...)
  2015-07-07 13:50 ` [patch 8/9] Flatten df.h Andrew MacLeod
@ 2015-07-07 13:51 ` Andrew MacLeod
  2015-07-07 22:03   ` Pedro Alves
  2015-07-07 22:21 ` [patch 0/9] Flattening and initial module rebuilding Jeff Law
  9 siblings, 1 reply; 22+ messages in thread
From: Andrew MacLeod @ 2015-07-07 13:51 UTC (permalink / raw)
  To: gcc-patches

[-- Attachment #1: Type: text/plain, Size: 431 bytes --]

This is the big daddy. THe first patch is an aggregation of the header 
file changes from the first 8 patches.

The second patch is adjustments to the gen*.c build files to remove 
duplicate includes and such.

The third patch is the net cumulative effect on all the source files.

Bootstraps from scratch on x86_64-unknown-linux-gnu with no new 
regressions. Also compiles all the files in config-list.mk.

OK for trunk?
Andrew



[-- Attachment #2: 9-header.patch --]
[-- Type: text/x-patch, Size: 13752 bytes --]



	* tree-core.h: Include symtab.h.
	* rtl.h: Include hard-reg-set.h but not flags.h.
	(HARD_CONST): Remove condition compilation involving HARD_CONST since 
	hard-reg-set.h is always included.
	* regs.h: Don't include hard-reg-set.h or rtl.h.
	* cfg.h: Include dominance.h.
	* gimple.h: Include tree-ssa-alias.h and gimple-expr.h.
	* backend.h: New.  Aggregate commonly used backend header files.
	* gimple-ssa.h: Don't include tree-hasher.h.
	* ssa.h: New.  Aggregate commonly used SSA header files.
	* regset.h: Remove bitmap.h and hard-reg-set.h #includes.
	* sel-sched-ir.h: Flatten includes.
	* lra-int.h: Flatten completely.
	* sel-sched-dump.h: Flatten includes.
	* ira-int.h: Flatten includes.
	* gimple-streamer.h: Remove all includes.
	* cfgloop.h: Remove all #includes except cfgloopmanip.h.
	* resource.h: Flatten hard-reg-set.h and df.h.
	* sched-int.h: Flatten insn-arrt.h and df.h.
	* valtrack.h: flatten bitmap.h, df.h, and rtl.h
	* df.h: Flatten includes, leaving regset.h, alloc-pool.h and timevar.h.


Index: tree-core.h
===================================================================
*** tree-core.h	(revision 225452)
--- tree-core.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 20,25 ****
--- 20,27 ----
  #ifndef GCC_TREE_CORE_H
  #define GCC_TREE_CORE_H
  
+ #include "symtab.h"
+ 
  /* This file contains all the data structures that define the 'tree' type.
     There are no accessor macros nor functions in this file. Only the
     basic data structures, extern declarations and type definitions.  */
Index: rtl.h
===================================================================
*** rtl.h	(revision 225452)
--- rtl.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 38,44 ****
  #include "is-a.h"
  #endif  /* GENERATOR_FILE */
  
! #include "flags.h"
  
  /* Value used by some passes to "recognize" noop moves as valid
   instructions.  */
--- 38,44 ----
  #include "is-a.h"
  #endif  /* GENERATOR_FILE */
  
! #include "hard-reg-set.h"
  
  /* Value used by some passes to "recognize" noop moves as valid
   instructions.  */
*************** extern bool val_signbit_known_clear_p (m
*** 2880,2888 ****
  /* In reginfo.c  */
  extern machine_mode choose_hard_reg_mode (unsigned int, unsigned int,
  					       bool);
- #ifdef HARD_CONST
  extern const HARD_REG_SET &simplifiable_subregs (const subreg_shape &);
- #endif
  
  /* In emit-rtl.c  */
  extern rtx set_for_reg_notes (rtx);
--- 2880,2886 ----
*************** extern int reg_overlap_mentioned_p (cons
*** 2939,2948 ****
  extern const_rtx set_of (const_rtx, const_rtx);
  extern void record_hard_reg_sets (rtx, const_rtx, void *);
  extern void record_hard_reg_uses (rtx *, void *);
- #ifdef HARD_CONST
  extern void find_all_hard_regs (const_rtx, HARD_REG_SET *);
  extern void find_all_hard_reg_sets (const rtx_insn *, HARD_REG_SET *, bool);
- #endif
  extern void note_stores (const_rtx, void (*) (rtx, const_rtx, void *), void *);
  extern void note_uses (rtx *, void (*) (rtx *, void *), void *);
  extern int dead_or_set_p (const_rtx, const_rtx);
--- 2937,2944 ----
*************** extern bool can_assign_to_reg_without_cl
*** 3572,3580 ****
  extern rtx fis_get_condition (rtx_insn *);
  
  /* In ira.c */
- #ifdef HARD_CONST
  extern HARD_REG_SET eliminable_regset;
- #endif
  extern void mark_elimination (int, int);
  
  /* In reginfo.c */
--- 3568,3574 ----
*************** extern void init_reg_sets (void);
*** 3590,3598 ****
  extern void regclass (rtx, int);
  extern void reg_scan (rtx_insn *, unsigned int);
  extern void fix_register (const char *, int, int);
- #ifdef HARD_CONST
  extern const HARD_REG_SET *valid_mode_changes_for_regno (unsigned int);
- #endif
  
  /* In reload1.c */
  extern int function_invariant_p (const_rtx);
--- 3584,3590 ----
*************** extern void _fatal_insn (const char *, c
*** 3709,3715 ****
  /* reginfo.c */
  extern tree GTY(()) global_regs_decl[FIRST_PSEUDO_REGISTER];
  
- #ifdef HARD_CONST
  /* Information about the function that is propagated by the RTL backend.
     Available only for functions that has been already assembled.  */
  
--- 3701,3706 ----
*************** struct GTY(()) cgraph_rtl_info {
*** 3723,3729 ****
    /* Set if function_used_regs is valid.  */
    unsigned function_used_regs_valid: 1;
  };
- #endif
  
  
  #endif /* ! GCC_RTL_H */
--- 3714,3719 ----
Index: regs.h
===================================================================
*** regs.h	(revision 225452)
--- regs.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 20,28 ****
  #ifndef GCC_REGS_H
  #define GCC_REGS_H
  
- #include "hard-reg-set.h"
- #include "rtl.h"
- 
  #define REG_BYTES(R) mode_size[(int) GET_MODE (R)]
  
  /* When you only have the mode of a pseudo register before it has a hard
--- 20,25 ----
Index: cfg.h
===================================================================
*** cfg.h	(revision 225452)
--- cfg.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 20,25 ****
--- 20,27 ----
  #ifndef GCC_CFG_H
  #define GCC_CFG_H
  
+ #include "dominance.h"
+ 
  /* What sort of profiling information we have.  */
  enum profile_status_d
  {
Index: gimple.h
===================================================================
*** gimple.h	(revision 225452)
--- gimple.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 22,27 ****
--- 22,30 ----
  #ifndef GCC_GIMPLE_H
  #define GCC_GIMPLE_H
  
+ #include "tree-ssa-alias.h"
+ #include "gimple-expr.h"
+ 
  typedef gimple gimple_seq_node;
  
  enum gimple_code {
Index: backend.h
===================================================================
*** backend.h	(revision 0)
--- backend.h	(working copy)
***************
*** 0 ****
--- 1,33 ----
+ /* Common Backend requirements. 
+ 
+    Copyright (C) 2015 Free Software Foundation, Inc.
+    Contributed by Andrew MacLeod <amacleod@redhat.com>
+ 
+ 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/>.  */
+ 
+ #ifndef GCC_BACKEND_H
+ #define GCC_BACKEND_H
+ 
+ #include "tm.h"
+ #include "function.h"
+ #include "bitmap.h"
+ #include "sbitmap.h"
+ #include "predict.h"
+ #include "basic-block.h"
+ #include "cfg.h"
+ 
+ #endif /*GCC_BACKEND_H */
Index: gimple-ssa.h
===================================================================
*** gimple-ssa.h	(revision 225452)
--- gimple-ssa.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 21,27 ****
  #ifndef GCC_GIMPLE_SSA_H
  #define GCC_GIMPLE_SSA_H
  
- #include "tree-hasher.h"
  #include "tree-ssa-operands.h"
  
  /* This structure is used to map a gimple statement to a label,
--- 21,26 ----
Index: ssa.h
===================================================================
*** ssa.h	(revision 0)
--- ssa.h	(working copy)
***************
*** 0 ****
--- 1,29 ----
+ /* Common SSA files
+    Copyright (C) 2015 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/>.  */
+ 
+ #ifndef GCC_SSA_H
+ #define GCC_SSA_H
+ 
+ #include "stringpool.h"
+ #include "gimple-ssa.h"
+ #include "tree-ssanames.h"
+ #include "tree-phinodes.h"
+ #include "ssa-iterators.h" 
+ 
+ #endif  /* GCC_SSA_H  */
Index: regset.h
===================================================================
*** regset.h	(revision 225452)
--- regset.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 30,37 ****
     the latter option, a good start would be to change everything allocated
     on the reg_obstack to regset.  */
  
- #include "bitmap.h"		/* For bitmap_iterator.  */
- #include "hard-reg-set.h"
  
  /* Head of register set linked list.  */
  typedef bitmap_head regset_head;
--- 30,35 ----
Index: sel-sched-ir.h
===================================================================
*** sel-sched-ir.h	(revision 225452)
--- sel-sched-ir.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 22,34 ****
  #define GCC_SEL_SCHED_IR_H
  
  /* For state_t.  */
- #include "insn-attr.h"
- #include "regset.h"
  /* For reg_note.  */
- #include "rtl.h"
- #include "bitmap.h"
- #include "sched-int.h"
- #include "cfgloop.h"
  
  /* tc_t is a short for target context.  This is a state of the target
     backend.  */
--- 22,28 ----
Index: lra-int.h
===================================================================
*** lra-int.h	(revision 225452)
--- lra-int.h	(working copy)
*************** along with GCC; see the file COPYING3.	I
*** 21,34 ****
  #ifndef GCC_LRA_INT_H
  #define GCC_LRA_INT_H
  
- #include "lra.h"
- #include "bitmap.h"
- #include "recog.h"
- #include "insn-attr.h"
- #include "insn-codes.h"
- #include "insn-config.h"
- #include "regs.h"
- 
  #define lra_assert(c) gcc_checking_assert (c)
  
  /* The parameter used to prevent infinite reloading for an insn.  Each
--- 21,26 ----
Index: sel-sched-dump.h
===================================================================
*** sel-sched-dump.h	(revision 225452)
--- sel-sched-dump.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 21,27 ****
  #ifndef GCC_SEL_SCHED_DUMP_H
  #define GCC_SEL_SCHED_DUMP_H
  
- #include "sel-sched-ir.h"
  
  
  /* These values control the dumping of control flow graph to the .dot file.  */
--- 21,26 ----
Index: ira-int.h
===================================================================
*** ira-int.h	(revision 225452)
--- ira-int.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 21,30 ****
  #ifndef GCC_IRA_INT_H
  #define GCC_IRA_INT_H
  
- #include "cfgloop.h"
- #include "ira.h"
- #include "alloc-pool.h"
- 
  /* To provide consistency in naming, all IRA external variables,
     functions, common typedefs start with prefix ira_.  */
  
--- 21,26 ----
Index: gimple-streamer.h
===================================================================
*** gimple-streamer.h	(revision 225452)
--- gimple-streamer.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 22,30 ****
  #ifndef GCC_GIMPLE_STREAMER_H
  #define GCC_GIMPLE_STREAMER_H
  
- #include "tm.h"
- #include "hard-reg-set.h"
- #include "function.h"
  #include "lto-streamer.h"
  
  /* In gimple-streamer-in.c  */
--- 22,27 ----
Index: cfgloop.h
===================================================================
*** cfgloop.h	(revision 225452)
--- cfgloop.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 20,28 ****
  #ifndef GCC_CFGLOOP_H
  #define GCC_CFGLOOP_H
  
- #include "bitmap.h"
- #include "sbitmap.h"
- #include "function.h"
  #include "cfgloopmanip.h"
  
  /* Structure to hold decision about unrolling/peeling.  */
--- 20,25 ----
Index: resource.h
===================================================================
*** resource.h	(revision 225452)
--- resource.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 20,28 ****
  #ifndef GCC_RESOURCE_H
  #define GCC_RESOURCE_H
  
- #include "hard-reg-set.h"
- #include "df.h"
- 
  /* Macro to clear all resources.  */
  #define CLEAR_RESOURCE(RES)	\
   do { (RES)->memory = (RES)->volatil = (RES)->cc = 0; \
--- 20,25 ----
Index: sched-int.h
===================================================================
*** sched-int.h	(revision 225452)
--- sched-int.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 21,32 ****
  #ifndef GCC_SCHED_INT_H
  #define GCC_SCHED_INT_H
  
- #include "insn-attr.h"
- 
  #ifdef INSN_SCHEDULING
  
- #include "df.h"
- 
  /* Identificator of a scheduler pass.  */
  enum sched_pass_id_t { SCHED_PASS_UNKNOWN, SCHED_RGN_PASS, SCHED_EBB_PASS,
  		       SCHED_SMS_PASS, SCHED_SEL_PASS };
--- 21,28 ----
Index: valtrack.h
===================================================================
*** valtrack.h	(revision 225452)
--- valtrack.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 22,31 ****
  #ifndef GCC_VALTRACK_H
  #define GCC_VALTRACK_H
  
- #include "bitmap.h"
- #include "df.h"
- #include "rtl.h"
- 
  /* Debug uses of dead regs.  */
  
  /* Entry that maps a dead pseudo (REG) used in a debug insns that dies
--- 22,27 ----
Index: df.h
===================================================================
*** df.h	(revision 225452)
--- df.h	(working copy)
*************** along with GCC; see the file COPYING3.
*** 25,37 ****
  #ifndef GCC_DF_H
  #define GCC_DF_H
  
- #include "bitmap.h"
  #include "regset.h"
- #include "sbitmap.h"
- #include "predict.h"
- #include "tm.h"
- #include "hard-reg-set.h"
- #include "function.h"
  #include "alloc-pool.h"
  #include "timevar.h"
  
--- 25,31 ----

[-- Attachment #3: 9-gen.patch --]
[-- Type: text/x-patch, Size: 17920 bytes --]


	* genattrtab.c (write_header): Adjust generated includes.
	* genautomata.c (main): Likewise.
	* genconditions.c (write-header): Likewise.
	* genemit.c (main): Likewise.
	* gengtype.c (open_base_files): Likewise.
	* genopinit.c (main): Likewise.
	* genoutput.c (output_prologue): Likewise.
	* genpeep.c (main): Likewise.
	* genpreds.c (write_insn_preds_c): Likewise.
	* genrecog.c (write_header): Likewise.

Index: genattrtab.c
===================================================================
*** genattrtab.c	(revision 225452)
--- genattrtab.c	(working copy)
*************** write_header (FILE *outf)
*** 5103,5118 ****
    fprintf (outf, "#include \"config.h\"\n");
    fprintf (outf, "#include \"system.h\"\n");
    fprintf (outf, "#include \"coretypes.h\"\n");
!   fprintf (outf, "#include \"tm.h\"\n");
!   fprintf (outf, "#include \"input.h\"\n");
    fprintf (outf, "#include \"alias.h\"\n");
-   fprintf (outf, "#include \"symtab.h\"\n");
    fprintf (outf, "#include \"options.h\"\n");
-   fprintf (outf, "#include \"tree.h\"\n");
    fprintf (outf, "#include \"varasm.h\"\n");
    fprintf (outf, "#include \"stor-layout.h\"\n");
    fprintf (outf, "#include \"calls.h\"\n");
-   fprintf (outf, "#include \"rtl.h\"\n");
    fprintf (outf, "#include \"insn-attr.h\"\n");
    fprintf (outf, "#include \"tm_p.h\"\n");
    fprintf (outf, "#include \"insn-config.h\"\n");
--- 5103,5116 ----
    fprintf (outf, "#include \"config.h\"\n");
    fprintf (outf, "#include \"system.h\"\n");
    fprintf (outf, "#include \"coretypes.h\"\n");
!   fprintf (outf, "#include \"backend.h\"\n");
!   fprintf (outf, "#include \"tree.h\"\n");
!   fprintf (outf, "#include \"rtl.h\"\n");
    fprintf (outf, "#include \"alias.h\"\n");
    fprintf (outf, "#include \"options.h\"\n");
    fprintf (outf, "#include \"varasm.h\"\n");
    fprintf (outf, "#include \"stor-layout.h\"\n");
    fprintf (outf, "#include \"calls.h\"\n");
    fprintf (outf, "#include \"insn-attr.h\"\n");
    fprintf (outf, "#include \"tm_p.h\"\n");
    fprintf (outf, "#include \"insn-config.h\"\n");
*************** write_header (FILE *outf)
*** 5122,5130 ****
    fprintf (outf, "#include \"output.h\"\n");
    fprintf (outf, "#include \"toplev.h\"\n");
    fprintf (outf, "#include \"flags.h\"\n");
-   fprintf (outf, "#include \"function.h\"\n");
    fprintf (outf, "#include \"emit-rtl.h\"\n");
-   fprintf (outf, "#include \"predict.h\"\n");
    fprintf (outf, "\n");
    fprintf (outf, "#define operands recog_data.operand\n\n");
  }
--- 5120,5126 ----
Index: genautomata.c
===================================================================
*** genautomata.c	(revision 225452)
--- genautomata.c	(working copy)
*************** main (int argc, char **argv)
*** 9673,9681 ****
  		"#include \"system.h\"\n"
  		"#include \"coretypes.h\"\n"
  		"#include \"tm.h\"\n"
- 		"#include \"input.h\"\n"
  		"#include \"alias.h\"\n"
- 		"#include \"symtab.h\"\n"
  		"#include \"tree.h\"\n"
  		"#include \"varasm.h\"\n"
  		"#include \"stor-layout.h\"\n"
--- 9673,9679 ----
Index: genconditions.c
===================================================================
*** genconditions.c	(revision 225452)
--- genconditions.c	(working copy)
*************** write_header (void)
*** 87,92 ****
--- 87,94 ----
  #include \"hard-reg-set.h\"\n\
  #include \"predict.h\"\n\
  #include \"basic-block.h\"\n\
+ #include \"bitmap.h\"\n\
+ #include \"df.h\"\n\
  #include \"resource.h\"\n\
  #include \"diagnostic-core.h\"\n\
  #include \"reload.h\"\n\
Index: genemit.c
===================================================================
*** genemit.c	(revision 225452)
--- genemit.c	(working copy)
*************** from the machine description file `md'.
*** 744,761 ****
    printf ("#include \"config.h\"\n");
    printf ("#include \"system.h\"\n");
    printf ("#include \"coretypes.h\"\n");
!   printf ("#include \"tm.h\"\n");
!   printf ("#include \"input.h\"\n");
!   printf ("#include \"alias.h\"\n");
!   printf ("#include \"symtab.h\"\n");
    printf ("#include \"tree.h\"\n");
    printf ("#include \"varasm.h\"\n");
    printf ("#include \"stor-layout.h\"\n");
    printf ("#include \"calls.h\"\n");
-   printf ("#include \"rtl.h\"\n");
    printf ("#include \"tm_p.h\"\n");
-   printf ("#include \"hard-reg-set.h\"\n");
-   printf ("#include \"function.h\"\n");
    printf ("#include \"flags.h\"\n");
    printf ("#include \"insn-config.h\"\n");
    printf ("#include \"expmed.h\"\n");
--- 744,757 ----
    printf ("#include \"config.h\"\n");
    printf ("#include \"system.h\"\n");
    printf ("#include \"coretypes.h\"\n");
!   printf ("#include \"backend.h\"\n");
    printf ("#include \"tree.h\"\n");
+   printf ("#include \"rtl.h\"\n");
+   printf ("#include \"alias.h\"\n");
    printf ("#include \"varasm.h\"\n");
    printf ("#include \"stor-layout.h\"\n");
    printf ("#include \"calls.h\"\n");
    printf ("#include \"tm_p.h\"\n");
    printf ("#include \"flags.h\"\n");
    printf ("#include \"insn-config.h\"\n");
    printf ("#include \"expmed.h\"\n");
*************** from the machine description file `md'.
*** 769,783 ****
    printf ("#include \"dfp.h\"\n");
    printf ("#include \"output.h\"\n");
    printf ("#include \"recog.h\"\n");
!   printf ("#include \"predict.h\"\n");
!   printf ("#include \"basic-block.h\"\n");
    printf ("#include \"resource.h\"\n");
    printf ("#include \"reload.h\"\n");
    printf ("#include \"diagnostic-core.h\"\n");
    printf ("#include \"regs.h\"\n");
    printf ("#include \"tm-constrs.h\"\n");
    printf ("#include \"ggc.h\"\n");
-   printf ("#include \"basic-block.h\"\n");
    printf ("#include \"dumpfile.h\"\n");
    printf ("#include \"target.h\"\n\n");
    printf ("#define FAIL return (end_sequence (), _val)\n");
--- 765,777 ----
    printf ("#include \"dfp.h\"\n");
    printf ("#include \"output.h\"\n");
    printf ("#include \"recog.h\"\n");
!   printf ("#include \"df.h\"\n");
    printf ("#include \"resource.h\"\n");
    printf ("#include \"reload.h\"\n");
    printf ("#include \"diagnostic-core.h\"\n");
    printf ("#include \"regs.h\"\n");
    printf ("#include \"tm-constrs.h\"\n");
    printf ("#include \"ggc.h\"\n");
    printf ("#include \"dumpfile.h\"\n");
    printf ("#include \"target.h\"\n\n");
    printf ("#define FAIL return (end_sequence (), _val)\n");
Index: gengtype.c
===================================================================
*** gengtype.c	(revision 225452)
--- gengtype.c	(working copy)
*************** open_base_files (void)
*** 1710,1730 ****
    {
      /* The order of files here matters very much.  */
      static const char *const ifiles[] = {
!       "config.h", "system.h", "coretypes.h", "tm.h", "insn-codes.h",
!       "splay-tree.h", "obstack.h", "bitmap.h", "input.h",
!       "alias.h", "symtab.h", "options.h", 
!       "tree.h", "fold-const.h", "rtl.h",
!       "hard-reg-set.h", "predict.h",
!       "function.h", "insn-config.h", "flags.h", 
!       "tree.h", "expmed.h", "dojump.h",
        "explow.h", "calls.h", "emit-rtl.h", "varasm.h", "stmt.h",
!       "expr.h", "alloc-pool.h",
!       "basic-block.h", "cselib.h", "insn-addr.h",
!       "optabs.h", "libfuncs.h", "debug.h", 
!       "dominance.h", "cfg.h", "basic-block.h",
!       "tree-ssa-alias.h", "internal-fn.h", "gimple-fold.h", "tree-eh.h",
!       "gimple-expr.h", "is-a.h",
!       "gimple.h", "gimple-iterator.h", "gimple-ssa.h", "tree-cfg.h",
        "tree-phinodes.h", "ssa-iterators.h", "stringpool.h", "tree-ssanames.h",
        "tree-ssa-loop.h", "tree-ssa-loop-ivopts.h", "tree-ssa-loop-manip.h",
        "tree-ssa-loop-niter.h", "tree-into-ssa.h", "tree-dfa.h", 
--- 1710,1722 ----
    {
      /* The order of files here matters very much.  */
      static const char *const ifiles[] = {
!       "config.h", "system.h", "coretypes.h", "backend.h", "tree.h",
!       "rtl.h", "gimple.h", "fold-const.h", "insn-codes.h", "splay-tree.h",
!       "alias.h", "insn-config.h", "flags.h", "expmed.h", "dojump.h",
        "explow.h", "calls.h", "emit-rtl.h", "varasm.h", "stmt.h",
!       "expr.h", "alloc-pool.h", "cselib.h", "insn-addr.h", "optabs.h",
!       "libfuncs.h", "debug.h", "internal-fn.h", "gimple-fold.h", "tree-eh.h",
!       "gimple-iterator.h", "gimple-ssa.h", "tree-cfg.h",
        "tree-phinodes.h", "ssa-iterators.h", "stringpool.h", "tree-ssanames.h",
        "tree-ssa-loop.h", "tree-ssa-loop-ivopts.h", "tree-ssa-loop-manip.h",
        "tree-ssa-loop-niter.h", "tree-into-ssa.h", "tree-dfa.h", 
Index: genopinit.c
===================================================================
*** genopinit.c	(revision 225452)
--- genopinit.c	(working copy)
*************** main (int argc, char **argv)
*** 464,494 ****
  	   "#include \"config.h\"\n"
  	   "#include \"system.h\"\n"
  	   "#include \"coretypes.h\"\n"
! 	   "#include \"tm.h\"\n"
! 	   "#include \"hash-set.h\"\n"
! 	   "#include \"machmode.h\"\n"
! 	   "#include \"vec.h\"\n"
! 	   "#include \"double-int.h\"\n"
! 	   "#include \"input.h\"\n"
! 	   "#include \"alias.h\"\n"
! 	   "#include \"symtab.h\"\n"
! 	   "#include \"wide-int.h\"\n"
! 	   "#include \"inchash.h\"\n"
  	   "#include \"tree.h\"\n"
  	   "#include \"varasm.h\"\n"
  	   "#include \"stor-layout.h\"\n"
  	   "#include \"calls.h\"\n"
- 	   "#include \"rtl.h\"\n"
- 	   "#include \"predict.h\"\n"
  	   "#include \"tm_p.h\"\n"
  	   "#include \"flags.h\"\n"
  	   "#include \"insn-config.h\"\n"
- 	   "#include \"hashtab.h\"\n"
- 	   "#include \"hard-reg-set.h\"\n"
- 	   "#include \"function.h\"\n"
- 	   "#include \"statistics.h\"\n"
- 	   "#include \"real.h\"\n"
- 	   "#include \"fixed-value.h\"\n"
  	   "#include \"expmed.h\"\n"
  	   "#include \"dojump.h\"\n"
  	   "#include \"explow.h\"\n"
--- 464,479 ----
  	   "#include \"config.h\"\n"
  	   "#include \"system.h\"\n"
  	   "#include \"coretypes.h\"\n"
! 	   "#include \"backend.h\"\n"
  	   "#include \"tree.h\"\n"
+ 	   "#include \"rtl.h\"\n"
+ 	   "#include \"alias.h\"\n"
  	   "#include \"varasm.h\"\n"
  	   "#include \"stor-layout.h\"\n"
  	   "#include \"calls.h\"\n"
  	   "#include \"tm_p.h\"\n"
  	   "#include \"flags.h\"\n"
  	   "#include \"insn-config.h\"\n"
  	   "#include \"expmed.h\"\n"
  	   "#include \"dojump.h\"\n"
  	   "#include \"explow.h\"\n"
Index: genoutput.c
===================================================================
*** genoutput.c	(revision 225452)
--- genoutput.c	(working copy)
*************** output_prologue (void)
*** 226,254 ****
    printf ("#include \"config.h\"\n");
    printf ("#include \"system.h\"\n");
    printf ("#include \"coretypes.h\"\n");
!   printf ("#include \"tm.h\"\n");
    printf ("#include \"flags.h\"\n");
-   printf ("#include \"ggc.h\"\n");
-   printf ("#include \"hash-set.h\"\n");
-   printf ("#include \"machmode.h\"\n");
-   printf ("#include \"vec.h\"\n");
-   printf ("#include \"double-int.h\"\n");
-   printf ("#include \"input.h\"\n");
    printf ("#include \"alias.h\"\n");
-   printf ("#include \"symtab.h\"\n");
-   printf ("#include \"wide-int.h\"\n");
-   printf ("#include \"inchash.h\"\n");
-   printf ("#include \"tree.h\"\n");
    printf ("#include \"varasm.h\"\n");
    printf ("#include \"stor-layout.h\"\n");
    printf ("#include \"calls.h\"\n");
-   printf ("#include \"rtl.h\"\n");
-   printf ("#include \"hashtab.h\"\n");
-   printf ("#include \"hard-reg-set.h\"\n");
-   printf ("#include \"function.h\"\n");
-   printf ("#include \"statistics.h\"\n");
-   printf ("#include \"real.h\"\n");
-   printf ("#include \"fixed-value.h\"\n");
    printf ("#include \"insn-config.h\"\n");
    printf ("#include \"expmed.h\"\n");
    printf ("#include \"dojump.h\"\n");
--- 226,239 ----
    printf ("#include \"config.h\"\n");
    printf ("#include \"system.h\"\n");
    printf ("#include \"coretypes.h\"\n");
!   printf ("#include \"backend.h\"\n");
!   printf ("#include \"tree.h\"\n");
!   printf ("#include \"rtl.h\"\n");
    printf ("#include \"flags.h\"\n");
    printf ("#include \"alias.h\"\n");
    printf ("#include \"varasm.h\"\n");
    printf ("#include \"stor-layout.h\"\n");
    printf ("#include \"calls.h\"\n");
    printf ("#include \"insn-config.h\"\n");
    printf ("#include \"expmed.h\"\n");
    printf ("#include \"dojump.h\"\n");
*************** output_prologue (void)
*** 266,272 ****
    printf ("#include \"output.h\"\n");
    printf ("#include \"target.h\"\n");
    printf ("#include \"tm-constrs.h\"\n");
-   printf ("#include \"predict.h\"\n");
  }
  
  static void
--- 251,256 ----
Index: genpeep.c
===================================================================
*** genpeep.c	(revision 225452)
--- genpeep.c	(working copy)
*************** from the machine description file `md'.
*** 363,390 ****
    printf ("#include \"config.h\"\n");
    printf ("#include \"system.h\"\n");
    printf ("#include \"coretypes.h\"\n");
!   printf ("#include \"tm.h\"\n");
    printf ("#include \"insn-config.h\"\n");
-   printf ("#include \"hash-set.h\"\n");
-   printf ("#include \"machmode.h\"\n");
-   printf ("#include \"vec.h\"\n");
-   printf ("#include \"double-int.h\"\n");
-   printf ("#include \"input.h\"\n");
    printf ("#include \"alias.h\"\n");
-   printf ("#include \"symtab.h\"\n");
-   printf ("#include \"wide-int.h\"\n");
-   printf ("#include \"inchash.h\"\n");
-   printf ("#include \"tree.h\"\n");
    printf ("#include \"varasm.h\"\n");
    printf ("#include \"stor-layout.h\"\n");
    printf ("#include \"calls.h\"\n");
-   printf ("#include \"rtl.h\"\n");
    printf ("#include \"tm_p.h\"\n");
    printf ("#include \"regs.h\"\n");
    printf ("#include \"output.h\"\n");
    printf ("#include \"recog.h\"\n");
    printf ("#include \"except.h\"\n");
-   printf ("#include \"function.h\"\n");
    printf ("#include \"diagnostic-core.h\"\n");
    printf ("#include \"flags.h\"\n");
    printf ("#include \"tm-constrs.h\"\n\n");
--- 363,381 ----
    printf ("#include \"config.h\"\n");
    printf ("#include \"system.h\"\n");
    printf ("#include \"coretypes.h\"\n");
!   printf ("#include \"backend.h\"\n");
!   printf ("#include \"tree.h\"\n");
!   printf ("#include \"rtl.h\"\n");
    printf ("#include \"insn-config.h\"\n");
    printf ("#include \"alias.h\"\n");
    printf ("#include \"varasm.h\"\n");
    printf ("#include \"stor-layout.h\"\n");
    printf ("#include \"calls.h\"\n");
    printf ("#include \"tm_p.h\"\n");
    printf ("#include \"regs.h\"\n");
    printf ("#include \"output.h\"\n");
    printf ("#include \"recog.h\"\n");
    printf ("#include \"except.h\"\n");
    printf ("#include \"diagnostic-core.h\"\n");
    printf ("#include \"flags.h\"\n");
    printf ("#include \"tm-constrs.h\"\n\n");
Index: genpreds.c
===================================================================
*** genpreds.c	(revision 225452)
--- genpreds.c	(working copy)
*************** write_insn_preds_c (void)
*** 1523,1559 ****
  #include \"config.h\"\n\
  #include \"system.h\"\n\
  #include \"coretypes.h\"\n\
! #include \"tm.h\"\n\
  #include \"rtl.h\"\n\
- #include \"hash-set.h\"\n\
- #include \"machmode.h\"\n\
- #include \"hash-map.h\"\n\
- #include \"vec.h\"\n\
- #include \"double-int.h\"\n\
- #include \"input.h\"\n\
  #include \"alias.h\"\n\
- #include \"symtab.h\"\n\
- #include \"wide-int.h\"\n\
- #include \"inchash.h\"\n\
- #include \"tree.h\"\n\
  #include \"varasm.h\"\n\
  #include \"stor-layout.h\"\n\
  #include \"calls.h\"\n\
  #include \"tm_p.h\"\n\
- #include \"hashtab.h\"\n\
- #include \"hash-set.h\"\n\
- #include \"vec.h\"\n\
- #include \"machmode.h\"\n\
- #include \"hard-reg-set.h\"\n\
- #include \"input.h\"\n\
- #include \"function.h\"\n\
  #include \"insn-config.h\"\n\
  #include \"recog.h\"\n\
  #include \"output.h\"\n\
  #include \"flags.h\"\n\
! #include \"hard-reg-set.h\"\n\
! #include \"predict.h\"\n\
! #include \"basic-block.h\"\n\
  #include \"resource.h\"\n\
  #include \"diagnostic-core.h\"\n\
  #include \"reload.h\"\n\
--- 1523,1541 ----
  #include \"config.h\"\n\
  #include \"system.h\"\n\
  #include \"coretypes.h\"\n\
! #include \"backend.h\"\n\
! #include \"tree.h\"\n\
  #include \"rtl.h\"\n\
  #include \"alias.h\"\n\
  #include \"varasm.h\"\n\
  #include \"stor-layout.h\"\n\
  #include \"calls.h\"\n\
  #include \"tm_p.h\"\n\
  #include \"insn-config.h\"\n\
  #include \"recog.h\"\n\
  #include \"output.h\"\n\
  #include \"flags.h\"\n\
! #include \"df.h\"\n\
  #include \"resource.h\"\n\
  #include \"diagnostic-core.h\"\n\
  #include \"reload.h\"\n\
Index: genrecog.c
===================================================================
*** genrecog.c	(revision 225452)
--- genrecog.c	(working copy)
*************** write_header (void)
*** 4179,4208 ****
  #include \"config.h\"\n\
  #include \"system.h\"\n\
  #include \"coretypes.h\"\n\
! #include \"tm.h\"\n\
  #include \"rtl.h\"\n\
  #include \"tm_p.h\"\n\
- #include \"hashtab.h\"\n\
- #include \"hash-set.h\"\n\
- #include \"vec.h\"\n\
- #include \"machmode.h\"\n\
- #include \"hard-reg-set.h\"\n\
- #include \"input.h\"\n\
- #include \"function.h\"\n\
  #include \"emit-rtl.h\"\n\
  #include \"insn-config.h\"\n\
  #include \"recog.h\"\n\
  #include \"output.h\"\n\
  #include \"flags.h\"\n\
! #include \"hard-reg-set.h\"\n\
! #include \"predict.h\"\n\
! #include \"basic-block.h\"\n\
  #include \"resource.h\"\n\
  #include \"diagnostic-core.h\"\n\
  #include \"reload.h\"\n\
  #include \"regs.h\"\n\
  #include \"tm-constrs.h\"\n\
- #include \"predict.h\"\n\
  \n");
  
    puts ("\n\
--- 4179,4198 ----
  #include \"config.h\"\n\
  #include \"system.h\"\n\
  #include \"coretypes.h\"\n\
! #include \"backend.h\"\n\
  #include \"rtl.h\"\n\
  #include \"tm_p.h\"\n\
  #include \"emit-rtl.h\"\n\
  #include \"insn-config.h\"\n\
  #include \"recog.h\"\n\
  #include \"output.h\"\n\
  #include \"flags.h\"\n\
! #include \"df.h\"\n\
  #include \"resource.h\"\n\
  #include \"diagnostic-core.h\"\n\
  #include \"reload.h\"\n\
  #include \"regs.h\"\n\
  #include \"tm-constrs.h\"\n\
  \n");
  
    puts ("\n\

[-- Attachment #4: 9-all.patch.Z --]
[-- Type: application/x-compress, Size: 87307 bytes --]

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [patch 4/9] Flatten sel-sched-dump.h and sel-sched-ir.h
  2015-07-07 13:46 ` [patch 4/9] Flatten sel-sched-dump.h and sel-sched-ir.h Andrew MacLeod
@ 2015-07-07 14:01   ` Alexander Monakov
  2015-07-07 14:07     ` Andrew MacLeod
  0 siblings, 1 reply; 22+ messages in thread
From: Alexander Monakov @ 2015-07-07 14:01 UTC (permalink / raw)
  To: Andrew MacLeod; +Cc: gcc-patches

On Tue, 7 Jul 2015, Andrew MacLeod wrote:

> This patch flattens both sel-sched-dump.h and sel-sched-ir.h. Both these files
> end up including cfgloop.h, so in preparation for flattening cfgloop.h,
> flatten these.  Note they actually have only a small effect on what includes
> them.

This patch removes #include "insn-attr.h" from sel-sched-ir.h without adding
it to .c files.  I'm curious how it works, is that file now arranged to be
included elsewhere?  (sorry if I missed it, but the patch series does not seem
to mention insn-attr.h specifically)

Thanks.
Alexander

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [patch 4/9] Flatten sel-sched-dump.h and sel-sched-ir.h
  2015-07-07 14:01   ` Alexander Monakov
@ 2015-07-07 14:07     ` Andrew MacLeod
  0 siblings, 0 replies; 22+ messages in thread
From: Andrew MacLeod @ 2015-07-07 14:07 UTC (permalink / raw)
  To: Alexander Monakov; +Cc: gcc-patches

On 07/07/2015 10:01 AM, Alexander Monakov wrote:
> On Tue, 7 Jul 2015, Andrew MacLeod wrote:
>
>> This patch flattens both sel-sched-dump.h and sel-sched-ir.h. Both these files
>> end up including cfgloop.h, so in preparation for flattening cfgloop.h,
>> flatten these.  Note they actually have only a small effect on what includes
>> them.
> This patch removes #include "insn-attr.h" from sel-sched-ir.h without adding
> it to .c files.  I'm curious how it works, is that file now arranged to be
> included elsewhere?  (sorry if I missed it, but the patch series does not seem
> to mention insn-attr.h specifically)
>
> Thanks.
> Alexander
That is because every file which includes sel-sched-ir.h  already 
included insn-attr.h so didn't need adjustment...

Andrew

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [patch 9/9]  Final patch with all changes
  2015-07-07 13:51 ` [patch 9/9] Final patch with all changes Andrew MacLeod
@ 2015-07-07 22:03   ` Pedro Alves
  2015-07-07 22:10     ` Andrew MacLeod
  0 siblings, 1 reply; 22+ messages in thread
From: Pedro Alves @ 2015-07-07 22:03 UTC (permalink / raw)
  To: Andrew MacLeod, gcc-patches

On 07/07/2015 02:51 PM, Andrew MacLeod wrote:
> *** sel-sched-ir.h	(revision 225452)
> --- sel-sched-ir.h	(working copy)
> *************** along with GCC; see the file COPYING3.
> *** 22,34 ****
>   #define GCC_SEL_SCHED_IR_H
>   
>   /* For state_t.  */
> - #include "insn-attr.h"
> - #include "regset.h"
>   /* For reg_note.  */
> - #include "rtl.h"
> - #include "bitmap.h"
> - #include "sched-int.h"
> - #include "cfgloop.h"
>   

Should probably drop those "For state_t/reg_note." comments too.

Thanks,
Pedro Alves

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [patch 9/9]  Final patch with all changes
  2015-07-07 22:03   ` Pedro Alves
@ 2015-07-07 22:10     ` Andrew MacLeod
  0 siblings, 0 replies; 22+ messages in thread
From: Andrew MacLeod @ 2015-07-07 22:10 UTC (permalink / raw)
  To: Pedro Alves, gcc-patches

On 07/07/2015 06:03 PM, Pedro Alves wrote:
> On 07/07/2015 02:51 PM, Andrew MacLeod wrote:
>> *** sel-sched-ir.h	(revision 225452)
>> --- sel-sched-ir.h	(working copy)
>> *************** along with GCC; see the file COPYING3.
>> *** 22,34 ****
>>    #define GCC_SEL_SCHED_IR_H
>>    
>>    /* For state_t.  */
>> - #include "insn-attr.h"
>> - #include "regset.h"
>>    /* For reg_note.  */
>> - #include "rtl.h"
>> - #include "bitmap.h"
>> - #include "sched-int.h"
>> - #include "cfgloop.h"
>>    
> Should probably drop those "For state_t/reg_note." comments too.
>
> Thanks,
> Pedro Alves
Ah right. Previous version had them removed. Missed them when I rebuilt 
the patch.
Thanks
Andrew

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [patch 0/9] Flattening and initial module rebuilding
  2015-07-07 13:40 [patch 0/9] Flattening and initial module rebuilding Andrew MacLeod
                   ` (8 preceding siblings ...)
  2015-07-07 13:51 ` [patch 9/9] Final patch with all changes Andrew MacLeod
@ 2015-07-07 22:21 ` Jeff Law
  2015-07-07 23:53   ` Andrew MacLeod
  9 siblings, 1 reply; 22+ messages in thread
From: Jeff Law @ 2015-07-07 22:21 UTC (permalink / raw)
  To: Andrew MacLeod, gcc-patches

On 07/07/2015 07:40 AM, Andrew MacLeod wrote:
> This is a series of 9 patches which does some flattening, some module
> building, and some basic cleanups.
>
>   I am presenting them as 9 patches for easier review. The latter couple
> of patches affect a lot of the same files that follow on patches then
> adjust, I've decided NOT to put the automated changes in with each of
> those patches.
>
> There are 8 patches showing the key changes, and then the 9th patch is
> an aggregate of the first 8 key changes, plus the final result of the
> impact on all the source files.  This is the only patch I'd like to commit.
>
>   The automated tools which generate the source changes have been
> significantly enhanced.  When a header is flattened, the source file is
> checked for the existence of the headers which need moving, and any
> which are already present are left if they are in the right order. Any
> duplicate are also removed.
>
>   A similar process is used when an aggregation file like backend.h or
> ssa.h is processed. Any occurrences of the aggregated headers are
> removed from the source file so there are no duplicates.  The aggregated
> headers are typically only placed in a source file if 3 or more of the
> headers would be replaced.  (ie, if only bitmap.h is included, I don't
> just blindly put backend.h in the file.)   This number came from
> analysis of a fully flattened and include-reduced tree, and seemed to be
> the sweet spot.
>
>   With the aggregation and flattening, the order of some includes can
> get shifted around with other files in between, so the tools also ensure
> there is a "blessed" order which will make sure than any pre-reqs are
> always available.  Right now, its primarily:
>
> config.h
> system.h
> coretypes.h
> backend.h
> tree.h
> gimple.h
> rtl.h
> df.h
> ssa.h
>
> And if any of the aggregators are not present, then any headers which
> make up the aggregator are in the same relative position.
>
> The tools actually produced all these patches with no tweaking to solve
> compilation failures.. which was very helpful.  The old ones needed some
> guidance and were a bit finicky.
>
> I can adjust any of this quite easily, or present them in a different
> way if you don't like it this way.  Again, my goal is to check in just
> the final patch which does all the work of first 8 patches.    It would
> be a lot less turmoil on the branch.   I can do it in smaller chunks if
> need be.
The set of 9 patches is fine for the trunk.  Just a few discussion points...

One of the things I keep thinking about as these changes fly by is your 
scripts.  Is there a reasonable possibility for you to add your scripts 
to the contrib/ directory or something similar to aid us in any future 
header file refactoring?  Yes, I know that in theory we should never 
have to do this again, but I also know that reality can be rather different.

Presumably the aggregators, by policy, are to have #includes and nothing 
else, right?  If so, we might want a comment to that effect in them.

It's a bit of a shame that function.h is in backend.h, along with 
predict (which is presumably needed by basic-block/cfg?).


Jeff

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [patch 0/9] Flattening and initial module rebuilding
  2015-07-07 22:21 ` [patch 0/9] Flattening and initial module rebuilding Jeff Law
@ 2015-07-07 23:53   ` Andrew MacLeod
  2015-07-08 22:43     ` Jeff Law
  0 siblings, 1 reply; 22+ messages in thread
From: Andrew MacLeod @ 2015-07-07 23:53 UTC (permalink / raw)
  To: Jeff Law, gcc-patches

On 07/07/2015 06:21 PM, Jeff Law wrote:
> On 07/07/2015 07:40 AM, Andrew MacLeod wrote:
>>
>> I can adjust any of this quite easily, or present them in a different
>> way if you don't like it this way.  Again, my goal is to check in just
>> the final patch which does all the work of first 8 patches. It would
>> be a lot less turmoil on the branch.   I can do it in smaller chunks if
>> need be.
> The set of 9 patches is fine for the trunk.  Just a few discussion 
> points...
>
> One of the things I keep thinking about as these changes fly by is 
> your scripts.  Is there a reasonable possibility for you to add your 
> scripts to the contrib/ directory or something similar to aid us in 
> any future header file refactoring?  Yes, I know that in theory we 
> should never have to do this again, but I also know that reality can 
> be rather different.
yes, with a bit of tweaking and enhancement they can be generally 
useful.  They are all in python.  And no one is allowed to make comments 
like "OMG thats so inefficient" or "what a horrible way to do that" 
:-)   My goal was getting things done and sometimes the brute force 
approach works great when the machine sare fast enough :_)

>
> Presumably the aggregators, by policy, are to have #includes and 
> nothing else, right?  If so, we might want a comment to that effect in 
> them.

Yeah, will do.

>
> It's a bit of a shame that function.h is in backend.h, along with 
> predict (which is presumably needed by basic-block/cfg?).
>

Yeah,once things settle down someone could tweak things more. If I make 
the tools available, people can do their own analysis and adjusting.

function.h provides cfun which is used all over the place..9 backend 
header files use it,and a few like gimple.h actually require struct 
function to be defined.

predict.h is actually required by gimple.h for a few reasons, enum 
be_predictor is used in parameter lists and a few inlines use the TAKEN, 
NOT_TAKEN macros
Its also needed by cfghooks.h, and betwen those 2 files, its just needed 
by  a very good chunk of the backend. .. 219 of the 263 files which 
include backend.h need it.
We could move the 2 enums and TAKEN/NOT_TAKEN to coretypes or something 
like that and it would probably cut the requirements for it by a *lot*.

Andrew


For the sake of amusement, here's the output from my initial include 
reduction logs for each file. Its basically all the unique errors 
produced by trying to remove the header from every source file in 
libbackend.a:

predict.h:
gimple_h : use of enum ‘br_predictor’ without previous declaration
gimple_h : use of enum ‘prediction’ without previous declaration
gimple_h : ‘TAKEN’ was not declared in this scope
gimple_h : ‘NOT_TAKEN’ was not declared in this scope
cfghooks_h : use of enum ‘br_predictor’ without previous declaration
  (1) : predict_h -> cfghooks_h
             use of enum ‘br_predictor’ without previous declaration
  (4) : predict_h -> gimple_h
             use of enum ‘br_predictor’ without previous declaration
             use of enum ‘prediction’ without previous declaration
             ‘TAKEN’ was not declared in this scope
             ‘NOT_TAKEN’ was not declared in this scope

function.h:
emit_rtl_h : field ‘expr’ has incomplete type ‘expr_status’
emit_rtl_h : field ‘emit’ has incomplete type ‘emit_status’
emit_rtl_h : field ‘varasm’ has incomplete type ‘varasm_status’
emit_rtl_h : field ‘subsections’ has incomplete type ‘function_subsections’
emit_rtl_h : field ‘eh’ has incomplete type ‘rtl_eh’
emit_rtl_h : invalid use of incomplete type ‘struct sequence_stack’
gimple_h : invalid use of incomplete type ‘struct function’
gimple_ssa_h : invalid use of incomplete type ‘const struct function’
gimple_ssa_h : ‘cfun’ was not declared in this scope
tree_ssanames_h : ‘cfun’ was not declared in this scope
cfgloop_h : ‘loops_for_fn’ was not declared in this scope
cfgloop_h : ‘current_loops’ was not declared in this scope
cfgloop_h : ‘cfun’ was not declared in this scope
cilk_h : invalid use of incomplete type ‘struct function’
ssa_iterators_h : ‘cfun’ was not declared in this scope
tree_scalar_evolution_h : ‘cfun’ was not declared in this scope
  (1) : function_h -> tree_scalar_evolution_h
             ‘cfun’ was not declared in this scope
  (1) : function_h -> tree_ssanames_h
             ‘cfun’ was not declared in this scope
  (1) : function_h -> ssa_iterators_h
             ‘cfun’ was not declared in this scope
  (1) : function_h -> cilk_h
             invalid use of incomplete type ‘struct function’
  (1) : function_h -> gimple_h
             invalid use of incomplete type ‘struct function’
  (2) : function_h -> gimple_ssa_h
             invalid use of incomplete type ‘const struct function’
             ‘cfun’ was not declared in this scope
  (3) : function_h -> cfgloop_h
             ‘loops_for_fn’ was not declared in this scope
             ‘current_loops’ was not declared in this scope
             ‘cfun’ was not declared in this scope
  (6) : function_h -> emit_rtl_h
             field ‘expr’ has incomplete type ‘expr_status’
             field ‘emit’ has incomplete type ‘emit_status’
             field ‘varasm’ has incomplete type ‘varasm_status’
             field ‘subsections’ has incomplete type ‘function_subsections’
             field ‘eh’ has incomplete type ‘rtl_eh’
             invalid use of incomplete type ‘struct sequence_stack’

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [patch 0/9] Flattening and initial module rebuilding
  2015-07-07 23:53   ` Andrew MacLeod
@ 2015-07-08 22:43     ` Jeff Law
  2015-07-09  2:43       ` Andrew MacLeod
  0 siblings, 1 reply; 22+ messages in thread
From: Jeff Law @ 2015-07-08 22:43 UTC (permalink / raw)
  To: Andrew MacLeod, gcc-patches

On 07/07/2015 05:53 PM, Andrew MacLeod wrote:
> yes, with a bit of tweaking and enhancement they can be generally
> useful.  They are all in python.  And no one is allowed to make comments
> like "OMG thats so inefficient" or "what a horrible way to do that"
> :-)   My goal was getting things done and sometimes the brute force
> approach works great when the machine sare fast enough :_)
Works for me...  I'm sure Martin S. is cringing at my python scripts 
right now, so I completely understand.

>> It's a bit of a shame that function.h is in backend.h, along with
>> predict (which is presumably needed by basic-block/cfg?).
>>
>
> Yeah,once things settle down someone could tweak things more. If I make
> the tools available, people can do their own analysis and adjusting.
>
> function.h provides cfun which is used all over the place..9 backend
> header files use it,and a few like gimple.h actually require struct
> function to be defined.
Right.  I suspect that we may want to look at cleaning that up a bit in 
the future.  There's bits in there that are relatively backend specific, 
some bits that look like front-end things, and cfun which is a context 
container.  Untangling that mess is likely to be painful.




>
> predict.h is actually required by gimple.h for a few reasons, enum
> be_predictor is used in parameter lists and a few inlines use the TAKEN,
> NOT_TAKEN macros
> Its also needed by cfghooks.h, and betwen those 2 files, its just needed
> by  a very good chunk of the backend. .. 219 of the 263 files which
> include backend.h need it.
> We could move the 2 enums and TAKEN/NOT_TAKEN to coretypes or something
> like that and it would probably cut the requirements for it by a *lot*.
Might be something for a follow-up (moving the enums).

Jeff

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [patch 0/9] Flattening and initial module rebuilding
  2015-07-08 22:43     ` Jeff Law
@ 2015-07-09  2:43       ` Andrew MacLeod
  2015-07-09 16:29         ` Jeff Law
  2015-07-09 17:06         ` Andrew MacLeod
  0 siblings, 2 replies; 22+ messages in thread
From: Andrew MacLeod @ 2015-07-09  2:43 UTC (permalink / raw)
  To: Jeff Law, gcc-patches

On 07/08/2015 06:43 PM, Jeff Law wrote:
> On 07/07/2015 05:53 PM, Andrew MacLeod wrote:
>> yes, with a bit of tweaking and enhancement they can be generally
>> useful.  They are all in python.  And no one is allowed to make comments
>> like "OMG thats so inefficient" or "what a horrible way to do that"
>> :-)   My goal was getting things done and sometimes the brute force
>> approach works great when the machine sare fast enough :_)
> Works for me...  I'm sure Martin S. is cringing at my python scripts 
> right now, so I completely understand.
>
yeah, dmalcolm is not allowed to look at them :-)

>
>>
>> predict.h is actually required by gimple.h for a few reasons, enum
>> be_predictor is used in parameter lists and a few inlines use the TAKEN,
>> NOT_TAKEN macros
>> Its also needed by cfghooks.h, and betwen those 2 files, its just needed
>> by  a very good chunk of the backend. .. 219 of the 263 files which
>> include backend.h need it.
>> We could move the 2 enums and TAKEN/NOT_TAKEN to coretypes or something
>> like that and it would probably cut the requirements for it by a *lot*.
> Might be something for a follow-up (moving the enums).
>
>
blah, not so trivial.  One of the primary things predict.h does is 
create enum br_predictor by including predict,def.. so moving that enum 
doesnt really make sense.

Fixing gimple,h isn't too bad, I could split the prediction stuff out 
into gimple-predict.h and include it in the 4 places its needed (as you 
might be able to tell, Ive tried this :-)

However, it doesn't do much good.  cfghooks.h is included by 
basic-block.h.. which is needed virtually everywhere :-P

There are just 2 entries in the hooks table which require  'enum 
br_predictor', but I dont think it makes sense to move things out of the 
cfghook structure.. I suppose once could create a prediction_hooks 
structure.. and put it in predict_hooks.h...  but I think thats probably 
going to far to avoid including a file which makes some logical sense..

The other option is to pull cfghooks.h out of basic-block.h and include 
it seperately on its own.. What is the reason its in there now? It 
appears to not have a cyclic dependency which is the usual reason to 
have an include in the middle of a file.  Or perhaps the reason no 
longer exists?  There is a comment at the top of cfghooks.h :
    /* Only basic-block.h includes this.  */
but no rationale.

I moved it to the very bottom of the file and everything still seems to  
compile fine   I can try flattening it out of basic-block.h and only 
including it in places that need it... that should eliminate the need to 
put predict.h in a lot of places I would think.

Andrew

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [patch 0/9] Flattening and initial module rebuilding
  2015-07-09  2:43       ` Andrew MacLeod
@ 2015-07-09 16:29         ` Jeff Law
  2015-07-09 17:06         ` Andrew MacLeod
  1 sibling, 0 replies; 22+ messages in thread
From: Jeff Law @ 2015-07-09 16:29 UTC (permalink / raw)
  To: Andrew MacLeod, gcc-patches

On 07/08/2015 08:42 PM, Andrew MacLeod wrote:
> blah, not so trivial.  One of the primary things predict.h does is
> create enum br_predictor by including predict,def.. so moving that enum
> doesnt really make sense.
>
> Fixing gimple,h isn't too bad, I could split the prediction stuff out
> into gimple-predict.h and include it in the 4 places its needed (as you
> might be able to tell, Ive tried this :-)
>
> However, it doesn't do much good.  cfghooks.h is included by
> basic-block.h.. which is needed virtually everywhere :-P
I don't guess we're approaching a world where the front-ends don't need 
basic-block (and thus cfghooks, predictions, etc etc).


> The other option is to pull cfghooks.h out of basic-block.h and include
> it seperately on its own.. What is the reason its in there now? It
> appears to not have a cyclic dependency which is the usual reason to
> have an include in the middle of a file.  Or perhaps the reason no
> longer exists?  There is a comment at the top of cfghooks.h :
>     /* Only basic-block.h includes this.  */
> but no rationale.
I don't recall.  It may have seemed to make sense at the time :-)  You'd 
have to do the archaeology and even if you did, you might not get an answer.

>
> I moved it to the very bottom of the file and everything still seems to
> compile fine   I can try flattening it out of basic-block.h and only
> including it in places that need it... that should eliminate the need to
> put predict.h in a lot of places I would think.
If it's not too much trouble, seems like it might be worth trying.  It 
just feels like the prediction bits shouldn't be that pervasive.

jeff

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [patch 0/9] Flattening and initial module rebuilding
  2015-07-09  2:43       ` Andrew MacLeod
  2015-07-09 16:29         ` Jeff Law
@ 2015-07-09 17:06         ` Andrew MacLeod
  2015-07-09 17:48           ` Jeff Law
  1 sibling, 1 reply; 22+ messages in thread
From: Andrew MacLeod @ 2015-07-09 17:06 UTC (permalink / raw)
  To: Jeff Law, gcc-patches

[-- Attachment #1: Type: text/plain, Size: 3932 bytes --]

On 07/08/2015 10:42 PM, Andrew MacLeod wrote:
> On 07/08/2015 06:43 PM, Jeff Law wrote:
>>> predict.h is actually required by gimple.h for a few reasons, enum
>>> be_predictor is used in parameter lists and a few inlines use the 
>>> TAKEN,
>>> NOT_TAKEN macros
>>> Its also needed by cfghooks.h, and betwen those 2 files, its just 
>>> needed
>>> by  a very good chunk of the backend. .. 219 of the 263 files which
>>> include backend.h need it.
>>> We could move the 2 enums and TAKEN/NOT_TAKEN to coretypes or something
>>> like that and it would probably cut the requirements for it by a *lot*.
>> Might be something for a follow-up (moving the enums).
>>
>>
> blah, not so trivial.  One of the primary things predict.h does is 
> create enum br_predictor by including predict,def.. so moving that 
> enum doesnt really make sense.
>
> Fixing gimple,h isn't too bad, I could split the prediction stuff out 
> into gimple-predict.h and include it in the 4 places its needed (as 
> you might be able to tell, Ive tried this :-)
>
> However, it doesn't do much good.  cfghooks.h is included by 
> basic-block.h.. which is needed virtually everywhere :-P
>
> There are just 2 entries in the hooks table which require  'enum 
> br_predictor', but I dont think it makes sense to move things out of 
> the cfghook structure.. I suppose once could create a prediction_hooks 
> structure.. and put it in predict_hooks.h...  but I think thats 
> probably going to far to avoid including a file which makes some 
> logical sense..
>
> The other option is to pull cfghooks.h out of basic-block.h and 
> include it seperately on its own.. What is the reason its in there 
> now? It appears to not have a cyclic dependency which is the usual 
> reason to have an include in the middle of a file.  Or perhaps the 
> reason no longer exists?  There is a comment at the top of cfghooks.h :
>    /* Only basic-block.h includes this.  */
> but no rationale.
>
> I moved it to the very bottom of the file and everything still seems 
> to  compile fine   I can try flattening it out of basic-block.h and 
> only including it in places that need it... that should eliminate the 
> need to put predict.h in a lot of places I would think.
>

ok,  so the results are in. a bit painful to unravel :-)  these are the 
steps
- Splitting the prediction bits of gimple.h out to gimple-predict.h and 
putting that file where it matters (5 files as it turns out)
- Next split cfghooks.h out from basic-block.h and put it in the files 
that it is needed in.
- then I moved  predict.h out of backend.h  I added it as an include to 
cfghooks.h and gimple-predict.h and adjusted source files accordingly..
- Finally, try to remove the extraneous cfghooks.h and predict.h files.

caveat, I did no reductions on config/* files nor on languages beyond 
stage1 builds... havent gotten to enhancing to tool to deal with that 
yet.. its coming as a part of the general include reduction.. so I'll 
havdle these bits then.  .
Then result using numbers which exclude those caveat files:
predict.h ends up in 68 files out of the original 179 it was in by 
itself. . ( ie excluding files with cfghooks.h or gimple-predict.h)
cfghooks.h ends up in 89 of the original 268 that basic-block was 
present in.

The total result affect 227 files.

Now, predict.h is *still* more pervasive than it needs to be, but thats 
a different patch :-).  There are  a set of routines in there like  
optimize_{fucntion,loop,edge,bb}_for{speed,size}_p()  that are the 
reason half the files need it.   those should probably be moved 
somewhere else since they aren't really prediction related :-P Maybe a 
better spot will show up when the rest of the include reductions are done.

I've attached a patch.  It bootstraps on x86_64-unknown-linux-gnu, and 
I'm running regressions.  To be safe, I'll run config-list.mk overnight 
to be sure.
assuming its all fine, OK for trunk then?

Andrew




[-- Attachment #2: predict.patch.Z --]
[-- Type: application/x-compress, Size: 21201 bytes --]

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [patch 0/9] Flattening and initial module rebuilding
  2015-07-09 17:06         ` Andrew MacLeod
@ 2015-07-09 17:48           ` Jeff Law
  2015-07-09 18:00             ` Andrew MacLeod
  0 siblings, 1 reply; 22+ messages in thread
From: Jeff Law @ 2015-07-09 17:48 UTC (permalink / raw)
  To: Andrew MacLeod, gcc-patches

On 07/09/2015 11:06 AM, Andrew MacLeod wrote:
> On 07/08/2015 10:42 PM, Andrew MacLeod wrote:
>> On 07/08/2015 06:43 PM, Jeff Law wrote:
>>>> predict.h is actually required by gimple.h for a few reasons, enum
>>>> be_predictor is used in parameter lists and a few inlines use the
>>>> TAKEN,
>>>> NOT_TAKEN macros
>>>> Its also needed by cfghooks.h, and betwen those 2 files, its just
>>>> needed
>>>> by  a very good chunk of the backend. .. 219 of the 263 files which
>>>> include backend.h need it.
>>>> We could move the 2 enums and TAKEN/NOT_TAKEN to coretypes or something
>>>> like that and it would probably cut the requirements for it by a *lot*.
>>> Might be something for a follow-up (moving the enums).
>>>
>>>
>> blah, not so trivial.  One of the primary things predict.h does is
>> create enum br_predictor by including predict,def.. so moving that
>> enum doesnt really make sense.
>>
>> Fixing gimple,h isn't too bad, I could split the prediction stuff out
>> into gimple-predict.h and include it in the 4 places its needed (as
>> you might be able to tell, Ive tried this :-)
>>
>> However, it doesn't do much good.  cfghooks.h is included by
>> basic-block.h.. which is needed virtually everywhere :-P
>>
>> There are just 2 entries in the hooks table which require  'enum
>> br_predictor', but I dont think it makes sense to move things out of
>> the cfghook structure.. I suppose once could create a prediction_hooks
>> structure.. and put it in predict_hooks.h...  but I think thats
>> probably going to far to avoid including a file which makes some
>> logical sense..
>>
>> The other option is to pull cfghooks.h out of basic-block.h and
>> include it seperately on its own.. What is the reason its in there
>> now? It appears to not have a cyclic dependency which is the usual
>> reason to have an include in the middle of a file.  Or perhaps the
>> reason no longer exists?  There is a comment at the top of cfghooks.h :
>>    /* Only basic-block.h includes this.  */
>> but no rationale.
>>
>> I moved it to the very bottom of the file and everything still seems
>> to  compile fine   I can try flattening it out of basic-block.h and
>> only including it in places that need it... that should eliminate the
>> need to put predict.h in a lot of places I would think.
>>
>
> ok,  so the results are in. a bit painful to unravel :-)  these are the
> steps
> - Splitting the prediction bits of gimple.h out to gimple-predict.h and
> putting that file where it matters (5 files as it turns out)
> - Next split cfghooks.h out from basic-block.h and put it in the files
> that it is needed in.
> - then I moved  predict.h out of backend.h  I added it as an include to
> cfghooks.h and gimple-predict.h and adjusted source files accordingly..
> - Finally, try to remove the extraneous cfghooks.h and predict.h files.
>
> caveat, I did no reductions on config/* files nor on languages beyond
> stage1 builds... havent gotten to enhancing to tool to deal with that
> yet.. its coming as a part of the general include reduction.. so I'll
> havdle these bits then.  .
> Then result using numbers which exclude those caveat files:
> predict.h ends up in 68 files out of the original 179 it was in by
> itself. . ( ie excluding files with cfghooks.h or gimple-predict.h)
> cfghooks.h ends up in 89 of the original 268 that basic-block was
> present in.
>
> The total result affect 227 files.
>
> Now, predict.h is *still* more pervasive than it needs to be, but thats
> a different patch :-).  There are  a set of routines in there like
> optimize_{fucntion,loop,edge,bb}_for{speed,size}_p()  that are the
> reason half the files need it.   those should probably be moved
> somewhere else since they aren't really prediction related :-P Maybe a
> better spot will show up when the rest of the include reductions are done.
>
> I've attached a patch.  It bootstraps on x86_64-unknown-linux-gnu, and
> I'm running regressions.  To be safe, I'll run config-list.mk overnight
> to be sure.
> assuming its all fine, OK for trunk then?
OK assuming everything is fine with your overnight run.

BTW, you're showing your age -- a .Z file...  Thankfully gzip will 
handle that just fine.  (And yes, I realize the irony here that gzip is 
probably considered ancient as well given bzip2 and xz).


jeff

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [patch 0/9] Flattening and initial module rebuilding
  2015-07-09 17:48           ` Jeff Law
@ 2015-07-09 18:00             ` Andrew MacLeod
  0 siblings, 0 replies; 22+ messages in thread
From: Andrew MacLeod @ 2015-07-09 18:00 UTC (permalink / raw)
  To: Jeff Law, gcc-patches

On 07/09/2015 01:49 PM, Jeff Law wrote:
> On 07/09/2015 11:06 AM, Andrew MacLeod wrote:
>>
>> The total result affect 227 files.
>>
>> Now, predict.h is *still* more pervasive than it needs to be, but thats
>> a different patch :-).  There are  a set of routines in there like
>> optimize_{fucntion,loop,edge,bb}_for{speed,size}_p()  that are the
>> reason half the files need it.   those should probably be moved
>> somewhere else since they aren't really prediction related :-P Maybe a
>> better spot will show up when the rest of the include reductions are 
>> done.
>>
>> I've attached a patch.  It bootstraps on x86_64-unknown-linux-gnu, and
>> I'm running regressions.  To be safe, I'll run config-list.mk overnight
>> to be sure.
>> assuming its all fine, OK for trunk then?
> OK assuming everything is fine with your overnight run.
>
> BTW, you're showing your age -- a .Z file...  Thankfully gzip will 
> handle that just fine.  (And yes, I realize the irony here that gzip 
> is probably considered ancient as well given bzip2 and xz).
>

Ha. I just type compress and move on. :-)  but yeah, lookitthat. bzip2 
is about 40% the size :-)    ok, maybe next time :-)   If i remember...
Andrew

^ permalink raw reply	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2015-07-09 18:00 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-07-07 13:40 [patch 0/9] Flattening and initial module rebuilding Andrew MacLeod
2015-07-07 13:43 ` [patch 1/9] header additions and aggregators Andrew MacLeod
2015-07-07 13:44 ` [patch 2/9] flatten regset.h Andrew MacLeod
2015-07-07 13:45 ` [patch 3/9] Flatten lra-int.h Andrew MacLeod
2015-07-07 13:46 ` [patch 5/9] Flatten ira-int.h Andrew MacLeod
2015-07-07 13:46 ` [patch 4/9] Flatten sel-sched-dump.h and sel-sched-ir.h Andrew MacLeod
2015-07-07 14:01   ` Alexander Monakov
2015-07-07 14:07     ` Andrew MacLeod
2015-07-07 13:47 ` [patch 6/9] Flatten gimple-streamer.h Andrew MacLeod
2015-07-07 13:49 ` [patch 7/9] Flatten cfgloop.h Andrew MacLeod
2015-07-07 13:50 ` [patch 8/9] Flatten df.h Andrew MacLeod
2015-07-07 13:51 ` [patch 9/9] Final patch with all changes Andrew MacLeod
2015-07-07 22:03   ` Pedro Alves
2015-07-07 22:10     ` Andrew MacLeod
2015-07-07 22:21 ` [patch 0/9] Flattening and initial module rebuilding Jeff Law
2015-07-07 23:53   ` Andrew MacLeod
2015-07-08 22:43     ` Jeff Law
2015-07-09  2:43       ` Andrew MacLeod
2015-07-09 16:29         ` Jeff Law
2015-07-09 17:06         ` Andrew MacLeod
2015-07-09 17:48           ` Jeff Law
2015-07-09 18:00             ` Andrew MacLeod

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).