aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorCatherine Moore <clm@redhat.com>2000-12-19 16:10:19 +0000
committerCatherine Moore <clm@gcc.gnu.org>2000-12-19 11:10:19 -0500
commit6a69653af2efb61defd912709eac5d2612c857a8 (patch)
treef5d5eb023ac939f0c2bd01b979832b4b7f8b83d4 /gcc
parent3c0b797012946131f412a489be30e4b644a24bfb (diff)
downloadgcc-6a69653af2efb61defd912709eac5d2612c857a8.zip
gcc-6a69653af2efb61defd912709eac5d2612c857a8.tar.gz
gcc-6a69653af2efb61defd912709eac5d2612c857a8.tar.bz2
reload1.c (reload_combine): Take multi-hard-regs into account when processing CALL_INSN_FUNCTION_USAGE.
* reload1.c (reload_combine): Take multi-hard-regs into account when processing CALL_INSN_FUNCTION_USAGE. From-SVN: r38379
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/reload1.c31
2 files changed, 24 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7e5508c..08b5a2d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2000-12-19 Catherine Moore <clm@redhat.com>
+
+ * reload1.c (reload_combine): Take multi-hard-regs into account
+ when processing CALL_INSN_FUNCTION_USAGE.
+
2000-12-19 Joseph S. Myers <jsm28@cam.ac.uk>
* invoke.texi (-print-search-dirs): Make references to cpp refer
diff --git a/gcc/reload1.c b/gcc/reload1.c
index 1babaf7..ee252a6 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -8651,20 +8651,27 @@ reload_combine ()
for (link = CALL_INSN_FUNCTION_USAGE (insn); link;
link = XEXP (link, 1))
- if (GET_CODE (XEXP (XEXP (link, 0), 0)) == REG)
- {
- unsigned int regno = REGNO (XEXP (XEXP (link, 0), 0));
+ {
+ rtx usage_rtx = XEXP (XEXP (link, 0), 0);
+ if (GET_CODE (usage_rtx) == REG)
+ {
+ int i;
+ unsigned int start_reg = REGNO (usage_rtx);
+ unsigned int num_regs =
+ HARD_REGNO_NREGS (start_reg, GET_MODE (usage_rtx));
+ unsigned int end_reg = start_reg + num_regs - 1;
+ for (i = start_reg; i <= end_reg; i++)
+ if (GET_CODE (XEXP (link, 0)) == CLOBBER)
+ {
+ reg_state[i].use_index = RELOAD_COMBINE_MAX_USES;
+ reg_state[i].store_ruid = reload_combine_ruid;
+ }
+ else
+ reg_state[i].use_index = -1;
+ }
+ }
- if (GET_CODE (XEXP (link, 0)) == CLOBBER)
- {
- reg_state[regno].use_index = RELOAD_COMBINE_MAX_USES;
- reg_state[regno].store_ruid = reload_combine_ruid;
- }
- else
- reg_state[regno].use_index = -1;
- }
}
-
else if (GET_CODE (insn) == JUMP_INSN
&& GET_CODE (PATTERN (insn)) != RETURN)
{