public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH 1/8] add default for NO_FUNCTION_CSE
  2015-04-27  5:56 [PATCH 0/8] remove more conditional compilation tbsaunde+gcc
@ 2015-04-27  5:56 ` tbsaunde+gcc
  2015-04-27  5:56 ` [PATCH 3/8] add default for PCC_BITFIELD_TYPE_MATTERS tbsaunde+gcc
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 31+ messages in thread
From: tbsaunde+gcc @ 2015-04-27  5:56 UTC (permalink / raw)
  To: gcc-patches

From: Trevor Saunders <tbsaunde+gcc@tbsaunde.org>

gcc/ChangeLog:

2015-04-26  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>

	* calls.c (prepare_call_address): Remove ifdef NO_FUNCTION_CSE.
	* cse.c (fold_rtx): Likewise.
	* config/alpha/alpha.h (NO_FUNCTION_CSE): Define to 1.
	* config/arc/arc.h (NO_FUNCTION_CSE): Likewise.
	* config/avr/avr.h (NO_FUNCTION_CSE): Likewise.
	* config/cr16/cr16.h (NO_FUNCTION_CSE): Likewise.
	* config/epiphany/epiphany.h (NO_FUNCTION_CSE): Likewise.
	* config/frv/frv.h (NO_FUNCTION_CSE): Likewise.
	* config/h8300/h8300.h (NO_FUNCTION_CSE): Likewise.
	* config/i386/i386.h (NO_FUNCTION_CSE): Likewise.
	* config/ia64/ia64.h (NO_FUNCTION_CSE): Likewise.
	* config/lm32/lm32.h (enum reg_class) (NO_FUNCTION_CSE):
	* Likewise.
	* config/m32r/m32r.h (NO_FUNCTION_CSE): Likewise.
	* config/mep/mep.h (NO_FUNCTION_CSE): Likewise.
	* config/mn10300/mn10300.h (NO_FUNCTION_CSE): Likewise.
	* config/nds32/nds32.h (NO_FUNCTION_CSE): Likewise.
	* config/nios2/nios2.h (NO_FUNCTION_CSE): Likewise.
	* config/pa/pa.h (NO_FUNCTION_CSE): Likewise.
	* config/rs6000/rs6000.h (NO_FUNCTION_CSE): Likewise.
	* config/s390/s390.h (NO_FUNCTION_CSE): Likewise.
	* config/sparc/sparc.h (NO_FUNCTION_CSE): Likewise.
	* config/spu/spu.h (NO_FUNCTION_CSE): Likewise.
	* config/stormy16/stormy16.h (NO_FUNCTION_CSE): Likewise.
	* config/v850/v850.h (NO_FUNCTION_CSE): Likewise.
	* defaults.h (NO_FUNCTION_CSE): Provide default definition to 0.
	* doc/tm.texi: Regenerate.
	* doc/tm.texi.in: Document NO_FUNCTION_CSE is always defined to
	either true or false.
---
 gcc/ChangeLog                  | 32 ++++++++++++++++++++++++++++++++
 gcc/calls.c                    |  4 +---
 gcc/config/alpha/alpha.h       |  2 +-
 gcc/config/arc/arc.h           |  2 +-
 gcc/config/avr/avr.h           |  2 +-
 gcc/config/cr16/cr16.h         |  2 +-
 gcc/config/epiphany/epiphany.h |  2 +-
 gcc/config/frv/frv.h           |  2 +-
 gcc/config/h8300/h8300.h       |  2 +-
 gcc/config/i386/i386.h         |  2 +-
 gcc/config/ia64/ia64.h         |  2 +-
 gcc/config/lm32/lm32.h         |  2 +-
 gcc/config/m32r/m32r.h         |  2 +-
 gcc/config/mep/mep.h           |  2 +-
 gcc/config/mn10300/mn10300.h   |  2 +-
 gcc/config/nds32/nds32.h       |  2 +-
 gcc/config/nios2/nios2.h       |  2 +-
 gcc/config/pa/pa.h             |  2 +-
 gcc/config/rs6000/rs6000.h     |  2 +-
 gcc/config/s390/s390.h         |  2 +-
 gcc/config/sparc/sparc.h       |  2 +-
 gcc/config/spu/spu.h           |  2 +-
 gcc/config/stormy16/stormy16.h |  2 +-
 gcc/config/v850/v850.h         |  2 +-
 gcc/cse.c                      |  4 +---
 gcc/defaults.h                 |  4 ++++
 gcc/doc/tm.texi                |  2 +-
 gcc/doc/tm.texi.in             |  2 +-
 28 files changed, 62 insertions(+), 30 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b1c5356..194e1c4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,35 @@
+2015-04-26  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>
+
+	* calls.c (prepare_call_address): Remove ifdef NO_FUNCTION_CSE.
+	* cse.c (fold_rtx): Likewise.
+	* config/alpha/alpha.h (NO_FUNCTION_CSE): Define to 1.
+	* config/arc/arc.h (NO_FUNCTION_CSE): Likewise.
+	* config/avr/avr.h (NO_FUNCTION_CSE): Likewise.
+	* config/cr16/cr16.h (NO_FUNCTION_CSE): Likewise.
+	* config/epiphany/epiphany.h (NO_FUNCTION_CSE): Likewise.
+	* config/frv/frv.h (NO_FUNCTION_CSE): Likewise.
+	* config/h8300/h8300.h (NO_FUNCTION_CSE): Likewise.
+	* config/i386/i386.h (NO_FUNCTION_CSE): Likewise.
+	* config/ia64/ia64.h (NO_FUNCTION_CSE): Likewise.
+	* config/lm32/lm32.h (enum reg_class) (NO_FUNCTION_CSE):
+	* Likewise.
+	* config/m32r/m32r.h (NO_FUNCTION_CSE): Likewise.
+	* config/mep/mep.h (NO_FUNCTION_CSE): Likewise.
+	* config/mn10300/mn10300.h (NO_FUNCTION_CSE): Likewise.
+	* config/nds32/nds32.h (NO_FUNCTION_CSE): Likewise.
+	* config/nios2/nios2.h (NO_FUNCTION_CSE): Likewise.
+	* config/pa/pa.h (NO_FUNCTION_CSE): Likewise.
+	* config/rs6000/rs6000.h (NO_FUNCTION_CSE): Likewise.
+	* config/s390/s390.h (NO_FUNCTION_CSE): Likewise.
+	* config/sparc/sparc.h (NO_FUNCTION_CSE): Likewise.
+	* config/spu/spu.h (NO_FUNCTION_CSE): Likewise.
+	* config/stormy16/stormy16.h (NO_FUNCTION_CSE): Likewise.
+	* config/v850/v850.h (NO_FUNCTION_CSE): Likewise.
+	* defaults.h (NO_FUNCTION_CSE): Provide default definition to 0.
+	* doc/tm.texi: Regenerate.
+	* doc/tm.texi.in: Document NO_FUNCTION_CSE is always defined to
+	either true or false.
+
 2015-04-24  Thomas Preud'homme  <thomas.preudhomme@arm.com>
 
 	* config/arm/unknown-elf.h (ASM_OUTPUT_ALIGNED_DECL_LOCAL): fix
