Commit 3e89ed8d by Jan Hubicka Committed by Jan Hubicka

emit-rtl.c (verify_rtx_sharing, [...]): Clobbers containing hard regs are shared.


	* emit-rtl.c (verify_rtx_sharing, copy_insn_1,
	emit_copy_of_insn_after, emit_copy_of_insn_after): Clobbers
	containing hard regs are shared.
	(gen_hard_reg_clobber): New function.
	(hard_reg_clobbers): New array.
	* genemit.c (gen_exp): Use gen_hard_reg_clobber.
	(copy_rtx): Do not copy clobbers containing hard regs.
	* rtl.h (gen_hard_reg_clobber): Declare.

From-SVN: r76233
parent 9b57b627
2004-01-20 Jan Hubicka <jh@suse.cz>
* emit-rtl.c (verify_rtx_sharing, copy_insn_1,
emit_copy_of_insn_after, emit_copy_of_insn_after): Clobbers
containing hard regs are shared.
(gen_hard_reg_clobber): New function.
(hard_reg_clobbers): New array.
* genemit.c (gen_exp): Use gen_hard_reg_clobber.
(copy_rtx): Do not copy clobbers containing hard regs.
* rtl.h (gen_hard_reg_clobber): Declare.
2004-01-20 Jan Hubicka <jh@suse.cz>
* varray.c: Include hashtab.h
(varray_descriptor): New structure.
(hash_descriptor, eq_descriptor, varray_descriptor,
......
......@@ -2231,8 +2231,12 @@ verify_rtx_sharing (rtx orig, rtx insn)
case PC:
case CC0:
case SCRATCH:
return;
/* SCRATCH must be shared because they represent distinct values. */
case CLOBBER:
if (REG_P (XEXP (x, 0)) && REGNO (XEXP (x, 0)) < FIRST_PSEUDO_REGISTER)
return;
break;
case CONST:
/* CONST can be shared if it contains a SYMBOL_REF. If it contains
......@@ -2527,6 +2531,10 @@ repeat:
case SCRATCH:
/* SCRATCH must be shared because they represent distinct values. */
return;
case CLOBBER:
if (REG_P (XEXP (x, 0)) && REGNO (XEXP (x, 0)) < FIRST_PSEUDO_REGISTER)
return;
break;
case CONST:
/* CONST can be shared if it contains a SYMBOL_REF. If it contains
......@@ -5020,6 +5028,10 @@ copy_insn_1 (rtx orig)
case CC0:
case ADDRESSOF:
return orig;
case CLOBBER:
if (REG_P (XEXP (orig, 0)) && REGNO (XEXP (orig, 0)) < FIRST_PSEUDO_REGISTER)
return orig;
break;
case SCRATCH:
for (i = 0; i < copy_insn_n_scratches; i++)
......@@ -5536,4 +5548,15 @@ emit_copy_of_insn_after (rtx insn, rtx after)
return new;
}
static GTY((deletable(""))) rtx hard_reg_clobbers [NUM_MACHINE_MODES][FIRST_PSEUDO_REGISTER];
rtx
gen_hard_reg_clobber (enum machine_mode mode, unsigned int regno)
{
if (hard_reg_clobbers[mode][regno])
return hard_reg_clobbers[mode][regno];
else
return (hard_reg_clobbers[mode][regno] =
gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (mode, regno)));
}
#include "gt-emit-rtl.h"
......@@ -217,6 +217,14 @@ gen_exp (rtx x, enum rtx_code subroutine_type, char *used)
case PC:
printf ("pc_rtx");
return;
case CLOBBER:
if (REG_P (XEXP (x, 0)))
{
printf ("gen_hard_reg_clobber (%smode, %i)", GET_MODE_NAME (GET_MODE (XEXP (x, 0))),
REGNO (XEXP (x, 0)));
return;
}
break;
case CC0:
printf ("cc0_rtx");
......
......@@ -224,6 +224,10 @@ copy_rtx (rtx orig)
/* SCRATCH must be shared because they represent distinct values. */
case ADDRESSOF:
return orig;
case CLOBBER:
if (REG_P (XEXP (orig, 0)) && REGNO (XEXP (orig, 0)) < FIRST_PSEUDO_REGISTER)
return orig;
break;
case CONST:
/* CONST can be shared if it contains a SYMBOL_REF. If it contains
......
......@@ -2308,6 +2308,7 @@ extern void end_alias_analysis (void);
extern rtx addr_side_effect_eval (rtx, int, int);
extern bool memory_modified_in_insn_p (rtx, rtx);
extern rtx find_base_term (rtx);
extern rtx gen_hard_reg_clobber (enum machine_mode, unsigned int);
/* In sibcall.c */
typedef enum {
......
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