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


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

Re: GCC build failed with your patch.



The problem is this change:

> +Sun Jul 30 20:42:21 MET DST 2000  Jan Hubicka  <jh@suse.cz>
> +
> +	* gcse.c (try_replace_reg): Use validate_replace_rtx_subexp
> +	instead of replace_rtx.
> +	* recog.c (validate_replace_rtx_subexp): New function.
> +	* recog.h (validate_replace_rtx_subexp): Declare.
> +

It is being called with

(insn 77 75 79 (set (reg:DF 95)
        (reg:DF 3 r3)) 290 {*movdf_softfloat32} (nil)
    (insn_list:REG_RETVAL 72 (expr_list:REG_EQUAL (expr_list (symbol_ref:SI ("__adddf3"))
                (expr_list (reg:DF 90)
                    (expr_list (reg:DF 89)
                        (nil))))
            (nil))))

and it doesn't seem to be stopping at the NULL_RTX at the end of the
EXPR_LIST.  replace_rtx explicitly takes care of this case:

1986      /* Allow this function to make replacements in EXPR_LISTs.  */
1987      if (x == 0)
1988        return 0;

To bring gcc back to compile-land, I will add similar code to
validate_replace_rtx_1:

2000-07-31  Geoff Keating  <geoffk@cygnus.com>

	* recog.c (validate_replace_rtx_1): Ignore NULL_RTX input.

Index: recog.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/recog.c,v
retrieving revision 1.69
diff -p -u -c -r1.69 recog.c
cvs server: conflicting specifications of output style
*** recog.c	2000/07/30 23:57:56	1.69
--- recog.c	2000/07/31 08:29:17
*************** validate_replace_rtx_1 (loc, from, to, o
*** 409,415 ****
    register int i, j;
    register const char *fmt;
    register rtx x = *loc;
!   enum rtx_code code = GET_CODE (x);
  
    /* X matches FROM if it is the same rtx or they are both referring to the
       same register in the same mode.  Avoid calling rtx_equal_p unless the
--- 409,421 ----
    register int i, j;
    register const char *fmt;
    register rtx x = *loc;
!   enum rtx_code code;
!   
!   /* Allow this function to make replacements in EXPR_LISTs.  */
!   if (x == 0)
!     return 0;
! 
!   code = GET_CODE (x);
  
    /* X matches FROM if it is the same rtx or they are both referring to the
       same register in the same mode.  Avoid calling rtx_equal_p unless the


... which I'll commit once I've tested it.
-- 
- Geoffrey Keating <geoffk@cygnus.com>

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