predict-lop-exit-1.C: Update template for new predictor name.
authorJan Hubicka <hubicka@ucw.cz>
Tue, 31 May 2016 23:33:08 +0000 (01:33 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Tue, 31 May 2016 23:33:08 +0000 (23:33 +0000)
* g++.d/predict-lop-exit-1.C: Update template for new predictor name.
* g++.d/predict-lop-exit-2.C: Update template for new predictor name.
* g++.d/predict-lop-exit-2.C: Update template for new predictor name.

* predict.def (PRED_LOOP_EXTRA_EXIT): Define.
* predict.c (predict_iv_comparison): Also check PRED_LOOP_EXTRA_EXIT.
(predict_extra_loop_exits): Use PRED_LOOP_EXTRA_EXIT instead of
PRED_LOOP_EXIT.

From-SVN: r236968

gcc/ChangeLog
gcc/predict.c
gcc/predict.def
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/predict-loop-exit-1.C
gcc/testsuite/g++.dg/predict-loop-exit-2.C
gcc/testsuite/g++.dg/predict-loop-exit-3.C

index c5734b42bfe2fadc96024666f337b62779a8be8a..45f31d4882c5f05d67e6536c30198086b369e219 100644 (file)
@@ -1,3 +1,10 @@
+2016-05-31  Jan Hubicka  <hubicka@ucw.cz>
+
+       * predict.def (PRED_LOOP_EXTRA_EXIT): Define.
+       * predict.c (predict_iv_comparison): Also check PRED_LOOP_EXTRA_EXIT.
+       (predict_extra_loop_exits): Use PRED_LOOP_EXTRA_EXIT instead of
+       PRED_LOOP_EXIT.
+
 2016-05-31  Jan Hubicka  <hubicka@ucw.cz>
 
        * doc/invoke.texi (-frename-registers): Drop -fpeel-loops from list
index 396e150539579c7c8ba0918857af1ca2f805fef2..e9dda20a0f7b4e36e30524307bf2fbc749e15acd 100644 (file)
@@ -1245,7 +1245,8 @@ predict_iv_comparison (struct loop *loop, basic_block bb,
 
   if (predicted_by_p (bb, PRED_LOOP_ITERATIONS_GUESSED)
       || predicted_by_p (bb, PRED_LOOP_ITERATIONS)
-      || predicted_by_p (bb, PRED_LOOP_EXIT))
+      || predicted_by_p (bb, PRED_LOOP_EXIT)
+      || predicted_by_p (bb, PRED_LOOP_EXTRA_EXIT))
     return;
 
   stmt = last_stmt (bb);
@@ -1418,7 +1419,7 @@ predict_iv_comparison (struct loop *loop, basic_block bb,
    The edge BB7->BB8 is loop exit because BB8 is outside of the loop.
    From the dataflow, we can infer that BB4->BB6 and BB5->BB6 are also loop
    exits. This function takes BB7->BB8 as input, and finds out the extra loop
-   exits to predict them using PRED_LOOP_EXIT.  */
+   exits to predict them using PRED_LOOP_EXTRA_EXIT.  */
 
 static void
 predict_extra_loop_exits (edge exit_edge)
@@ -1474,12 +1475,12 @@ predict_extra_loop_exits (edge exit_edge)
        continue;
       if (EDGE_COUNT (e->src->succs) != 1)
        {
-         predict_paths_leading_to_edge (e, PRED_LOOP_EXIT, NOT_TAKEN);
+         predict_paths_leading_to_edge (e, PRED_LOOP_EXTRA_EXIT, NOT_TAKEN);
          continue;
        }
 
       FOR_EACH_EDGE (e1, ei, e->src->preds)
-       predict_paths_leading_to_edge (e1, PRED_LOOP_EXIT, NOT_TAKEN);
+       predict_paths_leading_to_edge (e1, PRED_LOOP_EXTRA_EXIT, NOT_TAKEN);
     }
 }
 
index 18ac753a01aaa494389e9c7d90d20f40be0690c0..b83ec601da928a12288f9e0608d25a3b25d43e4f 100644 (file)
@@ -92,6 +92,11 @@ DEF_PREDICTOR (PRED_LOOP_BRANCH, "loop branch", HITRATE (86),
 DEF_PREDICTOR (PRED_LOOP_EXIT, "loop exit", HITRATE (91),
               PRED_FLAG_FIRST_MATCH)
 
+/* Edge causing loop to terminate by computing value used by later conditional.
+   */
+DEF_PREDICTOR (PRED_LOOP_EXTRA_EXIT, "extra loop exit", HITRATE (91),
+              PRED_FLAG_FIRST_MATCH)
+
 /* Pointers are usually not NULL.  */
 DEF_PREDICTOR (PRED_POINTER, "pointer", HITRATE (85), 0)
 DEF_PREDICTOR (PRED_TREE_POINTER, "pointer (on trees)", HITRATE (85), 0)
index cc1624fc366b5953aea03e553686b93062096807..df648204b599bddba508a6bb81bf844ece975d1c 100644 (file)
@@ -1,3 +1,9 @@
+2016-05-31  Jan Hubicka  <hubicka@ucw.cz>
+
+       * g++.d/predict-lop-exit-1.C: Update template for new predictor name.
+       * g++.d/predict-lop-exit-2.C: Update template for new predictor name.
+       * g++.d/predict-lop-exit-2.C: Update template for new predictor name.
+
 2016-05-31  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/71248
index c8c202e0a6ddf2e1b728d4a740ec7c00451f5713..357397f512b6840476533039cff50227f4a8b315 100644 (file)
@@ -9,4 +9,5 @@ void test() {
   return;
 }
 
+/* { dg-final { scan-tree-dump-times "extra loop exit heuristics:" 2 "profile_estimate"} } */
 /* { dg-final { scan-tree-dump-times "loop exit heuristics:" 3 "profile_estimate"} } */
index ae18003004e0ea027e46d9bd6d9d542b8780a0f3..172fab120c8c8f9f15b92016a03a964e93efe3e5 100644 (file)
@@ -9,4 +9,5 @@ void test() {
   return;
 }
 
+/* { dg-final { scan-tree-dump-times "extra loop exit heuristics:" 1 "profile_estimate"} } */
 /* { dg-final { scan-tree-dump-times "loop exit heuristics:" 2 "profile_estimate"} } */
index 35c768ff0318d30646dcbbfa6cf881619c47de29..e6ceec80159c1563dfa7e23df5ae9f7809ea4934 100644 (file)
@@ -9,4 +9,5 @@ void test() {
   return;
 }
 
+/* { dg-final { scan-tree-dump-times "extra loop exit heuristics:" 2 "profile_estimate"} } */
 /* { dg-final { scan-tree-dump-times "loop exit heuristics:" 3 "profile_estimate"} } */