i386.md (float_truncate splitter, [...]): Add reload_completted; fix operand predicate.
authorJan Hubicka <jh@suse.cz>
Tue, 26 Jun 2001 10:47:33 +0000 (12:47 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Tue, 26 Jun 2001 10:47:33 +0000 (10:47 +0000)
* i386.md (float_truncate splitter, and to mov splitters): Add
reload_completted; fix operand predicate.

* haifa-sched.c (sched_init): Do not split insns.
* toplev.c (rest_of_compilation): Call split_all_insns before
sched1 pass; simplify condition of post-reload splitter;
call split_all_insn before sched2 pass.

From-SVN: r43575

gcc/ChangeLog
gcc/config/i386/i386.md
gcc/haifa-sched.c
gcc/toplev.c

index 2c2b29b565132ef0b68f95f4246b908117076cfe..34c713a5c22338fe5af6ba59b7aeacde5b66e45c 100644 (file)
@@ -1,3 +1,13 @@
+Tue Jun 26 12:40:12 CEST 2001  Jan Hubicka  <jh@suse.cz>
+
+       * i386.md (float_truncate splitter, and to mov splitters): Add
+       reload_completed; fix operand predicate.
+
+       * haifa-sched.c (sched_init): Do not split insns.
+       * toplev.c (rest_of_compilation): Call split_all_insns before
+       sched1 pass; simplify condition of post-reload splitter;
+       call split_all_insn before sched2 pass.
+
 2001-06-26  Gabriel Dos Reis  <gdr@codesourcery.com>
 
        * diagnostic.h (diagnostic_prefixing_rule_t): New enum type.
index 791bf9e24034b08acfee32a97fcecff93ddcdeb3..62f93d2ff43a078509462a8113746f837af41f78 100644 (file)
        (float_truncate:SF
         (match_operand:DF 1 "nonimmediate_operand" "")))
    (clobber (match_operand 2 "" ""))]
-  "TARGET_80387 && !FP_REG_P (operands[0]) && !FP_REG_P (operands[1])"
+  "TARGET_80387 && reload_completed
+   && !FP_REG_P (operands[0]) && !FP_REG_P (operands[1])"
   [(set (match_dup 0) (float_truncate:SF (match_dup 1)))]
   "")
 
    (set_attr "mode" "SI")])
 
 (define_split
-  [(set (match_operand 0 "ext_register_operand" "")
+  [(set (match_operand 0 "register_operand" "")
        (and (match_dup 0)
             (const_int -65536)))
    (clobber (reg:CC 17))]
        (and (match_dup 0)
             (const_int -256)))
    (clobber (reg:CC 17))]
-  "(optimize_size || !TARGET_PARTIAL_REG_STALL)"
+  "(optimize_size || !TARGET_PARTIAL_REG_STALL) && reload_completed"
   [(set (strict_low_part (match_dup 1)) (const_int 0))]
   "operands[1] = gen_lowpart (QImode, operands[0]);")
 
        (and (match_dup 0)
             (const_int -65281)))
    (clobber (reg:CC 17))]
-  "(optimize_size || !TARGET_PARTIAL_REG_STALL)"
+  "(optimize_size || !TARGET_PARTIAL_REG_STALL) && reload_completed"
   [(parallel [(set (zero_extract:SI (match_dup 0)
                                    (const_int 8)
                                    (const_int 8))
index d795c2d86d106ba518ddad2b7e46645011bbf60a..4974c22f686b0a5ff3d7577626ab890c8fa6705b 100644 (file)
@@ -1906,8 +1906,6 @@ sched_init (dump_file)
   /* Initialize issue_rate.  */
   issue_rate = ISSUE_RATE;
 
-  split_all_insns (1);
-
   /* We use LUID 0 for the fake insn (UID 0) which holds dependencies for
      pseudos which do not cross calls.  */
   old_max_uid = get_max_uid () + 1;
index 6e75187c573f1127eb56a7aee4668caaece0c029..7ca7e91ae11bd538f4242123f7ffc44c3fd0d9db 100644 (file)
@@ -3410,13 +3410,16 @@ rest_of_compilation (decl)
   timevar_pop (TV_GCSE);
 #endif
 
+  timevar_push (TV_SCHED);
+
+  split_all_insns (1);
+
 #ifdef INSN_SCHEDULING
 
   /* Print function header into sched dump now
      because doing the sched analysis makes some of the dump.  */
   if (optimize > 0 && flag_schedule_insns)
     {
-      timevar_push (TV_SCHED);
       open_dump_file (DFI_sched, decl);
 
       /* Do control and data sched analysis,
@@ -3425,15 +3428,15 @@ rest_of_compilation (decl)
       schedule_insns (rtl_dump_file);
 
       close_dump_file (DFI_sched, print_rtl_with_bb, insns);
-      timevar_pop (TV_SCHED);
-
-      ggc_collect ();
 
       /* Register lifetime information was updated as part of verifying
         the schedule.  */
       register_life_up_to_date = 1;
     }
 #endif
+  timevar_pop (TV_SCHED);
+
+  ggc_collect ();
 
   /* Determine if the current function is a leaf before running reload
      since this can impact optimizations done by the prologue and
@@ -3510,14 +3513,8 @@ rest_of_compilation (decl)
     }
 
   /* If optimizing, then go ahead and split insns now since we are about
-     to recompute flow information anyway.  Since we can't split insns after
-     reload, do the splitting unconditionally here to avoid gcc from losing
-     REG_DEAD notes.  */
-#ifdef STACK_REGS
-  if (1)
-#else
+     to recompute flow information anyway.  */
   if (optimize > 0)
-#endif
     {
       int old_labelnum = max_label_num ();
 
@@ -3619,6 +3616,8 @@ rest_of_compilation (decl)
       /* Do control and data sched analysis again,
         and write some more of the results to dump file.  */
 
+      split_all_insns (1);
+
       schedule_insns (rtl_dump_file);
 
       close_dump_file (DFI_sched2, print_rtl_with_bb, insns);