summaryrefslogtreecommitdiff
path: root/gcc/jump.c
diff options
context:
space:
mode:
authorjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>2006-11-29 17:33:59 +0000
committerjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>2006-11-29 17:33:59 +0000
commit90489f58c23298d23fdfbc7967783e7c6f4d3d49 (patch)
treee78160a35391b3a8c25d75660bc057354bc86734 /gcc/jump.c
parent1938ef464c6d60e2fb8e83827cd29a86d1d0b3c8 (diff)
downloadgcc-90489f58c23298d23fdfbc7967783e7c6f4d3d49.tar.gz
* config/rs6000/predicates.md (gpc_reg_operand): Check
invalid_e500_subreg. * config/rs6000/rs6000.c (invalid_e500_subreg): Don't allow any SImode subregs of SPE vectors. * config/rs6000/rs6000.md (insv): Fail for invalid E500 subregs. * jump.c (true_regnum): Require subregs to satisfy subreg_offset_representable_p. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@119324 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/jump.c')
-rw-r--r--gcc/jump.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/jump.c b/gcc/jump.c
index 807f2c6f7d6..567017004f5 100644
--- a/gcc/jump.c
+++ b/gcc/jump.c
@@ -1951,7 +1951,11 @@ true_regnum (rtx x)
if (GET_CODE (x) == SUBREG)
{
int base = true_regnum (SUBREG_REG (x));
- if (base >= 0 && base < FIRST_PSEUDO_REGISTER)
+ if (base >= 0
+ && base < FIRST_PSEUDO_REGISTER
+ && subreg_offset_representable_p (REGNO (SUBREG_REG (x)),
+ GET_MODE (SUBREG_REG (x)),
+ SUBREG_BYTE (x), GET_MODE (x)))
return base + subreg_regno_offset (REGNO (SUBREG_REG (x)),
GET_MODE (SUBREG_REG (x)),
SUBREG_BYTE (x), GET_MODE (x));