aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Belevantsev <abel@ispras.ru>2016-03-15 18:25:41 +0300
committerAndrey Belevantsev <abel@gcc.gnu.org>2016-03-15 18:25:41 +0300
commit81fa2944ecfd7f4e8855fa51e7017a40c5f27721 (patch)
tree71775d1f1a447695f130c8937a9d8de08eab0c59
parent74ea9ab61bdbc4f34222e0bd0b351ed1a48d46a2 (diff)
downloadgcc-81fa2944ecfd7f4e8855fa51e7017a40c5f27721.zip
gcc-81fa2944ecfd7f4e8855fa51e7017a40c5f27721.tar.gz
gcc-81fa2944ecfd7f4e8855fa51e7017a40c5f27721.tar.bz2
re PR rtl-optimization/63384 (scheduler loops on endless fence list with -fselective-scheduling2 on x86)
gcc/ PR rtl-optimization/63384 * sel-sched.c (invoke_aftermath_hooks): Do not decrease issue_more on DEBUG_INSN_P insns. testsuite/ PR rtl-optimization/63384 * g++.dg/pr63384.C: New test. From-SVN: r234217
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/sel-sched.c5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/pr63384.C12
4 files changed, 26 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f22fed4..ac70e8a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2016-03-15 Andrey Belevantsev <abel@ispras.ru>
+ PR rtl-optimization/63384
+ * sel-sched.c (invoke_aftermath_hooks): Do not decrease issue_more on
+ DEBUG_INSN_P insns.
+
+2016-03-15 Andrey Belevantsev <abel@ispras.ru>
+
PR target/64411
* sched-deps.c (get_implicit_reg_pending_clobbers): New function,
factored out from ...
diff --git a/gcc/sel-sched.c b/gcc/sel-sched.c
index 09cf028..b795aea 100644
--- a/gcc/sel-sched.c
+++ b/gcc/sel-sched.c
@@ -4262,8 +4262,9 @@ invoke_aftermath_hooks (fence_t fence, rtx_insn *best_insn, int issue_more)
issue_more);
memcpy (FENCE_STATE (fence), curr_state, dfa_state_size);
}
- else if (GET_CODE (PATTERN (best_insn)) != USE
- && GET_CODE (PATTERN (best_insn)) != CLOBBER)
+ else if (!DEBUG_INSN_P (best_insn)
+ && GET_CODE (PATTERN (best_insn)) != USE
+ && GET_CODE (PATTERN (best_insn)) != CLOBBER)
issue_more--;
return issue_more;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7b5fa63..9259910 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2016-03-15 Andrey Belevantsev <abel@ispras.ru>
+ PR rtl-optimization/63384
+ * g++.dg/pr63384.C: New test.
+
+2016-03-15 Andrey Belevantsev <abel@ispras.ru>
+
PR target/64411
* gcc.target/i386/pr64411.C: New test.
diff --git a/gcc/testsuite/g++.dg/pr63384.C b/gcc/testsuite/g++.dg/pr63384.C
new file mode 100644
index 0000000..b4e0784
--- /dev/null
+++ b/gcc/testsuite/g++.dg/pr63384.C
@@ -0,0 +1,12 @@
+/* { dg-do compile { target powerpc*-*-* ia64-*-* i?86-*-* x86_64-*-* } } */
+/* { dg-options "-O2 -fselective-scheduling2 -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops -fsel-sched-reschedule-pipelined -fvar-tracking-assignments-toggle -ftree-vectorize" } */
+
+template <class T> T **make_test_matrix() {
+ T **data = new T *;
+ for (int i = 0; i < 1000; i++)
+ ;
+}
+
+template <typename T> void test() { T **c = make_test_matrix<T>(); }
+
+main() { test<float>(); }