public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [patch] consolidate some includes into coretypes.h
@ 2015-06-01 21:09 Andrew MacLeod
  2015-06-02  8:28 ` Richard Biener
  0 siblings, 1 reply; 8+ messages in thread
From: Andrew MacLeod @ 2015-06-01 21:09 UTC (permalink / raw)
  To: gcc-patches

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

I've begun looking at cleaning up the include files. Before removing 
unnecessary includes, I'd like to get a few other cleanups out of the 
way to simplify the dependency web. This is the first.

There are some interrelated numerical definition headers (double-int.h, 
fixed-value.h, real.h and wide-int.h) .  Virtually every gcc source file 
ends up including them indirectly one or more times.  They also end up 
including signop.h and machmode.h as prerequisites as well.

first,

#include "machmode.h"
#include "signop.h"
#include "wide-int.h"
#include "double-int.h"

any source file  which includes tree.h, gimple.h *or* rtl.h will require 
all of these to compile.  That is basically the entire compiler.

then there are:

#include "real.h"
#include "fixed-value.h"     /* require real.h to compile */

rtl.h has a hard dependency on these 2 files to compile, and although 
tree.h still parses and compiles when they are not included, it does 
provide some macros which access tree fields which return a FIXED_VALUE. 
   Any file which includes tree.h could therefore require real.h and 
fixed-value.h if they use the results of those macros.

That said, I tried flattening these includes throughout the compiler to 
see exactly which other source files really need real.h and 
fixed-value.h.  I changbed it such that those 2 files were included by 
rtl.h, realmpfr.h, and dfp.h which have hard requirements.  I found 
about 37 of the remaining source files required real.h and about 16 
required fixed-value.h

Personally given those numbers and since tree.h exposes potential uses 
of FIXED_VALUE, the simple and cleanest thing to do is just add all 6 of 
these includes to the basic pre-requisites for source files.

Currently, all source files start with
#include "config.h"
#include "system.h"
#include "coretypes.h"

The first include can be different for generator (bconfig.h) and target 
(tconfig.h) files,  so with a small tweak to coretypes.h to include 
these 6 header files when config.h has been included (by checking if 
GCC_CONFIG_H is defined),  everything pretty much magically works.  I 
think it makes sense to put them there since they are core types and is 
already included everywhere its needed. If that is not satisfactory, I 
could create a new include file which comes after coretypes when 
appropriate...

The only exception is the cases where rtl.h is included by some 
generator file. These generator files are used late enough in the build  
that insn-modes.h exists and can safely include all these files.  I 
added a condition to rtl.h to include these files when GENERATOR_FILE is 
defined since they wouldn't have been included by coretypes.h normally.

With that change I can remove *all* other #includes of these 6 files, 
and simplify the initial part of the include web quite nicely.  I also 
used the opportunity to remove coretypes.h from a couple of includes 
that no longer need to include it.

there are 2 patches. The first is short and has the interesting changes, 
the second is purely automated and removes all the extraneous #includes 
of these files which are now all encapsulated in coretypes.h.

Bootstraps from scratch on x86_64-unknown-linux-gnu with no new test 
regressions.  I also built it on all the config-list.mk targets with no 
additional compilation errors.

OK for trunk?

Andrew

-  I do have a functioning patch which moves real.h and fixed-value.h to 
the required source files, I just dont like it as well so propose this 
one first.


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



	* coretypes.h: Include machmode.h, signop.h, wide-int.h, double-int.h,
	real.h, and fixed-value.h when included in host source files, identified
	by the presence of config.h in the include chain.
	* double-int.h: Remove redundant #includes listed above.
	* fixed-value.h: Likewise.
	* real.h: Likewise.
	* wide-int.h: Likewise.
	* inchash.h: Likewise.
	* rtl.h: Add some include files When included from a generator file.
	* target.h: Remove wide-int.h and insn-modes.h from the include list.
	* internal-fn.h: Don't include coretypes.h.


Index: coretypes.h
===================================================================
--- coretypes.h	(revision 223875)
+++ coretypes.h	(working copy)
@@ -299,4 +299,14 @@
 typedef unsigned char uchar;
 #endif
 
+/* Most host source files will require the following headers.  */
+#ifdef GCC_CONFIG_H
+#include "machmode.h"
+#include "signop.h"
+#include "wide-int.h" 
+#include "double-int.h"
+#include "real.h"
+#include "fixed-value.h"
+#endif
+
 #endif /* coretypes.h */
Index: double-int.h
===================================================================
--- double-int.h	(revision 223875)
+++ double-int.h	(working copy)
@@ -20,8 +20,6 @@
 #ifndef DOUBLE_INT_H
 #define DOUBLE_INT_H
 
-#include "wide-int.h"
-
 /* A large integer is currently represented as a pair of HOST_WIDE_INTs.
    It therefore represents a number with precision of
    2 * HOST_BITS_PER_WIDE_INT bits (it is however possible that the
Index: fixed-value.h
===================================================================
--- fixed-value.h	(revision 223875)
+++ fixed-value.h	(working copy)
@@ -20,10 +20,6 @@
 #ifndef GCC_FIXED_VALUE_H
 #define GCC_FIXED_VALUE_H
 
-#include "machmode.h"
-#include "real.h"
-#include "double-int.h"
-
 struct GTY(()) fixed_value
 {
   double_int data;		/* Store data up to 2 wide integers.  */
Index: real.h
===================================================================
--- real.h	(revision 223875)
+++ real.h	(working copy)
@@ -20,11 +20,6 @@
 #ifndef GCC_REAL_H
 #define GCC_REAL_H
 
-#include "machmode.h"
-#include "signop.h"
-#include "wide-int.h"
-#include "insn-modes.h"
-
 /* An expanded form of the represented number.  */
 
 /* Enumerate the special cases of numbers that we encounter.  */
Index: wide-int.h
===================================================================
--- wide-int.h	(revision 223875)
+++ wide-int.h	(working copy)
@@ -216,11 +216,6 @@
    the same result as X + X; the precision of the shift amount Y
    can be arbitrarily different from X.  */
 
-#include "system.h"
-#include "hwint.h"
-#include "signop.h"
-#include "insn-modes.h"
-
 /* The MAX_BITSIZE_MODE_ANY_INT is automatically generated by a very
    early examination of the target's mode file.  The WIDE_INT_MAX_ELTS
    can accomodate at least 1 more bit so that unsigned numbers of that
Index: inchash.h
===================================================================
--- inchash.h	(revision 223875)
+++ inchash.h	(working copy)
@@ -20,13 +20,6 @@
 #ifndef INCHASH_H
 #define INCHASH_H 1
 
-#ifdef GENERATOR_FILE
-#include "bconfig.h"
-#else
-#include "config.h"
-#endif
-#include "system.h"
-#include "coretypes.h"
 #include "hashtab.h"
 
 /* This file implements an incremential hash function ADT, to be used
Index: rtl.h
===================================================================
--- rtl.h	(revision 223875)
+++ rtl.h	(working copy)
@@ -20,15 +20,23 @@
 #ifndef GCC_RTL_H
 #define GCC_RTL_H
 
+/* This file is occasionally included by generator files which expect
+   machmode.h and other files to exist and would not normally have been
+   included by coretypes.h.  */
+#ifdef GENERATOR_FILE
+#include "machmode.h"     
+#include "signop.h"
+#include "wide-int.h"
+#include "double-int.h"
+#include "real.h"
+#include "fixed-value.h"
+#endif  /* GENERATOR_FILE */
+
 #include "statistics.h"
-#include "machmode.h"
 #include "input.h"
-#include "real.h"
 #include "vec.h"
-#include "fixed-value.h"
 #include "alias.h"
 #include "hashtab.h"
-#include "wide-int.h"
 #include "flags.h"
 #include "is-a.h"
 
Index: target.h
===================================================================
--- target.h	(revision 223875)
+++ target.h	(working copy)
@@ -48,9 +48,7 @@
 #ifndef GCC_TARGET_H
 #define GCC_TARGET_H
 
-#include "insn-modes.h"
 #include "insn-codes.h"
-#include "wide-int.h"
 #include "tm.h"
 #include "hard-reg-set.h"
 
Index: internal-fn.h
===================================================================
--- internal-fn.h	(revision 223875)
+++ internal-fn.h	(working copy)
@@ -20,8 +20,6 @@
 #ifndef GCC_INTERNAL_FN_H
 #define GCC_INTERNAL_FN_H
 
-#include "coretypes.h"
-
 /* Initialize internal function tables.  */
 
 extern void init_internal_fns ();

[-- Attachment #3: num2.patch.Z --]
[-- Type: application/x-compress, Size: 46443 bytes --]

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

* Re: [patch] consolidate some includes into coretypes.h
  2015-06-01 21:09 [patch] consolidate some includes into coretypes.h Andrew MacLeod
@ 2015-06-02  8:28 ` Richard Biener
  2015-06-02 12:47   ` Andrew MacLeod
  0 siblings, 1 reply; 8+ messages in thread
From: Richard Biener @ 2015-06-02  8:28 UTC (permalink / raw)
  To: Andrew MacLeod; +Cc: gcc-patches

On Mon, Jun 1, 2015 at 11:02 PM, Andrew MacLeod <amacleod@redhat.com> wrote:
> I've begun looking at cleaning up the include files. Before removing
> unnecessary includes, I'd like to get a few other cleanups out of the way to
> simplify the dependency web. This is the first.
>
> There are some interrelated numerical definition headers (double-int.h,
> fixed-value.h, real.h and wide-int.h) .  Virtually every gcc source file
> ends up including them indirectly one or more times.  They also end up
> including signop.h and machmode.h as prerequisites as well.
>
> first,
>
> #include "machmode.h"
> #include "signop.h"
> #include "wide-int.h"
> #include "double-int.h"
>
> any source file  which includes tree.h, gimple.h *or* rtl.h will require all
> of these to compile.  That is basically the entire compiler.
>
> then there are:
>
> #include "real.h"
> #include "fixed-value.h"     /* require real.h to compile */
>
> rtl.h has a hard dependency on these 2 files to compile, and although tree.h
> still parses and compiles when they are not included, it does provide some
> macros which access tree fields which return a FIXED_VALUE.   Any file which
> includes tree.h could therefore require real.h and fixed-value.h if they use
> the results of those macros.
>
> That said, I tried flattening these includes throughout the compiler to see
> exactly which other source files really need real.h and fixed-value.h.  I
> changbed it such that those 2 files were included by rtl.h, realmpfr.h, and
> dfp.h which have hard requirements.  I found about 37 of the remaining
> source files required real.h and about 16 required fixed-value.h
>
> Personally given those numbers and since tree.h exposes potential uses of
> FIXED_VALUE, the simple and cleanest thing to do is just add all 6 of these
> includes to the basic pre-requisites for source files.
>
> Currently, all source files start with
> #include "config.h"
> #include "system.h"
> #include "coretypes.h"
>
> The first include can be different for generator (bconfig.h) and target
> (tconfig.h) files,  so with a small tweak to coretypes.h to include these 6
> header files when config.h has been included (by checking if GCC_CONFIG_H is
> defined),  everything pretty much magically works.  I think it makes sense
> to put them there since they are core types and is already included
> everywhere its needed. If that is not satisfactory, I could create a new
> include file which comes after coretypes when appropriate...
>
> The only exception is the cases where rtl.h is included by some generator
> file. These generator files are used late enough in the build  that
> insn-modes.h exists and can safely include all these files.  I added a
> condition to rtl.h to include these files when GENERATOR_FILE is defined
> since they wouldn't have been included by coretypes.h normally.
>
> With that change I can remove *all* other #includes of these 6 files, and
> simplify the initial part of the include web quite nicely.  I also used the
> opportunity to remove coretypes.h from a couple of includes that no longer
> need to include it.
>
> there are 2 patches. The first is short and has the interesting changes, the
> second is purely automated and removes all the extraneous #includes of these
> files which are now all encapsulated in coretypes.h.
>
> Bootstraps from scratch on x86_64-unknown-linux-gnu with no new test
> regressions.  I also built it on all the config-list.mk targets with no
> additional compilation errors.
>
> OK for trunk?

Generally the idea is sound (amend coretypes.h), but I don't like the
GCC_CONFIG_H guard, why does !GENERATOR_FILE not work?

Furthermore I don't like the special-casing in rtl.h, instead have
coretypes.h contain sth like

#ifdef GENERATOR_FILE
... rtl.h special-case
#else
... GCC_CONFIG_H stuff
#endif

Thanks,
Richard.

> Andrew
>
> -  I do have a functioning patch which moves real.h and fixed-value.h to the
> required source files, I just dont like it as well so propose this one
> first.
>

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

* Re: [patch] consolidate some includes into coretypes.h
  2015-06-02  8:28 ` Richard Biener
