This is the mail archive of the gcc@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]
Other format: [Raw text]

Re: GCC trunk SPEC2000 performance


Jan Hubicka <jh@suse.cz> writes:

>> Yes, that seems to be the same failure:
>> /usr/src/SpecTests/d-permanent/i686/install-200206200731/bin/g77 -c -o apsi.o -O3 -fomit-frame-pointer -march=athlon -funroll-all-loops -fstrict-aliasing -malign-double -fprefetch-loop-arrays  apsi.f
>> apsi.f: In subroutine `uvset':
>> apsi.f:4327: internal compiler error: RTL flag check: REG_POINTER used with unexpected rtx code `mem' in copy_rtx_and_substitute, at integrate.c:2065
>> Please submit a full bug report,
>> with preprocessed source if appropriate.
>> See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
>> specmake: *** [apsi.o] Error 1

> Hmm, obvious fix appears to be the patch attached.  I am not at all sure
> whether it is the sane fix, as I don't understand the difference between
> first and second operand of addressof (need for the second operand).
> I also can't test whether it works, as I don't have SPEC sources here.

I've done a complete bootstrap and regtest on i686-linux-gnu with no
regressions and used the resulting compiler to compile apsi.f which
was successfull.

So, is this the right solution or does it just work by chance?

Andreas

>
> Index: integrate.c
> ===================================================================
> RCS file: /cvs/gcc/egcs/gcc/integrate.c,v
> retrieving revision 1.197
> diff -c -3 -p -r1.197 integrate.c
> *** integrate.c	11 Jun 2002 12:21:46 -0000	1.197
> --- integrate.c	20 Jun 2002 15:16:19 -0000
> *************** copy_rtx_and_substitute (orig, map, for_
> *** 2062,2068 ****
>   	  RTX_UNCHANGING_P (map->reg_map[regno]) = RTX_UNCHANGING_P (temp);
>   	  /* A reg with REG_FUNCTION_VALUE_P true will never reach here.  */
>   
> ! 	  if (REG_POINTER (map->x_regno_reg_rtx[regno]))
>   	    mark_reg_pointer (map->reg_map[regno],
>   			      map->regno_pointer_align[regno]);
>   	  regno = REGNO (map->reg_map[regno]);
> --- 2062,2069 ----
>   	  RTX_UNCHANGING_P (map->reg_map[regno]) = RTX_UNCHANGING_P (temp);
>   	  /* A reg with REG_FUNCTION_VALUE_P true will never reach here.  */
>   
> ! 	  if (REG_P (map->x_regno_reg_rtx[regno])
> ! 	      && REG_POINTER (map->x_regno_reg_rtx[regno]))
>   	    mark_reg_pointer (map->reg_map[regno],
>   			      map->regno_pointer_align[regno]);
>   	  regno = REGNO (map->reg_map[regno]);
>

-- 
 Andreas Jaeger
  SuSE Labs aj@suse.de
   private aj@arthur.inka.de
    http://www.suse.de/~aj


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