aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorVladimir Makarov <vmakarov@redhat.com>2014-03-13 15:52:50 +0000
committerVladimir Makarov <vmakarov@gcc.gnu.org>2014-03-13 15:52:50 +0000
commit7891065aa73da81e05d93711637c737fccd34678 (patch)
tree24adb203ac298072383e9cf1d012de24b1016af4 /gcc
parent00c5acd39f33c335223428099d5427fad1557db9 (diff)
downloadgcc-7891065aa73da81e05d93711637c737fccd34678.zip
gcc-7891065aa73da81e05d93711637c737fccd34678.tar.gz
gcc-7891065aa73da81e05d93711637c737fccd34678.tar.bz2
re PR rtl-optimization/57189 (Vector register is spilled for vector extract pattern)
2014-03-13 Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/57189 * lra-constraints.c (process_alt_operands): Disfavor spilling vector pseudos. 2014-03-13 Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/57189 * gcc.target/i386/pr57189.c: New. From-SVN: r208549
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/lra-constraints.c13
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/i386/pr57189.c10
4 files changed, 33 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a32702a..91b1e41 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2014-03-13 Vladimir Makarov <vmakarov@redhat.com>
+
+ PR rtl-optimization/57189
+ * lra-constraints.c (process_alt_operands): Disfavor spilling
+ vector pseudos.
+
2014-03-13 Cesar Philippidis <cesar@codesourcery.com>
* lto-wrapper.c (maybe_unlink_file): Suppress diagnostic
diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c
index a38b555..288e24b 100644
--- a/gcc/lra-constraints.c
+++ b/gcc/lra-constraints.c
@@ -2302,9 +2302,20 @@ process_alt_operands (int only_alternative)
if (lra_dump_file != NULL)
fprintf
(lra_dump_file,
- " %d Spill pseudo in memory: reject+=3\n",
+ " %d Spill pseudo into memory: reject+=3\n",
nop);
reject += 3;
+ if (VECTOR_MODE_P (mode))
+ {
+ /* Spilling vectors into memory is usually more
+ costly as they contain big values. */
+ if (lra_dump_file != NULL)
+ fprintf
+ (lra_dump_file,
+ " %d Spill vector pseudo: reject+=2\n",
+ nop);
+ reject += 2;
+ }
}
#ifdef SECONDARY_MEMORY_NEEDED
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 9cdf30d..fd7e979 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2014-03-13 Vladimir Makarov <vmakarov@redhat.com>
+
+ PR rtl-optimization/57189
+ * gcc.target/i386/pr57189.c: New.
+
2014-03-13 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/60254
diff --git a/gcc/testsuite/gcc.target/i386/pr57189.c b/gcc/testsuite/gcc.target/i386/pr57189.c
new file mode 100644
index 0000000..389052c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr57189.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -msse2 -march=k8" } */
+/* { dg-final { scan-assembler-not "movaps" } } */
+
+typedef int __v4si __attribute__ ((__vector_size__ (16)));
+
+int test (__v4si __A)
+{
+ return __builtin_ia32_vec_ext_v4si (__A, 0);
+}