From 21e5076a0b103569103829459be6457c3c39e39d Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Tue, 4 Jan 2005 16:44:25 +0100 Subject: [PATCH] re PR middle-end/17767 (MMX intrinsics cause internal compiler error) PR middle-end/17767 * cse.c (fold_rtx) [RTX_COMPARE, RTX_COMM_COMPARE]: Don't attempt any simplifications of vector mode comparison operators. * simplify-rtx.c (simplify_relational_operation): Fix variable name. testsuite: * gcc.dg/i386-mmx-6.c: New test case. From-SVN: r92896 --- gcc/ChangeLog | 8 +++++++- gcc/cse.c | 4 ++++ gcc/simplify-rtx.c | 2 +- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/i386-mmx-6.c | 17 +++++++++++++++++ 5 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/i386-mmx-6.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5d83e223b04..14c24385cbf 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,8 +1,14 @@ +2005-01-04 Uros Bizjak + + PR middle-end/17767 + * cse.c (fold_rtx) [RTX_COMPARE, RTX_COMM_COMPARE]: Don't attempt + any simplifications of vector mode comparison operators. + * simplify-rtx.c (simplify_relational_operation): Fix variable name. + 2005-01-04 Paolo Bonzini Devang Patel PR tree-optimization/18308 - * tree-if-conv.c (add_to_dst_predicate_list): Gimplify the operands before creating a new expression. * dojump.c (do_jump): Make drop_through_label available diff --git a/gcc/cse.c b/gcc/cse.c index 09c113b7e20..766c7252de3 100644 --- a/gcc/cse.c +++ b/gcc/cse.c @@ -3865,6 +3865,10 @@ fold_rtx (rtx x, rtx insn) constant, set CONST_ARG0 and CONST_ARG1 appropriately. We needn't do anything if both operands are already known to be constant. */ + /* ??? Vector mode comparisons are not supported yet. */ + if (VECTOR_MODE_P (mode)) + break; + if (const_arg0 == 0 || const_arg1 == 0) { struct table_elt *p0, *p1; diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index 6525e1604aa..6e208aa9d9a 100644 --- a/gcc/simplify-rtx.c +++ b/gcc/simplify-rtx.c @@ -2757,7 +2757,7 @@ simplify_relational_operation (enum rtx_code code, enum machine_mode mode, #ifdef VECTOR_STORE_FLAG_VALUE { int i, units; - rtvec c; + rtvec v; rtx val = VECTOR_STORE_FLAG_VALUE (mode); if (val == NULL_RTX) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c376fce25a9..a1b44429762 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-01-04 Uros Bizjak + + PR middle-end/17767 + * gcc.dg/i386-mmx-6.c: New test case. + 2005-01-04 Paolo Bonzini PR tree-optimization/18308 diff --git a/gcc/testsuite/gcc.dg/i386-mmx-6.c b/gcc/testsuite/gcc.dg/i386-mmx-6.c new file mode 100644 index 00000000000..8938d2cd41d --- /dev/null +++ b/gcc/testsuite/gcc.dg/i386-mmx-6.c @@ -0,0 +1,17 @@ +/* PR middle-end/17767 */ +/* Contributed by Volker Reichelt */ +/* { dg-do compile { target i?86-*-* x86_64-*-* } } */ +/* { dg-options "-O -mmmx" } */ +typedef int __m64 __attribute__ ((vector_size (8))); +typedef short __v4hi __attribute__ ((vector_size (8))); + +__m64 foo () +{ + int i; + __m64 m; + + for (i = 0; i < 2; i++) + m = (__m64) __builtin_ia32_pcmpeqw ((__v4hi) m, (__v4hi) m); + + return m; +} -- 2.30.2