Allow 2 insns from sched group to issue in same cycle, if no stalls needed.
authorJames E Wilson <wilson@tuliptree.org>
Wed, 11 Oct 2017 03:23:41 +0000 (20:23 -0700)
committerJim Wilson <wilson@gcc.gnu.org>
Wed, 11 Oct 2017 03:23:41 +0000 (20:23 -0700)
gcc/
PR rtl-optimization/81434
* haifa-sched.c (prune_ready_list): Init min_cost_group to 0.  Update
comment for main loop.  In sched_group_found if, also add checks for
pass and min_cost_group.

From-SVN: r253628

gcc/ChangeLog
gcc/haifa-sched.c

index e42eb5062eae21dbe6db3175d82a7f97194f8d54..61ec983c83e4d7f9c823e2cfa470186d48addbb1 100644 (file)
@@ -1,3 +1,10 @@
+2017-10-10  Jim Wilson  <wilson@tuliptree.org>
+
+       PR rtl-optimization/81434
+       * haifa-sched.c (prune_ready_list): Init min_cost_group to 0.  Update
+       comment for main loop.  In sched_group_found if, also add checks for
+       pass and min_cost_group.
+
 2017-10-10  Segher Boessenkool  <segher@kernel.crashing.org>
 
        * config/rs6000/rs6000.c (TARGET_INSN_COST): New.
index e7014cbb8b378c998148189b4d871e93c3e81918..d6dab57101b1ccd6d1e170b79dc0da566e5a617d 100644 (file)
@@ -6303,7 +6303,7 @@ prune_ready_list (state_t temp_state, bool first_cycle_insn_p,
 {
   int i, pass;
   bool sched_group_found = false;
-  int min_cost_group = 1;
+  int min_cost_group = 0;
 
   if (sched_fusion)
     return;
@@ -6319,8 +6319,8 @@ prune_ready_list (state_t temp_state, bool first_cycle_insn_p,
     }
 
   /* Make two passes if there's a SCHED_GROUP_P insn; make sure to handle
-     such an insn first and note its cost, then schedule all other insns
-     for one cycle later.  */
+     such an insn first and note its cost.  If at least one SCHED_GROUP_P insn
+     gets queued, then all other insns get queued for one cycle later.  */
   for (pass = sched_group_found ? 0 : 1; pass < 2; )
     {
       int n = ready.n_ready;
@@ -6333,7 +6333,8 @@ prune_ready_list (state_t temp_state, bool first_cycle_insn_p,
          if (DEBUG_INSN_P (insn))
            continue;
 
-         if (sched_group_found && !SCHED_GROUP_P (insn))
+         if (sched_group_found && !SCHED_GROUP_P (insn)
+             && ((pass == 0) || (min_cost_group >= 1)))
            {
              if (pass == 0)
                continue;