diff --git a/gcc/calls.c b/gcc/calls.c
index 3be7ca5..a6cd33b 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -227,10 +227,8 @@ prepare_call_address (tree fndecl_or_type, rtx funexp, rtx static_chain_value,
 	      : memory_address (FUNCTION_MODE, funexp));
   else if (! sibcallp)
     {
-#ifndef NO_FUNCTION_CSE
-      if (optimize && ! flag_no_function_cse)
+      if (!NO_FUNCTION_CSE && optimize && ! flag_no_function_cse)
 	funexp = force_reg (Pmode, funexp);
-#endif
     }
 
   if (static_chain_value != 0
diff --git a/gcc/config/alpha/alpha.h b/gcc/config/alpha/alpha.h
index d218129..fb3849a 100644
--- a/gcc/config/alpha/alpha.h
+++ b/gcc/config/alpha/alpha.h
@@ -933,7 +933,7 @@ do {									     \
    then copy it into a register, thus actually letting the address be
    cse'ed.  */
 
-#define NO_FUNCTION_CSE
+#define NO_FUNCTION_CSE 1
 
 /* Define this to be nonzero if shift instructions ignore all but the low-order
    few bits.  */
diff --git a/gcc/config/arc/arc.h b/gcc/config/arc/arc.h
index 3be5c93..66965b0 100644
--- a/gcc/config/arc/arc.h
+++ b/gcc/config/arc/arc.h
@@ -1108,7 +1108,7 @@ arc_select_cc_mode (OP, X, Y)
 /* Define this macro if it is as good or better to call a constant
    function address than to call an address kept in a register.  */
 /* On the ARC, calling through registers is slow.  */
-#define NO_FUNCTION_CSE
+#define NO_FUNCTION_CSE 1
 
 /* Section selection.  */
 /* WARNING: These section names also appear in dwarfout.c.  */
diff --git a/gcc/config/avr/avr.h b/gcc/config/avr/avr.h
index 9963766..d8bee77 100644
--- a/gcc/config/avr/avr.h
+++ b/gcc/config/avr/avr.h
@@ -362,7 +362,7 @@ typedef struct avr_args
 
 #define SLOW_BYTE_ACCESS 0
 
-#define NO_FUNCTION_CSE
+#define NO_FUNCTION_CSE 1
 
 #define REGISTER_TARGET_PRAGMAS()                                       \
   do {                                                                  \
diff --git a/gcc/config/cr16/cr16.h b/gcc/config/cr16/cr16.h
index e00802d..e5df6f9 100644
--- a/gcc/config/cr16/cr16.h
+++ b/gcc/config/cr16/cr16.h
@@ -467,7 +467,7 @@ struct cumulative_args
 
 /* It is as good or better to call a constant function address than to
    call an address kept in a register.  */
-#define NO_FUNCTION_CSE
+#define NO_FUNCTION_CSE 1
 
 /* Dividing the output into sections.  */
 
diff --git a/gcc/config/epiphany/epiphany.h b/gcc/config/epiphany/epiphany.h
index ca8fa19..dab368c 100644
--- a/gcc/config/epiphany/epiphany.h
+++ b/gcc/config/epiphany/epiphany.h
@@ -692,7 +692,7 @@ typedef struct GTY (()) machine_function
 /* Define this macro if it is as good or better to call a constant
    function address than to call an address kept in a register.  */
 /* On the EPIPHANY, calling through registers is slow.  */
-#define NO_FUNCTION_CSE
+#define NO_FUNCTION_CSE 1
 \f
 /* Section selection.  */
 /* WARNING: These section names also appear in dwarf2out.c.  */
diff --git a/gcc/config/frv/frv.h b/gcc/config/frv/frv.h
index d896445..394572c 100644
--- a/gcc/config/frv/frv.h
+++ b/gcc/config/frv/frv.h
@@ -1539,7 +1539,7 @@ __asm__("\n"								\
 
 /* Define this macro if it is as good or better to call a constant function
    address than to call an address kept in a register.  */
-#define NO_FUNCTION_CSE
+#define NO_FUNCTION_CSE 1
 
 \f
 /* Dividing the output into sections.  */
diff --git a/gcc/config/h8300/h8300.h b/gcc/config/h8300/h8300.h
index 2a47aa8..2770a39 100644
--- a/gcc/config/h8300/h8300.h
+++ b/gcc/config/h8300/h8300.h
@@ -136,7 +136,7 @@ extern const char * const *h8_reg_names;
    Calls through a register are cheaper than calls to named
    functions; however, the register pressure this causes makes
    CSEing of function addresses generally a lose.  */
-#define NO_FUNCTION_CSE
+#define NO_FUNCTION_CSE 1
 \f
 /* Target machine storage layout */
 
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
index d931330..9148459 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -2015,7 +2015,7 @@ do {							\
    Desirable on the 386 because a CALL with a constant address is
    faster than one with a register address.  */
 
-#define NO_FUNCTION_CSE
+#define NO_FUNCTION_CSE 1
 \f
 /* Given a comparison code (EQ, NE, etc.) and the first operand of a COMPARE,
    return the mode to be used for the comparison.
diff --git a/gcc/config/ia64/ia64.h b/gcc/config/ia64/ia64.h
index b3857ba..943faf9 100644
--- a/gcc/config/ia64/ia64.h
+++ b/gcc/config/ia64/ia64.h
@@ -1178,7 +1178,7 @@ do {									\
    Indirect function calls are more expensive that direct function calls, so
    don't cse function addresses.  */
 
-#define NO_FUNCTION_CSE
+#define NO_FUNCTION_CSE 1
 
 \f
 /* Dividing the output into sections.  */
diff --git a/gcc/config/lm32/lm32.h b/gcc/config/lm32/lm32.h
index 85185c4..04ff7c8 100644
--- a/gcc/config/lm32/lm32.h
+++ b/gcc/config/lm32/lm32.h
@@ -354,7 +354,7 @@ enum reg_class
 
 #define SLOW_BYTE_ACCESS 1
 
-#define NO_FUNCTION_CSE
+#define NO_FUNCTION_CSE 1
 
 #define BRANCH_COST(speed_p, predictable_p) 4
 
diff --git a/gcc/config/m32r/m32r.h b/gcc/config/m32r/m32r.h
index 9eb673d..ee0c447 100644
--- a/gcc/config/m32r/m32r.h
+++ b/gcc/config/m32r/m32r.h
@@ -767,7 +767,7 @@ L2:     .word STATIC
 
 /* Define this macro if it is as good or better to call a constant
    function address than to call an address kept in a register.  */
-#define NO_FUNCTION_CSE
+#define NO_FUNCTION_CSE 1
 \f
 /* Section selection.  */
 
diff --git a/gcc/config/mep/mep.h b/gcc/config/mep/mep.h
index d59118c..861189d 100644
--- a/gcc/config/mep/mep.h
+++ b/gcc/config/mep/mep.h
@@ -554,7 +554,7 @@ typedef struct
 
 /* Define this macro if it is as good or better to call a constant function
    address than to call an address kept in a register.  */
-#define NO_FUNCTION_CSE 
+#define NO_FUNCTION_CSE 1
 
 \f
 #define TEXT_SECTION_ASM_OP "\t.text\n\t.core"
diff --git a/gcc/config/mn10300/mn10300.h b/gcc/config/mn10300/mn10300.h
index 3609da8..d41dc4e 100644
--- a/gcc/config/mn10300/mn10300.h
+++ b/gcc/config/mn10300/mn10300.h
@@ -579,7 +579,7 @@ do {									     \
    than accessing full words.  */
 #define SLOW_BYTE_ACCESS 1
 
-#define NO_FUNCTION_CSE
+#define NO_FUNCTION_CSE 1
 
 /* According expr.c, a value of around 6 should minimize code size, and
    for the MN10300 series, that's our primary concern.  */
diff --git a/gcc/config/nds32/nds32.h b/gcc/config/nds32/nds32.h
index 3c7a7b3..963b3a2 100644
--- a/gcc/config/nds32/nds32.h
+++ b/gcc/config/nds32/nds32.h
@@ -831,7 +831,7 @@ enum reg_class
 
 #define SLOW_BYTE_ACCESS 1
 
-#define NO_FUNCTION_CSE
+#define NO_FUNCTION_CSE 1
 
 \f
 /* Adjusting the Instruction Scheduler.  */
diff --git a/gcc/config/nios2/nios2.h b/gcc/config/nios2/nios2.h
index 117983d..193845b 100644
--- a/gcc/config/nios2/nios2.h
+++ b/gcc/config/nios2/nios2.h
@@ -306,7 +306,7 @@ typedef struct nios2_args
 
 /* It is as good to call a constant function address as to call an address
    kept in a register.  */
-#define NO_FUNCTION_CSE
+#define NO_FUNCTION_CSE 1
 
 /* Position independent code.  */
 
diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h
index 8314ba3..6c48883 100644
--- a/gcc/config/pa/pa.h
+++ b/gcc/config/pa/pa.h
@@ -1048,7 +1048,7 @@ do {									     \
    shouldn't be put through pseudo regs where they can be cse'd.
    Desirable on machines where ordinary constants are expensive
    but a CALL with constant address is cheap.  */
-#define NO_FUNCTION_CSE
+#define NO_FUNCTION_CSE 1
 
 /* Define this to be nonzero if shift instructions ignore all but the low-order
    few bits.  */
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index b13df1b..f9e4f09 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -2080,7 +2080,7 @@ extern unsigned rs6000_pmode;
    shouldn't be put through pseudo regs where they can be cse'd.
    Desirable on machines where ordinary constants are expensive
    but a CALL with constant address is cheap.  */
-#define NO_FUNCTION_CSE
+#define NO_FUNCTION_CSE 1
 
 /* Define this to be nonzero if shift instructions ignore all but the low-order
    few bits.
diff --git a/gcc/config/s390/s390.h b/gcc/config/s390/s390.h
index 4953075..f887409 100644
--- a/gcc/config/s390/s390.h
+++ b/gcc/config/s390/s390.h
@@ -745,7 +745,7 @@ do {									\
 #define MAX_MOVE_MAX 16
 
 /* Don't perform CSE on function addresses.  */
-#define NO_FUNCTION_CSE
+#define NO_FUNCTION_CSE 1
 
 /* This value is used in tree-sra to decide whether it might benefical
    to split a struct move into several word-size moves.  For S/390
diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h
index 27ad748..9b64ff4 100644
--- a/gcc/config/sparc/sparc.h
+++ b/gcc/config/sparc/sparc.h
@@ -1518,7 +1518,7 @@ do {									   \
    shouldn't be put through pseudo regs where they can be cse'd.
    Desirable on machines where ordinary constants are expensive
    but a CALL with constant address is cheap.  */
-#define NO_FUNCTION_CSE
+#define NO_FUNCTION_CSE 1
 
 /* The _Q_* comparison libcalls return booleans.  */
 #define FLOAT_LIB_COMPARE_RETURNS_BOOL(MODE, COMPARISON) ((MODE) == TFmode)
diff --git a/gcc/config/spu/spu.h b/gcc/config/spu/spu.h
index de26d2a..24d8047 100644
--- a/gcc/config/spu/spu.h
+++ b/gcc/config/spu/spu.h
@@ -407,7 +407,7 @@ do {									\
 
 #define MOVE_RATIO(speed) ((speed)? 32 : 4)
 
-#define NO_FUNCTION_CSE
+#define NO_FUNCTION_CSE 1
 
 \f
 /* Sections */
diff --git a/gcc/config/stormy16/stormy16.h b/gcc/config/stormy16/stormy16.h
index 338c08e..38a2a06 100644
--- a/gcc/config/stormy16/stormy16.h
+++ b/gcc/config/stormy16/stormy16.h
@@ -345,7 +345,7 @@ enum reg_class
 
 #define SLOW_BYTE_ACCESS 0
 
-#define NO_FUNCTION_CSE
+#define NO_FUNCTION_CSE 1
 
 \f
 /* Dividing the output into sections.  */
diff --git a/gcc/config/v850/v850.h b/gcc/config/v850/v850.h
index 508ef85..2f0118c 100644
--- a/gcc/config/v850/v850.h
+++ b/gcc/config/v850/v850.h
@@ -710,7 +710,7 @@ do {									\
 
 /* Indirect calls are expensive, never turn a direct call
    into an indirect call.  */
-#define NO_FUNCTION_CSE
+#define NO_FUNCTION_CSE 1
 
 /* The four different data regions on the v850.  */
 typedef enum 
diff --git a/gcc/cse.c b/gcc/cse.c
index 88a15e4..15eb33e 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -3183,12 +3183,10 @@ fold_rtx (rtx x, rtx_insn *insn)
 	}
       return x;
 
-#ifdef NO_FUNCTION_CSE
     case CALL:
-      if (CONSTANT_P (XEXP (XEXP (x, 0), 0)))
+      if (NO_FUNCTION_CSE && CONSTANT_P (XEXP (XEXP (x, 0), 0)))
 	return x;
       break;
-#endif
 
     /* Anything else goes through the loop below.  */
     default:
diff --git a/gcc/defaults.h b/gcc/defaults.h
index cafcb1e..4ae5d98 100644
--- a/gcc/defaults.h
+++ b/gcc/defaults.h
@@ -1209,6 +1209,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #define INSN_REFERENCES_ARE_DELAYED(INSN) false
 #endif
 
+#ifndef NO_FUNCTION_CSE
+#define NO_FUNCTION_CSE false
+#endif
+
 #ifdef GCC_INSN_FLAGS_H
 /* Dependent default target macro definitions
 
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index 6c5bfab..619d7e0 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -6344,7 +6344,7 @@ thing to use for a given mode.  Defaults to the value of
 @end defmac
 
 @defmac NO_FUNCTION_CSE
-Define this macro if it is as good or better to call a constant
+Define this macro to be true if it is as good or better to call a constant
 function address than to call an address kept in a register.
 @end defmac
 
diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in
index 8d6dfbc..6ff7aed 100644
--- a/gcc/doc/tm.texi.in
+++ b/gcc/doc/tm.texi.in
@@ -4708,7 +4708,7 @@ thing to use for a given mode.  Defaults to the value of
 @end defmac
 
 @defmac NO_FUNCTION_CSE
-Define this macro if it is as good or better to call a constant
+Define this macro to be true if it is as good or better to call a constant
 function address than to call an address kept in a register.
 @end defmac
 
-- 
2.3.0.80.g18d0fec.dirty

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

* [PATCH 3/8] add default for PCC_BITFIELD_TYPE_MATTERS
  2015-04-27  5:56 [PATCH 0/8] remove more conditional compilation tbsaunde+gcc
  2015-04-27  5:56 ` [PATCH 1/8] add default for NO_FUNCTION_CSE tbsaunde+gcc
@ 2015-04-27  5:56 ` tbsaunde+gcc
  2015-04-29 13:18   ` Andreas Schwab
  2015-04-27  5:57 ` [PATCH 4/8] add default for EPILOGUE_USES tbsaunde+gcc
                   ` (5 subsequent siblings)
  7 siblings, 1 reply; 31+ messages in thread
From: tbsaunde+gcc @ 2015-04-27  5:56 UTC (permalink / raw)
  To: gcc-patches

From: Trevor Saunders <tbsaunde+gcc@tbsaunde.org>

gcc/ChangeLog:

2015-04-27  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>

	* defaults.h (PCC_BITFIELD_TYPE_MATTERS): Add default definition
	to false.
	* dwarf2out.c (field_byte_offset): REmove check if
	PCC_BITFIELD_TYPE_MATTERS is defined.
	* stor-layout.c (layout_decl): Likewise.
	(update_alignment_for_field): Likewise.
	(place_field): Likewise.

gcc/cp/ChangeLog:

2015-04-27  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>

	* class.c (layout_class_type): Remove check if
	PCC_BITFIELD_TYPE_MATTERS is defined.
---
 gcc/cp/class.c    |  4 ++--
 gcc/defaults.h    |  4 ++++
 gcc/dwarf2out.c   |  2 --
 gcc/stor-layout.c | 10 ----------
 4 files changed, 6 insertions(+), 14 deletions(-)

diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index d80d312e..be5f5c2 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -6258,7 +6258,7 @@ layout_class_type (tree t, tree *virtuals_p)
 		padding = size_binop (MINUS_EXPR, DECL_SIZE (field),
 				      TYPE_SIZE (integer_type));
 	    }
-#ifdef PCC_BITFIELD_TYPE_MATTERS
+
 	  /* An unnamed bitfield does not normally affect the
 	     alignment of the containing class on a target where
 	     PCC_BITFIELD_TYPE_MATTERS.  But, the C++ ABI does not
@@ -6270,7 +6270,7 @@ layout_class_type (tree t, tree *virtuals_p)
 	      was_unnamed_p = true;
 	      DECL_NAME (field) = make_anon_name ();
 	    }
-#endif
+
 	  DECL_SIZE (field) = TYPE_SIZE (integer_type);
 	  DECL_ALIGN (field) = TYPE_ALIGN (integer_type);
 	  DECL_USER_ALIGN (field) = TYPE_USER_ALIGN (integer_type);
diff --git a/gcc/defaults.h b/gcc/defaults.h
index 7e04be2..0af7a02 100644
--- a/gcc/defaults.h
+++ b/gcc/defaults.h
@@ -1201,6 +1201,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #define DEFAULT_PCC_STRUCT_RETURN 1
 #endif
 
+#ifndef PCC_BITFIELD_TYPE_MATTERS
+#define PCC_BITFIELD_TYPE_MATTERS false
+#endif
+
 #ifndef INSN_SETS_ARE_DELAYED
 #define INSN_SETS_ARE_DELAYED(INSN) false
 #endif
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index a04e6f6..8591cd7 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -15120,7 +15120,6 @@ field_byte_offset (const_tree decl)
 
   bitpos_int = wi::to_offset (bit_position (decl));
 
-#ifdef PCC_BITFIELD_TYPE_MATTERS
   if (PCC_BITFIELD_TYPE_MATTERS)
     {
       tree type;
@@ -15218,7 +15217,6 @@ field_byte_offset (const_tree decl)
 	}
     }
   else
-#endif /* PCC_BITFIELD_TYPE_MATTERS */
     object_offset_in_bits = bitpos_int;
 
   object_offset_in_bytes
diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c
index f18f1ac..6150d85 100644
--- a/gcc/stor-layout.c
+++ b/gcc/stor-layout.c
@@ -85,10 +85,8 @@ static tree self_referential_size (tree);
 static void finalize_record_size (record_layout_info);
 static void finalize_type_size (tree);
 static void place_union_field (record_layout_info, tree);
-#if defined (PCC_BITFIELD_TYPE_MATTERS) || defined (BITFIELD_NBYTES_LIMITED)
 static int excess_unit_span (HOST_WIDE_INT, HOST_WIDE_INT, HOST_WIDE_INT,
 			     HOST_WIDE_INT, tree);
-#endif
 extern void debug_rli (record_layout_info);
 \f
 /* Show that REFERENCE_TYPES are internal and should use address_mode.
@@ -698,11 +696,9 @@ layout_decl (tree decl, unsigned int known_align)
 	    {
 	      zero_bitfield = true;
 	      packed_p = false;
-#ifdef PCC_BITFIELD_TYPE_MATTERS
 	      if (PCC_BITFIELD_TYPE_MATTERS)
 		do_type_align (type, decl);
 	      else
-#endif
 		{
 #ifdef EMPTY_FIELD_BOUNDARY
 		  if (EMPTY_FIELD_BOUNDARY > DECL_ALIGN (decl))
@@ -1066,7 +1062,6 @@ update_alignment_for_field (record_layout_info rli, tree field,
 	  rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
 	}
     }
-#ifdef PCC_BITFIELD_TYPE_MATTERS
   else if (is_bitfield && PCC_BITFIELD_TYPE_MATTERS)
     {
       /* Named bit-fields cause the entire structure to have the
@@ -1109,7 +1104,6 @@ update_alignment_for_field (record_layout_info rli, tree field,
 	  user_align |= TYPE_USER_ALIGN (type);
 	}
     }
-#endif
   else
     {
       rli->record_align = MAX (rli->record_align, desired_align);
@@ -1147,7 +1141,6 @@ place_union_field (record_layout_info rli, tree field)
 			       DECL_SIZE_UNIT (field), rli->offset);
 }
 
-#if defined (PCC_BITFIELD_TYPE_MATTERS) || defined (BITFIELD_NBYTES_LIMITED)
 /* A bitfield of SIZE with a required access alignment of ALIGN is allocated
    at BYTE_OFFSET / BIT_OFFSET.  Return nonzero if the field would span more
    units of alignment than the underlying TYPE.  */
@@ -1163,7 +1156,6 @@ excess_unit_span (HOST_WIDE_INT byte_offset, HOST_WIDE_INT bit_offset,
   return ((offset + size + align - 1) / align
 	  > tree_to_uhwi (TYPE_SIZE (type)) / align);
 }
-#endif
 
 /* RLI contains information about the layout of a RECORD_TYPE.  FIELD
    is a FIELD_DECL to be added after those fields already present in
@@ -1290,7 +1282,6 @@ place_field (record_layout_info rli, tree field)
 
   /* Handle compatibility with PCC.  Note that if the record has any
      variable-sized fields, we need not worry about compatibility.  */
-#ifdef PCC_BITFIELD_TYPE_MATTERS
   if (PCC_BITFIELD_TYPE_MATTERS
       && ! targetm.ms_bitfield_layout_p (rli->t)
       && TREE_CODE (field) == FIELD_DECL
@@ -1335,7 +1326,6 @@ place_field (record_layout_info rli, tree field)
       if (! DECL_PACKED (field))
 	TYPE_USER_ALIGN (rli->t) |= TYPE_USER_ALIGN (type);
     }
-#endif
 
 #ifdef BITFIELD_NBYTES_LIMITED
   if (BITFIELD_NBYTES_LIMITED
-- 
2.3.0.80.g18d0fec.dirty

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

* [PATCH 0/8] remove more conditional compilation
@ 2015-04-27  5:56 tbsaunde+gcc
  2015-04-27  5:56 ` [PATCH 1/8] add default for NO_FUNCTION_CSE tbsaunde+gcc
                   ` (7 more replies)
  0 siblings, 8 replies; 31+ messages in thread
From: tbsaunde+gcc @ 2015-04-27  5:56 UTC (permalink / raw)
  To: gcc-patches

From: Trevor Saunders <tbsaunde+gcc@tbsaunde.org>

Hi,

Here's another series to remove some conditional compilation.

each patch was bootstrapped and regtested on x86_64-linux-gnu, and the series
was run through config-list.mk.  I think this all falls within Jeff's
preapproval so I'll commit it tomorrow (today actually) night if nobody
objects.

Trev

Trevor Saunders (8):
  add default for NO_FUNCTION_CSE
  add default for HARD_REGNO_RENAME_OK
  add default for PCC_BITFIELD_TYPE_MATTERS
  add default for EPILOGUE_USES
  always define HAVE_simple_return and HAVE_return
  always define HAVE_epilogue
  always define ARGS_GROW_DOWNWARD
  remove #if ARGS_GROW_DOWNWARD

 gcc/ChangeLog                  |  32 +++++++
 gcc/alias.c                    |  10 +-
 gcc/bb-reorder.c               |   9 --
 gcc/calls.c                    | 129 ++++++++++++-------------
 gcc/cfgrtl.c                   |  20 ++--
 gcc/config/alpha/alpha.h       |   2 +-
 gcc/config/arc/arc.h           |   2 +-
 gcc/config/avr/avr.h           |   2 +-
 gcc/config/cr16/cr16.h         |   2 +-
 gcc/config/epiphany/epiphany.h |   2 +-
 gcc/config/frv/frv.h           |   2 +-
 gcc/config/h8300/h8300.h       |   2 +-
 gcc/config/i386/i386.h         |   2 +-
 gcc/config/ia64/ia64.h         |   2 +-
 gcc/config/lm32/lm32.h         |   2 +-
 gcc/config/m32r/m32r.h         |   2 +-
 gcc/config/mep/mep.h           |   2 +-
 gcc/config/mn10300/mn10300.h   |   2 +-
 gcc/config/nds32/nds32.h       |   2 +-
 gcc/config/nios2/nios2.h       |   2 +-
 gcc/config/pa/pa.h             |   4 +-
 gcc/config/rs6000/rs6000.h     |   2 +-
 gcc/config/s390/s390.h         |   2 +-
 gcc/config/sparc/sparc.h       |   2 +-
 gcc/config/spu/spu.h           |   2 +-
 gcc/config/stormy16/stormy16.h |   2 +-
 gcc/config/v850/v850.h         |   2 +-
 gcc/cp/class.c                 |   4 +-
 gcc/cse.c                      |   4 +-
 gcc/defaults.h                 |  50 ++++++++++
 gcc/df-scan.c                  |   7 --
 gcc/doc/tm.texi                |   2 +-
 gcc/doc/tm.texi.in             |   2 +-
 gcc/dwarf2out.c                |   2 -
 gcc/function.c                 | 209 ++++++++++++++++++-----------------------
 gcc/regrename.c                |   5 +-
 gcc/reorg.c                    |  14 +--
 gcc/resource.c                 |   6 +-
 gcc/sel-sched.c                |   6 --
 gcc/shrink-wrap.c              |   3 -
 gcc/shrink-wrap.h              |   6 --
 gcc/stor-layout.c              |  10 --
 gcc/targhooks.c                |   5 +-
 gcc/toplev.c                   |   3 -
 44 files changed, 287 insertions(+), 297 deletions(-)

-- 
2.3.0.80.g18d0fec.dirty

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

* [PATCH 7/8] always define ARGS_GROW_DOWNWARD
  2015-04-27  5:56 [PATCH 0/8] remove more conditional compilation tbsaunde+gcc
                   ` (4 preceding siblings ...)
  2015-04-27  5:57 ` [PATCH 8/8] remove #if ARGS_GROW_DOWNWARD tbsaunde+gcc
@ 2015-04-27  5:57 ` tbsaunde+gcc
  2015-04-27  5:57 ` [PATCH 6/8] always define HAVE_epilogue tbsaunde+gcc
  2015-04-27  5:57 ` [PATCH 2/8] add default for HARD_REGNO_RENAME_OK tbsaunde+gcc
  7 siblings, 0 replies; 31+ messages in thread
From: tbsaunde+gcc @ 2015-04-27  5:57 UTC (permalink / raw)
  To: gcc-patches

From: Trevor Saunders <tbsaunde+gcc@tbsaunde.org>

gcc/ChangeLog:

2015-04-27  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>

	* config/pa/pa.h (ARGS_GROW_DOWNWARD): Define to 1.
	* defaults.h (ARGS_GROW_DOWNWARD): Define it to 0 by default.
	* calls.c (save_fixed_argument_area): Don't chekc if
	ARGS_GROW_DOWNWARD is defined.
	(restore_fixed_argument_area): Likewise.
	(mem_overlaps_already_clobbered_arg_p): Likewise.
	(check_sibcall_argument_overlap): Likewise.
	(expand_call): Likewise.
	(emit_library_call_value_1): Likewise.
	(store_one_arg): Likewise.
	* function.c (assign_parms): Likewise.
	(locate_and_pad_parm): Likewise.
	(pad_to_arg_alignment): Likewise.
	* targhooks.c (std_gimplify_va_arg_expr): Likewise.
---
 gcc/calls.c        | 20 ++++++++++----------
 gcc/config/pa/pa.h |  2 +-
 gcc/defaults.h     |  4 ++++
 gcc/function.c     |  8 ++++----
 gcc/targhooks.c    |  2 +-
 5 files changed, 20 insertions(+), 16 deletions(-)

diff --git a/gcc/calls.c b/gcc/calls.c
index a6cd33b..b17a9f2 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -948,7 +948,7 @@ save_fixed_argument_area (int reg_parm_stack_space, rtx argblock, int *low_to_sa
 
   /* Compute the boundary of the area that needs to be saved, if any.  */
   high = reg_parm_stack_space;
-#ifdef ARGS_GROW_DOWNWARD
+#if ARGS_GROW_DOWNWARD
   high += 1;
 #endif
   if (high > highest_outgoing_arg_in_use)
@@ -979,7 +979,7 @@ save_fixed_argument_area (int reg_parm_stack_space, rtx argblock, int *low_to_sa
 			 BIGGEST_ALIGNMENT / UNITS_PER_WORD) - 1)))
 	  save_mode = BLKmode;
 
-#ifdef ARGS_GROW_DOWNWARD
+#if ARGS_GROW_DOWNWARD
 	delta = -high;
 #else
 	delta = low;
@@ -1013,7 +1013,7 @@ restore_fixed_argument_area (rtx save_area, rtx argblock, int high_to_save, int
   int delta;
   rtx addr, stack_area;
 
-#ifdef ARGS_GROW_DOWNWARD
+#if ARGS_GROW_DOWNWARD
   delta = -high_to_save;
 #else
   delta = low_to_save;
@@ -1980,7 +1980,7 @@ mem_overlaps_already_clobbered_arg_p (rtx addr, unsigned HOST_WIDE_INT size)
   i += crtl->args.pretend_args_size;
 #endif
 
-#ifdef ARGS_GROW_DOWNWARD
+#if ARGS_GROW_DOWNWARD
   i = -i - size;
 #endif
   if (size > 0)
@@ -2286,7 +2286,7 @@ check_sibcall_argument_overlap (rtx_insn *insn, struct arg_data *arg,
 
   if (mark_stored_args_map)
     {
-#ifdef ARGS_GROW_DOWNWARD
+#if ARGS_GROW_DOWNWARD
       low = -arg->locate.slot_offset.constant - arg->locate.size.constant;
 #else
       low = arg->locate.slot_offset.constant;
@@ -2979,7 +2979,7 @@ expand_call (tree exp, rtx target, int ignore)
 		  if (! OUTGOING_REG_PARM_STACK_SPACE ((!fndecl ? fntype : TREE_TYPE (fndecl))))
 		    needed += reg_parm_stack_space;
 
-#ifdef ARGS_GROW_DOWNWARD
+#if ARGS_GROW_DOWNWARD
 		  highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
 						     needed + 1);
 #else
@@ -3047,7 +3047,7 @@ expand_call (tree exp, rtx target, int ignore)
 		  else
 		    {
 		      argblock = push_block (GEN_INT (needed), 0, 0);
-#ifdef ARGS_GROW_DOWNWARD
+#if ARGS_GROW_DOWNWARD
 		      argblock = plus_constant (Pmode, argblock, needed);
 #endif
 		    }
@@ -4122,7 +4122,7 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
       if (! OUTGOING_REG_PARM_STACK_SPACE ((!fndecl ? fntype : TREE_TYPE (fndecl))))
 	needed += reg_parm_stack_space;
 
-#ifdef ARGS_GROW_DOWNWARD
+#if ARGS_GROW_DOWNWARD
       highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
 					 needed + 1);
 #else
@@ -4213,7 +4213,7 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
 	      /* If this is being stored into a pre-allocated, fixed-size,
 		 stack area, save any previous data at that location.  */
 
-#ifdef ARGS_GROW_DOWNWARD
+#if ARGS_GROW_DOWNWARD
 	      /* stack_slot is negative, but we want to index stack_usage_map
 		 with positive values.  */
 	      upper_bound = -argvec[argnum].locate.slot_offset.constant + 1;
@@ -4702,7 +4702,7 @@ store_one_arg (struct arg_data *arg, rtx argblock, int flags,
 	 save any previous data at that location.  */
       if (argblock && ! variable_size && arg->stack)
 	{
-#ifdef ARGS_GROW_DOWNWARD
+#if ARGS_GROW_DOWNWARD
 	  /* stack_slot is negative, but we want to index stack_usage_map
 	     with positive values.  */
 	  if (GET_CODE (XEXP (arg->stack_slot, 0)) == PLUS)
diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h
index 6c48883..f9107bc 100644
--- a/gcc/config/pa/pa.h
+++ b/gcc/config/pa/pa.h
@@ -490,7 +490,7 @@ extern rtx hppa_pic_save_rtx (void);
 /* #define STACK_GROWS_DOWNWARD */
 
 /* Believe it or not.  */
-#define ARGS_GROW_DOWNWARD
+#define ARGS_GROW_DOWNWARD 1
 
 /* Define this to nonzero if the nominal address of the stack frame
    is at the high-address end of the local variables;
diff --git a/gcc/defaults.h b/gcc/defaults.h
index 4c87191..47fdcf4 100644
--- a/gcc/defaults.h
+++ b/gcc/defaults.h
@@ -1225,6 +1225,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #define EPILOGUE_USES(REG) false
 #endif
 
+#ifndef ARGS_GROW_DOWNWARD
+#define ARGS_GROW_DOWNWARD 0
+#endif
+
 #ifdef GCC_INSN_FLAGS_H
 /* Dependent default target macro definitions
 
diff --git a/gcc/function.c b/gcc/function.c
index 14afc53..48e6c69 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -3771,7 +3771,7 @@ assign_parms (tree fndecl)
   crtl->args.size = CEIL_ROUND (crtl->args.size,
 					   PARM_BOUNDARY / BITS_PER_UNIT);
 
-#ifdef ARGS_GROW_DOWNWARD
+#if ARGS_GROW_DOWNWARD
   crtl->args.arg_offset_rtx
     = (all.stack_args_size.var == 0 ? GEN_INT (-all.stack_args_size.constant)
        : expand_expr (size_diffop (all.stack_args_size.var,
@@ -4070,7 +4070,7 @@ locate_and_pad_parm (machine_mode passed_mode, tree type, int in_regs,
   if (crtl->preferred_stack_boundary < boundary)
     crtl->preferred_stack_boundary = boundary;
 
-#ifdef ARGS_GROW_DOWNWARD
+#if ARGS_GROW_DOWNWARD
   locate->slot_offset.constant = -initial_offset_ptr->constant;
   if (initial_offset_ptr->var)
     locate->slot_offset.var = size_binop (MINUS_EXPR, ssize_int (0),
@@ -4175,7 +4175,7 @@ pad_to_arg_alignment (struct args_size *offset_ptr, int boundary,
 	  tree offset = size_binop (PLUS_EXPR,
 				    ARGS_SIZE_TREE (*offset_ptr),
 				    sp_offset_tree);
-#ifdef ARGS_GROW_DOWNWARD
+#if ARGS_GROW_DOWNWARD
 	  tree rounded = round_down (offset, boundary / BITS_PER_UNIT);
 #else
 	  tree rounded = round_up   (offset, boundary / BITS_PER_UNIT);
@@ -4191,7 +4191,7 @@ pad_to_arg_alignment (struct args_size *offset_ptr, int boundary,
       else
 	{
 	  offset_ptr->constant = -sp_offset +
-#ifdef ARGS_GROW_DOWNWARD
+#if ARGS_GROW_DOWNWARD
 	    FLOOR_ROUND (offset_ptr->constant + sp_offset, boundary_in_bytes);
 #else
 	    CEIL_ROUND (offset_ptr->constant + sp_offset, boundary_in_bytes);
diff --git a/gcc/targhooks.c b/gcc/targhooks.c
index 0c14103..7f694b6 100644
--- a/gcc/targhooks.c
+++ b/gcc/targhooks.c
@@ -1786,7 +1786,7 @@ std_gimplify_va_arg_expr (tree valist, tree type, gimple_seq *pre_p,
   unsigned HOST_WIDE_INT align, boundary;
   bool indirect;
 
-#ifdef ARGS_GROW_DOWNWARD
+#if ARGS_GROW_DOWNWARD
   /* All of the alignment and movement below is for args-grow-up machines.
      As of 2004, there are only 3 ARGS_GROW_DOWNWARD targets, and they all
      implement their own specialized gimplify_va_arg_expr routines.  */
-- 
2.3.0.80.g18d0fec.dirty

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

* [PATCH 6/8] always define HAVE_epilogue
  2015-04-27  5:56 [PATCH 0/8] remove more conditional compilation tbsaunde+gcc
                   ` (5 preceding siblings ...)
  2015-04-27  5:57 ` [PATCH 7/8] always define ARGS_GROW_DOWNWARD tbsaunde+gcc
@ 2015-04-27  5:57 ` tbsaunde+gcc
  2015-04-27  5:57 ` [PATCH 2/8] add default for HARD_REGNO_RENAME_OK tbsaunde+gcc
  7 siblings, 0 replies; 31+ messages in thread
From: tbsaunde+gcc @ 2015-04-27  5:57 UTC (permalink / raw)
  To: gcc-patches

From: Trevor Saunders <tbsaunde+gcc@tbsaunde.org>

gcc/ChangeLog:

2015-04-27  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>

	* defaults.h (gen_epilogue): New function.
(HAVE_epilogue): Add default definition to false.
	* alias.c (init_alias_analysis): don't check if HAVE_epilogue is
	defined.
	* cfgrtl.c (cfg_layout_finalize): Likewise.
	* df-scan.c: Likewise.
	* function.c (thread_prologue_and_epilogue_insns): Likewise.
	(reposition_prologue_and_epilogue_notes): Likewise.
	* reorg.c (find_end_label): Likewise.
	* toplev.c: Likewise.
---
 gcc/alias.c    | 10 +++++++---
 gcc/cfgrtl.c   |  6 +-----
 gcc/defaults.h | 10 ++++++++++
 gcc/df-scan.c  |  3 ---
 gcc/function.c | 12 +++++-------
 gcc/reorg.c    |  2 --
 gcc/toplev.c   |  3 ---
 7 files changed, 23 insertions(+), 23 deletions(-)

diff --git a/gcc/alias.c b/gcc/alias.c
index 8f48660..7d9a3d9 100644
--- a/gcc/alias.c
+++ b/gcc/alias.c
@@ -2925,15 +2925,19 @@ init_alias_analysis (void)
 		{
 		  rtx note, set;
 
-#if defined (HAVE_prologue) || defined (HAVE_epilogue)
+#if defined (HAVE_prologue)
+		  static const bool prologue = true;
+#else
+		  static const bool prologue = false;
+#endif
+
 		  /* The prologue/epilogue insns are not threaded onto the
 		     insn chain until after reload has completed.  Thus,
 		     there is no sense wasting time checking if INSN is in
 		     the prologue/epilogue until after reload has completed.  */
-		  if (reload_completed
+		  if ((prologue || HAVE_epilogue) && reload_completed
 		      && prologue_epilogue_contains (insn))
 		    continue;
-#endif
 
 		  /* If this insn has a noalias note, process it,  Otherwise,
 		     scan for sets.  A simple set will have no side effects
diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c
index 7027502..8a75044 100644
--- a/gcc/cfgrtl.c
+++ b/gcc/cfgrtl.c
@@ -4339,11 +4339,7 @@ cfg_layout_finalize (void)
 #endif
   force_one_exit_fallthru ();
   rtl_register_cfg_hooks ();
-  if (reload_completed
-#ifdef HAVE_epilogue
-      && !HAVE_epilogue
-#endif
-      )
+  if (reload_completed && !HAVE_epilogue)
     fixup_fallthru_exit_predecessor ();
   fixup_reorder_chain ();
 
diff --git a/gcc/defaults.h b/gcc/defaults.h
index d3da328..4c87191 100644
--- a/gcc/defaults.h
+++ b/gcc/defaults.h
@@ -1418,6 +1418,16 @@ gen_return ()
 }
 #endif
 
+#ifndef HAVE_epilogue
+#define HAVE_epilogue 0
+static inline rtx
+gen_epilogue ()
+{
+  gcc_unreachable ();
+  return NULL;
+}
+#endif
+
 #endif /* GCC_INSN_FLAGS_H  */
 
 #endif  /* ! GCC_DEFAULTS_H */
diff --git a/gcc/df-scan.c b/gcc/df-scan.c
index 9f0e47f..a990a7b 100644
--- a/gcc/df-scan.c
+++ b/gcc/df-scan.c
@@ -62,9 +62,6 @@ along with GCC; see the file COPYING3.  If not see
 typedef struct df_mw_hardreg *df_mw_hardreg_ptr;
 
 
-#ifndef HAVE_epilogue
-#define HAVE_epilogue 0
-#endif
 #ifndef HAVE_prologue
 #define HAVE_prologue 0
 #endif
diff --git a/gcc/function.c b/gcc/function.c
index 561a1c5..14afc53 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -6066,7 +6066,6 @@ thread_prologue_and_epilogue_insns (void)
   if (exit_fallthru_edge == NULL)
     goto epilogue_done;
 
-#ifdef HAVE_epilogue
   if (HAVE_epilogue)
     {
       start_sequence ();
@@ -6090,7 +6089,6 @@ thread_prologue_and_epilogue_insns (void)
 	set_return_jump_label (returnjump);
     }
   else
-#endif
     {
       basic_block cur_bb;
 
@@ -6183,7 +6181,6 @@ epilogue_done:
     }
 #endif
 
-#ifdef HAVE_epilogue
   if (epilogue_end)
     {
       rtx_insn *insn, *next;
@@ -6201,7 +6198,6 @@ epilogue_done:
 	    reorder_insns (insn, insn, PREV_INSN (epilogue_end));
 	}
     }
-#endif
 
   bitmap_clear (&bb_flags);
 
@@ -6217,8 +6213,11 @@ epilogue_done:
 void
 reposition_prologue_and_epilogue_notes (void)
 {
-#if defined (HAVE_prologue) || defined (HAVE_epilogue) \
-    || defined (HAVE_sibcall_epilogue)
+#if ! defined (HAVE_prologue) && ! defined (HAVE_sibcall_epilogue)
+  if (!HAVE_epilogue)
+    return;
+#endif
+
   /* Since the hash table is created on demand, the fact that it is
      non-null is a signal that it is non-empty.  */
   if (prologue_insn_hash != NULL)
@@ -6315,7 +6314,6 @@ reposition_prologue_and_epilogue_notes (void)
 	    }
 	}
     }
-#endif /* HAVE_prologue or HAVE_epilogue */
 }
 
 /* Returns the name of function declared by FNDECL.  */
diff --git a/gcc/reorg.c b/gcc/reorg.c
index a44d4a3..e9af7b7 100644
--- a/gcc/reorg.c
+++ b/gcc/reorg.c
@@ -484,14 +484,12 @@ find_end_label (rtx kind)
 	}
       else
 	{
-#ifdef HAVE_epilogue
 	  if (HAVE_epilogue && ! HAVE_return)
 	    /* The RETURN insn has its delay slot filled so we cannot
 	       emit the label just before it.  Since we already have
 	       an epilogue and cannot emit a new RETURN, we cannot
 	       emit the label at all.  */
 	    return NULL;
-#endif /* HAVE_epilogue */
 
 	  /* Otherwise, make a new label and emit a RETURN and BARRIER,
 	     if needed.  */
diff --git a/gcc/toplev.c b/gcc/toplev.c
index b06eed3..38de36b 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -128,9 +128,6 @@ along with GCC; see the file COPYING3.  If not see
 				   declarations for e.g. AIX 4.x.  */
 #endif
 
-#ifndef HAVE_epilogue
-#define HAVE_epilogue 0
-#endif
 #ifndef HAVE_prologue
 #define HAVE_prologue 0
 #endif
-- 
2.3.0.80.g18d0fec.dirty

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

* [PATCH 2/8] add default for HARD_REGNO_RENAME_OK
  2015-04-27  5:56 [PATCH 0/8] remove more conditional compilation tbsaunde+gcc
                   ` (6 preceding siblings ...)
  2015-04-27  5:57 ` [PATCH 6/8] always define HAVE_epilogue tbsaunde+gcc
@ 2015-04-27  5:57 ` tbsaunde+gcc
  7 siblings, 0 replies; 31+ messages in thread
From: tbsaunde+gcc @ 2015-04-27  5:57 UTC (permalink / raw)
  To: gcc-patches

From: Trevor Saunders <tbsaunde+gcc@tbsaunde.org>

gcc/ChangeLog:

2015-04-27  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>

	* defaults.h (HARD_REGNO_RENAME_OK): Add default definition to
	true.
	* regrename.c (check_new_reg_p): Remove check if
	HARD_REGNO_RENAME_OK is defined.
	* sel-sched.c (sel_hard_regno_rename_ok): Likewise.
---
 gcc/defaults.h  | 4 ++++
 gcc/regrename.c | 5 +----
 gcc/sel-sched.c | 6 ------
 3 files changed, 5 insertions(+), 10 deletions(-)

diff --git a/gcc/defaults.h b/gcc/defaults.h
index 4ae5d98..7e04be2 100644
--- a/gcc/defaults.h
+++ b/gcc/defaults.h
@@ -1213,6 +1213,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #define NO_FUNCTION_CSE false
 #endif
 
+#ifndef HARD_REGNO_RENAME_OK
+#define HARD_REGNO_RENAME_OK(FROM, TO) true
+#endif
+
 #ifdef GCC_INSN_FLAGS_H
 /* Dependent default target macro definitions
 
diff --git a/gcc/regrename.c b/gcc/regrename.c
index 147aaa8..d45ad0a 100644
--- a/gcc/regrename.c
+++ b/gcc/regrename.c
@@ -333,10 +333,7 @@ check_new_reg_p (int reg ATTRIBUTE_UNUSED, int new_reg,
 	|| (crtl->is_leaf
 	    && !LEAF_REGISTERS[new_reg + i])
 #endif
-#ifdef HARD_REGNO_RENAME_OK
-	|| ! HARD_REGNO_RENAME_OK (reg + i, new_reg + i)
-#endif
-	)
+	|| ! HARD_REGNO_RENAME_OK (reg + i, new_reg + i))
       return false;
 
   /* See whether it accepts all modes that occur in
diff --git a/gcc/sel-sched.c b/gcc/sel-sched.c
index 988f9d5..9443629 100644
--- a/gcc/sel-sched.c
+++ b/gcc/sel-sched.c
@@ -1047,7 +1047,6 @@ get_reg_class (rtx_insn *insn)
   return NO_REGS;
 }
 
-#ifdef HARD_REGNO_RENAME_OK
 /* Calculate HARD_REGNO_RENAME_OK data for REGNO.  */
 static void
 init_hard_regno_rename (int regno)
@@ -1066,14 +1065,12 @@ init_hard_regno_rename (int regno)
         SET_HARD_REG_BIT (sel_hrd.regs_for_rename[regno], cur_reg);
     }
 }
-#endif
 
 /* A wrapper around HARD_REGNO_RENAME_OK that will look into the hard regs
    data first.  */
 static inline bool
 sel_hard_regno_rename_ok (int from ATTRIBUTE_UNUSED, int to ATTRIBUTE_UNUSED)
 {
-#ifdef HARD_REGNO_RENAME_OK
   /* Check whether this is all calculated.  */
   if (TEST_HARD_REG_BIT (sel_hrd.regs_for_rename[from], from))
     return TEST_HARD_REG_BIT (sel_hrd.regs_for_rename[from], to);
@@ -1081,9 +1078,6 @@ sel_hard_regno_rename_ok (int from ATTRIBUTE_UNUSED, int to ATTRIBUTE_UNUSED)
   init_hard_regno_rename (from);
 
   return TEST_HARD_REG_BIT (sel_hrd.regs_for_rename[from], to);
-#else
-  return true;
-#endif
 }
 
 /* Calculate set of registers that are capable of holding MODE.  */
-- 
2.3.0.80.g18d0fec.dirty

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

* [PATCH 8/8] remove #if ARGS_GROW_DOWNWARD
  2015-04-27  5:56 [PATCH 0/8] remove more conditional compilation tbsaunde+gcc
                   ` (3 preceding siblings ...)
  2015-04-27  5:57 ` [PATCH 5/8] always define HAVE_simple_return and HAVE_return tbsaunde+gcc
@ 2015-04-27  5:57 ` tbsaunde+gcc
  2015-04-27  5:57 ` [PATCH 7/8] always define ARGS_GROW_DOWNWARD tbsaunde+gcc
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 31+ messages in thread
From: tbsaunde+gcc @ 2015-04-27  5:57 UTC (permalink / raw)
  To: gcc-patches

From: Trevor Saunders <tbsaunde+gcc@tbsaunde.org>

gcc/ChangeLog:

2015-04-27  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>

	* calls.c (save_fixed_argument_area): Don't check
	ARGS_GROW_DOWNWARD with the preprocessor.
	(restore_fixed_argument_area): Likewise.
	(mem_overlaps_already_clobbered_arg_p): Likewise.
	(check_sibcall_argument_overlap): Likewise.
	(expand_call): Likewise.
	(emit_library_call_value_1): Likewise.
	(store_one_arg): Likewise.
	* function.c (assign_parms): Likewise.
	(locate_and_pad_parm): Likewise.
	(pad_to_arg_alignment): Likewise.
	* targhooks.c (std_gimplify_va_arg_expr): Likewise.
---
 gcc/calls.c     | 125 ++++++++++++++++++++++++------------------------
 gcc/function.c  | 145 +++++++++++++++++++++++++++++---------------------------
 gcc/targhooks.c |   5 +-
 3 files changed, 140 insertions(+), 135 deletions(-)

diff --git a/gcc/calls.c b/gcc/calls.c
index b17a9f2..caa7d607 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -948,9 +948,9 @@ save_fixed_argument_area (int reg_parm_stack_space, rtx argblock, int *low_to_sa
 
   /* Compute the boundary of the area that needs to be saved, if any.  */
   high = reg_parm_stack_space;
-#if ARGS_GROW_DOWNWARD
-  high += 1;
-#endif
+  if (ARGS_GROW_DOWNWARD)
+    high += 1;
+
   if (high > highest_outgoing_arg_in_use)
     high = highest_outgoing_arg_in_use;
 
@@ -979,11 +979,11 @@ save_fixed_argument_area (int reg_parm_stack_space, rtx argblock, int *low_to_sa
 			 BIGGEST_ALIGNMENT / UNITS_PER_WORD) - 1)))
 	  save_mode = BLKmode;
 
-#if ARGS_GROW_DOWNWARD
-	delta = -high;
-#else
-	delta = low;
-#endif
+	if (ARGS_GROW_DOWNWARD)
+	  delta = -high;
+	else
+	  delta = low;
+
 	addr = plus_constant (Pmode, argblock, delta);
 	stack_area = gen_rtx_MEM (save_mode, memory_address (save_mode, addr));
 
@@ -1013,11 +1013,11 @@ restore_fixed_argument_area (rtx save_area, rtx argblock, int high_to_save, int
   int delta;
   rtx addr, stack_area;
 
-#if ARGS_GROW_DOWNWARD
-  delta = -high_to_save;
-#else
-  delta = low_to_save;
-#endif
+  if (ARGS_GROW_DOWNWARD)
+    delta = -high_to_save;
+  else
+    delta = low_to_save;
+
   addr = plus_constant (Pmode, argblock, delta);
   stack_area = gen_rtx_MEM (save_mode, memory_address (save_mode, addr));
   set_mem_align (stack_area, PARM_BOUNDARY);
@@ -1980,9 +1980,9 @@ mem_overlaps_already_clobbered_arg_p (rtx addr, unsigned HOST_WIDE_INT size)
   i += crtl->args.pretend_args_size;
 #endif
 
-#if ARGS_GROW_DOWNWARD
-  i = -i - size;
-#endif
+  if (ARGS_GROW_DOWNWARD)
+    i = -i - size;
+
   if (size > 0)
     {
       unsigned HOST_WIDE_INT k;
@@ -2286,11 +2286,10 @@ check_sibcall_argument_overlap (rtx_insn *insn, struct arg_data *arg,
 
   if (mark_stored_args_map)
     {
-#if ARGS_GROW_DOWNWARD
-      low = -arg->locate.slot_offset.constant - arg->locate.size.constant;
-#else
-      low = arg->locate.slot_offset.constant;
-#endif
+      if (ARGS_GROW_DOWNWARD)
+	low = -arg->locate.slot_offset.constant - arg->locate.size.constant;
+      else
+	low = arg->locate.slot_offset.constant;
 
       for (high = low + arg->locate.size.constant; low < high; low++)
 	bitmap_set_bit (stored_args_map, low);
@@ -2979,13 +2978,13 @@ expand_call (tree exp, rtx target, int ignore)
 		  if (! OUTGOING_REG_PARM_STACK_SPACE ((!fndecl ? fntype : TREE_TYPE (fndecl))))
 		    needed += reg_parm_stack_space;
 
-#if ARGS_GROW_DOWNWARD
-		  highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
-						     needed + 1);
-#else
-		  highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
-						     needed);
-#endif
+		  if (ARGS_GROW_DOWNWARD)
+		    highest_outgoing_arg_in_use
+		      = MAX (initial_highest_arg_in_use, needed + 1);
+		  else
+		    highest_outgoing_arg_in_use
+		      = MAX (initial_highest_arg_in_use, needed);
+
 		  free (stack_usage_map_buf);
 		  stack_usage_map_buf = XNEWVEC (char, highest_outgoing_arg_in_use);
 		  stack_usage_map = stack_usage_map_buf;
@@ -3047,9 +3046,8 @@ expand_call (tree exp, rtx target, int ignore)
 		  else
 		    {
 		      argblock = push_block (GEN_INT (needed), 0, 0);
-#if ARGS_GROW_DOWNWARD
-		      argblock = plus_constant (Pmode, argblock, needed);
-#endif
+		      if (ARGS_GROW_DOWNWARD)
+			argblock = plus_constant (Pmode, argblock, needed);
 		    }
 
 		  /* We only really need to call `copy_to_reg' in the case
@@ -4122,13 +4120,12 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
       if (! OUTGOING_REG_PARM_STACK_SPACE ((!fndecl ? fntype : TREE_TYPE (fndecl))))
 	needed += reg_parm_stack_space;
 
-#if ARGS_GROW_DOWNWARD
-      highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
-					 needed + 1);
-#else
-      highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
-					 needed);
-#endif
+      if (ARGS_GROW_DOWNWARD)
+	highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
+					   needed + 1);
+      else
+	highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use, needed);
+
       stack_usage_map_buf = XNEWVEC (char, highest_outgoing_arg_in_use);
       stack_usage_map = stack_usage_map_buf;
 
@@ -4213,15 +4210,18 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
 	      /* If this is being stored into a pre-allocated, fixed-size,
 		 stack area, save any previous data at that location.  */
 
-#if ARGS_GROW_DOWNWARD
-	      /* stack_slot is negative, but we want to index stack_usage_map
-		 with positive values.  */
-	      upper_bound = -argvec[argnum].locate.slot_offset.constant + 1;
-	      lower_bound = upper_bound - argvec[argnum].locate.size.constant;
-#else
-	      lower_bound = argvec[argnum].locate.slot_offset.constant;
-	      upper_bound = lower_bound + argvec[argnum].locate.size.constant;
-#endif
+	      if (ARGS_GROW_DOWNWARD)
+		{
+		  /* stack_slot is negative, but we want to index stack_usage_map
+		     with positive values.  */
+		  upper_bound = -argvec[argnum].locate.slot_offset.constant + 1;
+		  lower_bound = upper_bound - argvec[argnum].locate.size.constant;
+		}
+	      else
+		{
+		  lower_bound = argvec[argnum].locate.slot_offset.constant;
+		  upper_bound = lower_bound + argvec[argnum].locate.size.constant;
+		}
 
 	      i = lower_bound;
 	      /* Don't worry about things in the fixed argument area;
@@ -4702,23 +4702,26 @@ store_one_arg (struct arg_data *arg, rtx argblock, int flags,
 	 save any previous data at that location.  */
       if (argblock && ! variable_size && arg->stack)
 	{
-#if ARGS_GROW_DOWNWARD
-	  /* stack_slot is negative, but we want to index stack_usage_map
-	     with positive values.  */
-	  if (GET_CODE (XEXP (arg->stack_slot, 0)) == PLUS)
-	    upper_bound = -INTVAL (XEXP (XEXP (arg->stack_slot, 0), 1)) + 1;
-	  else
-	    upper_bound = 0;
+	  if (ARGS_GROW_DOWNWARD)
+	    {
+	      /* stack_slot is negative, but we want to index stack_usage_map
+		 with positive values.  */
+	      if (GET_CODE (XEXP (arg->stack_slot, 0)) == PLUS)
+		upper_bound = -INTVAL (XEXP (XEXP (arg->stack_slot, 0), 1)) + 1;
+	      else
+		upper_bound = 0;
 
-	  lower_bound = upper_bound - arg->locate.size.constant;
-#else
-	  if (GET_CODE (XEXP (arg->stack_slot, 0)) == PLUS)
-	    lower_bound = INTVAL (XEXP (XEXP (arg->stack_slot, 0), 1));
+	      lower_bound = upper_bound - arg->locate.size.constant;
+	    }
 	  else
-	    lower_bound = 0;
+	    {
+	      if (GET_CODE (XEXP (arg->stack_slot, 0)) == PLUS)
+		lower_bound = INTVAL (XEXP (XEXP (arg->stack_slot, 0), 1));
+	      else
+		lower_bound = 0;
 
-	  upper_bound = lower_bound + arg->locate.size.constant;
-#endif
+	      upper_bound = lower_bound + arg->locate.size.constant;
+	    }
 
 	  i = lower_bound;
 	  /* Don't worry about things in the fixed argument area;
diff --git a/gcc/function.c b/gcc/function.c
index 48e6c69..d1a2c0a 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -3771,15 +3771,16 @@ assign_parms (tree fndecl)
   crtl->args.size = CEIL_ROUND (crtl->args.size,
 					   PARM_BOUNDARY / BITS_PER_UNIT);
 
-#if ARGS_GROW_DOWNWARD
-  crtl->args.arg_offset_rtx
-    = (all.stack_args_size.var == 0 ? GEN_INT (-all.stack_args_size.constant)
-       : expand_expr (size_diffop (all.stack_args_size.var,
-				   size_int (-all.stack_args_size.constant)),
-		      NULL_RTX, VOIDmode, EXPAND_NORMAL));
-#else
-  crtl->args.arg_offset_rtx = ARGS_SIZE_RTX (all.stack_args_size);
-#endif
+  if (ARGS_GROW_DOWNWARD)
+    {
+      crtl->args.arg_offset_rtx
+	= (all.stack_args_size.var == 0 ? GEN_INT (-all.stack_args_size.constant)
+	   : expand_expr (size_diffop (all.stack_args_size.var,
+				       size_int (-all.stack_args_size.constant)),
+			  NULL_RTX, VOIDmode, EXPAND_NORMAL));
+    }
+  else
+    crtl->args.arg_offset_rtx = ARGS_SIZE_RTX (all.stack_args_size);
 
   /* See how many bytes, if any, of its args a function should try to pop
      on return.  */
@@ -4070,68 +4071,71 @@ locate_and_pad_parm (machine_mode passed_mode, tree type, int in_regs,
   if (crtl->preferred_stack_boundary < boundary)
     crtl->preferred_stack_boundary = boundary;
 
-#if ARGS_GROW_DOWNWARD
-  locate->slot_offset.constant = -initial_offset_ptr->constant;
-  if (initial_offset_ptr->var)
-    locate->slot_offset.var = size_binop (MINUS_EXPR, ssize_int (0),
-					  initial_offset_ptr->var);
+  if (ARGS_GROW_DOWNWARD)
+    {
+      locate->slot_offset.constant = -initial_offset_ptr->constant;
+      if (initial_offset_ptr->var)
+	locate->slot_offset.var = size_binop (MINUS_EXPR, ssize_int (0),
+					      initial_offset_ptr->var);
 
-  {
-    tree s2 = sizetree;
-    if (where_pad != none
-	&& (!tree_fits_uhwi_p (sizetree)
-	    || (tree_to_uhwi (sizetree) * BITS_PER_UNIT) % round_boundary))
-      s2 = round_up (s2, round_boundary / BITS_PER_UNIT);
-    SUB_PARM_SIZE (locate->slot_offset, s2);
-  }
+	{
+	  tree s2 = sizetree;
+	  if (where_pad != none
+	      && (!tree_fits_uhwi_p (sizetree)
+		  || (tree_to_uhwi (sizetree) * BITS_PER_UNIT) % round_boundary))
+	    s2 = round_up (s2, round_boundary / BITS_PER_UNIT);
+	  SUB_PARM_SIZE (locate->slot_offset, s2);
+	}
+
+      locate->slot_offset.constant += part_size_in_regs;
+
+      if (!in_regs || reg_parm_stack_space > 0)
+	pad_to_arg_alignment (&locate->slot_offset, boundary,
+			      &locate->alignment_pad);
+
+      locate->size.constant = (-initial_offset_ptr->constant
+			       - locate->slot_offset.constant);
+      if (initial_offset_ptr->var)
+	locate->size.var = size_binop (MINUS_EXPR,
+				       size_binop (MINUS_EXPR,
+						   ssize_int (0),
+						   initial_offset_ptr->var),
+				       locate->slot_offset.var);
 
-  locate->slot_offset.constant += part_size_in_regs;
-
-  if (!in_regs || reg_parm_stack_space > 0)
-    pad_to_arg_alignment (&locate->slot_offset, boundary,
-			  &locate->alignment_pad);
-
-  locate->size.constant = (-initial_offset_ptr->constant
-			   - locate->slot_offset.constant);
-  if (initial_offset_ptr->var)
-    locate->size.var = size_binop (MINUS_EXPR,
-				   size_binop (MINUS_EXPR,
-					       ssize_int (0),
-					       initial_offset_ptr->var),
-				   locate->slot_offset.var);
-
-  /* Pad_below needs the pre-rounded size to know how much to pad
-     below.  */
-  locate->offset = locate->slot_offset;
-  if (where_pad == downward)
-    pad_below (&locate->offset, passed_mode, sizetree);
-
-#else /* !ARGS_GROW_DOWNWARD */
-  if (!in_regs || reg_parm_stack_space > 0)
-    pad_to_arg_alignment (initial_offset_ptr, boundary,
-			  &locate->alignment_pad);
-  locate->slot_offset = *initial_offset_ptr;
+      /* Pad_below needs the pre-rounded size to know how much to pad
+	 below.  */
+      locate->offset = locate->slot_offset;
+      if (where_pad == downward)
+	pad_below (&locate->offset, passed_mode, sizetree);
+
+    }
+  else
+    {
+      if (!in_regs || reg_parm_stack_space > 0)
+	pad_to_arg_alignment (initial_offset_ptr, boundary,
+			      &locate->alignment_pad);
+      locate->slot_offset = *initial_offset_ptr;
 
 #ifdef PUSH_ROUNDING
-  if (passed_mode != BLKmode)
-    sizetree = size_int (PUSH_ROUNDING (TREE_INT_CST_LOW (sizetree)));
+      if (passed_mode != BLKmode)
+	sizetree = size_int (PUSH_ROUNDING (TREE_INT_CST_LOW (sizetree)));
 #endif
 
-  /* Pad_below needs the pre-rounded size to know how much to pad below
-     so this must be done before rounding up.  */
-  locate->offset = locate->slot_offset;
-  if (where_pad == downward)
-    pad_below (&locate->offset, passed_mode, sizetree);
+      /* Pad_below needs the pre-rounded size to know how much to pad below
+	 so this must be done before rounding up.  */
+      locate->offset = locate->slot_offset;
+      if (where_pad == downward)
+	pad_below (&locate->offset, passed_mode, sizetree);
 
-  if (where_pad != none
-      && (!tree_fits_uhwi_p (sizetree)
-	  || (tree_to_uhwi (sizetree) * BITS_PER_UNIT) % round_boundary))
-    sizetree = round_up (sizetree, round_boundary / BITS_PER_UNIT);
+      if (where_pad != none
+	  && (!tree_fits_uhwi_p (sizetree)
+	      || (tree_to_uhwi (sizetree) * BITS_PER_UNIT) % round_boundary))
+	sizetree = round_up (sizetree, round_boundary / BITS_PER_UNIT);
 
-  ADD_PARM_SIZE (locate->size, sizetree);
+      ADD_PARM_SIZE (locate->size, sizetree);
 
-  locate->size.constant -= part_size_in_regs;
-#endif /* ARGS_GROW_DOWNWARD */
+      locate->size.constant -= part_size_in_regs;
+    }
 
 #ifdef FUNCTION_ARG_OFFSET
   locate->offset.constant += FUNCTION_ARG_OFFSET (passed_mode, type);
@@ -4175,11 +4179,11 @@ pad_to_arg_alignment (struct args_size *offset_ptr, int boundary,
 	  tree offset = size_binop (PLUS_EXPR,
 				    ARGS_SIZE_TREE (*offset_ptr),
 				    sp_offset_tree);
-#if ARGS_GROW_DOWNWARD
-	  tree rounded = round_down (offset, boundary / BITS_PER_UNIT);
-#else
-	  tree rounded = round_up   (offset, boundary / BITS_PER_UNIT);
-#endif
+	  tree rounded;
+	  if (ARGS_GROW_DOWNWARD)
+	    rounded = round_down (offset, boundary / BITS_PER_UNIT);
+	  else
+	    rounded = round_up   (offset, boundary / BITS_PER_UNIT);
 
 	  offset_ptr->var = size_binop (MINUS_EXPR, rounded, sp_offset_tree);
 	  /* ARGS_SIZE_TREE includes constant term.  */
@@ -4191,11 +4195,10 @@ pad_to_arg_alignment (struct args_size *offset_ptr, int boundary,
       else
 	{
 	  offset_ptr->constant = -sp_offset +
-#if ARGS_GROW_DOWNWARD
-	    FLOOR_ROUND (offset_ptr->constant + sp_offset, boundary_in_bytes);
-#else
+	    ARGS_GROW_DOWNWARD ?
+	    FLOOR_ROUND (offset_ptr->constant + sp_offset, boundary_in_bytes) :
 	    CEIL_ROUND (offset_ptr->constant + sp_offset, boundary_in_bytes);
-#endif
+
 	    if (boundary > PARM_BOUNDARY)
 	      alignment_pad->constant = offset_ptr->constant - save_constant;
 	}
diff --git a/gcc/targhooks.c b/gcc/targhooks.c
index 7f694b6..806ff8c 100644
--- a/gcc/targhooks.c
+++ b/gcc/targhooks.c
@@ -1786,12 +1786,11 @@ std_gimplify_va_arg_expr (tree valist, tree type, gimple_seq *pre_p,
   unsigned HOST_WIDE_INT align, boundary;
   bool indirect;
 
-#if ARGS_GROW_DOWNWARD
   /* All of the alignment and movement below is for args-grow-up machines.
      As of 2004, there are only 3 ARGS_GROW_DOWNWARD targets, and they all
      implement their own specialized gimplify_va_arg_expr routines.  */
-  gcc_unreachable ();
-#endif
+  if (ARGS_GROW_DOWNWARD)
+    gcc_unreachable ();
 
   indirect = pass_by_reference (NULL, TYPE_MODE (type), type, false);
   if (indirect)
-- 
2.3.0.80.g18d0fec.dirty

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

* [PATCH 5/8] always define HAVE_simple_return and HAVE_return
  2015-04-27  5:56 [PATCH 0/8] remove more conditional compilation tbsaunde+gcc
                   ` (2 preceding siblings ...)
  2015-04-27  5:57 ` [PATCH 4/8] add default for EPILOGUE_USES tbsaunde+gcc
@ 2015-04-27  5:57 ` tbsaunde+gcc
  2015-05-06  1:13   ` Mike Stump
  2015-04-27  5:57 ` [PATCH 8/8] remove #if ARGS_GROW_DOWNWARD tbsaunde+gcc
                   ` (3 subsequent siblings)
  7 siblings, 1 reply; 31+ messages in thread
From: tbsaunde+gcc @ 2015-04-27  5:57 UTC (permalink / raw)
  To: gcc-patches

From: Trevor Saunders <tbsaunde+gcc@tbsaunde.org>

gcc/ChangeLog:

2015-04-27  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>

	* bb-reorder.c (HAVE_return): Don't check if its undefined.
	* defaults.h (gen_simple_return): New function.
	(gen_simple_return): Likewise.
	(HAVE_return): Add default definition to false.
	(HAVE_simple_return): Likewise.
	* cfgrtl.c (force_nonfallthru_and_redirect): Remove checks if
	HAVE_return and HAVE_simple_return are defined.
	* function.c (gen_return_pattern): Likewise.
	(convert_jumps_to_returns): Likewise.
	(thread_prologue_and_epilogue_insns): Likewise.
	* reorg.c (find_end_label): Likewise.
	(dbr_schedule): Likewise.
	* shrink-wrap.c: Likewise.
	* shrink-wrap.h: Likewise.
---
 gcc/bb-reorder.c  |  9 ---------
 gcc/cfgrtl.c      | 14 ++++++--------
 gcc/defaults.h    | 20 ++++++++++++++++++++
 gcc/function.c    | 52 ++++++++++++++--------------------------------------
 gcc/reorg.c       | 12 +-----------
 gcc/shrink-wrap.c |  3 ---
 gcc/shrink-wrap.h |  6 ------
 7 files changed, 41 insertions(+), 75 deletions(-)

diff --git a/gcc/bb-reorder.c b/gcc/bb-reorder.c
index c2a3be3..c134712 100644
--- a/gcc/bb-reorder.c
+++ b/gcc/bb-reorder.c
@@ -142,15 +142,6 @@
    the object file there will be an extra round.  */
 #define N_ROUNDS 5
 
-/* Stubs in case we don't have a return insn.
-   We have to check at run time too, not only compile time.  */
-
-#ifndef HAVE_return
-#define HAVE_return 0
-#define gen_return() NULL_RTX
-#endif
-
-
 struct target_bb_reorder default_target_bb_reorder;
 #if SWITCHABLE_TARGET
 struct target_bb_reorder *this_target_bb_reorder = &default_target_bb_reorder;
diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c
index 322d1a9..7027502 100644
--- a/gcc/cfgrtl.c
+++ b/gcc/cfgrtl.c
@@ -1705,21 +1705,19 @@ force_nonfallthru_and_redirect (edge e, basic_block target, rtx jump_label)
     {
       if (jump_label == ret_rtx)
 	{
-#ifdef HAVE_return
+	  if (!HAVE_return)
+	    gcc_unreachable ();
+
 	  emit_jump_insn_after_setloc (gen_return (), BB_END (jump_block), loc);
-#else
-	  gcc_unreachable ();
-#endif
 	}
       else
 	{
 	  gcc_assert (jump_label == simple_return_rtx);
-#ifdef HAVE_simple_return
+	  if (!HAVE_simple_return)
+	    gcc_unreachable ();
+
 	  emit_jump_insn_after_setloc (gen_simple_return (),
 				       BB_END (jump_block), loc);
-#else
-	  gcc_unreachable ();
-#endif
 	}
       set_return_jump_label (BB_END (jump_block));
     }
diff --git a/gcc/defaults.h b/gcc/defaults.h
index 6f915bd..d3da328 100644
--- a/gcc/defaults.h
+++ b/gcc/defaults.h
@@ -1398,6 +1398,26 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #define TARGET_SUPPORTS_WIDE_INT 0
 #endif
 
+#ifndef HAVE_simple_return
+#define HAVE_simple_return 0
+static inline rtx
+gen_simple_return ()
+{
+  gcc_unreachable ();
+  return NULL;
+}
+#endif
+
+#ifndef HAVE_return
+#define HAVE_return 0
+static inline rtx
+gen_return ()
+{
+  gcc_unreachable ();
+  return NULL;
+}
+#endif
+
 #endif /* GCC_INSN_FLAGS_H  */
 
 #endif  /* ! GCC_DEFAULTS_H */
diff --git a/gcc/function.c b/gcc/function.c
index 9077c91..561a1c5 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -5649,7 +5649,6 @@ prologue_epilogue_contains (const_rtx insn)
   return 0;
 }
 
-#ifdef HAVE_return
 /* Insert use of return register before the end of BB.  */
 
 static void
@@ -5674,12 +5673,10 @@ emit_use_return_register_into_block (basic_block bb)
 static rtx
 gen_return_pattern (bool simple_p)
 {
-#ifdef HAVE_simple_return
+  if (!HAVE_simple_return)
+    gcc_assert (!simple_p);
+
   return simple_p ? gen_simple_return () : gen_return ();
-#else
-  gcc_assert (!simple_p);
-  return gen_return ();
-#endif
 }
 
 /* Insert an appropriate return pattern at the end of block BB.  This
@@ -5697,7 +5694,6 @@ emit_return_into_block (bool simple_p, basic_block bb)
   gcc_assert (ANY_RETURN_P (pat));
   JUMP_LABEL (jump) = pat;
 }
-#endif
 
 /* Set JUMP_LABEL for a return insn.  */
 
@@ -5713,7 +5709,6 @@ set_return_jump_label (rtx returnjump)
     JUMP_LABEL (returnjump) = ret_rtx;
 }
 
-#if defined (HAVE_return) || defined (HAVE_simple_return)
 /* Return true if there are any active insns between HEAD and TAIL.  */
 bool
 active_insn_between (rtx_insn *head, rtx_insn *tail)
@@ -5788,15 +5783,13 @@ convert_jumps_to_returns (basic_block last_bb, bool simple_p,
 	    dest = ret_rtx;
 	  if (!redirect_jump (jump, dest, 0))
 	    {
-#ifdef HAVE_simple_return
-	      if (simple_p)
+	      if (HAVE_simple_return && simple_p)
 		{
 		  if (dump_file)
 		    fprintf (dump_file,
 			     "Failed to redirect bb %d branch.\n", bb->index);
 		  unconverted.safe_push (e);
 		}
-#endif
 	      continue;
 	    }
 
@@ -5811,15 +5804,13 @@ convert_jumps_to_returns (basic_block last_bb, bool simple_p,
 	}
       else
 	{
-#ifdef HAVE_simple_return
-	  if (simple_p)
+	  if (HAVE_simple_return && simple_p)
 	    {
 	      if (dump_file)
 		fprintf (dump_file,
 			 "Failed to redirect bb %d branch.\n", bb->index);
 	      unconverted.safe_push (e);
 	    }
-#endif
 	  continue;
 	}
 
@@ -5847,7 +5838,6 @@ emit_return_for_exit (edge exit_fallthru_edge, bool simple_p)
   exit_fallthru_edge->flags &= ~EDGE_FALLTHRU;
   return last_bb;
 }
-#endif
 
 
 /* Generate the prologue and epilogue RTL if the machine supports it.  Thread
@@ -5902,10 +5892,8 @@ void
 thread_prologue_and_epilogue_insns (void)
 {
   bool inserted;
-#ifdef HAVE_simple_return
   vec<edge> unconverted_simple_returns = vNULL;
   bitmap_head bb_flags;
-#endif
   rtx_insn *returnjump;
   rtx_insn *epilogue_end ATTRIBUTE_UNUSED;
   rtx_insn *prologue_seq ATTRIBUTE_UNUSED, *split_prologue_seq ATTRIBUTE_UNUSED;
@@ -5976,7 +5964,6 @@ thread_prologue_and_epilogue_insns (void)
     }
 #endif
 
-#ifdef HAVE_simple_return
   bitmap_initialize (&bb_flags, &bitmap_default_obstack);
 
   /* Try to perform a kind of shrink-wrapping, making sure the
@@ -5984,7 +5971,6 @@ thread_prologue_and_epilogue_insns (void)
      function that require it.  */
 
   try_shrink_wrapping (&entry_edge, orig_entry_edge, &bb_flags, prologue_seq);
-#endif
 
   if (split_prologue_seq != NULL_RTX)
     {
@@ -6009,14 +5995,11 @@ thread_prologue_and_epilogue_insns (void)
 
   exit_fallthru_edge = find_fallthru_edge (EXIT_BLOCK_PTR_FOR_FN (cfun)->preds);
 
-#ifdef HAVE_simple_return
-  if (entry_edge != orig_entry_edge)
+  if (HAVE_simple_return && entry_edge != orig_entry_edge)
     exit_fallthru_edge
 	= get_unconverted_simple_return (exit_fallthru_edge, bb_flags,
 					 &unconverted_simple_returns,
 					 &returnjump);
-#endif
-#ifdef HAVE_return
   if (HAVE_return)
     {
       if (exit_fallthru_edge == NULL)
@@ -6035,17 +6018,16 @@ thread_prologue_and_epilogue_insns (void)
 	    {
 	      last_bb = emit_return_for_exit (exit_fallthru_edge, false);
 	      epilogue_end = returnjump = BB_END (last_bb);
-#ifdef HAVE_simple_return
+
 	      /* Emitting the return may add a basic block.
 		 Fix bb_flags for the added block.  */
-	      if (last_bb != exit_fallthru_edge->src)
+	      if (HAVE_simple_return && last_bb != exit_fallthru_edge->src)
 		bitmap_set_bit (&bb_flags, last_bb->index);
-#endif
+
 	      goto epilogue_done;
 	    }
 	}
     }
-#endif
 
   /* A small fib -- epilogue is not yet completed, but we wish to re-use
      this marker for the splits of EH_RETURN patterns, and nothing else
@@ -6157,10 +6139,9 @@ epilogue_done:
 	}
     }
 
-#ifdef HAVE_simple_return
-  convert_to_simple_return (entry_edge, orig_entry_edge, bb_flags, returnjump,
-			    unconverted_simple_returns);
-#endif
+  if (HAVE_simple_return)
+    convert_to_simple_return (entry_edge, orig_entry_edge, bb_flags,
+			      returnjump, unconverted_simple_returns);
 
 #ifdef HAVE_sibcall_epilogue
   /* Emit sibling epilogues before any sibling call sites.  */
@@ -6174,11 +6155,8 @@ epilogue_done:
 
       if (!CALL_P (insn)
 	  || ! SIBLING_CALL_P (insn)
-#ifdef HAVE_simple_return
-	  || (entry_edge != orig_entry_edge
-	      && !bitmap_bit_p (&bb_flags, bb->index))
-#endif
-	  )
+	  || (HAVE_simple_return && (entry_edge != orig_entry_edge
+				     && !bitmap_bit_p (&bb_flags, bb->index))))
 	{
 	  ei_next (&ei);
 	  continue;
@@ -6225,9 +6203,7 @@ epilogue_done:
     }
 #endif
 
-#ifdef HAVE_simple_return
   bitmap_clear (&bb_flags);
-#endif
 
   /* Threading the prologue and epilogue changes the artificial refs
      in the entry and exit blocks.  */
diff --git a/gcc/reorg.c b/gcc/reorg.c
index 4922a77..a44d4a3 100644
--- a/gcc/reorg.c
+++ b/gcc/reorg.c
@@ -485,11 +485,7 @@ find_end_label (rtx kind)
       else
 	{
 #ifdef HAVE_epilogue
-	  if (HAVE_epilogue
-#ifdef HAVE_return
-	      && ! HAVE_return
-#endif
-	      )
+	  if (HAVE_epilogue && ! HAVE_return)
 	    /* The RETURN insn has its delay slot filled so we cannot
 	       emit the label just before it.  Since we already have
 	       an epilogue and cannot emit a new RETURN, we cannot
@@ -500,7 +496,6 @@ find_end_label (rtx kind)
 	  /* Otherwise, make a new label and emit a RETURN and BARRIER,
 	     if needed.  */
 	  emit_label (label);
-#ifdef HAVE_return
 	  if (HAVE_return)
 	    {
 	      /* The return we make may have delay slots too.  */
@@ -511,7 +506,6 @@ find_end_label (rtx kind)
 	      if (num_delay_slots (insn) > 0)
 		obstack_ptr_grow (&unfilled_slots_obstack, insn);
 	    }
-#endif
 	}
       *plabel = label;
     }
@@ -3825,12 +3819,8 @@ dbr_schedule (rtx_insn *first)
     delete_related_insns (function_simple_return_label);
 
   need_return_insns = false;
-#ifdef HAVE_return
   need_return_insns |= HAVE_return && function_return_label != 0;
-#endif
-#ifdef HAVE_simple_return
   need_return_insns |= HAVE_simple_return && function_simple_return_label != 0;
-#endif
   if (need_return_insns)
     make_return_insns (first);
 
diff --git a/gcc/shrink-wrap.c b/gcc/shrink-wrap.c
index 3928f3d..6c59da9 100644
--- a/gcc/shrink-wrap.c
+++ b/gcc/shrink-wrap.c
@@ -80,7 +80,6 @@ along with GCC; see the file COPYING3.  If not see
 #include "regcprop.h"
 #include "rtl-iter.h"
 
-#ifdef HAVE_simple_return
 
 /* Return true if INSN requires the stack frame to be set up.
    PROLOGUE_USED contains the hard registers used in the function
@@ -1043,5 +1042,3 @@ convert_to_simple_return (edge entry_edge, edge orig_entry_edge,
 	  }
     }
 }
-
-#endif
diff --git a/gcc/shrink-wrap.h b/gcc/shrink-wrap.h
index 2a91e32..8c9582d 100644
--- a/gcc/shrink-wrap.h
+++ b/gcc/shrink-wrap.h
@@ -23,9 +23,6 @@ along with GCC; see the file COPYING3.  If not see
 #include "hashtab.h"
 #include "vec.h"
 #include "machmode.h"
-
-#ifdef HAVE_simple_return
-
 #include "function.h"
 
 /* In shrink-wrap.c.  */
@@ -43,9 +40,6 @@ extern void convert_to_simple_return (edge entry_edge, edge orig_entry_edge,
 				      rtx_insn *returnjump,
 				      vec<edge> unconverted_simple_returns);
 #define SHRINK_WRAPPING_ENABLED (flag_shrink_wrap && HAVE_simple_return)
-#else
-#define SHRINK_WRAPPING_ENABLED false
-#endif
 
 #endif  /* GCC_SHRINK_WRAP_H  */
 
-- 
2.3.0.80.g18d0fec.dirty

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

* [PATCH 4/8] add default for EPILOGUE_USES
  2015-04-27  5:56 [PATCH 0/8] remove more conditional compilation tbsaunde+gcc
  2015-04-27  5:56 ` [PATCH 1/8] add default for NO_FUNCTION_CSE tbsaunde+gcc
  2015-04-27  5:56 ` [PATCH 3/8] add default for PCC_BITFIELD_TYPE_MATTERS tbsaunde+gcc
@ 2015-04-27  5:57 ` tbsaunde+gcc
  2015-04-27  5:57 ` [PATCH 5/8] always define HAVE_simple_return and HAVE_return tbsaunde+gcc
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 31+ messages in thread
From: tbsaunde+gcc @ 2015-04-27  5:57 UTC (permalink / raw)
  To: gcc-patches

From: Trevor Saunders <tbsaunde+gcc@tbsaunde.org>

gcc/ChangeLog:

2015-04-27  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>

	* defaults.h (EPILOGUE_USES): Add default definition of false.
	* df-scan.c (EPILOGUE_USES): Remove check if its undefined.
	* resource.c (init_resource_info): Likewise.
---
 gcc/defaults.h | 4 ++++
 gcc/df-scan.c  | 4 ----
 gcc/resource.c | 6 +-----
 3 files changed, 5 insertions(+), 9 deletions(-)

diff --git a/gcc/defaults.h b/gcc/defaults.h
index 0af7a02..6f915bd 100644
--- a/gcc/defaults.h
+++ b/gcc/defaults.h
@@ -1221,6 +1221,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #define HARD_REGNO_RENAME_OK(FROM, TO) true
 #endif
 
+#ifndef EPILOGUE_USES
+#define EPILOGUE_USES(REG) false
+#endif
+
 #ifdef GCC_INSN_FLAGS_H
 /* Dependent default target macro definitions
 
diff --git a/gcc/df-scan.c b/gcc/df-scan.c
index 4232ec8..9f0e47f 100644
--- a/gcc/df-scan.c
+++ b/gcc/df-scan.c
@@ -72,10 +72,6 @@ typedef struct df_mw_hardreg *df_mw_hardreg_ptr;
 #define HAVE_sibcall_epilogue 0
 #endif
 
-#ifndef EPILOGUE_USES
-#define EPILOGUE_USES(REGNO)  0
-#endif
-
 /* The set of hard registers in eliminables[i].from. */
 
 static HARD_REG_SET elim_reg_set;
diff --git a/gcc/resource.c b/gcc/resource.c
index 26d9fca..ba9de12 100644
--- a/gcc/resource.c
+++ b/gcc/resource.c
@@ -1200,11 +1200,7 @@ init_resource_info (rtx_insn *epilogue_insn)
 			       &end_of_function_needs, true);
 
   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-    if (global_regs[i]
-#ifdef EPILOGUE_USES
-	|| EPILOGUE_USES (i)
-#endif
-	)
+    if (global_regs[i] || EPILOGUE_USES (i))
       SET_HARD_REG_BIT (end_of_function_needs.regs, i);
 
   /* The registers required to be live at the end of the function are
-- 
2.3.0.80.g18d0fec.dirty

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

* Re: [PATCH 3/8] add default for PCC_BITFIELD_TYPE_MATTERS
  2015-04-27  5:56 ` [PATCH 3/8] add default for PCC_BITFIELD_TYPE_MATTERS tbsaunde+gcc
@ 2015-04-29 13:18   ` Andreas Schwab
  2015-04-29 21:54     ` Trevor Saunders
  0 siblings, 1 reply; 31+ messages in thread
From: Andreas Schwab @ 2015-04-29 13:18 UTC (permalink / raw)
  To: tbsaunde+gcc; +Cc: gcc-patches

spawn /daten/aranym/gcc/gcc-20150429/Build/gcc/xgcc -B/daten/aranym/gcc/gcc-20150429/Build/gcc/ /daten/aranym/gcc/gcc-20150429/gcc/testsuite/objc/execute/bf-1.m -fno-diagnostics-show-caret -fdiagnostics-color=never -w -O0 -fgnu-runtime -I/daten/aranym/gcc/gcc-20150429/gcc/testsuite/../../libobjc -B/daten/aranym/gcc/gcc-20150429/Build/m68k-linux/./libobjc/.libs -L/daten/aranym/gcc/gcc-20150429/Build/m68k-linux/./libobjc/.libs -lobjc -lm -o /daten/aranym/gcc/gcc-20150429/Build/gcc/testsuite/objc/bf-1.x0
PASS: objc/execute/bf-1.m compilation,  -O0 -fgnu-runtime
Executing on aranym: OMP_NUM_THREADS=2 LD_LIBRARY_PATH=.::/daten/aranym/gcc/gcc-20150429/Build/gcc:/daten/aranym/gcc/gcc-20150429/Build/m68k-linux/./libobjc/.libs timeout 600 /daten/aranym/gcc/gcc-20150429/Build/gcc/testsuite/objc/bf-1.x0    (timeout = 300)
Executed /daten/aranym/gcc/gcc-20150429/Build/gcc/testsuite/objc/bf-1.x0, status 1
Output: type = {class_vars=#fc{?=b0i2b2i3b5i12}c}
ivar 'isa', type '#', offset 0d
ivar 'f', type 'f', offset 4d
ivar 'a', type 'c', offset 8d
ivar 'flags', type '{?="i"b0i2"j"b2i3"k"b5i12}', offset 9d
ivar 'c', type 'c', offset 12d
real ivar 'isa' offset 0d
computed type '#fc{?=b0i2b2i3b5i12}c}' offset 0
real ivar 'f' offset 4d
computed type 'fc{?=b0i2b2i3b5i12}c}' offset 4
real ivar 'a' offset 8d
computed type 'c{?=b0i2b2i3b5i12}c}' offset 8
real ivar 'flags' offset 9d
computed type '{?=b0i2b2i3b5i12}c}' offset 10
offset 9d and computed position 10 don't match on ivar 'flags' (i = 3)
child process exited abnormally
FAIL: objc/execute/bf-1.m execution,  -O0 -fgnu-runtime

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

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

* Re: [PATCH 3/8] add default for PCC_BITFIELD_TYPE_MATTERS
  2015-04-29 13:18   ` Andreas Schwab
@ 2015-04-29 21:54     ` Trevor Saunders
  2015-04-29 22:00       ` Andreas Schwab
  0 siblings, 1 reply; 31+ messages in thread
From: Trevor Saunders @ 2015-04-29 21:54 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: tbsaunde+gcc, gcc-patches

On Wed, Apr 29, 2015 at 02:35:39PM +0200, Andreas Schwab wrote:
> spawn /daten/aranym/gcc/gcc-20150429/Build/gcc/xgcc -B/daten/aranym/gcc/gcc-20150429/Build/gcc/ /daten/aranym/gcc/gcc-20150429/gcc/testsuite/objc/execute/bf-1.m -fno-diagnostics-show-caret -fdiagnostics-color=never -w -O0 -fgnu-runtime -I/daten/aranym/gcc/gcc-20150429/gcc/testsuite/../../libobjc -B/daten/aranym/gcc/gcc-20150429/Build/m68k-linux/./libobjc/.libs -L/daten/aranym/gcc/gcc-20150429/Build/m68k-linux/./libobjc/.libs -lobjc -lm -o /daten/aranym/gcc/gcc-20150429/Build/gcc/testsuite/objc/bf-1.x0
> PASS: objc/execute/bf-1.m compilation,  -O0 -fgnu-runtime
> Executing on aranym: OMP_NUM_THREADS=2 LD_LIBRARY_PATH=.::/daten/aranym/gcc/gcc-20150429/Build/gcc:/daten/aranym/gcc/gcc-20150429/Build/m68k-linux/./libobjc/.libs timeout 600 /daten/aranym/gcc/gcc-20150429/Build/gcc/testsuite/objc/bf-1.x0    (timeout = 300)
> Executed /daten/aranym/gcc/gcc-20150429/Build/gcc/testsuite/objc/bf-1.x0, status 1
> Output: type = {class_vars=#fc{?=b0i2b2i3b5i12}c}
> ivar 'isa', type '#', offset 0d
> ivar 'f', type 'f', offset 4d
> ivar 'a', type 'c', offset 8d
> ivar 'flags', type '{?="i"b0i2"j"b2i3"k"b5i12}', offset 9d
> ivar 'c', type 'c', offset 12d
> real ivar 'isa' offset 0d
> computed type '#fc{?=b0i2b2i3b5i12}c}' offset 0
> real ivar 'f' offset 4d
> computed type 'fc{?=b0i2b2i3b5i12}c}' offset 4
> real ivar 'a' offset 8d
> computed type 'c{?=b0i2b2i3b5i12}c}' offset 8
> real ivar 'flags' offset 9d
> computed type '{?=b0i2b2i3b5i12}c}' offset 10
> offset 9d and computed position 10 don't match on ivar 'flags' (i = 3)
> child process exited abnormally
> FAIL: objc/execute/bf-1.m execution,  -O0 -fgnu-runtime

it passes for me on x86_64-linux after that commit, what platform is
this?

Trev

> 
> Andreas.
> 
> -- 
> Andreas Schwab, schwab@linux-m68k.org
> GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
> "And now for something completely different."

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

* Re: [PATCH 3/8] add default for PCC_BITFIELD_TYPE_MATTERS
  2015-04-29 21:54     ` Trevor Saunders
@ 2015-04-29 22:00       ` Andreas Schwab
  2015-04-29 22:26         ` Jeff Law
  0 siblings, 1 reply; 31+ messages in thread
From: Andreas Schwab @ 2015-04-29 22:00 UTC (permalink / raw)
  To: Trevor Saunders; +Cc: tbsaunde+gcc, gcc-patches

Trevor Saunders <tbsaunde@tbsaunde.org> writes:

> it passes for me on x86_64-linux after that commit, what platform is
> this?

Any one with #undef PCC_BITFIELD_TYPE_MATTERS.  See libobjc/encoding.c.

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

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

* Re: [PATCH 3/8] add default for PCC_BITFIELD_TYPE_MATTERS
  2015-04-29 22:00       ` Andreas Schwab
@ 2015-04-29 22:26         ` Jeff Law
  2015-04-29 22:30           ` Trevor Saunders
  0 siblings, 1 reply; 31+ messages in thread
From: Jeff Law @ 2015-04-29 22:26 UTC (permalink / raw)
  To: Andreas Schwab, Trevor Saunders; +Cc: tbsaunde+gcc, gcc-patches

On 04/29/2015 03:55 PM, Andreas Schwab wrote:
> Trevor Saunders <tbsaunde@tbsaunde.org> writes:
>
>> it passes for me on x86_64-linux after that commit, what platform is
>> this?
>
> Any one with #undef PCC_BITFIELD_TYPE_MATTERS.  See libobjc/encoding.c.
Can't you just answer the question Andreas instead of making Trevor go 
looking around?  You already have this information, why make his job harder?


Trevor, try m68k-elf cross.

jeff

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

* Re: [PATCH 3/8] add default for PCC_BITFIELD_TYPE_MATTERS
  2015-04-29 22:26         ` Jeff Law
@ 2015-04-29 22:30           ` Trevor Saunders
  2015-04-29 22:33             ` Jeff Law
                               ` (2 more replies)
  0 siblings, 3 replies; 31+ messages in thread
From: Trevor Saunders @ 2015-04-29 22:30 UTC (permalink / raw)
  To: Jeff Law; +Cc: Andreas Schwab, tbsaunde+gcc, gcc-patches

On Wed, Apr 29, 2015 at 04:00:47PM -0600, Jeff Law wrote:
> On 04/29/2015 03:55 PM, Andreas Schwab wrote:
> >Trevor Saunders <tbsaunde@tbsaunde.org> writes:
> >
> >>it passes for me on x86_64-linux after that commit, what platform is
> >>this?
> >
> >Any one with #undef PCC_BITFIELD_TYPE_MATTERS.  See libobjc/encoding.c.
> Can't you just answer the question Andreas instead of making Trevor go
> looking around?  You already have this information, why make his job harder?


actually pointing out libojc/encoding.c was more useful since that makes
it pretty clear the ifndef PCC_BITFIELD_TYPE_MATTERS there just needs to
be changed to #if !

> Trevor, try m68k-elf cross.

ok, lets see if I can get this to work (its an execution test that
breaks, so I'll need to setup binutils and qemu)

Trev

> 
> jeff

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

* Re: [PATCH 3/8] add default for PCC_BITFIELD_TYPE_MATTERS
  2015-04-29 22:30           ` Trevor Saunders
@ 2015-04-29 22:33             ` Jeff Law
  2015-04-30  1:45               ` Trevor Saunders
  2015-04-29 22:40             ` Jeff Law
  2015-04-30  6:58             ` Andreas Schwab
  2 siblings, 1 reply; 31+ messages in thread
From: Jeff Law @ 2015-04-29 22:33 UTC (permalink / raw)
  To: Trevor Saunders; +Cc: Andreas Schwab, tbsaunde+gcc, gcc-patches

On 04/29/2015 04:25 PM, Trevor Saunders wrote:
> On Wed, Apr 29, 2015 at 04:00:47PM -0600, Jeff Law wrote:
>> On 04/29/2015 03:55 PM, Andreas Schwab wrote:
>>> Trevor Saunders <tbsaunde@tbsaunde.org> writes:
>>>
>>>> it passes for me on x86_64-linux after that commit, what platform is
>>>> this?
>>>
>>> Any one with #undef PCC_BITFIELD_TYPE_MATTERS.  See libobjc/encoding.c.
>> Can't you just answer the question Andreas instead of making Trevor go
>> looking around?  You already have this information, why make his job harder?
>
>
> actually pointing out libojc/encoding.c was more useful since that makes
> it pretty clear the ifndef PCC_BITFIELD_TYPE_MATTERS there just needs to
> be changed to #if !
>
>> Trevor, try m68k-elf cross.
>
> ok, lets see if I can get this to work (its an execution test that
> breaks, so I'll need to setup binutils and qemu)
I've actually got a aranym m68k emulator here...  So I can do native 
bootstrapping and testing for m68k linux.  If you want me to test 
something, just let me know -- FWIW, it takes a week or so to bootstrap ;-)

jeff

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

* Re: [PATCH 3/8] add default for PCC_BITFIELD_TYPE_MATTERS
  2015-04-29 22:30           ` Trevor Saunders
  2015-04-29 22:33             ` Jeff Law
@ 2015-04-29 22:40             ` Jeff Law
  2015-04-30  6:58             ` Andreas Schwab
  2 siblings, 0 replies; 31+ messages in thread
From: Jeff Law @ 2015-04-29 22:40 UTC (permalink / raw)
  To: Trevor Saunders; +Cc: Andreas Schwab, tbsaunde+gcc, gcc-patches

On 04/29/2015 04:25 PM, Trevor Saunders wrote:
> On Wed, Apr 29, 2015 at 04:00:47PM -0600, Jeff Law wrote:
>> On 04/29/2015 03:55 PM, Andreas Schwab wrote:
>>> Trevor Saunders <tbsaunde@tbsaunde.org> writes:
>>>
>>>> it passes for me on x86_64-linux after that commit, what platform is
>>>> this?
>>>
>>> Any one with #undef PCC_BITFIELD_TYPE_MATTERS.  See libobjc/encoding.c.
>> Can't you just answer the question Andreas instead of making Trevor go
>> looking around?  You already have this information, why make his job harder?
>
>
> actually pointing out libojc/encoding.c was more useful since that makes
> it pretty clear the ifndef PCC_BITFIELD_TYPE_MATTERS there just needs to
> be changed to #if !
In that case, Andreas, please accept my apologies.

jeff

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

* Re: [PATCH 3/8] add default for PCC_BITFIELD_TYPE_MATTERS
  2015-04-29 22:33             ` Jeff Law
@ 2015-04-30  1:45               ` Trevor Saunders
  2015-04-30  3:24                 ` Trevor Saunders
  0 siblings, 1 reply; 31+ messages in thread
From: Trevor Saunders @ 2015-04-30  1:45 UTC (permalink / raw)
  To: Jeff Law; +Cc: Andreas Schwab, tbsaunde+gcc, gcc-patches

On Wed, Apr 29, 2015 at 04:29:26PM -0600, Jeff Law wrote:
> On 04/29/2015 04:25 PM, Trevor Saunders wrote:
> >On Wed, Apr 29, 2015 at 04:00:47PM -0600, Jeff Law wrote:
> >>On 04/29/2015 03:55 PM, Andreas Schwab wrote:
> >>>Trevor Saunders <tbsaunde@tbsaunde.org> writes:
> >>>
> >>>>it passes for me on x86_64-linux after that commit, what platform is
> >>>>this?
> >>>
> >>>Any one with #undef PCC_BITFIELD_TYPE_MATTERS.  See libobjc/encoding.c.
> >>Can't you just answer the question Andreas instead of making Trevor go
> >>looking around?  You already have this information, why make his job harder?
> >
> >
> >actually pointing out libojc/encoding.c was more useful since that makes
> >it pretty clear the ifndef PCC_BITFIELD_TYPE_MATTERS there just needs to
> >be changed to #if !
> >
> >>Trevor, try m68k-elf cross.
> >
> >ok, lets see if I can get this to work (its an execution test that
> >breaks, so I'll need to setup binutils and qemu)
> I've actually got a aranym m68k emulator here...  So I can do native
> bootstrapping and testing for m68k linux.  If you want me to test something,
> just let me know -- FWIW, it takes a week or so to bootstrap ;-)

Well the fix is just this

diff --git a/libobjc/encoding.c b/libobjc/encoding.c
index 7333908..20ace46 100644
--- a/libobjc/encoding.c
+++ b/libobjc/encoding.c
@@ -1167,7 +1167,7 @@ objc_layout_structure_next_member (struct objc_struct_layout *layout)
   /* Record must have at least as much alignment as any field.
      Otherwise, the alignment of the field within the record
      is meaningless.  */
-#ifndef PCC_BITFIELD_TYPE_MATTERS
+#if !PCC_BITFIELD_TYPE_MATTERS
   layout->record_align = MAX (layout->record_align, desired_align);
 #else	/* PCC_BITFIELD_TYPE_MATTERS */
   if (*type == _C_BFLD)

   I looked at the .i built for m68k-linux-elf before and after the
   patch and it does what I expect it should do and is a pretty obvious
   part that should go with the rest of this patch.

   Obviously something else should be done in the long run at least to
   separate gcc and libobjc configuration, but I can't see an argument
   for that patch not being ok for now so I'm inclined to check it in
   with the current level of testing.

   Trev

> 
> jeff

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

* Re: [PATCH 3/8] add default for PCC_BITFIELD_TYPE_MATTERS
  2015-04-30  1:45               ` Trevor Saunders
@ 2015-04-30  3:24                 ` Trevor Saunders
  2015-04-30  4:13                   ` Jeff Law
  2015-04-30  7:13                   ` Andreas Schwab
  0 siblings, 2 replies; 31+ messages in thread
From: Trevor Saunders @ 2015-04-30  3:24 UTC (permalink / raw)
  To: Jeff Law; +Cc: Andreas Schwab, tbsaunde+gcc, gcc-patches

On Wed, Apr 29, 2015 at 08:13:16PM -0400, Trevor Saunders wrote:
> On Wed, Apr 29, 2015 at 04:29:26PM -0600, Jeff Law wrote:
> > On 04/29/2015 04:25 PM, Trevor Saunders wrote:
> > >On Wed, Apr 29, 2015 at 04:00:47PM -0600, Jeff Law wrote:
> > >>On 04/29/2015 03:55 PM, Andreas Schwab wrote:
> > >>>Trevor Saunders <tbsaunde@tbsaunde.org> writes:
> > >>>
> > >>>>it passes for me on x86_64-linux after that commit, what platform is
> > >>>>this?
> > >>>
> > >>>Any one with #undef PCC_BITFIELD_TYPE_MATTERS.  See libobjc/encoding.c.
> > >>Can't you just answer the question Andreas instead of making Trevor go
> > >>looking around?  You already have this information, why make his job harder?
> > >
> > >
> > >actually pointing out libojc/encoding.c was more useful since that makes
> > >it pretty clear the ifndef PCC_BITFIELD_TYPE_MATTERS there just needs to
> > >be changed to #if !
> > >
> > >>Trevor, try m68k-elf cross.
> > >
> > >ok, lets see if I can get this to work (its an execution test that
> > >breaks, so I'll need to setup binutils and qemu)
> > I've actually got a aranym m68k emulator here...  So I can do native
> > bootstrapping and testing for m68k linux.  If you want me to test something,
> > just let me know -- FWIW, it takes a week or so to bootstrap ;-)
> 
> Well the fix is just this
> 
> diff --git a/libobjc/encoding.c b/libobjc/encoding.c
> index 7333908..20ace46 100644
> --- a/libobjc/encoding.c
> +++ b/libobjc/encoding.c
> @@ -1167,7 +1167,7 @@ objc_layout_structure_next_member (struct objc_struct_layout *layout)
>    /* Record must have at least as much alignment as any field.
>       Otherwise, the alignment of the field within the record
>       is meaningless.  */
> -#ifndef PCC_BITFIELD_TYPE_MATTERS
> +#if !PCC_BITFIELD_TYPE_MATTERS
>    layout->record_align = MAX (layout->record_align, desired_align);
>  #else	/* PCC_BITFIELD_TYPE_MATTERS */
>    if (*type == _C_BFLD)
> 
>    I looked at the .i built for m68k-linux-elf before and after the
>    patch and it does what I expect it should do and is a pretty obvious
>    part that should go with the rest of this patch.
> 
>    Obviously something else should be done in the long run at least to
>    separate gcc and libobjc configuration, but I can't see an argument
>    for that patch not being ok for now so I'm inclined to check it in
>    with the current level of testing.

I decided to commit this, it seems like testing it can be slow on some
targets and I did a bootstrap on x86_64-linux-gnu (with regtest queued)
and it seems very very unlikely to break anything else.

Trev

> 
>    Trev
> 
> > 
> > jeff

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

* Re: [PATCH 3/8] add default for PCC_BITFIELD_TYPE_MATTERS
  2015-04-30  3:24                 ` Trevor Saunders
@ 2015-04-30  4:13                   ` Jeff Law
  2015-04-30  7:13                   ` Andreas Schwab
  1 sibling, 0 replies; 31+ messages in thread
From: Jeff Law @ 2015-04-30  4:13 UTC (permalink / raw)
  To: Trevor Saunders; +Cc: Andreas Schwab, tbsaunde+gcc, gcc-patches

On 04/29/2015 08:10 PM, Trevor Saunders wrote:
>
> I decided to commit this, it seems like testing it can be slow on some
> targets and I did a bootstrap on x86_64-linux-gnu (with regtest queued)
> and it seems very very unlikely to break anything else.
Seems reasonable.    Thanks for taking care of it quickly.

/me wonders if we should have an aranym instance for m68k testing in the 
compile farm.

jeff

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

* Re: [PATCH 3/8] add default for PCC_BITFIELD_TYPE_MATTERS
  2015-04-29 22:30           ` Trevor Saunders
  2015-04-29 22:33             ` Jeff Law
  2015-04-29 22:40             ` Jeff Law
@ 2015-04-30  6:58             ` Andreas Schwab
  2015-04-30 12:34               ` Trevor Saunders
  2 siblings, 1 reply; 31+ messages in thread
From: Andreas Schwab @ 2015-04-30  6:58 UTC (permalink / raw)
  To: Trevor Saunders; +Cc: Jeff Law, tbsaunde+gcc, gcc-patches

Trevor Saunders <tbsaunde@tbsaunde.org> writes:

> actually pointing out libojc/encoding.c was more useful since that makes
> it pretty clear the ifndef PCC_BITFIELD_TYPE_MATTERS there just needs to
> be changed to #if !

That probably won't work on arm or powerpc or vax:

gcc/config/arm/arm.h:#define PCC_BITFIELD_TYPE_MATTERS TARGET_AAPCS_BASED
gcc/config/rs6000/sysv4.h:#define	PCC_BITFIELD_TYPE_MATTERS (TARGET_BITFIELD_TYPE)
gcc/config/vax/vax.h:#define PCC_BITFIELD_TYPE_MATTERS (! TARGET_VAXC_ALIGNMENT)

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

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

* Re: [PATCH 3/8] add default for PCC_BITFIELD_TYPE_MATTERS
  2015-04-30  3:24                 ` Trevor Saunders
  2015-04-30  4:13                   ` Jeff Law
@ 2015-04-30  7:13                   ` Andreas Schwab
  2015-04-30 11:59                     ` Trevor Saunders
  1 sibling, 1 reply; 31+ messages in thread
From: Andreas Schwab @ 2015-04-30  7:13 UTC (permalink / raw)
  To: Trevor Saunders; +Cc: Jeff Law, tbsaunde+gcc, gcc-patches

Trevor Saunders <tbsaunde@tbsaunde.org> writes:

>> diff --git a/libobjc/encoding.c b/libobjc/encoding.c
>> index 7333908..20ace46 100644
>> --- a/libobjc/encoding.c
>> +++ b/libobjc/encoding.c
>> @@ -1167,7 +1167,7 @@ objc_layout_structure_next_member (struct objc_struct_layout *layout)
>>    /* Record must have at least as much alignment as any field.
>>       Otherwise, the alignment of the field within the record
>>       is meaningless.  */
>> -#ifndef PCC_BITFIELD_TYPE_MATTERS
>> +#if !PCC_BITFIELD_TYPE_MATTERS

With `#define PCC_BITFIELD_TYPE_MATTERS true' this expands to `#if
!true' which evaluates to 1 since true isn't a defined identifier?

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

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

* Re: [PATCH 3/8] add default for PCC_BITFIELD_TYPE_MATTERS
  2015-04-30  7:13                   ` Andreas Schwab
@ 2015-04-30 11:59                     ` Trevor Saunders
  2015-04-30 12:17                       ` Jakub Jelinek
  2015-04-30 12:22                       ` Andreas Schwab
  0 siblings, 2 replies; 31+ messages in thread
From: Trevor Saunders @ 2015-04-30 11:59 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: Jeff Law, tbsaunde+gcc, gcc-patches

On Thu, Apr 30, 2015 at 08:54:05AM +0200, Andreas Schwab wrote:
> Trevor Saunders <tbsaunde@tbsaunde.org> writes:
> 
> >> diff --git a/libobjc/encoding.c b/libobjc/encoding.c
> >> index 7333908..20ace46 100644
> >> --- a/libobjc/encoding.c
> >> +++ b/libobjc/encoding.c
> >> @@ -1167,7 +1167,7 @@ objc_layout_structure_next_member (struct objc_struct_layout *layout)
> >>    /* Record must have at least as much alignment as any field.
> >>       Otherwise, the alignment of the field within the record
> >>       is meaningless.  */
> >> -#ifndef PCC_BITFIELD_TYPE_MATTERS
> >> +#if !PCC_BITFIELD_TYPE_MATTERS
> 
> With `#define PCC_BITFIELD_TYPE_MATTERS true' this expands to `#if
> !true' which evaluates to 1 since true isn't a defined identifier?

I think true is a defined identifier since this is compiled as c11.

tbsaunde@iceball:/src/gcc1-opt$ cat test.c
#define FOO true
#if !FOO
hello
#endif
tbsaunde@iceball:/src/gcc1-opt$ gcc/xgcc -B gcc/ -E test.c
# 1 "test.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "test.c"


hello
tbsaunde@iceball:/src/gcc1-opt$

Trev

> 
> Andreas.
> 
> -- 
> Andreas Schwab, schwab@linux-m68k.org
> GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
> "And now for something completely different."

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

* Re: [PATCH 3/8] add default for PCC_BITFIELD_TYPE_MATTERS
  2015-04-30 11:59                     ` Trevor Saunders
@ 2015-04-30 12:17                       ` Jakub Jelinek
  2015-04-30 12:22                       ` Andreas Schwab
  1 sibling, 0 replies; 31+ messages in thread
From: Jakub Jelinek @ 2015-04-30 12:17 UTC (permalink / raw)
  To: Trevor Saunders; +Cc: Andreas Schwab, Jeff Law, tbsaunde+gcc, gcc-patches

On Thu, Apr 30, 2015 at 07:58:33AM -0400, Trevor Saunders wrote:
> On Thu, Apr 30, 2015 at 08:54:05AM +0200, Andreas Schwab wrote:
> > Trevor Saunders <tbsaunde@tbsaunde.org> writes:
> > 
> > >> diff --git a/libobjc/encoding.c b/libobjc/encoding.c
> > >> index 7333908..20ace46 100644
> > >> --- a/libobjc/encoding.c
> > >> +++ b/libobjc/encoding.c
> > >> @@ -1167,7 +1167,7 @@ objc_layout_structure_next_member (struct objc_struct_layout *layout)
> > >>    /* Record must have at least as much alignment as any field.
> > >>       Otherwise, the alignment of the field within the record
> > >>       is meaningless.  */
> > >> -#ifndef PCC_BITFIELD_TYPE_MATTERS
> > >> +#if !PCC_BITFIELD_TYPE_MATTERS
> > 
> > With `#define PCC_BITFIELD_TYPE_MATTERS true' this expands to `#if
> > !true' which evaluates to 1 since true isn't a defined identifier?
> 
> I think true is a defined identifier since this is compiled as c11.

true is not a defined identifier, neither in C89, nor in C99, nor in C11.
In C, true may be a macro if stdbool.h is included.
system.h has:
#undef TRUE
#undef FALSE

#ifdef __cplusplus
  /* Obsolete.  */
# define TRUE true
# define FALSE false
#else /* !__cplusplus */
# undef bool
# undef true
# undef false

# define bool unsigned char
# define true 1
# define false 0

  /* Obsolete.  */
# define TRUE true
# define FALSE false
#endif /* !__cplusplus */
if it is included.

	Jakub

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

* Re: [PATCH 3/8] add default for PCC_BITFIELD_TYPE_MATTERS
  2015-04-30 11:59                     ` Trevor Saunders
  2015-04-30 12:17                       ` Jakub Jelinek
@ 2015-04-30 12:22                       ` Andreas Schwab
  1 sibling, 0 replies; 31+ messages in thread
From: Andreas Schwab @ 2015-04-30 12:22 UTC (permalink / raw)
  To: Trevor Saunders; +Cc: Jeff Law, tbsaunde+gcc, gcc-patches

Trevor Saunders <tbsaunde@tbsaunde.org> writes:

> I think true is a defined identifier since this is compiled as c11.
>
> tbsaunde@iceball:/src/gcc1-opt$ cat test.c
> #define FOO true
> #if !FOO
> hello
> #endif
> tbsaunde@iceball:/src/gcc1-opt$ gcc/xgcc -B gcc/ -E test.c
> # 1 "test.c"
> # 1 "<built-in>"
> # 1 "<command-line>"
> # 1 "/usr/include/stdc-predef.h" 1 3 4
> # 1 "<command-line>" 2
> # 1 "test.c"
>
>
> hello

Since you get hello this proves that true is *not* defined.

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

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

* Re: [PATCH 3/8] add default for PCC_BITFIELD_TYPE_MATTERS
  2015-04-30  6:58             ` Andreas Schwab
@ 2015-04-30 12:34               ` Trevor Saunders
  2015-04-30 12:39                 ` Jakub Jelinek
  0 siblings, 1 reply; 31+ messages in thread
From: Trevor Saunders @ 2015-04-30 12:34 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: Jeff Law, tbsaunde+gcc, gcc-patches

On Thu, Apr 30, 2015 at 08:40:50AM +0200, Andreas Schwab wrote:
> Trevor Saunders <tbsaunde@tbsaunde.org> writes:
> 
> > actually pointing out libojc/encoding.c was more useful since that makes
> > it pretty clear the ifndef PCC_BITFIELD_TYPE_MATTERS there just needs to
> > be changed to #if !
> 
> That probably won't work on arm or powerpc or vax:
> 
> gcc/config/arm/arm.h:#define PCC_BITFIELD_TYPE_MATTERS TARGET_AAPCS_BASED
> gcc/config/rs6000/sysv4.h:#define	PCC_BITFIELD_TYPE_MATTERS (TARGET_BITFIELD_TYPE)
> gcc/config/vax/vax.h:#define PCC_BITFIELD_TYPE_MATTERS (! TARGET_VAXC_ALIGNMENT)

hrmph, I don't see how this code ever worked correctly on those targets.
Consider the arm case the value of PCC_BITFIELD_TYPE_MATTERS depends on
arm_abi so if the bitfield type matters depends on what abi libobjc is
being built for, but its not obvious how libobjc is dealing with that.
I suppose it could be that libobjc is using this macro to know something
else that only sort of relaed somehow.  Unfortunately this code seems to
come from the creation of libobjc/ in 11998 and though the commit says
it is a move from gcc/objc/ nothing appears to have been removed from
gcc/objc/.

I guess the "best" thing to do is justadd a
__PCC_BITFIELD_TYPE_MATTERS__ that gcc defines and use that in libobjc?

Trev

> 
> Andreas.
> 
> -- 
> Andreas Schwab, schwab@linux-m68k.org
> GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
> "And now for something completely different."

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

* Re: [PATCH 3/8] add default for PCC_BITFIELD_TYPE_MATTERS
  2015-04-30 12:34               ` Trevor Saunders
@ 2015-04-30 12:39                 ` Jakub Jelinek
  2015-04-30 13:07                   ` Trevor Saunders
  2015-04-30 17:50                   ` Joseph Myers
  0 siblings, 2 replies; 31+ messages in thread
From: Jakub Jelinek @ 2015-04-30 12:39 UTC (permalink / raw)
  To: Trevor Saunders; +Cc: Andreas Schwab, Jeff Law, tbsaunde+gcc, gcc-patches

On Thu, Apr 30, 2015 at 08:25:14AM -0400, Trevor Saunders wrote:
> On Thu, Apr 30, 2015 at 08:40:50AM +0200, Andreas Schwab wrote:
> > Trevor Saunders <tbsaunde@tbsaunde.org> writes:
> > 
> > > actually pointing out libojc/encoding.c was more useful since that makes
> > > it pretty clear the ifndef PCC_BITFIELD_TYPE_MATTERS there just needs to
> > > be changed to #if !
> > 
> > That probably won't work on arm or powerpc or vax:
> > 
> > gcc/config/arm/arm.h:#define PCC_BITFIELD_TYPE_MATTERS TARGET_AAPCS_BASED
> > gcc/config/rs6000/sysv4.h:#define	PCC_BITFIELD_TYPE_MATTERS (TARGET_BITFIELD_TYPE)
> > gcc/config/vax/vax.h:#define PCC_BITFIELD_TYPE_MATTERS (! TARGET_VAXC_ALIGNMENT)
> 
> hrmph, I don't see how this code ever worked correctly on those targets.
> Consider the arm case the value of PCC_BITFIELD_TYPE_MATTERS depends on
> arm_abi so if the bitfield type matters depends on what abi libobjc is
> being built for, but its not obvious how libobjc is dealing with that.
> I suppose it could be that libobjc is using this macro to know something
> else that only sort of relaed somehow.  Unfortunately this code seems to
> come from the creation of libobjc/ in 11998 and though the commit says
> it is a move from gcc/objc/ nothing appears to have been removed from
> gcc/objc/.
> 
> I guess the "best" thing to do is justadd a
> __PCC_BITFIELD_TYPE_MATTERS__ that gcc defines and use that in libobjc?

I think adding way too many predefines, especially rarely used ones, is
harmful, certainly it isn't free, consider -g3 or -dD where it will all end
up in, additional gcc start overhead, ... 
Can't just libobjc configury test for that?

	Jakub

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

* Re: [PATCH 3/8] add default for PCC_BITFIELD_TYPE_MATTERS
  2015-04-30 12:39                 ` Jakub Jelinek
@ 2015-04-30 13:07                   ` Trevor Saunders
  2015-04-30 17:50                   ` Joseph Myers
  1 sibling, 0 replies; 31+ messages in thread
From: Trevor Saunders @ 2015-04-30 13:07 UTC (permalink / raw)
  To: Jakub Jelinek; +Cc: Andreas Schwab, Jeff Law, tbsaunde+gcc, gcc-patches

On Thu, Apr 30, 2015 at 02:33:44PM +0200, Jakub Jelinek wrote:
> On Thu, Apr 30, 2015 at 08:25:14AM -0400, Trevor Saunders wrote:
> > On Thu, Apr 30, 2015 at 08:40:50AM +0200, Andreas Schwab wrote:
> > > Trevor Saunders <tbsaunde@tbsaunde.org> writes:
> > > 
> > > > actually pointing out libojc/encoding.c was more useful since that makes
> > > > it pretty clear the ifndef PCC_BITFIELD_TYPE_MATTERS there just needs to
> > > > be changed to #if !
> > > 
> > > That probably won't work on arm or powerpc or vax:
> > > 
> > > gcc/config/arm/arm.h:#define PCC_BITFIELD_TYPE_MATTERS TARGET_AAPCS_BASED
> > > gcc/config/rs6000/sysv4.h:#define	PCC_BITFIELD_TYPE_MATTERS (TARGET_BITFIELD_TYPE)
> > > gcc/config/vax/vax.h:#define PCC_BITFIELD_TYPE_MATTERS (! TARGET_VAXC_ALIGNMENT)
> > 
> > hrmph, I don't see how this code ever worked correctly on those targets.
> > Consider the arm case the value of PCC_BITFIELD_TYPE_MATTERS depends on
> > arm_abi so if the bitfield type matters depends on what abi libobjc is
> > being built for, but its not obvious how libobjc is dealing with that.
> > I suppose it could be that libobjc is using this macro to know something
> > else that only sort of relaed somehow.  Unfortunately this code seems to
> > come from the creation of libobjc/ in 11998 and though the commit says
> > it is a move from gcc/objc/ nothing appears to have been removed from
> > gcc/objc/.
> > 
> > I guess the "best" thing to do is justadd a
> > __PCC_BITFIELD_TYPE_MATTERS__ that gcc defines and use that in libobjc?
> 
> I think adding way too many predefines, especially rarely used ones, is
> harmful, certainly it isn't free, consider -g3 or -dD where it will all end
> up in, additional gcc start overhead, ... 

there was a reason I said "best" I don't think its a great design
either.

> Can't just libobjc configury test for that?

I suppose it can test what happens with alignment of different types in
structs.  I guess I'm not really awake yet, and I'm pretty wary of
this since I really have no idea what its trying to do.

Trev

> 
> 	Jakub

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

* Re: [PATCH 3/8] add default for PCC_BITFIELD_TYPE_MATTERS
  2015-04-30 12:39                 ` Jakub Jelinek
  2015-04-30 13:07                   ` Trevor Saunders
@ 2015-04-30 17:50                   ` Joseph Myers
  2015-05-01  0:01                     ` Trevor Saunders
  1 sibling, 1 reply; 31+ messages in thread
From: Joseph Myers @ 2015-04-30 17:50 UTC (permalink / raw)
  To: Jakub Jelinek
  Cc: Trevor Saunders, Andreas Schwab, Jeff Law, tbsaunde+gcc, gcc-patches

On Thu, 30 Apr 2015, Jakub Jelinek wrote:

> > I guess the "best" thing to do is justadd a
> > __PCC_BITFIELD_TYPE_MATTERS__ that gcc defines and use that in libobjc?
> 
> I think adding way too many predefines, especially rarely used ones, is
> harmful, certainly it isn't free, consider -g3 or -dD where it will all end
> up in, additional gcc start overhead, ... 

That's why we have -fbuilding-libgcc.  It would seem reasonable enough to 
me to use that when building other target libraries that need such 
information.

(See bug 24775 regarding the general issue with libobjc using GCC's struct 
layout target macros - I think there was an idea of a way to rework that 
libobjc code, but haven't looked at the details of Andrew Pinski's old 
work referred to in that bug; -fbuilding-libgcc may not be the optimal way 
of dealing with PCC_BITFIELD_TYPE_MATTERS, but ought to work as an interim 
fix.  More generally, regarding host-side target macros used in target 
code, see my suggestions at 
<https://gcc.gnu.org/wiki/Top-Level_Libgcc_Migration>.  It's always 
necessary, when changing the semantics of a target macro or converting it 
into a hook, to watch out for uses outside the gcc/ directory, until all 
the remaining uses in target code have been dealt with.)

-- 
Joseph S. Myers
joseph@codesourcery.com

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

* Re: [PATCH 3/8] add default for PCC_BITFIELD_TYPE_MATTERS
  2015-04-30 17:50                   ` Joseph Myers
@ 2015-05-01  0:01                     ` Trevor Saunders
  0 siblings, 0 replies; 31+ messages in thread
From: Trevor Saunders @ 2015-05-01  0:01 UTC (permalink / raw)
  To: Joseph Myers
  Cc: Jakub Jelinek, Andreas Schwab, Jeff Law, tbsaunde+gcc, gcc-patches

On Thu, Apr 30, 2015 at 05:41:57PM +0000, Joseph Myers wrote:
> On Thu, 30 Apr 2015, Jakub Jelinek wrote:
> 
> > > I guess the "best" thing to do is justadd a
> > > __PCC_BITFIELD_TYPE_MATTERS__ that gcc defines and use that in libobjc?
> > 
> > I think adding way too many predefines, especially rarely used ones, is
> > harmful, certainly it isn't free, consider -g3 or -dD where it will all end
> > up in, additional gcc start overhead, ... 
> 
> That's why we have -fbuilding-libgcc.  It would seem reasonable enough to 
> me to use that when building other target libraries that need such 
> information.
> 
> (See bug 24775 regarding the general issue with libobjc using GCC's struct 
> layout target macros - I think there was an idea of a way to rework that 
> libobjc code, but haven't looked at the details of Andrew Pinski's old 
> work referred to in that bug; -fbuilding-libgcc may not be the optimal way 
> of dealing with PCC_BITFIELD_TYPE_MATTERS, but ought to work as an interim 

I think I saw this and forgot about it and then resaw it just now in
documenting this macro tm.texi provides a program that supposedly can
check the behavior of the compiler here so writing a autoconf test seems
about as simple as it can get when m4 is involved.

> fix.  More generally, regarding host-side target macros used in target 
> code, see my suggestions at 
> <https://gcc.gnu.org/wiki/Top-Level_Libgcc_Migration>.  It's always 
> necessary, when changing the semantics of a target macro or converting it 
> into a hook, to watch out for uses outside the gcc/ directory, until all 
> the remaining uses in target code have been dealt with.)

if we want to be pedantic this patch didn't actually change semantics,
here's what tm.texi says.

If the macro is defined, its definition should be a C expression;
a nonzero value for the expression enables this behavior.

Note that if this macro is not defined, or its value is zero, some
bit-fields may cross more than one alignment boundary.  The compiler can
support such references if there are @samp{insv}, @samp{extv}, and
@samp{extzv} insns that can directly reference memory.

so, its valid for PCC_BITFIELD_TYPE_MATTERS to be defined to 0 in
defaults.h.  Of course documentation should never really be trusted that
much and its still broken :)

Trev

> 
> -- 
> Joseph S. Myers
> joseph@codesourcery.com

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

* Re: [PATCH 5/8] always define HAVE_simple_return and HAVE_return
  2015-04-27  5:57 ` [PATCH 5/8] always define HAVE_simple_return and HAVE_return tbsaunde+gcc
@ 2015-05-06  1:13   ` Mike Stump
  2015-05-06  3:16     ` Trevor Saunders
  0 siblings, 1 reply; 31+ messages in thread
From: Mike Stump @ 2015-05-06  1:13 UTC (permalink / raw)
  To: tbsaunde+gcc; +Cc: gcc-patches

On Apr 26, 2015, at 10:55 PM, tbsaunde+gcc@tbsaunde.org wrote:
> From: Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
> 
> gcc/ChangeLog:
> 
> 2015-04-27  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>
> 
> 	* bb-reorder.c (HAVE_return): Don't check if its undefined.
> 	* defaults.h (gen_simple_return): New function.
> 	(gen_simple_return): Likewise.
> 	(HAVE_return): Add default definition to false.
> 	(HAVE_simple_return): Likewise.
> 	* cfgrtl.c (force_nonfallthru_and_redirect): Remove checks if
> 	HAVE_return and HAVE_simple_return are defined.
> 	* function.c (gen_return_pattern): Likewise.
> 	(convert_jumps_to_returns): Likewise.
> 	(thread_prologue_and_epilogue_insns): Likewise.
> 	* reorg.c (find_end_label): Likewise.
> 	(dbr_schedule): Likewise.
> 	* shrink-wrap.c: Likewise.
> 	* shrink-wrap.h: Likewise.

I’m seeing:

In file included from ./tm.h:30:0,
                 from ../../gcc/gcc/c-family/c-semantics.c:24:
../../gcc/gcc/defaults.h: In function ‘rtx_def* gen_simple_return()’:
../../gcc/gcc/defaults.h:1422:1: error: redefinition of ‘rtx_def* gen_simple_return()’
 gen_simple_return ()
 ^
In file included from ./tm.h:22:0,
                 from ../../gcc/gcc/c-family/c-semantics.c:24:
./insn-flags.h:1744:1: error: ‘rtx_def* gen_simple_return()’ previously defined here
 gen_simple_return(void)
 ^

in my port.

I have a simple_return and a return that is “0” enabled.

defaults.h has:

#ifndef HAVE_simple_return
#define HAVE_simple_return 0
static inline rtx
gen_simple_return ()
{
  gcc_unreachable ();
  return NULL;
}
#endif

and insn-flags.h has:

static inline rtx gen_simple_return                                      (void);
static inline rtx
gen_simple_return(void)
{
  return 0;
}

If I change the enable to “1” or “” then it compiles better.  Also, I can delete the pattern or change the name of the pattern and it works ok as well.

If they both did #ifndef HAVE_simple_return, and then insn-flags did #define HAVE_simple_return 0, I think it might work better.  I’ve not thought about it much.

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

* Re: [PATCH 5/8] always define HAVE_simple_return and HAVE_return
  2015-05-06  1:13   ` Mike Stump
@ 2015-05-06  3:16     ` Trevor Saunders
  0 siblings, 0 replies; 31+ messages in thread
From: Trevor Saunders @ 2015-05-06  3:16 UTC (permalink / raw)
  To: Mike Stump; +Cc: tbsaunde+gcc, gcc-patches

On Tue, May 05, 2015 at 06:12:50PM -0700, Mike Stump wrote:
> On Apr 26, 2015, at 10:55 PM, tbsaunde+gcc@tbsaunde.org wrote:
> > From: Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
> > 
> > gcc/ChangeLog:
> > 
> > 2015-04-27  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>
> > 
> > 	* bb-reorder.c (HAVE_return): Don't check if its undefined.
> > 	* defaults.h (gen_simple_return): New function.
> > 	(gen_simple_return): Likewise.
> > 	(HAVE_return): Add default definition to false.
> > 	(HAVE_simple_return): Likewise.
> > 	* cfgrtl.c (force_nonfallthru_and_redirect): Remove checks if
> > 	HAVE_return and HAVE_simple_return are defined.
> > 	* function.c (gen_return_pattern): Likewise.
> > 	(convert_jumps_to_returns): Likewise.
> > 	(thread_prologue_and_epilogue_insns): Likewise.
> > 	* reorg.c (find_end_label): Likewise.
> > 	(dbr_schedule): Likewise.
> > 	* shrink-wrap.c: Likewise.
> > 	* shrink-wrap.h: Likewise.
> 
> I’m seeing:
> 
> In file included from ./tm.h:30:0,
>                  from ../../gcc/gcc/c-family/c-semantics.c:24:
> ../../gcc/gcc/defaults.h: In function ‘rtx_def* gen_simple_return()’:
> ../../gcc/gcc/defaults.h:1422:1: error: redefinition of ‘rtx_def* gen_simple_return()’
>  gen_simple_return ()
>  ^
> In file included from ./tm.h:22:0,
>                  from ../../gcc/gcc/c-family/c-semantics.c:24:
> ./insn-flags.h:1744:1: error: ‘rtx_def* gen_simple_return()’ previously defined here
>  gen_simple_return(void)
>  ^
> 
> in my port.
> 
> I have a simple_return and a return that is “0” enabled.
> 
> defaults.h has:
> 
> #ifndef HAVE_simple_return
> #define HAVE_simple_return 0
> static inline rtx
> gen_simple_return ()
> {
>   gcc_unreachable ();
>   return NULL;
> }
> #endif
> 
> and insn-flags.h has:
> 
> static inline rtx gen_simple_return                                      (void);
> static inline rtx
> gen_simple_return(void)
> {
>   return 0;
> }
> 
> If I change the enable to “1” or “” then it compiles better.  Also, I can delete the pattern or change the name of the pattern and it works ok as well.
> 
> If they both did #ifndef HAVE_simple_return, and then insn-flags did #define HAVE_simple_return 0, I think it might work better.  I’ve not thought about it much.

hrm, I didn't realize you could sometimes get a dummy function in
insn-flags.h (especially without it defining the macro that seems kind
of broken on genflags' part).  What I think we could actually do is
change genflags to #define HAVE_x 0 if it is going to emit the static
function and some how have a list of insns that always get emited so you
don't need the define_insn with enabled = 0 in every target's md file.
The one big trick with this is that all the #ifdef HAVE_foo need to be
updated so it'll take a little time.

Trev

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

end of thread, other threads:[~2015-05-06  3:16 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-04-27  5:56 [PATCH 0/8] remove more conditional compilation tbsaunde+gcc
2015-04-27  5:56 ` [PATCH 1/8] add default for NO_FUNCTION_CSE tbsaunde+gcc
2015-04-27  5:56 ` [PATCH 3/8] add default for PCC_BITFIELD_TYPE_MATTERS tbsaunde+gcc
2015-04-29 13:18   ` Andreas Schwab
2015-04-29 21:54     ` Trevor Saunders
2015-04-29 22:00       ` Andreas Schwab
2015-04-29 22:26         ` Jeff Law
2015-04-29 22:30           ` Trevor Saunders
2015-04-29 22:33             ` Jeff Law
2015-04-30  1:45               ` Trevor Saunders
2015-04-30  3:24                 ` Trevor Saunders
2015-04-30  4:13                   ` Jeff Law
2015-04-30  7:13                   ` Andreas Schwab
2015-04-30 11:59                     ` Trevor Saunders
2015-04-30 12:17                       ` Jakub Jelinek
2015-04-30 12:22                       ` Andreas Schwab
2015-04-29 22:40             ` Jeff Law
2015-04-30  6:58             ` Andreas Schwab
2015-04-30 12:34               ` Trevor Saunders
2015-04-30 12:39                 ` Jakub Jelinek
2015-04-30 13:07                   ` Trevor Saunders
2015-04-30 17:50                   ` Joseph Myers
2015-05-01  0:01                     ` Trevor Saunders
2015-04-27  5:57 ` [PATCH 4/8] add default for EPILOGUE_USES tbsaunde+gcc
2015-04-27  5:57 ` [PATCH 5/8] always define HAVE_simple_return and HAVE_return tbsaunde+gcc
2015-05-06  1:13   ` Mike Stump
2015-05-06  3:16     ` Trevor Saunders
2015-04-27  5:57 ` [PATCH 8/8] remove #if ARGS_GROW_DOWNWARD tbsaunde+gcc
2015-04-27  5:57 ` [PATCH 7/8] always define ARGS_GROW_DOWNWARD tbsaunde+gcc
2015-04-27  5:57 ` [PATCH 6/8] always define HAVE_epilogue tbsaunde+gcc
2015-04-27  5:57 ` [PATCH 2/8] add default for HARD_REGNO_RENAME_OK tbsaunde+gcc

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).