aboutsummaryrefslogtreecommitdiff
path: root/gcc/reload.c
diff options
context:
space:
mode:
authorDaniel Jacobowitz <dan@debian.org>2004-09-03 19:34:15 +0000
committerDaniel Jacobowitz <drow@gcc.gnu.org>2004-09-03 19:34:15 +0000
commit87cda9d6cadaff58cbebb89bc5c0b8bd72ed1ff1 (patch)
tree930ba0ca235564064b39ecb5d5edfec641f4b29c /gcc/reload.c
parentf671762a68bd712623a14d56e2c873798f1b8101 (diff)
downloadgcc-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.c21
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]);