aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Makarov <vmakarov@redhat.com>2019-04-01 16:18:30 +0000
committerVladimir Makarov <vmakarov@gcc.gnu.org>2019-04-01 16:18:30 +0000
commit0d2a576a1417b8d4526d369fef1d87cee2c49f99 (patch)
tree0daf295fe0fc9f597e05112c5233db6a08e137e4
parenta0802144bb4c0e60a110c6d5d8af22cb035da9c9 (diff)
downloadgcc-0d2a576a1417b8d4526d369fef1d87cee2c49f99.zip
gcc-0d2a576a1417b8d4526d369fef1d87cee2c49f99.tar.gz
gcc-0d2a576a1417b8d4526d369fef1d87cee2c49f99.tar.bz2
re PR rtl-optimization/89865 (FAIL: gcc.target/i386/pr49095.c scan-assembler-times \\\\), % 45)
2019-04-01 Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/89865 * ira-costs.c (process_bb_node_for_hard_reg_moves): Skip hard register if it is a part of small class. From-SVN: r270060
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/ira-costs.c7
2 files changed, 13 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2f55f59..5016bd2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2019-04-01 Vladimir Makarov <vmakarov@redhat.com>
+
+ PR rtl-optimization/89865
+ * ira-costs.c (process_bb_node_for_hard_reg_moves): Skip hard
+ register if it is a part of small class.
+
2019-04-01 Andrey Belevantsev <abel@ispras.ru>
PR rtl-optimization/87273
diff --git a/gcc/ira-costs.c b/gcc/ira-costs.c
index a17dae3..c7feaba 100644
--- a/gcc/ira-costs.c
+++ b/gcc/ira-costs.c
@@ -2107,6 +2107,13 @@ process_bb_node_for_hard_reg_moves (ira_loop_tree_node_t loop_tree_node)
}
else
continue;
+ if (reg_class_size[(int) REGNO_REG_CLASS (hard_regno)]
+ == (ira_reg_class_max_nregs
+ [REGNO_REG_CLASS (hard_regno)][(int) ALLOCNO_MODE(a)]))
+ /* If the class can provide only one hard reg to the allocno,
+ we processed the insn record_operand_costs already and we
+ actually updated the hard reg cost there. */
+ continue;
rclass = ALLOCNO_CLASS (a);
if (! TEST_HARD_REG_BIT (reg_class_contents[rclass], hard_regno))
continue;