aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2016-12-14 22:39:51 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2016-12-14 22:39:51 +0100
commit8000827901d090f62414ff75203e03b00acd4ca5 (patch)
treecaf2a5a62ef5570f9462acb3605d984a763f557a
parentb9588893117693dc4a889fb29a4df10f2ea76167 (diff)
downloadgcc-8000827901d090f62414ff75203e03b00acd4ca5.zip
gcc-8000827901d090f62414ff75203e03b00acd4ca5.tar.gz
gcc-8000827901d090f62414ff75203e03b00acd4ca5.tar.bz2
re PR target/78791 (ACATS cxf2001 failure)
PR target/78791 * config/i386/i386.h (enum ix86_stack_slot): Add SLOT_STV_TEMP. * config/i386/i386.c (dimode_scalar_chain::make_vector_copies, dimode_scalar_chain::convert_reg): Use SLOT_STV_TEMP instead of SLOT_TEMP. * gcc.c-torture/execute/pr78791.c: New test. * gcc.target/i386/pr78791.c: New test. From-SVN: r243671
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/i386/i386.c4
-rw-r--r--gcc/config/i386/i386.h1
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr78791.c19
-rw-r--r--gcc/testsuite/gcc.target/i386/pr78791.c5
6 files changed, 41 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1fbc872..3cc2e5a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2016-12-14 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/78791
+ * config/i386/i386.h (enum ix86_stack_slot): Add SLOT_STV_TEMP.
+ * config/i386/i386.c (dimode_scalar_chain::make_vector_copies,
+ dimode_scalar_chain::convert_reg): Use SLOT_STV_TEMP instead of
+ SLOT_TEMP.
+
2016-12-14 Uros Bizjak <ubizjak@gmail.com>
PR target/59874
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 3d9d485..792e8ec 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -3560,7 +3560,7 @@ dimode_scalar_chain::make_vector_copies (unsigned regno)
}
else
{
- rtx tmp = assign_386_stack_local (DImode, SLOT_TEMP);
+ rtx tmp = assign_386_stack_local (DImode, SLOT_STV_TEMP);
emit_move_insn (adjust_address (tmp, SImode, 0),
gen_rtx_SUBREG (SImode, reg, 0));
emit_move_insn (adjust_address (tmp, SImode, 4),
@@ -3637,7 +3637,7 @@ dimode_scalar_chain::convert_reg (unsigned regno)
}
else
{
- rtx tmp = assign_386_stack_local (DImode, SLOT_TEMP);
+ rtx tmp = assign_386_stack_local (DImode, SLOT_STV_TEMP);
emit_move_insn (tmp, reg);
emit_move_insn (gen_rtx_SUBREG (SImode, scopy, 0),
adjust_address (tmp, SImode, 0));
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
index 4d96a45..5f5368d 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -2400,6 +2400,7 @@ enum ix86_stack_slot
SLOT_CW_FLOOR,
SLOT_CW_CEIL,
SLOT_CW_MASK_PM,
+ SLOT_STV_TEMP,
MAX_386_STACK_LOCALS
};
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5026f07b..946ad97 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2016-12-14 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/78791
+ * gcc.c-torture/execute/pr78791.c: New test.
+ * gcc.target/i386/pr78791.c: New test.
+
2016-12-14 Marek Polacek <polacek@redhat.com>
PR c++/72775
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr78791.c b/gcc/testsuite/gcc.c-torture/execute/pr78791.c
new file mode 100644
index 0000000..987f2f1
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr78791.c
@@ -0,0 +1,19 @@
+/* PR target/78791 */
+
+__attribute__((used, noinline, noclone)) unsigned long long
+foo (unsigned long long x, unsigned long long y, unsigned long long z)
+{
+ unsigned long long a = x / y;
+ unsigned long long b = x % y;
+ a |= z;
+ b ^= z;
+ return a + b;
+}
+
+int
+main ()
+{
+ if (foo (64, 7, 0) != 10 || foo (28, 3, 2) != 14)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr78791.c b/gcc/testsuite/gcc.target/i386/pr78791.c
new file mode 100644
index 0000000..297e03f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr78791.c
@@ -0,0 +1,5 @@
+/* PR target/78791 */
+/* { dg-do run { target sse2_runtime } } */
+/* { dg-options "-O2 -msse2" } */
+
+#include "../../gcc.c-torture/execute/pr78791.c"