@ 2015-06-02 12:47   ` Andrew MacLeod
  2015-06-02 13:49     ` Richard Biener
  0 siblings, 1 reply; 8+ messages in thread
From: Andrew MacLeod @ 2015-06-02 12:47 UTC (permalink / raw)
  To: Richard Biener; +Cc: gcc-patches

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

On 06/02/2015 04:26 AM, Richard Biener wrote:
> On Mon, Jun 1, 2015 at 11:02 PM, Andrew MacLeod <amacleod@redhat.com> wrote:
>>
>> Bootstraps from scratch on x86_64-unknown-linux-gnu with no new test
>> regressions.  I also built it on all the config-list.mk targets with no
>> additional compilation errors.
>>
>> OK for trunk?
> Generally the idea is sound (amend coretypes.h), but I don't like the
> GCC_CONFIG_H guard, why does !GENERATOR_FILE not work?
Target files also use coretypes.h. In particular, libgcc includes it and 
does not have GENERATOR_FILE set.  Rather than checking for GCC_CONFIG_H 
we could check

#if !defined (GENERATOR_FILE) && !defined (USED_FOR_TARGET)

I think that should work OK.
> Furthermore I don't like the special-casing in rtl.h, instead have
> coretypes.h contain sth like
>
> #ifdef GENERATOR_FILE
> ... rtl.h special-case
> #else
> ... GCC_CONFIG_H stuff
> #endif
>
> Thanks,
> Richard.

