------- Comment #12 from wilson at gcc dot gnu dot org 2005-10-12 03:07 ------- Created an attachment (id=9975) --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=9975&action=view) Untested patch to fix problems with dependency serialization.
This adds an UNCOND argument to add_dependence_list, so that all structural dependencies can be made unconditionally. Examples of structural dependencies are serialization dependencies on last_pending_memory_flush, dependencies added to preserve REG_N_CALLS_CROSSED==0, and dependencies for clobbers. All other dependencies are still created only if the two instructions are not mutex. This also eliminates some redundant JUMP_INSN dependency handling, as both sched_analyze and sched_analyze_insn were creating dependencies for JUMP_INSNs. I deleted the former one. This also stops trying to treat last_pending_memory_flush as a list. It can not function both as a list and as a serialization point. This patch effectively makes pending_flush_length obsolete, but I can't delete it because sched-rgn.c is using it in a strange way I don't understand. This patch probably makes more dependencies than is necessary or desirable, but some development work will be needed to fix that. I believe that we can keep a list of pending branch insns by keeping a list parallel to the pending read and pending write lists. This would help reduce the number of dependencies, and help with cross block scheduling. This will be a bit of work though, and may not be reasonable to attempt at this late point. -- wilson at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Attachment #9960 is|0 |1 obsolete| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24232