Jan Hubicka <hubicka@freesoft.cz>
authorJan Hubicka <hubicka@freesoft.cz>
Fri, 1 Oct 1999 01:35:37 +0000 (03:35 +0200)
committerRichard Henderson <rth@gcc.gnu.org>
Fri, 1 Oct 1999 01:35:37 +0000 (18:35 -0700)
        * i386.c (ix86_adjust_cost): Ignore false ebp dependencies in
        prologues.

From-SVN: r29745

gcc/ChangeLog
gcc/config/i386/i386.c

index e34536b41e5f4dd9d9a975b25fb7c25b0c4f0249..f6ef56aaee368bcdc8f70b1e8bc2d6bb086b85fd 100644 (file)
@@ -1,3 +1,8 @@
+Thu Sep 30 18:34:54 1999  Jan Hubicka  <hubicka@freesoft.cz>
+
+       * i386.c (ix86_adjust_cost): Ignore false ebp dependencies in
+       prologues.
+
 Thu Sep 30 18:31:36 1999  Jan Hubicka  <hubicka@freesoft.cz>
 
        * alias.c: Include insn-flags.h.
index 34a68a78dd51b5c02028ff1a1295c5ded869866f..69b1170a5020359567d89e43392af34d21f8ee56 100644 (file)
@@ -5325,15 +5325,27 @@ ix86_adjust_cost (insn, link, dep_insn, cost)
 {
   enum attr_type insn_type, dep_insn_type;
   rtx set, set2;
+  int dep_insn_code_number;
 
   /* We describe no anti or output depenancies.  */
   if (REG_NOTE_KIND (link) != 0)
     return cost;
 
+  dep_insn_code_number = recog_memoized (dep_insn);
+
   /* If we can't recognize the insns, we can't really do anything.  */
-  if (recog_memoized (insn) < 0 || recog_memoized (dep_insn) < 0)
+  if (dep_insn_code_number < 0 || recog_memoized (insn) < 0)
     return cost;
 
+  /* Prologue and epilogue allocators have false dependency on ebp.
+     This results in one cycle extra stall on Pentium prologue scheduling, so
+     handle this important case manually. */
+
+  if ((dep_insn_code_number == CODE_FOR_prologue_allocate_stack
+       || dep_insn_code_number == CODE_FOR_epilogue_deallocate_stack)
+      && !reg_mentioned_p (stack_pointer_rtx, insn))
+    return 0;
+
   insn_type = get_attr_type (insn);
   dep_insn_type = get_attr_type (dep_insn);