diff options
Diffstat (limited to 'gcc/reload1.c')
-rw-r--r-- | gcc/reload1.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/gcc/reload1.c b/gcc/reload1.c index e0602be..14c2398 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -4726,15 +4726,19 @@ reload_reg_free_before_p (regno, opnum, type) return ! TEST_HARD_REG_BIT (reload_reg_used_in_other_addr, regno); case RELOAD_FOR_INPUT: - /* The only things earlier are the address for this and - earlier inputs, other inputs (which we know we don't conflict - with), and addresses of RELOAD_OTHER objects. */ + /* The only things earlier are the address for this and earlier inputs, + earlier inputs, and addresses of RELOAD_OTHER objects. */ - for (i = 0; i <= opnum; i++) + for (i = 0; i < opnum; i++) if (TEST_HARD_REG_BIT (reload_reg_used_in_input_addr[i], regno) - || TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[i], regno)) + || TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[i], regno) + || TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno)) return 0; + if (TEST_HARD_REG_BIT (reload_reg_used_in_input_addr[opnum], regno) + || TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[opnum], regno)) + return 0; + return ! TEST_HARD_REG_BIT (reload_reg_used_in_other_addr, regno); case RELOAD_FOR_INPUT_ADDRESS: |