This one is harder. I don't like the special case either, but you cant 
really figure it out in coretypes.h.  The problem comes from some 
generator files which compile rtl.c and and a couple of other files, and 
thus have GENERATOR_FILE set... These run after the initial set of 
generators so insn-modes.h and friends have been created, and these 
includes are now required.   the presence of rtl.h seems to be the the 
litmus test and if it occurs in the include chain after coretypes.h, 
then we'll need these files.

I suppose you could just include those files in rtl.h directly without 
the guard...  it is probably the cleanest solution. Otherwise we'd 
either have to add a new identifying macro to a dozen generator files, 
or include these headers there, or some other such thing.

The following tweak to the 2 files address both issues.  how does that seem?

  Andrew


[-- Attachment #2: num3.diff --]
[-- Type: text/x-patch, Size: 1306 bytes --]

Index: coretypes.h
===================================================================
--- coretypes.h	(revision 223875)
+++ coretypes.h	(working copy)
@@ -299,4 +299,14 @@
 typedef unsigned char uchar;
 #endif
 
+/* Most host source files will require the following headers.  */
+#if !defined (GENERATOR_FILE) && !defined (USED_FOR_TARGET)
+#include "machmode.h"
+#include "signop.h"
+#include "wide-int.h" 
+#include "double-int.h"
+#include "real.h"
+#include "fixed-value.h"
+#endif
+
 #endif /* coretypes.h */
Index: rtl.h
===================================================================
--- rtl.h	(revision 223875)
+++ rtl.h	(working copy)
@@ -20,15 +20,21 @@
 #ifndef GCC_RTL_H
 #define GCC_RTL_H
 
+/* coretypes.h normally includes these header files, but does not for generator
+   files.  This file is included by some late running generator files which 
+   also requires them, so always include them here.  */
+#include "machmode.h"     
+#include "signop.h"
+#include "wide-int.h"
+#include "double-int.h"
+#include "real.h"
+#include "fixed-value.h"
+
 #include "statistics.h"
-#include "machmode.h"
 #include "input.h"
-#include "real.h"
 #include "vec.h"
-#include "fixed-value.h"
 #include "alias.h"
 #include "hashtab.h"
-#include "wide-int.h"
 #include "flags.h"
 #include "is-a.h"
 

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

* Re: [patch] consolidate some includes into coretypes.h
  2015-06-02 12:47   ` Andrew MacLeod
@ 2015-06-02 13:49     ` Richard Biener
  2015-06-02 14:19       ` Andrew MacLeod
  0 siblings, 1 reply; 8+ messages in thread
From: Richard Biener @ 2015-06-02 13:49 UTC (permalink / raw)
  To: Andrew MacLeod; +Cc: gcc-patches

On Tue, Jun 2, 2015 at 2:34 PM, Andrew MacLeod <amacleod@redhat.com> wrote:
> On 06/02/2015 04:26 AM, Richard Biener wrote:
>>
>> On Mon, Jun 1, 2015 at 11:02 PM, Andrew MacLeod <amacleod@redhat.com>
>> wrote:
>>>
>>>
>>> Bootstraps from scratch on x86_64-unknown-linux-gnu with no new test
>>> regressions.  I also built it on all the config-list.mk targets with no
>>> additional compilation errors.
>>>
>>> OK for trunk?
>>
>> Generally the idea is sound (amend coretypes.h), but I don't like the
>> GCC_CONFIG_H guard, why does !GENERATOR_FILE not work?
>
> Target files also use coretypes.h. In particular, libgcc includes it and
> does not have GENERATOR_FILE set.  Rather than checking for GCC_CONFIG_H we
> could check
>
> #if !defined (GENERATOR_FILE) && !defined (USED_FOR_TARGET)
>
> I think that should work OK.
>>
>> Furthermore I don't like the special-casing in rtl.h, instead have
>> coretypes.h contain sth like
>>
>> #ifdef GENERATOR_FILE
>> ... rtl.h special-case
>> #else
>> ... GCC_CONFIG_H stuff
>> #endif
>>
>> Thanks,
>> Richard.
>
>
> This one is harder. I don't like the special case either, but you cant
> really figure it out in coretypes.h.  The problem comes from some generator
> files which compile rtl.c and and a couple of other files, and thus have
> GENERATOR_FILE set... These run after the initial set of generators so
> insn-modes.h and friends have been created, and these includes are now
> required.   the presence of rtl.h seems to be the the litmus test and if it
> occurs in the include chain after coretypes.h, then we'll need these files.
>
> I suppose you could just include those files in rtl.h directly without the
> guard...  it is probably the cleanest solution. Otherwise we'd either have
> to add a new identifying macro to a dozen generator files, or include these
> headers there, or some other such thing.

Well, then include the requirements in the generator files instead?  It looks
backwards to add to the includes in rtl.h.

Richard.

> The following tweak to the 2 files address both issues.  how does that seem?
>
>  Andrew
>

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

* Re: [patch] consolidate some includes into coretypes.h
  2015-06-02 13:49     ` Richard Biener
@ 2015-06-02 14:19       ` Andrew MacLeod
  2015-06-03 11:53         ` Richard Biener
  0 siblings, 1 reply; 8+ messages in thread
From: Andrew MacLeod @ 2015-06-02 14:19 UTC (permalink / raw)
  To: Richard Biener; +Cc: gcc-patches

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

On 06/02/2015 09:30 AM, Richard Biener wrote:
> On Tue, Jun 2, 2015 at 2:34 PM, Andrew MacLeod <amacleod@redhat.com> wrote:
>> On 06/02/2015 04:26 AM, Richard Biener wrote:
>>> On Mon, Jun 1, 2015 at 11:02 PM, Andrew MacLeod <amacleod@redhat.com>
>>> wrote:
>>>>
>>>> Bootstraps from scratch on x86_64-unknown-linux-gnu with no new test
>>>> regressions.  I also built it on all the config-list.mk targets with no
>>>> additional compilation errors.
>>>>
>>>> OK for trunk?
>>> Generally the idea is sound (amend coretypes.h), but I don't like the
>>> GCC_CONFIG_H guard, why does !GENERATOR_FILE not work?
>> Target files also use coretypes.h. In particular, libgcc includes it and
>> does not have GENERATOR_FILE set.  Rather than checking for GCC_CONFIG_H we
>> could check
>>
>> #if !defined (GENERATOR_FILE) && !defined (USED_FOR_TARGET)
>>
>> I think that should work OK.
>>> Furthermore I don't like the special-casing in rtl.h, instead have
>>> coretypes.h contain sth like
>>>
>>> #ifdef GENERATOR_FILE
>>> ... rtl.h special-case
>>> #else
>>> ... GCC_CONFIG_H stuff
>>> #endif
>>>
>>> Thanks,
>>> Richard.
>>
>> This one is harder. I don't like the special case either, but you cant
>> really figure it out in coretypes.h.  The problem comes from some generator
>> files which compile rtl.c and and a couple of other files, and thus have
>> GENERATOR_FILE set... These run after the initial set of generators so
>> insn-modes.h and friends have been created, and these includes are now
>> required.   the presence of rtl.h seems to be the the litmus test and if it
>> occurs in the include chain after coretypes.h, then we'll need these files.
>>
>> I suppose you could just include those files in rtl.h directly without the
>> guard...  it is probably the cleanest solution. Otherwise we'd either have
>> to add a new identifying macro to a dozen generator files, or include these
>> headers there, or some other such thing.
> Well, then include the requirements in the generator files instead?  It looks
> backwards to add to the includes in rtl.h.
>
> Richard.
Except that it is rtl.h that actually has the compilation requirement.  
I could put those includes in each of the generator files which require 
it, but the list is non-trivial:
Each of these files can be compiled with bconfig.h instead of config.h, 
and they each include rtl.h which requires these headers:
genattr.c
genattr-common.c
genattrtab.c
genautomata.c
gencodes.c
genconditions.c
genconfig.c
genemit.c
genextract.c
genflags.c
genmddump.c
genopinit.c
genoutput.c
genpeep.c
genpreds.c
genrecog.c
gensupport.c
print-rtl.c
read-rtl.c
rtl.c


so there are 20 files which require these headers, and there are 11 
others which do not require rtl.h nor the headers (and will fail compile 
if they are included)
gencheck.c
genconstants.c
genenums.c
genmatch.c
genmddeps.c
genmodes.c
ggc-none.c
hash-table.c
inchash.c
read-md.c
vec.c


I suppose one could add something like:
#define EARLY_GENERATOR
in each of the 11 and check for that macro in coretypes.h instead of 
GENERATOR file.  ThIs appears to work fine:

Andrew



[-- Attachment #2: num4.diff --]
[-- Type: text/x-patch, Size: 6238 bytes --]

diff -cpN /numerical/coretypes.h /CMP/coretypes.h
*** /numerical/coretypes.h	2015-06-01 18:00:36.284376498 -0400
--- /CMP/coretypes.h	2015-06-02 10:15:12.427363555 -0400
*************** typedef unsigned char uchar;
*** 300,306 ****
  #endif
  
  /* Most host source files will require the following headers.  */
! #ifdef GCC_CONFIG_H
  #include "machmode.h"
  #include "signop.h"
  #include "wide-int.h" 
--- 300,306 ----
  #endif
  
  /* Most host source files will require the following headers.  */
! #if !defined (EARLY_GENERATOR_FILE) && !defined (USED_FOR_TARGET)
  #include "machmode.h"
  #include "signop.h"
  #include "wide-int.h" 
diff -cpN /numerical/gencheck.c /CMP/gencheck.c
*** /numerical/gencheck.c	2015-06-01 18:00:36.290376342 -0400
--- /CMP/gencheck.c	2015-06-02 10:15:12.434363374 -0400
*************** along with GCC; see the file COPYING3.
*** 20,25 ****
--- 20,26 ----
  /* We don't have insn-modes.h, but we include tm.h.  */
  #define BITS_PER_UNIT 8
  
+ #define EARLY_GENERATOR_FILE
  #include "bconfig.h"
  #include "system.h"
  #include "coretypes.h"
diff -cpN /numerical/genconstants.c /CMP/genconstants.c
*** /numerical/genconstants.c	2015-06-01 18:00:36.290376342 -0400
--- /CMP/genconstants.c	2015-06-02 10:15:12.435363348 -0400
*************** along with GCC; see the file COPYING3.
*** 24,29 ****
--- 24,30 ----
     look at insn patterns, only (define_constants), and we want to
     minimize dependencies.  */
  
+ #define EARLY_GENERATOR_FILE
  #include "bconfig.h"
  #include "system.h"
  #include "coretypes.h"
diff -cpN /numerical/genenums.c /CMP/genenums.c
*** /numerical/genenums.c	2015-06-01 18:00:36.290376342 -0400
--- /CMP/genenums.c	2015-06-02 10:15:12.435363348 -0400
*************** You should have received a copy of the G
*** 17,22 ****
--- 17,23 ----
  along with GCC; see the file COPYING3.  If not see
  <http://www.gnu.org/licenses/>.  */
  
+ #define EARLY_GENERATOR_FILE
  #include "bconfig.h"
  #include "system.h"
  #include "coretypes.h"
diff -cpN /numerical/genmatch.c /CMP/genmatch.c
*** /numerical/genmatch.c	2015-06-01 18:00:36.291376316 -0400
--- /CMP/genmatch.c	2015-06-02 10:15:12.435363348 -0400
*************** You should have received a copy of the G
*** 21,26 ****
--- 21,27 ----
  along with GCC; see the file COPYING3.  If not see
  <http://www.gnu.org/licenses/>.  */
  
+ #define EARLY_GENERATOR_FILE
  #include "bconfig.h"
  #include <new>
  #include "system.h"
diff -cpN /numerical/genmddeps.c /CMP/genmddeps.c
*** /numerical/genmddeps.c	2015-06-01 18:00:36.291376316 -0400
--- /CMP/genmddeps.c	2015-06-02 10:15:12.435363348 -0400
***************
*** 15,20 ****
--- 15,21 ----
     along with this program; see the file COPYING3.  If not see
     <http://www.gnu.org/licenses/>.  */
  
+ #define EARLY_GENERATOR_FILE
  #include "bconfig.h"
  #include "system.h"
  #include "coretypes.h"
diff -cpN /numerical/genmodes.c /CMP/genmodes.c
*** /numerical/genmodes.c	2015-06-01 18:00:36.291376316 -0400
--- /CMP/genmodes.c	2015-06-02 10:15:12.436363323 -0400
*************** You should have received a copy of the G
*** 17,22 ****
--- 17,23 ----
  along with GCC; see the file COPYING3.  If not see
  <http://www.gnu.org/licenses/>.  */
  
+ #define EARLY_GENERATOR_FILE
  #include "bconfig.h"
  #include "system.h"
  #include "errors.h"
diff -cpN /numerical/ggc-none.c /CMP/ggc-none.c
*** /numerical/ggc-none.c	2015-06-01 18:00:36.292376290 -0400
--- /CMP/ggc-none.c	2015-06-02 10:15:12.436363323 -0400
***************
*** 21,26 ****
--- 21,27 ----
     targets (such as java), where we don't really need GC at all.
     This prevents problems with pulling in all the tree stuff.  */
  
+ #define EARLY_GENERATOR_FILE
  #ifdef GENERATOR_FILE
  #include "bconfig.h"
  #else
diff -cpN /numerical/hash-table.c /CMP/hash-table.c
*** /numerical/hash-table.c	2015-06-01 18:00:36.295376212 -0400
--- /CMP/hash-table.c	2015-06-02 10:15:12.440363220 -0400
*************** along with GCC; see the file COPYING3.
*** 22,27 ****
--- 22,28 ----
  /* This file implements a typed hash table.
     The implementation borrows from libiberty's hashtab.  */
  
+ #define EARLY_GENERATOR_FILE
  #ifdef GENERATOR_FILE
  #include "bconfig.h"
  #else
diff -cpN /numerical/inchash.c /CMP/inchash.c
*** /numerical/inchash.c	2015-06-01 18:00:36.296376186 -0400
--- /CMP/inchash.c	2015-06-02 10:15:12.440363220 -0400
*************** You should have received a copy of the G
*** 17,22 ****
--- 17,23 ----
  along with GCC; see the file COPYING3.  If not see
  <http://www.gnu.org/licenses/>.  */
  
+ #define EARLY_GENERATOR_FILE
  #ifdef GENERATOR_FILE
  #include "bconfig.h"
  #else
diff -cpN /numerical/read-md.c /CMP/read-md.c
*** /numerical/read-md.c	2015-06-01 18:00:36.302376030 -0400
--- /CMP/read-md.c	2015-06-02 10:15:12.450362962 -0400
*************** You should have received a copy of the G
*** 17,22 ****
--- 17,23 ----
  along with GCC; see the file COPYING3.  If not see
  <http://www.gnu.org/licenses/>.  */
  
+ #define EARLY_GENERATOR_FILE
  #include "bconfig.h"
  #include "system.h"
  #include "coretypes.h"
diff -cpN /numerical/rtl.h /CMP/rtl.h
*** /numerical/rtl.h	2015-06-01 18:00:36.303376004 -0400
--- /CMP/rtl.h	2015-06-02 10:15:12.454362858 -0400
*************** along with GCC; see the file COPYING3.
*** 20,37 ****
  #ifndef GCC_RTL_H
  #define GCC_RTL_H
  
- /* This file is occasionally included by generator files which expect
-    machmode.h and other files to exist and would not normally have been
-    included by coretypes.h.  */
- #ifdef GENERATOR_FILE
- #include "machmode.h"     
- #include "signop.h"
- #include "wide-int.h"
- #include "double-int.h"
- #include "real.h"
- #include "fixed-value.h"
- #endif  /* GENERATOR_FILE */
- 
  #include "statistics.h"
  #include "input.h"
  #include "vec.h"
--- 20,25 ----
diff -cpN /numerical/vec.c /CMP/vec.c
*** /numerical/vec.c	2015-06-01 18:00:36.314375718 -0400
--- /CMP/vec.c	2015-06-02 10:15:12.471362420 -0400
*************** along with GCC; see the file COPYING3.
*** 22,27 ****
--- 22,28 ----
  /* This file is compiled twice: once for the generator programs
     once for the compiler.  */
  #ifdef GENERATOR_FILE
+ #define EARLY_GENERATOR_FILE
  #include "bconfig.h"
  #else
  #include "config.h"

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

* Re: [patch] consolidate some includes into coretypes.h
  2015-06-02 14:19       ` Andrew MacLeod
@ 2015-06-03 11:53         ` Richard Biener
  2015-06-03 13:40           ` Andrew MacLeod
  0 siblings, 1 reply; 8+ messages in thread
From: Richard Biener @ 2015-06-03 11:53 UTC (permalink / raw)
  To: Andrew MacLeod; +Cc: gcc-patches

On Tue, Jun 2, 2015 at 4:19 PM, Andrew MacLeod <amacleod@redhat.com> wrote:
> On 06/02/2015 09:30 AM, Richard Biener wrote:
>>
>> On Tue, Jun 2, 2015 at 2:34 PM, Andrew MacLeod <amacleod@redhat.com>
>> wrote:
>>>
>>> On 06/02/2015 04:26 AM, Richard Biener wrote:
>>>>
>>>> On Mon, Jun 1, 2015 at 11:02 PM, Andrew MacLeod <amacleod@redhat.com>
>>>> wrote:
>>>>>
>>>>>
>>>>> Bootstraps from scratch on x86_64-unknown-linux-gnu with no new test
>>>>> regressions.  I also built it on all the config-list.mk targets with no
>>>>> additional compilation errors.
>>>>>
>>>>> OK for trunk?
>>>>
>>>> Generally the idea is sound (amend coretypes.h), but I don't like the
>>>> GCC_CONFIG_H guard, why does !GENERATOR_FILE not work?
>>>
>>> Target files also use coretypes.h. In particular, libgcc includes it and
>>> does not have GENERATOR_FILE set.  Rather than checking for GCC_CONFIG_H
>>> we
>>> could check
>>>
>>> #if !defined (GENERATOR_FILE) && !defined (USED_FOR_TARGET)
>>>
>>> I think that should work OK.
>>>>
>>>> Furthermore I don't like the special-casing in rtl.h, instead have
>>>> coretypes.h contain sth like
>>>>
>>>> #ifdef GENERATOR_FILE
>>>> ... rtl.h special-case
>>>> #else
>>>> ... GCC_CONFIG_H stuff
>>>> #endif
>>>>
>>>> Thanks,
>>>> Richard.
>>>
>>>
>>> This one is harder. I don't like the special case either, but you cant
>>> really figure it out in coretypes.h.  The problem comes from some
>>> generator
>>> files which compile rtl.c and and a couple of other files, and thus have
>>> GENERATOR_FILE set... These run after the initial set of generators so
>>> insn-modes.h and friends have been created, and these includes are now
>>> required.   the presence of rtl.h seems to be the the litmus test and if
>>> it
>>> occurs in the include chain after coretypes.h, then we'll need these
>>> files.
>>>
>>> I suppose you could just include those files in rtl.h directly without
>>> the
>>> guard...  it is probably the cleanest solution. Otherwise we'd either
>>> have
>>> to add a new identifying macro to a dozen generator files, or include
>>> these
>>> headers there, or some other such thing.
>>
>> Well, then include the requirements in the generator files instead?  It
>> looks
>> backwards to add to the includes in rtl.h.
>>
>> Richard.
>
> Except that it is rtl.h that actually has the compilation requirement.  I
> could put those includes in each of the generator files which require it,
> but the list is non-trivial:
> Each of these files can be compiled with bconfig.h instead of config.h, and
> they each include rtl.h which requires these headers:
> genattr.c
> genattr-common.c
> genattrtab.c
> genautomata.c
> gencodes.c
> genconditions.c
> genconfig.c
> genemit.c
> genextract.c
> genflags.c
> genmddump.c
> genopinit.c
> genoutput.c
> genpeep.c
> genpreds.c
> genrecog.c
> gensupport.c
> print-rtl.c
> read-rtl.c
> rtl.c
>
>
> so there are 20 files which require these headers, and there are 11 others
> which do not require rtl.h nor the headers (and will fail compile if they
> are included)
> gencheck.c
> genconstants.c
> genenums.c
> genmatch.c
> genmddeps.c
> genmodes.c
> ggc-none.c
> hash-table.c
> inchash.c
> read-md.c
> vec.c
>
>
> I suppose one could add something like:
> #define EARLY_GENERATOR
> in each of the 11 and check for that macro in coretypes.h instead of
> GENERATOR file.  ThIs appears to work fine:

I don't like that either ...

which of the includes are the problematic ones?  I guess only machmode.h
(and thus wide-int.h?)   Can't we just guard parts of rtl.h / wide-int.h
properly?

As a transitional measure the variant with the rtl.h includes dependent
on GENERATOR_FILE is ok.

Thanks,
RIchard.

> Andrew
>
>

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

* Re: [patch] consolidate some includes into coretypes.h
  2015-06-03 11:53         ` Richard Biener
@ 2015-06-03 13:40           ` Andrew MacLeod
  2015-06-04 12:29             ` Andrew MacLeod
  0 siblings, 1 reply; 8+ messages in thread
From: Andrew MacLeod @ 2015-06-03 13:40 UTC (permalink / raw)
  To: Richard Biener; +Cc: gcc-patches

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

On 06/03/2015 07:47 AM, Richard Biener wrote:
> On Tue, Jun 2, 2015 at 4:19 PM, Andrew MacLeod <amacleod@redhat.com> wrote:
>> On 06/02/2015 09:30 AM, Richard Biener wrote:
>>> On Tue, Jun 2, 2015 at 2:34 PM, Andrew MacLeod <amacleod@redhat.com>
>>> wrote:
>>>> On 06/02/2015 04:26 AM, Richard Biener wrote:
>>>>> On Mon, Jun 1, 2015 at 11:02 PM, Andrew MacLeod <amacleod@redhat.com>
>>>>> wrote:
>>>>>>
>>>>>> Bootstraps from scratch on x86_64-unknown-linux-gnu with no new test
>>>>>> regressions.  I also built it on all the config-list.mk targets with no
>>>>>> additional compilation errors.
>>>>>>
>>>>>> OK for trunk?
>>>>> Generally the idea is sound (amend coretypes.h), but I don't like the
>>>>> GCC_CONFIG_H guard, why does !GENERATOR_FILE not work?
>>>> Target files also use coretypes.h. In particular, libgcc includes it and
>>>> does not have GENERATOR_FILE set.  Rather than checking for GCC_CONFIG_H
>>>> we
>>>> could check
>>>>
>>>> #if !defined (GENERATOR_FILE) && !defined (USED_FOR_TARGET)
>>>>
>>>> I think that should work OK.
>>>>> Furthermore I don't like the special-casing in rtl.h, instead have
>>>>> coretypes.h contain sth like
>>>>>
>>>>> #ifdef GENERATOR_FILE
>>>>> ... rtl.h special-case
>>>>> #else
>>>>> ... GCC_CONFIG_H stuff
>>>>> #endif
>>>>>
>>>>> Thanks,
>>>>> Richard.
>>>>
>>>> This one is harder. I don't like the special case either, but you cant
>>>> really figure it out in coretypes.h.  The problem comes from some
>>>> generator
>>>> files which compile rtl.c and and a couple of other files, and thus have
>>>> GENERATOR_FILE set... These run after the initial set of generators so
>>>> insn-modes.h and friends have been created, and these includes are now
>>>> required.   the presence of rtl.h seems to be the the litmus test and if
>>>> it
>>>> occurs in the include chain after coretypes.h, then we'll need these
>>>> files.
>>>>
>>>> I suppose you could just include those files in rtl.h directly without
>>>> the
>>>> guard...  it is probably the cleanest solution. Otherwise we'd either
>>>> have
>>>> to add a new identifying macro to a dozen generator files, or include
>>>> these
>>>> headers there, or some other such thing.
>>> Well, then include the requirements in the generator files instead?  It
>>> looks
>>> backwards to add to the includes in rtl.h.
>>>
>>> Richard.
>> Except that it is rtl.h that actually has the compilation requirement.  I
>> could put those includes in each of the generator files which require it,
>> but the list is non-trivial:
>> Each of these files can be compiled with bconfig.h instead of config.h, and
>> they each include rtl.h which requires these headers:
>> genattr.c
>> genattr-common.c
>> genattrtab.c
>> genautomata.c
>> gencodes.c
>> genconditions.c
>> genconfig.c
>> genemit.c
>> genextract.c
>> genflags.c
>> genmddump.c
>> genopinit.c
>> genoutput.c
>> genpeep.c
>> genpreds.c
>> genrecog.c
>> gensupport.c
>> print-rtl.c
>> read-rtl.c
>> rtl.c
>>
>>
>> so there are 20 files which require these headers, and there are 11 others
>> which do not require rtl.h nor the headers (and will fail compile if they
>> are included)
>> gencheck.c
>> genconstants.c
>> genenums.c
>> genmatch.c
>> genmddeps.c
>> genmodes.c
>> ggc-none.c
>> hash-table.c
>> inchash.c
>> read-md.c
>> vec.c
>>
>>
>> I suppose one could add something like:
>> #define EARLY_GENERATOR
>> in each of the 11 and check for that macro in coretypes.h instead of
>> GENERATOR file.  ThIs appears to work fine:
> I don't like that either ...
>
> which of the includes are the problematic ones?  I guess only machmode.h
> (and thus wide-int.h?)   Can't we just guard parts of rtl.h / wide-int.h
> properly?
>
> As a transitional measure the variant with the rtl.h includes dependent
> on GENERATOR_FILE is ok.
>
Hmm. Its not nearly as bad as I expected.  rtl.h will compile if I

1) provide a dummy CONST_DOUBLE_FORMAT definition like gengtype.c does
2) don't compile the wi:: specializations, and
3) don't put struct real_value or struct fixed_value in the field union 
of struct rtx_def

