aboutsummaryrefslogtreecommitdiff
path: root/gcc/reload.c
diff options
context:
space:
mode:
authorAndreas Krebbel <krebbel@linux.vnet.ibm.com>2015-06-24 06:50:53 +0000
committerAndreas Krebbel <krebbel@gcc.gnu.org>2015-06-24 06:50:53 +0000
commitf303100baaf48a54f07e9abd25ac37ebc95b641e (patch)
treeb3c16b9d1158f623ce992acd80383364aefec238 /gcc/reload.c
parentaf77d1df021462d093418edfc130ed37922f4994 (diff)
downloadgcc-f303100baaf48a54f07e9abd25ac37ebc95b641e.zip
gcc-f303100baaf48a54f07e9abd25ac37ebc95b641e.tar.gz
gcc-f303100baaf48a54f07e9abd25ac37ebc95b641e.tar.bz2
PR66306: Fix match_dups on swapped operands.
2015-06-24 Andreas Krebbel <krebbel@linux.vnet.ibm.com> PR rtl-optimization/66306 * reload.c (find_reloads): Swap the match_dup info for commutative operands. 2015-06-24 Andreas Krebbel <krebbel@linux.vnet.ibm.com> PR rtl-optimization/66306 * gcc.target/s390/pr66306.c: New test. From-SVN: r224875
Diffstat (limited to 'gcc/reload.c')
-rw-r--r--gcc/reload.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/reload.c b/gcc/reload.c
index 03354de..1dc04bf 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -3872,6 +3872,12 @@ find_reloads (rtx_insn *insn, int replace, int ind_levels, int live_known,
std::swap (*recog_data.operand_loc[commutative],
*recog_data.operand_loc[commutative + 1]);
+ for (i = 0; i < recog_data.n_dups; i++)
+ if (recog_data.dup_num[i] == commutative
+ || recog_data.dup_num[i] == commutative + 1)
+ *recog_data.dup_loc[i]
+ = recog_data.operand[(int) recog_data.dup_num[i]];
+
for (i = 0; i < n_reloads; i++)
{
if (rld[i].opnum == commutative)