diff options
author | Daniel Jacobowitz <dan@debian.org> | 2004-09-03 19:34:15 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@gcc.gnu.org> | 2004-09-03 19:34:15 +0000 |
commit | 87cda9d6cadaff58cbebb89bc5c0b8bd72ed1ff1 (patch) | |
tree | 930ba0ca235564064b39ecb5d5edfec641f4b29c /gcc/reload.c | |
parent | f671762a68bd712623a14d56e2c873798f1b8101 (diff) | |
download | gcc-87cda9d6cadaff58cbebb89bc5c0b8bd72ed1ff1.zip gcc-87cda9d6cadaff58cbebb89bc5c0b8bd72ed1ff1.tar.gz gcc-87cda9d6cadaff58cbebb89bc5c0b8bd72ed1ff1.tar.bz2 |
reload.c (find_reloads): Swap operand_loc pointers for find_dummy_reload if we have swapped two operands.
* reload.c (find_reloads): Swap operand_loc pointers for
find_dummy_reload if we have swapped two operands.
From-SVN: r87049
Diffstat (limited to 'gcc/reload.c')
-rw-r--r-- | gcc/reload.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/gcc/reload.c b/gcc/reload.c index 260e4b7..950d6fd 100644 --- a/gcc/reload.c +++ b/gcc/reload.c @@ -3079,6 +3079,7 @@ find_reloads (rtx insn, int replace, int ind_levels, int live_known, { /* Operands don't match. */ rtx value; + int loc1, loc2; /* Retroactively mark the operand we had to match as a loser, if it wasn't already. */ if (this_alternative_win[m]) @@ -3087,12 +3088,26 @@ find_reloads (rtx insn, int replace, int ind_levels, int live_known, if (this_alternative[m] == (int) NO_REGS) bad = 1; /* But count the pair only once in the total badness of - this alternative, if the pair can be a dummy reload. */ + this alternative, if the pair can be a dummy reload. + The pointers in operand_loc are not swapped; swap + them by hand if necessary. */ + if (swapped && i == commutative) + loc1 = commutative + 1; + else if (swapped && i == commutative + 1) + loc1 = commutative; + else + loc1 = i; + if (swapped && m == commutative) + loc2 = commutative + 1; + else if (swapped && m == commutative + 1) + loc2 = commutative; + else + loc2 = m; value = find_dummy_reload (recog_data.operand[i], recog_data.operand[m], - recog_data.operand_loc[i], - recog_data.operand_loc[m], + recog_data.operand_loc[loc1], + recog_data.operand_loc[loc2], operand_mode[i], operand_mode[m], this_alternative[m], -1, this_alternative_earlyclobber[m]); |