aboutsummaryrefslogtreecommitdiff
path: root/gcc/jump.c
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2006-11-29 17:33:59 +0000
committerJoseph Myers <jsm28@gcc.gnu.org>2006-11-29 17:33:59 +0000
commit14502dad061deb34939adf92cb5ea35a06f1da34 (patch)
treee78160a35391b3a8c25d75660bc057354bc86734 /gcc/jump.c
parentd315c4a9f8367f9452ff6afd3a49d9a3b6fa3105 (diff)
downloadgcc-14502dad061deb34939adf92cb5ea35a06f1da34.zip
gcc-14502dad061deb34939adf92cb5ea35a06f1da34.tar.gz
gcc-14502dad061deb34939adf92cb5ea35a06f1da34.tar.bz2
predicates.md (gpc_reg_operand): Check invalid_e500_subreg.
* 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. From-SVN: r119324
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 807f2c6..5670170 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));