You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.3 KiB
51 lines
1.3 KiB
2016-02-26 Jakub Jelinek <jakub@redhat.com> |
|
Eric Botcazou <ebotcazou@adacore.com> |
|
|
|
PR rtl-optimization/69891 |
|
* dse.c (scan_insn): If we can't figure out memset arguments |
|
or they are non-constant, call clear_rhs_from_active_local_stores. |
|
|
|
--- gcc/testsuite/gcc.target/i386/pr69891.c (nonexistent) |
|
+++ gcc/testsuite/gcc.target/i386/pr69891.c (revision 238137) |
|
@@ -0,0 +1,30 @@ |
|
+/* PR rtl-optimization/69891 */ |
|
+/* { dg-do run } */ |
|
+/* { dg-options "-O -fno-tree-fre -mstringop-strategy=libcall -Wno-psabi" } */ |
|
+/* { dg-additional-options "-mno-sse" { target ia32 } } */ |
|
+ |
|
+typedef unsigned short A; |
|
+typedef unsigned short B __attribute__ ((vector_size (32))); |
|
+typedef unsigned int C; |
|
+typedef unsigned int D __attribute__ ((vector_size (32))); |
|
+typedef unsigned long long E; |
|
+typedef unsigned long long F __attribute__ ((vector_size (32))); |
|
+ |
|
+__attribute__((noinline, noclone)) unsigned |
|
+foo(D a, B b, D c, F d) |
|
+{ |
|
+ b /= (B) {1, -c[0]} | 1; |
|
+ c[0] |= 7; |
|
+ a %= c | 1; |
|
+ c ^= c; |
|
+ return a[0] + b[15] + c[0] + d[3]; |
|
+} |
|
+ |
|
+int |
|
+main () |
|
+{ |
|
+ unsigned x = foo ((D) {}, (B) {}, (D) {}, (F) {}); |
|
+ if (x != 0) |
|
+ __builtin_abort (); |
|
+ return 0; |
|
+} |
|
--- gcc/dse.c (revision 238136) |
|
+++ gcc/dse.c (revision 238137) |
|
@@ -2582,6 +2582,8 @@ |
|
active_local_stores = insn_info; |
|
} |
|
} |
|
+ else |
|
+ clear_rhs_from_active_local_stores (); |
|
} |
|
} |
|
|
|
|