aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2001-06-26 12:47:33 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2001-06-26 10:47:33 +0000
commit05b432db5bcddb96c6ed9ddd88edfdfaa81d17a6 (patch)
tree144f44b72eb338b2b0f1378f869aeee6e66f6bc3
parentf4655693b5aff2a21929d4c127b89a0fc9803a49 (diff)
downloadgcc-05b432db5bcddb96c6ed9ddd88edfdfaa81d17a6.zip
gcc-05b432db5bcddb96c6ed9ddd88edfdfaa81d17a6.tar.gz
gcc-05b432db5bcddb96c6ed9ddd88edfdfaa81d17a6.tar.bz2
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
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/config/i386/i386.md9
-rw-r--r--gcc/haifa-sched.c2
-rw-r--r--gcc/toplev.c21
4 files changed, 25 insertions, 17 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2c2b29b..34c713a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 791bf9e..62f93d2 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 d795c2d..4974c22 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 6e75187..7ca7e91 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);