From 0fe314e354d90e8f54e17a2e9635bf0b8738c738 Mon Sep 17 00:00:00 2001 From: amylaar Date: Wed, 14 Dec 2005 16:36:29 +0000 Subject: [PATCH] * struct-equiv.c (note_local_live): Handle hard regs with different hard_regno_nregs. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@108520 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/struct-equiv.c | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1051c70e7e0..62be1623c16 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2005-12-14 J"orn Rennecke + + * struct-equiv.c (note_local_live): Handle hard regs with different + hard_regno_nregs. + 2005-12-14 Jeff Law * tree-ssa-ccp.c (fold_stmt_r): DATA argument is now a pointer diff --git a/gcc/struct-equiv.c b/gcc/struct-equiv.c index fc563b64fe7..0bee722959c 100644 --- a/gcc/struct-equiv.c +++ b/gcc/struct-equiv.c @@ -309,10 +309,17 @@ struct_equiv_restore_checkpoint (struct struct_equiv_checkpoint *p, static int note_local_live (struct equiv_info *info, rtx x, rtx y, int rvalue) { + unsigned x_regno = REGNO (x); + unsigned y_regno = REGNO (y); + int x_nominal_nregs = (x_regno >= FIRST_PSEUDO_REGISTER + ? 1 : hard_regno_nregs[x_regno][GET_MODE (x)]); + int y_nominal_nregs = (y_regno >= FIRST_PSEUDO_REGISTER + ? 1 : hard_regno_nregs[y_regno][GET_MODE (y)]); int x_change = assign_reg_reg_set (info->x_local_live, x, rvalue); int y_change = assign_reg_reg_set (info->y_local_live, y, rvalue); - gcc_assert (x_change == y_change); + gcc_assert (x_nominal_nregs && y_nominal_nregs); + gcc_assert (x_change * y_nominal_nregs == y_change * x_nominal_nregs); if (y_change) { if (reload_completed) -- 2.11.0