aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorBin Cheng <bin.cheng@arm.com>2013-12-13 11:36:22 +0000
committerBin Cheng <amker@gcc.gnu.org>2013-12-13 11:36:22 +0000
commitb83b550780a6ee31c6e8b9da922c2a087f7bd44c (patch)
tree8a279853c02062aa9b7a75a2527c0964cd7b3e93 /gcc/testsuite
parenta005b5befd6bb3166b1d7c5269a2c791e4a4ee7c (diff)
downloadgcc-b83b550780a6ee31c6e8b9da922c2a087f7bd44c.zip
gcc-b83b550780a6ee31c6e8b9da922c2a087f7bd44c.tar.gz
gcc-b83b550780a6ee31c6e8b9da922c2a087f7bd44c.tar.bz2
re PR tree-optimization/58296 (ivopts is unable to handle some loops altered by the loop header copying pass)
PR tree-optimization/58296 PR tree-optimization/41488 * tree-scalar-evolution.c: Include necessary header files. (simplify_peeled_chrec): New function. (analyze_evolution_in_loop): New static variable. Call simplify_peeled_chrec. * tree-ssa-loop-ivopts.c (mark_bivs): Don't mark peeled IV as biv. (add_old_iv_candidates): Don't add candidate for peeled IV. * tree-affine.h (aff_combination_zero_p): New function. PR tree-optimization/58296 PR tree-optimization/41488 * gcc.dg/tree-ssa/scev-7.c: New test. * gcc.dg/pr41488.c: New test. * g++.dg/pr59445.C: New test. From-SVN: r205959
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog8
-rw-r--r--gcc/testsuite/g++.dg/pr59445.C81
-rw-r--r--gcc/testsuite/gcc.dg/pr41488.c18
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/scev-7.c18
4 files changed, 125 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e011b5e..94e703b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,11 @@
+2013-12-13 Bin Cheng <bin.cheng@arm.com>
+
+ PR tree-optimization/58296
+ PR tree-optimization/41488
+ * gcc.dg/tree-ssa/scev-7.c: New test.
+ * gcc.dg/pr41488.c: New test.
+ * g++.dg/pr59445.C: New test.
+
2013-12-12 Tobias Burnus <burnus@net-b.de>
PR fortran/59440
diff --git a/gcc/testsuite/g++.dg/pr59445.C b/gcc/testsuite/g++.dg/pr59445.C
new file mode 100644
index 0000000..99d6df2
--- /dev/null
+++ b/gcc/testsuite/g++.dg/pr59445.C
@@ -0,0 +1,81 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+template <typename _Iterator> struct A;
+template <typename _Tp> struct A<_Tp *> {
+ typedef _Tp value_type;
+ typedef int difference_type;
+};
+template <typename _Compare> struct B {};
+template <typename _Compare> struct C {
+ _Compare _M_comp;
+ template <typename _Value, typename _Iterator>
+ int operator()(_Value &p1, _Iterator p2) {
+ return _M_comp(p1, *p2);
+ }
+};
+template <typename _Compare> C<_Compare> __val_comp_iter(B<_Compare>);
+template <typename _RandomAccessIterator, typename _Compare>
+void __unguarded_linear_insert(_RandomAccessIterator p1, _Compare p2) {
+ typename A<_RandomAccessIterator>::value_type a;
+ _RandomAccessIterator b = p1;
+ --b;
+ while (p2(a, b)) {
+ *p1 = 0;
+ p1 = b;
+ --b;
+ }
+}
+template <typename _RandomAccessIterator, typename _Compare>
+void __insertion_sort(_RandomAccessIterator, _Compare p2) {
+ for (_RandomAccessIterator c;; ++c)
+ __unguarded_linear_insert(c, __val_comp_iter(p2));
+}
+template <typename _RandomAccessIterator, typename _Distance, typename _Compare>
+void __chunk_insertion_sort(_RandomAccessIterator, _Distance, _Compare p3) {
+ _RandomAccessIterator d;
+ __insertion_sort(d, p3);
+}
+template <typename _RandomAccessIterator, typename _Pointer, typename _Compare>
+void __merge_sort_with_buffer(_RandomAccessIterator p1, _Pointer, _Compare p3) {
+ __chunk_insertion_sort(p1, 0, p3);
+}
+template <typename _RandomAccessIterator, typename _Pointer, typename _Distance,
+ typename _Compare>
+void __stable_sort_adaptive(_RandomAccessIterator, _Pointer, _Distance,
+ _Compare p4) {
+ _RandomAccessIterator e;
+ __merge_sort_with_buffer(e, 0, p4);
+}
+template <typename _RandomAccessIterator, typename _Compare>
+void __stable_sort(_RandomAccessIterator p1, _Compare p2) {
+ __stable_sort_adaptive(
+ p1, 0, typename A<_RandomAccessIterator>::difference_type(), p2);
+}
+template <typename _RandomAccessIterator, typename _Compare>
+void stable_sort(_RandomAccessIterator, _RandomAccessIterator p2, _Compare) {
+ B<_Compare> f;
+ __stable_sort(p2, f);
+}
+class D {
+public:
+ void m_fn1();
+};
+class F {
+ struct G {
+ D MFI;
+ int operator()(int p1, int p2) {
+ if (p1)
+ return 0;
+ if (p2)
+ return 1;
+ MFI.m_fn1();
+ }
+ };
+ void m_fn1(int &p1) const;
+};
+void F::m_fn1(int &p1) const {
+ int *g, *h;
+ stable_sort(h, g, G());
+}
+
diff --git a/gcc/testsuite/gcc.dg/pr41488.c b/gcc/testsuite/gcc.dg/pr41488.c
new file mode 100644
index 0000000..c4bc428
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr41488.c
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-sccp-scev" } */
+
+struct struct_t
+{
+ int* data;
+};
+
+void foo (struct struct_t* sp, int start, int end)
+{
+ int i;
+
+ for (i = 0; i+start < end; i++)
+ sp->data[i+start] = 0;
+}
+
+/* { dg-final { scan-tree-dump-times "Simplify PEELED_CHREC into POLYNOMIAL_CHREC" 1 "sccp" } } */
+/* { dg-final { cleanup-tree-dump "sccp" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/scev-7.c b/gcc/testsuite/gcc.dg/tree-ssa/scev-7.c
new file mode 100644
index 0000000..d6ceb20
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/scev-7.c
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-sccp-scev" } */
+
+struct struct_t
+{
+ int* data;
+};
+
+void foo (struct struct_t* sp, int start, int end)
+{
+ int i;
+
+ for (i = 1000; i+start > end; i--)
+ sp->data[i+start] = 0;
+}
+
+/* { dg-final { scan-tree-dump-times "Simplify PEELED_CHREC into POLYNOMIAL_CHREC" 1 "sccp" } } */
+/* { dg-final { cleanup-tree-dump "sccp" } } */