From: Jan Hubicka Date: Tue, 26 Jun 2001 10:47:33 +0000 (+0200) Subject: i386.md (float_truncate splitter, [...]): Add reload_completted; fix operand predicate. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=05b432db5bcddb96c6ed9ddd88edfdfaa81d17a6;p=gcc.git i386.md (float_truncate splitter, [...]): Add reload_completted; fix operand predicate. * 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2c2b29b5651..34c713a5c22 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +Tue Jun 26 12:40:12 CEST 2001 Jan Hubicka + + * 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 * diagnostic.h (diagnostic_prefixing_rule_t): New enum type. diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 791bf9e2403..62f93d2ff43 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -4410,7 +4410,8 @@ (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)))] "") @@ -8310,7 +8311,7 @@ (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))] @@ -8323,7 +8324,7 @@ (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]);") @@ -8332,7 +8333,7 @@ (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)) diff --git a/gcc/haifa-sched.c b/gcc/haifa-sched.c index d795c2d86d1..4974c22f686 100644 --- a/gcc/haifa-sched.c +++ b/gcc/haifa-sched.c @@ -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; diff --git a/gcc/toplev.c b/gcc/toplev.c index 6e75187c573..7ca7e91ae11 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -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);