Commit f81a79ef by Jan Hubicka Committed by Jeff Law

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 <law@redhat.com>

From-SVN: r54924
parent 3bfb9a0b
2002-06-23 Jan Hubicka <jh@suse.cz>
Jeff Law <law@redhat.com>
* 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.
......
......@@ -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;
};
......
......@@ -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]);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment