aboutsummaryrefslogtreecommitdiff
path: root/gcc/lra-constraints.c
diff options
context:
space:
mode:
authorUros Bizjak <uros@gcc.gnu.org>2012-11-20 19:02:36 +0100
committerUros Bizjak <uros@gcc.gnu.org>2012-11-20 19:02:36 +0100
commit7100b5616c1998a115ad2b398a61c6daed5b3b88 (patch)
tree34852e73dd7aac72581066d216146b17d51f6061 /gcc/lra-constraints.c
parentb20ade36e40a97f2836926dd95cbb5a7d087f58f (diff)
downloadgcc-7100b5616c1998a115ad2b398a61c6daed5b3b88.zip
gcc-7100b5616c1998a115ad2b398a61c6daed5b3b88.tar.gz
gcc-7100b5616c1998a115ad2b398a61c6daed5b3b88.tar.bz2
[multiple changes]
2012-11-20 Uros Bizjak <ubizjak@gmail.com> * config/i386/i386.md (fix_trunc<MODEF:mode><SWI48:mode>_sse): Macroize insn from fix_trunc<mode>{si,di}_sse using SWI48 mode iterator. (peephole2 to avoid vector decoded forms): Macroize peephole2 using MODEF mode iterator. Use SWI48 mode iterator instead of SWI48x. 2012-11-20 Uros Bizjak <ubizjak@gmail.com> PR target/19398 * config/i386/i386.md (peephole2 to shorten x87->SSE reload sequences): Remove peephole2. * config/i386/i386.h (enum ix86_tune_indices) <IX86_TUNE_SHORTEN_X87_SSE>: Remove. * config/i386/i386.h (initial_ix86_tune_features): Update. 2012-11-20 Vladimir Makarov <vmakarov@redhat.com> PR target/19398 * lra-constraints.c (process_alt_operands): Discourage reloads through secodnary memory. testsuite/ChangeLog: 2012-11-20 Uros Bizjak <ubizjak@gmail.com> PR target/19398 * gcc.target/i386/pr19398.c: New test. From-SVN: r193671
Diffstat (limited to 'gcc/lra-constraints.c')
-rw-r--r--gcc/lra-constraints.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c
index 6f19c18..9df7b97 100644
--- a/gcc/lra-constraints.c
+++ b/gcc/lra-constraints.c
@@ -1942,6 +1942,19 @@ process_alt_operands (int only_alternative)
if (no_regs_p && REG_P (op))
reject++;
+#ifdef SECONDARY_MEMORY_NEEDED
+ /* If reload requires moving value through secondary
+ memory, it will need one more insn at least. */
+ if (this_alternative != NO_REGS
+ && REG_P (op) && (cl = get_reg_class (REGNO (op))) != NO_REGS
+ && ((curr_static_id->operand[nop].type != OP_OUT
+ && SECONDARY_MEMORY_NEEDED (cl, this_alternative,
+ GET_MODE (op)))
+ || (curr_static_id->operand[nop].type != OP_IN
+ && SECONDARY_MEMORY_NEEDED (this_alternative, cl,
+ GET_MODE (op)))))
+ losers++;
+#endif
/* Input reloads can be inherited more often than output
reloads can be removed, so penalize output
reloads. */