This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Patch to fix gcc.c-torture/compile/20010102-1.c on IA64 HP-UX
I put the ia64/predicates.md change through a full bootstrap and test
and it had no regressions and did fix the bug in question. I'll add the
regrename.c changes to see if that has any impact, but presumably it
won't.
Steve Ellcey
sje@cup.hp.com
On Tue, 2008-09-16 at 19:42 -0500, Peter Bergner wrote:
> Index: regrename.c
> ===================================================================
> --- regrename.c (revision 140251)
> +++ regrename.c (working copy)
> @@ -356,12 +356,11 @@ do_replace (struct du_chain *chain, int
> while (chain)
> {
> unsigned int regno = ORIGINAL_REGNO (*chain->loc);
> - struct reg_attrs * attr = REG_ATTRS (*chain->loc);
>
> - *chain->loc = gen_raw_REG (GET_MODE (*chain->loc), reg);
> + *chain->loc = gen_reg_rtx_and_attrs (*chain->loc);
> + SET_REGNO (*chain->loc, reg);
> if (regno >= FIRST_PSEUDO_REGISTER)
> ORIGINAL_REGNO (*chain->loc) = regno;
> - REG_ATTRS (*chain->loc) = attr;
> df_insn_rescan (chain->insn);
> chain = chain->next_use;
> }
> @@ -1374,7 +1373,7 @@ find_oldest_value_reg (enum reg_class cl
> if (new_rtx)
> {
> ORIGINAL_REGNO (new_rtx) = ORIGINAL_REGNO (reg);
> - REG_ATTRS (new_rtx) = REG_ATTRS (reg);
> + set_reg_attrs_from_value (new_rtx, reg);
> return new_rtx;
> }
> }
> @@ -1672,7 +1671,7 @@ copyprop_hardreg_forward_1 (basic_block
> if (validate_change (insn, &SET_SRC (set), new_rtx, 0))
> {
> ORIGINAL_REGNO (new_rtx) = ORIGINAL_REGNO (src);
> - REG_ATTRS (new_rtx) = REG_ATTRS (src);
> + set_reg_attrs_from_value (new_rtx, src);
> if (dump_file)
> fprintf (dump_file,
> "insn %u: replaced reg %u with %u\n",
> Index: config/ia64/predicates.md
> ===================================================================
> --- config/ia64/predicates.md (revision 140251)
> +++ config/ia64/predicates.md (working copy)
> @@ -585,6 +585,6 @@ (define_predicate "ar_pfs_reg_operand"
> (define_predicate "basereg_operand"
> (match_operand 0 "register_operand")
> {
> - return REG_P (op) && REG_POINTER (op);
> + return REG_P (op) && REG_POINTER (regno_reg_rtx[ORIGINAL_REGNO (op)]);
> })
>
>
>
>