This appears to bootstrap from scratch, at least on x86... I don't know 
exactly what all those generator files do with RTL, but they appear to 
work without double and real support, so I guess it isn't being used. 
That really is just a guess tho :-P I can imagine all kinds of nasty 
things :-) These files did include the support previously.

What do you think?   I'm running the testsuite right now.  If it passes 
everything,   do you want to go ahead with this version?

Andrew

[-- Attachment #2: num7.diff --]
[-- Type: text/x-patch, Size: 1424 bytes --]

Index: rtl.h
===================================================================
--- rtl.h	(revision 223875)
+++ rtl.h	(working copy)
@@ -21,14 +21,10 @@
 #define GCC_RTL_H
 
 #include "statistics.h"
-#include "machmode.h"
 #include "input.h"
-#include "real.h"
 #include "vec.h"
-#include "fixed-value.h"
 #include "alias.h"
 #include "hashtab.h"
-#include "wide-int.h"
 #include "flags.h"
 #include "is-a.h"
 
@@ -55,6 +51,8 @@
 /* Similar, but since generator files get more entries... */
 #ifdef GENERATOR_FILE
 # define NON_GENERATOR_NUM_RTX_CODE ((int) MATCH_OPERAND)
+/* Needed to compile, but won't be used. */
+#define CONST_DOUBLE_FORMAT "ww"
 #endif
 
 /* Register Transfer Language EXPRESSIONS CODE CLASSES */
@@ -409,8 +407,10 @@
     HOST_WIDE_INT hwint[1];
     struct reg_info reg;
     struct block_symbol block_sym;
+#ifndef GENERATOR_FILE
     struct real_value rv;
     struct fixed_value fv;
+#endif
     struct hwivec_def hwiv;
   } GTY ((special ("rtx_def"), desc ("GET_CODE (&%0)"))) u;
 };
