From: Jan Hubicka Date: Sun, 23 Jun 2002 15:57:53 +0000 (+0200) Subject: function.h (struct emit_status): Clarify potential contents of regno_reg_rtx array. X-Git-Tag: releases/gcc-3.3.0~4147 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f81a79ef6acdf5f2098389cfd7dff11d61672483;p=thirdparty%2Fgcc.git function.h (struct emit_status): Clarify potential contents of regno_reg_rtx array. * function.h (struct emit_status): Clarify potential contents of regno_reg_rtx array. * integrate.c (copy_rtx_and_substitute): Update comments. Make sure entry in regno_reg_rtx is a REG before checking REG_POINTER. Co-Authored-By: Jeff Law From-SVN: r54924 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8d31820a2f76..640962500b99 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,10 @@ 2002-06-23 Jan Hubicka + Jeff Law + + * function.h (struct emit_status): Clarify potential contents + of regno_reg_rtx array. + * integrate.c (copy_rtx_and_substitute): Update comments. Make + sure entry in regno_reg_rtx is a REG before checking REG_POINTER. * reg-stack.c (convert_regs_exit): Push the registers to stack in proper order. diff --git a/gcc/function.h b/gcc/function.h index 1c6337c9176b..3dbd6fd4abd6 100644 --- a/gcc/function.h +++ b/gcc/function.h @@ -105,7 +105,10 @@ struct emit_status GTY(()) tree * GTY ((length ("%h.regno_pointer_align_length"))) regno_decl; /* Indexed by pseudo register number, gives the rtx for that pseudo. - Allocated in parallel with regno_pointer_align. */ + Allocated in parallel with regno_pointer_align. + + Note MEM expressions can appear in this array due to the actions + of put_var_into_stack. */ rtx * GTY ((length ("%h.regno_pointer_align_length"))) x_regno_reg_rtx; }; diff --git a/gcc/integrate.c b/gcc/integrate.c index 4bbfcea42fcf..ead6d31df806 100644 --- a/gcc/integrate.c +++ b/gcc/integrate.c @@ -2062,7 +2062,17 @@ copy_rtx_and_substitute (orig, map, for_lhs) 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])) + /* Objects may initially be represented as registers, but + but turned into a MEM if their address is taken by + put_var_into_stack. Therefore, the register table may have + entries which are MEMs. + + We briefly tried to clear such entries, but that ended up + cascading into many changes due to the optimizers not being + prepared for empty entries in the register table. So we've + decided to allow the MEMs in the register table for now. */ + 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]);