diff options
author | Catherine Moore <clm@redhat.com> | 2000-12-19 16:10:19 +0000 |
---|---|---|
committer | Catherine Moore <clm@gcc.gnu.org> | 2000-12-19 11:10:19 -0500 |
commit | 6a69653af2efb61defd912709eac5d2612c857a8 (patch) | |
tree | f5d5eb023ac939f0c2bd01b979832b4b7f8b83d4 | |
parent | 3c0b797012946131f412a489be30e4b644a24bfb (diff) | |
download | gcc-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
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/reload1.c | 31 |
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) { |