+2001-05-03 Mark Mitchell <mark@codesourcery.com>
+
+ * integrate.h (struct inline_remap): Add leaf_reg_map table.
+ * integrate.c (expand_inline_function): Use xcalloc to allocate
+ memory.
+ (copy_rtx_and_substitute): Use the leaf_reg_map for leaf
+ registers.
+
2001-05-03 Mark Mitchell <mark@codesourcery.com>
* c-dump.c (dequeue_and_dump): Don't look at DECL_ASSEMBLER_NAME
/* Allocate the structures we use to remap things. */
- map = (struct inline_remap *) xmalloc (sizeof (struct inline_remap));
+ map = (struct inline_remap *) xcalloc (1, sizeof (struct inline_remap));
map->fndecl = fndecl;
VARRAY_TREE_INIT (map->block_map, 10, "block_map");
{
/* Some hard registers are also mapped,
but others are not translated. */
- if (map->reg_map[regno] != 0
- /* We shouldn't usually have reg_map set for return
- register, but it may happen if we have leaf-register
- remapping and the return register is used in one of
- the calling sequences of a call_placeholer. In this
- case, we'll end up with a reg_map set for this
- register, but we don't want to use for registers
- marked as return values. */
- && ! REG_FUNCTION_VALUE_P (orig))
+ if (map->reg_map[regno] != 0)
return map->reg_map[regno];
/* If this is the virtual frame pointer, make space in current
if (map->integrating && regno < FIRST_PSEUDO_REGISTER
&& LEAF_REGISTERS[regno] && LEAF_REG_REMAP (regno) != regno)
{
- temp = gen_rtx_REG (mode, regno);
- map->reg_map[regno] = temp;
- return temp;
+ if (!map->leaf_reg_map[regno][mode])
+ map->leaf_reg_map[regno][mode] = gen_rtx_REG (mode, regno);
+ return map->leaf_reg_map[regno][mode];
}
#endif
else
/* Function integration definitions for GNU C-Compiler
- Copyright (C) 1990, 1995, 1998, 1999, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1990, 1995, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
This file is part of GNU CC.
/* Mapping from old registers to new registers.
It is allocated and deallocated in `expand_inline_function' */
rtx *reg_map;
+#if defined (LEAF_REGISTERS) && defined (LEAF_REG_REMAP)
+ /* Mapping from old leaf registers to new leaf registers. */
+ rtx leaf_reg_map[FIRST_PSEUDO_REGISTER][NUM_MACHINE_MODES];
+#endif
/* Mapping from old code-labels to new code-labels.
The first element of this map is label_map[min_labelno]. */
rtx *label_map;