flow.c (propagate_one_insn): Add error message and print out insn for debugging.
2002-01-15 Eric Christopher <echristo@redhat.com> * flow.c (propagate_one_insn): Add error message and print out insn for debugging. From-SVN: r48878
This commit is contained in:
parent
006946e43e
commit
4a913dd6b7
2 changed files with 22 additions and 13 deletions
|
@ -1,3 +1,8 @@
|
|||
2002-01-15 Eric Christopher <echristo@redhat.com>
|
||||
|
||||
* flow.c (propagate_one_insn): Add error message and print out
|
||||
insn for debugging.
|
||||
|
||||
2002-01-15 Joseph S. Myers <jsm28@cam.ac.uk>
|
||||
|
||||
* system.h (ASM_IDENTIFY_GCC, STDC_VALUE, TRAMPOLINE_ALIGN,
|
||||
|
|
30
gcc/flow.c
30
gcc/flow.c
|
@ -1295,8 +1295,8 @@ calculate_global_regs_live (blocks_in, blocks_out, flags)
|
|||
|
||||
|
||||
/* This structure is used to pass parameters to an from the
|
||||
the function find_regno_partial(). It is used to pass in the
|
||||
register number we are looking, as well as to return any rtx
|
||||
the function find_regno_partial(). It is used to pass in the
|
||||
register number we are looking, as well as to return any rtx
|
||||
we find. */
|
||||
|
||||
typedef struct {
|
||||
|
@ -1308,7 +1308,7 @@ typedef struct {
|
|||
/* Find the rtx for the reg numbers specified in 'data' if it is
|
||||
part of an expression which only uses part of the register. Return
|
||||
it in the structure passed in. */
|
||||
static int
|
||||
static int
|
||||
find_regno_partial (ptr, data)
|
||||
rtx *ptr;
|
||||
void *data;
|
||||
|
@ -1320,7 +1320,7 @@ find_regno_partial (ptr, data)
|
|||
if (*ptr == NULL_RTX)
|
||||
return 0;
|
||||
|
||||
switch (GET_CODE (*ptr))
|
||||
switch (GET_CODE (*ptr))
|
||||
{
|
||||
case ZERO_EXTRACT:
|
||||
case SIGN_EXTRACT:
|
||||
|
@ -1333,7 +1333,7 @@ find_regno_partial (ptr, data)
|
|||
break;
|
||||
|
||||
case SUBREG:
|
||||
if (GET_CODE (SUBREG_REG (*ptr)) == REG
|
||||
if (GET_CODE (SUBREG_REG (*ptr)) == REG
|
||||
&& REGNO (SUBREG_REG (*ptr)) == reg)
|
||||
{
|
||||
param->retval = SUBREG_REG (*ptr);
|
||||
|
@ -1349,14 +1349,14 @@ find_regno_partial (ptr, data)
|
|||
}
|
||||
|
||||
/* Process all immediate successors of the entry block looking for pseudo
|
||||
registers which are live on entry. Find all of those whose first
|
||||
instance is a partial register reference of some kind, and initialize
|
||||
registers which are live on entry. Find all of those whose first
|
||||
instance is a partial register reference of some kind, and initialize
|
||||
them to 0 after the entry block. This will prevent bit sets within
|
||||
registers whose value is unknown, and may contain some kind of sticky
|
||||
registers whose value is unknown, and may contain some kind of sticky
|
||||
bits we don't want. */
|
||||
|
||||
int
|
||||
initialize_uninitialized_subregs ()
|
||||
initialize_uninitialized_subregs ()
|
||||
{
|
||||
rtx insn;
|
||||
edge e;
|
||||
|
@ -1375,7 +1375,7 @@ initialize_uninitialized_subregs ()
|
|||
|
||||
/* Find an insn which mentions the register we are looking for.
|
||||
Its preferable to have an instance of the register's rtl since
|
||||
there may be various flags set which we need to duplicate.
|
||||
there may be various flags set which we need to duplicate.
|
||||
If we can't find it, its probably an automatic whose initial
|
||||
value doesn't matter, or hopefully something we don't care about. */
|
||||
for (i = get_insns (); i && INSN_UID (i) != uid; i = NEXT_INSN (i))
|
||||
|
@ -1387,7 +1387,7 @@ initialize_uninitialized_subregs ()
|
|||
for_each_rtx (&i, find_regno_partial, ¶m);
|
||||
if (param.retval != NULL_RTX)
|
||||
{
|
||||
insn = gen_move_insn (param.retval,
|
||||
insn = gen_move_insn (param.retval,
|
||||
CONST0_RTX (GET_MODE (param.retval)));
|
||||
insert_insn_on_edge (insn, e);
|
||||
did_something = 1;
|
||||
|
@ -1566,7 +1566,11 @@ propagate_one_insn (pbi, insn)
|
|||
|| (HAVE_sibcall_epilogue
|
||||
&& sibcall_epilogue_contains (insn)))
|
||||
&& find_reg_note (insn, REG_MAYBE_DEAD, NULL_RTX) == 0)
|
||||
abort ();
|
||||
{
|
||||
internal_error ("Attempt to delete prologue/epilogue insn:\n");
|
||||
debug_rtx (insn);
|
||||
abort ();
|
||||
}
|
||||
|
||||
/* Record sets. Do this even for dead instructions, since they
|
||||
would have killed the values if they hadn't been deleted. */
|
||||
|
@ -2010,7 +2014,7 @@ insn_dead_p (pbi, x, call_ok, notes)
|
|||
if (REG_NOTE_KIND (notes) == REG_INC)
|
||||
{
|
||||
int regno = REGNO (XEXP (notes, 0));
|
||||
|
||||
|
||||
/* Don't delete insns to set global regs. */
|
||||
if ((regno < FIRST_PSEUDO_REGISTER && global_regs[regno])
|
||||
|| REGNO_REG_SET_P (pbi->reg_live, regno))
|
||||
|
|
Loading…
Add table
Reference in a new issue