summaryrefslogtreecommitdiff
path: root/gcc/reorg.c
diff options
context:
space:
mode:
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1994-10-31 12:49:04 +0000
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1994-10-31 12:49:04 +0000
commitecf3ba5e60f8a4629800991b1132a3148dbccb39 (patch)
treec973ef93f44a9e68fc18acab2a5c472630d1a3a5 /gcc/reorg.c
parent839e204fb70ca2d076baa24c13fcea46b4d997c4 (diff)
downloadgcc-ecf3ba5e60f8a4629800991b1132a3148dbccb39.tar.gz
(mark_set_resources): Properly handle SUBREGs.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@8364 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/reorg.c')
-rw-r--r--gcc/reorg.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/gcc/reorg.c b/gcc/reorg.c
index 71000107935..250cf997158 100644
--- a/gcc/reorg.c
+++ b/gcc/reorg.c
@@ -607,6 +607,22 @@ mark_set_resources (x, res, in_dest, include_delayed_effects)
mark_set_resources (XEXP (x, 0), res, 0, 0);
return;
+ case SUBREG:
+ if (in_dest)
+ {
+ if (GET_CODE (SUBREG_REG (x)) != REG)
+ mark_set_resources (SUBREG_REG (x), res,
+ in_dest, include_delayed_effects);
+ else
+ {
+ int regno = REGNO (SUBREG_REG (x)) + SUBREG_WORD (x);
+ int last_regno = regno + HARD_REGNO_NREGS (regno, GET_MODE (x));
+ for (i = regno; i < last_regno; i++)
+ SET_HARD_REG_BIT (res->regs, i);
+ }
+ }
+ return;
+
case REG:
if (in_dest)
for (i = 0; i < HARD_REGNO_NREGS (REGNO (x), GET_MODE (x)); i++)