https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114729

--- Comment #19 from Vineet Gupta <vineetg at gcc dot gnu.org> ---
For last several weeks I've been working on various tweaks to address the model
schedule issue. It seems conceptually really simple, something along the lines
of following:

 for (;;)
   {
       FOR_EACH_DEP (insn->insn, SD_LIST_HARD_BACK, sd_it, dep)

          if (pro->insn
              && pro->model_priority < insn->model_priority
              && QUEUE_INDEX (pro->insn) != QUEUE_SCHEDULED)
            {
-             pro->model_priority = model_next_priority;

              if (QUEUE_INDEX (pro->insn) == QUEUE_READY)
                {
+                  if (DEP_TYPE (dep) == REG_DEP_TRUE)
+                     pro->model_priority = model_new_priority;


However adding the priority distinction has been really tricky: subtle changes
tend to lead to infinite looping.

I've tried numerous approaches: 
 - tracking true deps separately than existing overall unscheduled deps. 
 - Preventing recursion from adding same list multiple times.

A working version which bootstrapped the toolchain, fixed the reduced test, 
caused severe spills regression in actual cactu build.

Reply via email to