This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[patch] avr: Fix PR target/12721.
- From: Kazu Hirata <kazu at cs dot umass dot edu>
- To: gcc-patches at gcc dot gnu dot org
- Cc: denisc at overta dot ru, marekm at amelek dot gda dot pl, zack at codesourcery dot com
- Date: Wed, 24 Dec 2003 15:30:54 -0500 (EST)
- Subject: [patch] avr: Fix PR target/12721.
Hi,
Attached is a patch to fix PR target/12721.
The port uses global variables tmp_reg_rtx and zero_reg_rtx. They
used to be initialized in avr_init_once, called from
INIT_TARGET_OPTABS. After Zack zapped INIT_TARGET_OPTABS with
http://gcc.gnu.org/ml/gcc-patches/2003-10/msg00091.html
nobody calls avr_init_once() anymore, leaving the above global
variables uninitialized.
The patch restores the initialization in avr_override_options(),
called from OVERRIDE_OPTIONS and make these variable GC-safe at the
same time.
The patch also removes ldi_reg_rtx as it is unused.
Built avr-elf. OK to apply?
Kazu Hirata
2003-12-24 Kazu Hirata <kazu@cs.umass.edu>
PR target/12721.
* config/avr/avr.c: Include ggc.h.
(tmp_reg_rtx): Declare with GTY.
(zero_reg_rtx): Likewise.
(ldi_reg_rtx): Remove.
(avr_override_options): Initialize zero_reg_rtx and
ldi_reg_rtx.
(avr_init): Remove.
Include gt-avr.h.
* config/avr/avr.h (LDI_REG_REGNO): Remove.
Remove externs for tmp_reg_rtx, zero_reg_rtx, and ldi_reg_rtx.
Index: avr.c
===================================================================
RCS file: /home/kazu/nobackup/gcc-cvs/gcc/gcc/config/avr/avr.c,v
retrieving revision 1.103
diff -c -p -r1.103 avr.c
*** avr.c 13 Oct 2003 08:40:44 -0000 1.103
--- avr.c 24 Dec 2003 20:05:42 -0000
***************
*** 39,44 ****
--- 39,45 ----
#include "obstack.h"
#include "function.h"
#include "recog.h"
+ #include "ggc.h"
#include "tm_p.h"
#include "target.h"
#include "target-def.h"
*************** static int avr_address_cost (rtx);
*** 81,94 ****
#define FIRST_CUM_REG 26
/* Temporary register RTX (gen_rtx (REG,QImode,TMP_REGNO)) */
! rtx tmp_reg_rtx;
/* Zeroed register RTX (gen_rtx (REG,QImode,ZERO_REGNO)) */
! rtx zero_reg_rtx;
!
! /* RTX for register which will be used for loading immediate values to
! r0-r15 registers. */
! rtx ldi_reg_rtx;
/* AVR register names {"r0", "r1", ..., "r31"} */
static const char *const avr_regnames[] = REGISTER_NAMES;
--- 82,91 ----
#define FIRST_CUM_REG 26
/* Temporary register RTX (gen_rtx (REG,QImode,TMP_REGNO)) */
! static GTY(()) rtx tmp_reg_rtx;
/* Zeroed register RTX (gen_rtx (REG,QImode,ZERO_REGNO)) */
! static GTY(()) rtx zero_reg_rtx;
/* AVR register names {"r0", "r1", ..., "r31"} */
static const char *const avr_regnames[] = REGISTER_NAMES;
*************** avr_override_options (void)
*** 274,302 ****
if (optimize && !TARGET_NO_TABLEJUMP)
avr_case_values_threshold = (!AVR_MEGA || TARGET_CALL_PROLOGUES) ? 8 : 17;
- }
! #if 0 /* Does not play nice with GC. FIXME. */
! /* Initialize TMP_REG_RTX and ZERO_REG_RTX */
! void
! avr_init_once (void)
! {
! tmp_reg_rtx = xcalloc (1, sizeof (struct rtx_def) + 1 * sizeof (rtunion));
! PUT_CODE (tmp_reg_rtx, REG);
! PUT_MODE (tmp_reg_rtx, QImode);
! XINT (tmp_reg_rtx, 0) = TMP_REGNO;
!
! zero_reg_rtx = xcalloc (1, sizeof (struct rtx_def) + 1 * sizeof (rtunion));
! PUT_CODE (zero_reg_rtx, REG);
! PUT_MODE (zero_reg_rtx, QImode);
! XINT (zero_reg_rtx, 0) = ZERO_REGNO;
!
! ldi_reg_rtx = xcalloc (1, sizeof (struct rtx_def) + 1 * sizeof (rtunion));
! PUT_CODE (ldi_reg_rtx, REG);
! PUT_MODE (ldi_reg_rtx, QImode);
! XINT (ldi_reg_rtx, 0) = LDI_REG_REGNO;
}
- #endif
/* return register class from register number */
--- 271,280 ----
if (optimize && !TARGET_NO_TABLEJUMP)
avr_case_values_threshold = (!AVR_MEGA || TARGET_CALL_PROLOGUES) ? 8 : 17;
! tmp_reg_rtx = gen_rtx_REG (QImode, TMP_REGNO);
! zero_reg_rtx = gen_rtx_REG (QImode, ZERO_REGNO);
}
/* return register class from register number */
*************** avr_asm_out_dtor (rtx symbol, int priori
*** 5389,5391 ****
--- 5367,5370 ----
default_dtor_section_asm_out_destructor (symbol, priority);
}
+ #include "gt-avr.h"
Index: avr.h
===================================================================
RCS file: /home/kazu/nobackup/gcc-cvs/gcc/gcc/config/avr/avr.h,v
retrieving revision 1.92
diff -c -p -r1.92 avr.h
*** avr.h 21 Dec 2003 07:29:35 -0000 1.92
--- avr.h 24 Dec 2003 20:01:57 -0000
*************** extern int avr_case_values_threshold;
*** 2482,2492 ****
/* zero register r1 */
#define ZERO_REGNO 1
- /* Temporary register which used for load immediate values to r0-r15 */
- #define LDI_REG_REGNO 31
-
- extern struct rtx_def *tmp_reg_rtx;
- extern struct rtx_def *zero_reg_rtx;
- extern struct rtx_def *ldi_reg_rtx;
-
#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
--- 2482,2485 ----