Commit 3071fab5 by Richard Henderson Committed by Richard Henderson

flow.c (count_or_remove_death_notes): Equate NULL with the universal set.

        * flow.c (count_or_remove_death_notes): Equate NULL with the
        universal set.

        * jump.c, reg-stack.c, toplev.c: Revert Oct 27 change.
        * toplev.c (rest_of_compilation): Rebuild CFG immediately before
        dbr_schedule.

        * i386.c (pic_label_no): Delete.
        (ix86_attr_length_default): Don't use single_set to peek
        inside a parallel.

        * recog.c (peephole2_optimize): Allow recog_next_insn to index
        the first insn after bb->end.
        * i386.md (push mem peeps): Scratch is live after evaluation
        of the memory.
        (cmp mem peep): Similarly.

From-SVN: r30269
parent ed598dde
Fri Oct 29 14:34:17 1999 Richard Henderson <rth@cygnus.com>
* flow.c (count_or_remove_death_notes): Equate NULL with the
universal set.
* jump.c, reg-stack.c, toplev.c: Revert Oct 27 change.
* toplev.c (rest_of_compilation): Rebuild CFG immediately before
dbr_schedule.
* i386.c (pic_label_no): Delete.
(ix86_attr_length_default): Don't use single_set to peek
inside a parallel.
* recog.c (peephole2_optimize): Allow recog_next_insn to index
the first insn after bb->end.
* i386.md (push mem peeps): Scratch is live after evaluation
of the memory.
(cmp mem peep): Similarly.
Fri Oct 29 11:50:11 1999 Catherine Moore <clm@cygnus.com> Fri Oct 29 11:50:11 1999 Catherine Moore <clm@cygnus.com>
* calls.c (emit_library_call_value): Fix declaration of alignment_pad. * calls.c (emit_library_call_value): Fix declaration of alignment_pad.
......
...@@ -178,8 +178,6 @@ struct machine_function ...@@ -178,8 +178,6 @@ struct machine_function
rtx stack_locals[(int) MAX_MACHINE_MODE][MAX_386_STACK_LOCALS]; rtx stack_locals[(int) MAX_MACHINE_MODE][MAX_386_STACK_LOCALS];
}; };
static int pic_label_no = 0;
#define ix86_stack_locals (current_function->machine->stack_locals) #define ix86_stack_locals (current_function->machine->stack_locals)
/* which cpu are we scheduling for */ /* which cpu are we scheduling for */
...@@ -5180,8 +5178,24 @@ ix86_attr_length_default (insn) ...@@ -5180,8 +5178,24 @@ ix86_attr_length_default (insn)
break; break;
case TYPE_LEA: case TYPE_LEA:
len += memory_address_length (SET_SRC (single_set (insn))); {
goto just_opcode; /* Irritatingly, single_set doesn't work with REG_UNUSED present,
as we'll get from running life_analysis during reg-stack when
not optimizing. */
rtx set = PATTERN (insn);
if (GET_CODE (set) == SET)
;
else if (GET_CODE (set) == PARALLEL
&& XVECLEN (set, 0) == 2
&& GET_CODE (XVECEXP (set, 0, 0)) == SET
&& GET_CODE (XVECEXP (set, 0, 1)) == CLOBBER)
set = XVECEXP (set, 0, 0);
else
abort ();
len += memory_address_length (SET_SRC (set));
goto just_opcode;
}
case TYPE_OTHER: case TYPE_OTHER:
case TYPE_MULTI: case TYPE_MULTI:
......
...@@ -7731,27 +7731,27 @@ ...@@ -7731,27 +7731,27 @@
;; Don't push memory operands ;; Don't push memory operands
(define_peephole2 (define_peephole2
[(match_scratch:SI 2 "r") [(set (match_operand:SI 0 "push_operand" "")
(set (match_operand:SI 0 "push_operand" "") (match_operand:SI 1 "memory_operand" ""))
(match_operand:SI 1 "memory_operand" ""))] (match_scratch:SI 2 "r")]
"! optimize_size && ! TARGET_PUSH_MEMORY" "! optimize_size && ! TARGET_PUSH_MEMORY"
[(set (match_dup 2) (match_dup 1)) [(set (match_dup 2) (match_dup 1))
(set (match_dup 0) (match_dup 2))] (set (match_dup 0) (match_dup 2))]
"") "")
(define_peephole2 (define_peephole2
[(match_scratch:HI 2 "r") [(set (match_operand:HI 0 "push_operand" "")
(set (match_operand:HI 0 "push_operand" "") (match_operand:HI 1 "memory_operand" ""))
(match_operand:HI 1 "memory_operand" ""))] (match_scratch:HI 2 "r")]
"! optimize_size && ! TARGET_PUSH_MEMORY" "! optimize_size && ! TARGET_PUSH_MEMORY"
[(set (match_dup 2) (match_dup 1)) [(set (match_dup 2) (match_dup 1))
(set (match_dup 0) (match_dup 2))] (set (match_dup 0) (match_dup 2))]
"") "")
(define_peephole2 (define_peephole2
[(match_scratch:QI 2 "q") [(set (match_operand:QI 0 "push_operand" "")
(set (match_operand:QI 0 "push_operand" "") (match_operand:QI 1 "memory_operand" ""))
(match_operand:QI 1 "memory_operand" ""))] (match_scratch:QI 2 "q")]
"! optimize_size && ! TARGET_PUSH_MEMORY" "! optimize_size && ! TARGET_PUSH_MEMORY"
[(set (match_dup 2) (match_dup 1)) [(set (match_dup 2) (match_dup 1))
(set (match_dup 0) (match_dup 2))] (set (match_dup 0) (match_dup 2))]
...@@ -7827,10 +7827,10 @@ ...@@ -7827,10 +7827,10 @@
;; Don't compare memory with zero, load and use a test instead. ;; Don't compare memory with zero, load and use a test instead.
(define_peephole2 (define_peephole2
[(match_scratch:SI 3 "r") [(set (reg:CCNO 17)
(set (reg:CCNO 17)
(compare:CCNO (match_operand:SI 0 "memory_operand" "") (compare:CCNO (match_operand:SI 0 "memory_operand" "")
(const_int 0)))] (const_int 0)))
(match_scratch:SI 3 "r")]
"! optimize_size" "! optimize_size"
[(set (match_dup 3) (match_dup 0)) [(set (match_dup 3) (match_dup 0))
(set (reg:CCNO 17) (compare:CCNO (match_dup 3) (const_int 0)))] (set (reg:CCNO 17) (compare:CCNO (match_dup 3) (const_int 0)))]
......
...@@ -5748,7 +5748,8 @@ recompute_reg_usage (f, loop_step) ...@@ -5748,7 +5748,8 @@ recompute_reg_usage (f, loop_step)
} }
/* Optionally removes all the REG_DEAD and REG_UNUSED notes from a set of /* Optionally removes all the REG_DEAD and REG_UNUSED notes from a set of
blocks. Returns a count of the number of registers that died. */ blocks. If BLOCKS is NULL, assume the universal set. Returns a count
of the number of registers that died. */
int int
count_or_remove_death_notes (blocks, kill) count_or_remove_death_notes (blocks, kill)
...@@ -5762,7 +5763,7 @@ count_or_remove_death_notes (blocks, kill) ...@@ -5762,7 +5763,7 @@ count_or_remove_death_notes (blocks, kill)
basic_block bb; basic_block bb;
rtx insn; rtx insn;
if (! TEST_BIT (blocks, i)) if (blocks && ! TEST_BIT (blocks, i))
continue; continue;
bb = BASIC_BLOCK (i); bb = BASIC_BLOCK (i);
......
...@@ -66,8 +66,6 @@ Boston, MA 02111-1307, USA. */ ...@@ -66,8 +66,6 @@ Boston, MA 02111-1307, USA. */
#include "expr.h" #include "expr.h"
#include "real.h" #include "real.h"
#include "except.h" #include "except.h"
#include "basic-block.h"
#include "output.h"
#include "toplev.h" #include "toplev.h"
/* ??? Eventually must record somehow the labels used by jumps /* ??? Eventually must record somehow the labels used by jumps
...@@ -192,7 +190,6 @@ jump_optimize_1 (f, cross_jump, noop_moves, after_regscan, mark_labels_only) ...@@ -192,7 +190,6 @@ jump_optimize_1 (f, cross_jump, noop_moves, after_regscan, mark_labels_only)
int first = 1; int first = 1;
int max_uid = 0; int max_uid = 0;
rtx last_insn; rtx last_insn;
int did_cross_jump = 0;
cross_jump_death_matters = (cross_jump == 2); cross_jump_death_matters = (cross_jump == 2);
max_uid = init_label_info (f) + 1; max_uid = init_label_info (f) + 1;
...@@ -2130,7 +2127,6 @@ jump_optimize_1 (f, cross_jump, noop_moves, after_regscan, mark_labels_only) ...@@ -2130,7 +2127,6 @@ jump_optimize_1 (f, cross_jump, noop_moves, after_regscan, mark_labels_only)
if (newjpos != 0) if (newjpos != 0)
{ {
did_cross_jump = 1;
do_cross_jump (insn, newjpos, newlpos); do_cross_jump (insn, newjpos, newlpos);
/* Make the old conditional jump /* Make the old conditional jump
into an unconditional one. */ into an unconditional one. */
...@@ -2183,7 +2179,6 @@ jump_optimize_1 (f, cross_jump, noop_moves, after_regscan, mark_labels_only) ...@@ -2183,7 +2179,6 @@ jump_optimize_1 (f, cross_jump, noop_moves, after_regscan, mark_labels_only)
if (newjpos != 0) if (newjpos != 0)
{ {
did_cross_jump = 1;
do_cross_jump (insn, newjpos, newlpos); do_cross_jump (insn, newjpos, newlpos);
changed = 1; changed = 1;
next = insn; next = insn;
...@@ -2215,7 +2210,6 @@ jump_optimize_1 (f, cross_jump, noop_moves, after_regscan, mark_labels_only) ...@@ -2215,7 +2210,6 @@ jump_optimize_1 (f, cross_jump, noop_moves, after_regscan, mark_labels_only)
if (newjpos != 0) if (newjpos != 0)
{ {
did_cross_jump = 1;
do_cross_jump (insn, newjpos, newlpos); do_cross_jump (insn, newjpos, newlpos);
changed = 1; changed = 1;
next = insn; next = insn;
...@@ -2280,23 +2274,6 @@ jump_optimize_1 (f, cross_jump, noop_moves, after_regscan, mark_labels_only) ...@@ -2280,23 +2274,6 @@ jump_optimize_1 (f, cross_jump, noop_moves, after_regscan, mark_labels_only)
/* Show JUMP_CHAIN no longer valid. */ /* Show JUMP_CHAIN no longer valid. */
jump_chain = 0; jump_chain = 0;
#if defined(DELAY_SLOTS) || defined(STACK_REGS)
/* ??? Keep the CFG up to date after cross-jumping. */
if (did_cross_jump && !cross_jump_death_matters)
{
sbitmap blocks;
find_basic_blocks (f, old_max_reg, NULL, 0);
blocks = sbitmap_alloc (n_basic_blocks);
sbitmap_ones (blocks);
count_or_remove_death_notes (blocks, 1);
sbitmap_free (blocks);
life_analysis (f, old_max_reg, NULL, 0);
}
#endif
} }
/* Initialize LABEL_NUSES and JUMP_LABEL fields. Delete any REG_LABEL /* Initialize LABEL_NUSES and JUMP_LABEL fields. Delete any REG_LABEL
......
...@@ -2730,7 +2730,7 @@ peephole2_optimize (dump_file) ...@@ -2730,7 +2730,7 @@ peephole2_optimize (dump_file)
care about subsequent life info; recog_last_allowed_insn to care about subsequent life info; recog_last_allowed_insn to
restrict how far forward we will allow the match to proceed. */ restrict how far forward we will allow the match to proceed. */
recog_last_allowed_insn = bb->end; recog_last_allowed_insn = NEXT_INSN (bb->end);
for (insn = bb->end; ; insn = prev) for (insn = bb->end; ; insn = prev)
{ {
prev = PREV_INSN (insn); prev = PREV_INSN (insn);
...@@ -2749,7 +2749,7 @@ peephole2_optimize (dump_file) ...@@ -2749,7 +2749,7 @@ peephole2_optimize (dump_file)
if (insn == bb->head) if (insn == bb->head)
bb->head = NEXT_INSN (prev); bb->head = NEXT_INSN (prev);
recog_last_allowed_insn = prev; recog_last_allowed_insn = NEXT_INSN (prev);
SET_BIT (blocks, i); SET_BIT (blocks, i);
changed = 1; changed = 1;
} }
......
...@@ -4319,7 +4319,16 @@ rest_of_compilation (decl) ...@@ -4319,7 +4319,16 @@ rest_of_compilation (decl)
if (dbr_sched_dump) if (dbr_sched_dump)
open_dump_file (".19.dbr", decl_printable_name (decl, 2)); open_dump_file (".19.dbr", decl_printable_name (decl, 2));
TIMEVAR (dbr_sched_time, dbr_schedule (insns, rtl_dump_file)); TIMEVAR
(dbr_sched_time,
{
/* ??? Keep the CFG up to date after cross-jumping. */
find_basic_blocks (insns, max_reg_num (), rtl_dump_file, 1);
count_or_remove_death_notes (NULL, 1);
life_analysis (insns, max_reg_num (), rtl_dump_file, 1);
dbr_schedule (insns, rtl_dump_file);
});
if (dbr_sched_dump) if (dbr_sched_dump)
{ {
...@@ -4333,6 +4342,12 @@ rest_of_compilation (decl) ...@@ -4333,6 +4342,12 @@ rest_of_compilation (decl)
ggc_collect (); ggc_collect ();
#endif #endif
/* Shorten branches. */
TIMEVAR (shorten_branch_time,
{
shorten_branches (get_insns ());
});
#ifdef STACK_REGS #ifdef STACK_REGS
if (stack_reg_dump) if (stack_reg_dump)
open_dump_file (".20.stack", decl_printable_name (decl, 2)); open_dump_file (".20.stack", decl_printable_name (decl, 2));
...@@ -4350,12 +4365,6 @@ rest_of_compilation (decl) ...@@ -4350,12 +4365,6 @@ rest_of_compilation (decl)
ggc_collect (); ggc_collect ();
#endif #endif
/* Shorten branches. */
TIMEVAR (shorten_branch_time,
{
shorten_branches (get_insns ());
});
/* Now turn the rtl into assembler code. */ /* Now turn the rtl into assembler code. */
TIMEVAR (final_time, TIMEVAR (final_time,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment