From e088f04bdb2331f7ec6ba0faa4eb2c64982e56c3 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Wed, 6 Aug 2008 16:20:14 +0100 Subject: [PATCH] jump.c (rtx_renumbered_equal_p): Do not call subreg_regno_offset for unrepresentable subregs or treat them as... * jump.c (rtx_renumbered_equal_p): Do not call subreg_regno_offset for unrepresentable subregs or treat them as equal to other regs or subregs with the same register number. From-SVN: r138804 --- gcc/ChangeLog | 6 ++++++ gcc/jump.c | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b38ccbb2896..1e40f07e4f9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-08-06 Joseph Myers + + * jump.c (rtx_renumbered_equal_p): Do not call subreg_regno_offset + for unrepresentable subregs or treat them as equal to other regs + or subregs with the same register number. + 2008-08-06 Aldy Hernandez PR middle-end/35432 diff --git a/gcc/jump.c b/gcc/jump.c index 595363b1adb..c0ab6909a2a 100644 --- a/gcc/jump.c +++ b/gcc/jump.c @@ -1552,12 +1552,22 @@ rtx_renumbered_equal_p (const_rtx x, const_rtx y) if (reg_renumber[reg_x] >= 0) { + if (!subreg_offset_representable_p (reg_renumber[reg_x], + GET_MODE (SUBREG_REG (x)), + byte_x, + GET_MODE (x))) + return 0; reg_x = subreg_regno_offset (reg_renumber[reg_x], GET_MODE (SUBREG_REG (x)), byte_x, GET_MODE (x)); byte_x = 0; } + else if (!subreg_offset_representable_p (reg_x, + GET_MODE (SUBREG_REG (x)), + byte_x, + GET_MODE (x))) + return 0; } else { @@ -1573,12 +1583,22 @@ rtx_renumbered_equal_p (const_rtx x, const_rtx y) if (reg_renumber[reg_y] >= 0) { + if (!subreg_offset_representable_p (reg_renumber[reg_y], + GET_MODE (SUBREG_REG (y)), + byte_y, + GET_MODE (y))) + return 0; reg_y = subreg_regno_offset (reg_renumber[reg_y], GET_MODE (SUBREG_REG (y)), byte_y, GET_MODE (y)); byte_y = 0; } + else if (!subreg_offset_representable_p (reg_y, + GET_MODE (SUBREG_REG (y)), + byte_y, + GET_MODE (y))) + return 0; } else {