re PR rtl-optimization/3783 (gcc3.0/ia64 ICE on linux kernel file fs/ufs/super.c)
Fix for PR 3783. * alias.c (clear_reg_alias_info): New. * flow.c (attempt_auto_inc): Call clear_reg_alias_info. * rtl.h (clear_reg_alias_info): Declare. From-SVN: r45482
This commit is contained in:
parent
177b41ebf3
commit
43fe47ca78
@ -1,3 +1,9 @@
|
||||
2001-09-07 Jim Wilson <wilson@redhat.com>
|
||||
|
||||
* alias.c (clear_reg_alias_info): New.
|
||||
* flow.c (attempt_auto_inc): Call clear_reg_alias_info.
|
||||
* rtl.h (clear_reg_alias_info): Declare.
|
||||
|
||||
2001-09-07 Roman Lechtchinsky <rl@cs.tu-berlin.de>
|
||||
|
||||
* real.c (EMUSHORT,EMUSHORT_SIZE): Use HImode if no 16-bit type is
|
||||
|
14
gcc/alias.c
14
gcc/alias.c
@ -960,6 +960,20 @@ record_base_value (regno, val, invariant)
|
||||
reg_base_value[regno] = find_base_value (val);
|
||||
}
|
||||
|
||||
/* Clear alias info for a register. This is used if an RTL transformation
|
||||
changes the value of a register. This is used in flow by AUTO_INC_DEC
|
||||
optimizations. We don't need to clear reg_base_value, since flow only
|
||||
changes the offset. */
|
||||
|
||||
void
|
||||
clear_reg_alias_info (rtx reg)
|
||||
{
|
||||
int regno = REGNO (reg);
|
||||
|
||||
if (regno < reg_known_value_size)
|
||||
reg_known_value[regno] = reg;
|
||||
}
|
||||
|
||||
/* Returns a canonical version of X, from the point of view alias
|
||||
analysis. (For example, if X is a MEM whose address is a register,
|
||||
and the register has a known value (say a SYMBOL_REF), then a MEM
|
||||
|
@ -7027,6 +7027,9 @@ attempt_auto_inc (pbi, inc, insn, mem, incr, incr_reg)
|
||||
for (temp = insn; temp != incr; temp = NEXT_INSN (temp))
|
||||
if (GET_CODE (temp) == CALL_INSN)
|
||||
REG_N_CALLS_CROSSED (regno)++;
|
||||
|
||||
/* Invalidate alias info for Q since we just changed its value. */
|
||||
clear_reg_alias_info (q);
|
||||
}
|
||||
else
|
||||
return;
|
||||
|
@ -1988,6 +1988,7 @@ extern void fancy_abort PARAMS ((const char *, int, const char *))
|
||||
#define abort() fancy_abort (__FILE__, __LINE__, __FUNCTION__)
|
||||
|
||||
/* In alias.c */
|
||||
extern void clear_reg_alias_info PARAMS ((rtx));
|
||||
extern rtx canon_rtx PARAMS ((rtx));
|
||||
extern int true_dependence PARAMS ((rtx, enum machine_mode, rtx,
|
||||
int (*)(rtx, int)));
|
||||
|
Loading…
x
Reference in New Issue
Block a user