@@ -2056,6 +2056,7 @@
    integer constants, this should go away and then just pass an rtx in.  */
 typedef std::pair <rtx, machine_mode> rtx_mode_t;
 
+#ifndef GENERATOR_FILE
 namespace wi
 {
   template <>
@@ -2138,6 +2139,7 @@
 {
   return max_value (GET_MODE_PRECISION (mode), sgn);
 }
+#endif /* GENERATOR_FILE */
 
 extern void init_rtlanal (void);
 extern int rtx_cost (rtx, enum rtx_code, int, bool);

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

* Re: [patch] consolidate some includes into coretypes.h
  2015-06-03 13:40           ` Andrew MacLeod
@ 2015-06-04 12:29             ` Andrew MacLeod
  0 siblings, 0 replies; 8+ messages in thread
From: Andrew MacLeod @ 2015-06-04 12:29 UTC (permalink / raw)
  To: Richard Biener; +Cc: gcc-patches

On 06/03/2015 09:36 AM, Andrew MacLeod wrote:
> On 06/03/2015 07:47 AM, Richard Biener wrote:
>> On Tue, Jun 2, 2015 at 4:19 PM, Andrew MacLeod <amacleod@redhat.com> 
>> wrote:
>>> On 06/02/2015 09:30 AM, Richard Biener wrote:
>>>> On Tue, Jun 2, 2015 at 2:34 PM, Andrew MacLeod <amacleod@redhat.com>
>>>> wrote:
>>>>> On 06/02/2015 04:26 AM, Richard Biener wrote:
>>>>>> On Mon, Jun 1, 2015 at 11:02 PM, Andrew MacLeod 
>>>>>> <amacleod@redhat.com>
>>>>>> wrote:
>>>>>>>
>>>>>>> Bootstraps from scratch on x86_64-unknown-linux-gnu with no new 
>>>>>>> test
>>>>>>> regressions.  I also built it on all the config-list.mk targets 
>>>>>>> with no
>>>>>>> additional compilation errors.
>>>>>>>
>>>>>>> OK for trunk?
>>>>>> Generally the idea is sound (amend coretypes.h), but I don't like 
>>>>>> the
>>>>>> GCC_CONFIG_H guard, why does !GENERATOR_FILE not work?
>>>>> Target files also use coretypes.h. In particular, libgcc includes 
>>>>> it and
>>>>> does not have GENERATOR_FILE set.  Rather than checking for 
>>>>> GCC_CONFIG_H
>>>>> we
>>>>> could check
>>>>>
>>>>> #if !defined (GENERATOR_FILE) && !defined (USED_FOR_TARGET)
>>>>>
>>>>> I think that should work OK.
>>>>>> Furthermore I don't like the special-casing in rtl.h, instead have
>>>>>> coretypes.h contain sth like
>>>>>>
>>>>>> #ifdef GENERATOR_FILE
>>>>>> ... rtl.h special-case
>>>>>> #else
>>>>>> ... GCC_CONFIG_H stuff
>>>>>> #endif
>>>>>>
>>>>>> Thanks,
>>>>>> Richard.
>>>>>
>>>>> This one is harder. I don't like the special case either, but you 
>>>>> cant
>>>>> really figure it out in coretypes.h.  The problem comes from some
>>>>> generator
>>>>> files which compile rtl.c and and a couple of other files, and 
>>>>> thus have
>>>>> GENERATOR_FILE set... These run after the initial set of 
>>>>> generators so
>>>>> insn-modes.h and friends have been created, and these includes are 
>>>>> now
>>>>> required.   the presence of rtl.h seems to be the the litmus test 
>>>>> and if
>>>>> it
>>>>> occurs in the include chain after coretypes.h, then we'll need these
>>>>> files.
>>>>>
>>>>> I suppose you could just include those files in rtl.h directly 
>>>>> without
>>>>> the
>>>>> guard...  it is probably the cleanest solution. Otherwise we'd either
>>>>> have
>>>>> to add a new identifying macro to a dozen generator files, or include
>>>>> these
>>>>> headers there, or some other such thing.
>>>> Well, then include the requirements in the generator files 
>>>> instead?  It
>>>> looks
>>>> backwards to add to the includes in rtl.h.
>>>>
>>>> Richard.
>>> Except that it is rtl.h that actually has the compilation 
>>> requirement.  I
>>> could put those includes in each of the generator files which 
>>> require it,
>>> but the list is non-trivial:
>>> Each of these files can be compiled with bconfig.h instead of 
>>> config.h, and
>>> they each include rtl.h which requires these headers:
>>> genattr.c
>>> genattr-common.c
>>> genattrtab.c
>>> genautomata.c
>>> gencodes.c
>>> genconditions.c
>>> genconfig.c
>>> genemit.c
>>> genextract.c
>>> genflags.c
>>> genmddump.c
>>> genopinit.c
>>> genoutput.c
>>> genpeep.c
>>> genpreds.c
>>> genrecog.c
>>> gensupport.c
>>> print-rtl.c
>>> read-rtl.c
>>> rtl.c
>>>
>>>
>>> so there are 20 files which require these headers, and there are 11 
>>> others
>>> which do not require rtl.h nor the headers (and will fail compile if 
>>> they
>>> are included)
>>> gencheck.c
>>> genconstants.c
>>> genenums.c
>>> genmatch.c
>>> genmddeps.c
>>> genmodes.c
>>> ggc-none.c
>>> hash-table.c
>>> inchash.c
>>> read-md.c
>>> vec.c
>>>
>>>
>>> I suppose one could add something like:
>>> #define EARLY_GENERATOR
>>> in each of the 11 and check for that macro in coretypes.h instead of
>>> GENERATOR file.  ThIs appears to work fine:
>> I don't like that either ...
>>
>> which of the includes are the problematic ones?  I guess only machmode.h
>> (and thus wide-int.h?)   Can't we just guard parts of rtl.h / wide-int.h
>> properly?
>>
>> As a transitional measure the variant with the rtl.h includes dependent
>> on GENERATOR_FILE is ok.
>>
> Hmm. Its not nearly as bad as I expected.  rtl.h will compile if I
>
> 1) provide a dummy CONST_DOUBLE_FORMAT definition like gengtype.c does
> 2) don't compile the wi:: specializations, and
> 3) don't put struct real_value or struct fixed_value in the field 
> union of struct rtx_def
>
> This appears to bootstrap from scratch, at least on x86... I don't 
> know exactly what all those generator files do with RTL, but they 
> appear to work without double and real support, so I guess it isn't 
> being used. That really is just a guess tho :-P I can imagine all 
> kinds of nasty things :-) These files did include the support previously.
>
> What do you think?   I'm running the testsuite right now.  If it 
> passes everything,   do you want to go ahead with this version?
>
> Andrew
Never mind, this change blew up all over a bunch of targets, and it was 
not so simple to fix...  Reverting back to the original  guarded rtl.h, 
and i'll check it in  after all the runs complete cleanly

Andrew

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

end of thread, other threads:[~2015-06-04 11:28 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-06-01 21:09 [patch] consolidate some includes into coretypes.h Andrew MacLeod
2015-06-02  8:28 ` Richard Biener
2015-06-02 12:47   ` Andrew MacLeod
2015-06-02 13:49     ` Richard Biener
2015-06-02 14:19       ` Andrew MacLeod
2015-06-03 11:53         ` Richard Biener
2015-06-03 13:40           ` Andrew MacLeod
2015-06-04 12:29             ` 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).