aboutsummaryrefslogtreecommitdiff
path: root/gcc/resource.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/resource.c')
-rw-r--r--gcc/resource.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/gcc/resource.c b/gcc/resource.c
index a248989fd67..e7b5e47db29 100644
--- a/gcc/resource.c
+++ b/gcc/resource.c
@@ -100,11 +100,17 @@ update_live_status (rtx dest, rtx x, void *data ATTRIBUTE_UNUSED)
return;
if (GET_CODE (dest) == SUBREG)
- first_regno = subreg_regno (dest);
- else
- first_regno = REGNO (dest);
+ {
+ first_regno = subreg_regno (dest);
+ last_regno = first_regno + subreg_nregs (dest);
- last_regno = first_regno + hard_regno_nregs[first_regno][GET_MODE (dest)];
+ }
+ else
+ {
+ first_regno = REGNO (dest);
+ last_regno
+ = first_regno + hard_regno_nregs[first_regno][GET_MODE (dest)];
+ }
if (GET_CODE (x) == CLOBBER)
for (i = first_regno; i < last_regno; i++)
@@ -230,8 +236,7 @@ mark_referenced_resources (rtx x, struct resources *res,
else
{
unsigned int regno = subreg_regno (x);
- unsigned int last_regno
- = regno + hard_regno_nregs[regno][GET_MODE (x)];
+ unsigned int last_regno = regno + subreg_nregs (x);
gcc_assert (last_regno <= FIRST_PSEUDO_REGISTER);
for (r = regno; r < last_regno; r++)
@@ -764,8 +769,7 @@ mark_set_resources (rtx x, struct resources *res, int in_dest,
else
{
unsigned int regno = subreg_regno (x);
- unsigned int last_regno
- = regno + hard_regno_nregs[regno][GET_MODE (x)];
+ unsigned int last_regno = regno + subreg_nregs (x);
gcc_assert (last_regno <= FIRST_PSEUDO_REGISTER);
for (r = regno; r < last_regno; r++)