mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-19 14:09:52 +08:00
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
This commit is contained in:
parent
ed598dde43
commit
3071fab505
@ -1,3 +1,22 @@
|
||||
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>
|
||||
|
||||
* calls.c (emit_library_call_value): Fix declaration of alignment_pad.
|
||||
|
@ -178,8 +178,6 @@ struct machine_function
|
||||
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)
|
||||
|
||||
/* which cpu are we scheduling for */
|
||||
@ -5180,8 +5178,24 @@ ix86_attr_length_default (insn)
|
||||
break;
|
||||
|
||||
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_MULTI:
|
||||
|
@ -7731,27 +7731,27 @@
|
||||
|
||||
;; Don't push memory operands
|
||||
(define_peephole2
|
||||
[(match_scratch:SI 2 "r")
|
||||
(set (match_operand:SI 0 "push_operand" "")
|
||||
(match_operand:SI 1 "memory_operand" ""))]
|
||||
[(set (match_operand:SI 0 "push_operand" "")
|
||||
(match_operand:SI 1 "memory_operand" ""))
|
||||
(match_scratch:SI 2 "r")]
|
||||
"! optimize_size && ! TARGET_PUSH_MEMORY"
|
||||
[(set (match_dup 2) (match_dup 1))
|
||||
(set (match_dup 0) (match_dup 2))]
|
||||
"")
|
||||
|
||||
(define_peephole2
|
||||
[(match_scratch:HI 2 "r")
|
||||
(set (match_operand:HI 0 "push_operand" "")
|
||||
(match_operand:HI 1 "memory_operand" ""))]
|
||||
[(set (match_operand:HI 0 "push_operand" "")
|
||||
(match_operand:HI 1 "memory_operand" ""))
|
||||
(match_scratch:HI 2 "r")]
|
||||
"! optimize_size && ! TARGET_PUSH_MEMORY"
|
||||
[(set (match_dup 2) (match_dup 1))
|
||||
(set (match_dup 0) (match_dup 2))]
|
||||
"")
|
||||
|
||||
(define_peephole2
|
||||
[(match_scratch:QI 2 "q")
|
||||
(set (match_operand:QI 0 "push_operand" "")
|
||||
(match_operand:QI 1 "memory_operand" ""))]
|
||||
[(set (match_operand:QI 0 "push_operand" "")
|
||||
(match_operand:QI 1 "memory_operand" ""))
|
||||
(match_scratch:QI 2 "q")]
|
||||
"! optimize_size && ! TARGET_PUSH_MEMORY"
|
||||
[(set (match_dup 2) (match_dup 1))
|
||||
(set (match_dup 0) (match_dup 2))]
|
||||
@ -7827,10 +7827,10 @@
|
||||
|
||||
;; Don't compare memory with zero, load and use a test instead.
|
||||
(define_peephole2
|
||||
[(match_scratch:SI 3 "r")
|
||||
(set (reg:CCNO 17)
|
||||
[(set (reg:CCNO 17)
|
||||
(compare:CCNO (match_operand:SI 0 "memory_operand" "")
|
||||
(const_int 0)))]
|
||||
(const_int 0)))
|
||||
(match_scratch:SI 3 "r")]
|
||||
"! optimize_size"
|
||||
[(set (match_dup 3) (match_dup 0))
|
||||
(set (reg:CCNO 17) (compare:CCNO (match_dup 3) (const_int 0)))]
|
||||
|
@ -5748,7 +5748,8 @@ recompute_reg_usage (f, loop_step)
|
||||
}
|
||||
|
||||
/* 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
|
||||
count_or_remove_death_notes (blocks, kill)
|
||||
@ -5762,7 +5763,7 @@ count_or_remove_death_notes (blocks, kill)
|
||||
basic_block bb;
|
||||
rtx insn;
|
||||
|
||||
if (! TEST_BIT (blocks, i))
|
||||
if (blocks && ! TEST_BIT (blocks, i))
|
||||
continue;
|
||||
|
||||
bb = BASIC_BLOCK (i);
|
||||
|
23
gcc/jump.c
23
gcc/jump.c
@ -66,8 +66,6 @@ Boston, MA 02111-1307, USA. */
|
||||
#include "expr.h"
|
||||
#include "real.h"
|
||||
#include "except.h"
|
||||
#include "basic-block.h"
|
||||
#include "output.h"
|
||||
#include "toplev.h"
|
||||
|
||||
/* ??? 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)
|
||||
int first = 1;
|
||||
int max_uid = 0;
|
||||
rtx last_insn;
|
||||
int did_cross_jump = 0;
|
||||
|
||||
cross_jump_death_matters = (cross_jump == 2);
|
||||
max_uid = init_label_info (f) + 1;
|
||||
@ -2130,7 +2127,6 @@ jump_optimize_1 (f, cross_jump, noop_moves, after_regscan, mark_labels_only)
|
||||
|
||||
if (newjpos != 0)
|
||||
{
|
||||
did_cross_jump = 1;
|
||||
do_cross_jump (insn, newjpos, newlpos);
|
||||
/* Make the old conditional jump
|
||||
into an unconditional one. */
|
||||
@ -2183,7 +2179,6 @@ jump_optimize_1 (f, cross_jump, noop_moves, after_regscan, mark_labels_only)
|
||||
|
||||
if (newjpos != 0)
|
||||
{
|
||||
did_cross_jump = 1;
|
||||
do_cross_jump (insn, newjpos, newlpos);
|
||||
changed = 1;
|
||||
next = insn;
|
||||
@ -2215,7 +2210,6 @@ jump_optimize_1 (f, cross_jump, noop_moves, after_regscan, mark_labels_only)
|
||||
|
||||
if (newjpos != 0)
|
||||
{
|
||||
did_cross_jump = 1;
|
||||
do_cross_jump (insn, newjpos, newlpos);
|
||||
changed = 1;
|
||||
next = insn;
|
||||
@ -2280,23 +2274,6 @@ jump_optimize_1 (f, cross_jump, noop_moves, after_regscan, mark_labels_only)
|
||||
|
||||
/* Show JUMP_CHAIN no longer valid. */
|
||||
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
|
||||
|
@ -2730,7 +2730,7 @@ peephole2_optimize (dump_file)
|
||||
care about subsequent life info; recog_last_allowed_insn to
|
||||
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)
|
||||
{
|
||||
prev = PREV_INSN (insn);
|
||||
@ -2749,7 +2749,7 @@ peephole2_optimize (dump_file)
|
||||
if (insn == bb->head)
|
||||
bb->head = NEXT_INSN (prev);
|
||||
|
||||
recog_last_allowed_insn = prev;
|
||||
recog_last_allowed_insn = NEXT_INSN (prev);
|
||||
SET_BIT (blocks, i);
|
||||
changed = 1;
|
||||
}
|
||||
|
23
gcc/toplev.c
23
gcc/toplev.c
@ -4319,7 +4319,16 @@ rest_of_compilation (decl)
|
||||
if (dbr_sched_dump)
|
||||
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)
|
||||
{
|
||||
@ -4333,6 +4342,12 @@ rest_of_compilation (decl)
|
||||
ggc_collect ();
|
||||
#endif
|
||||
|
||||
/* Shorten branches. */
|
||||
TIMEVAR (shorten_branch_time,
|
||||
{
|
||||
shorten_branches (get_insns ());
|
||||
});
|
||||
|
||||
#ifdef STACK_REGS
|
||||
if (stack_reg_dump)
|
||||
open_dump_file (".20.stack", decl_printable_name (decl, 2));
|
||||
@ -4350,12 +4365,6 @@ rest_of_compilation (decl)
|
||||
ggc_collect ();
|
||||
#endif
|
||||
|
||||
/* Shorten branches. */
|
||||
TIMEVAR (shorten_branch_time,
|
||||
{
|
||||
shorten_branches (get_insns ());
|
||||
});
|
||||
|
||||
/* Now turn the rtl into assembler code. */
|
||||
|
||||
TIMEVAR (final_time,
|
||||
|
Loading…
Reference in New Issue
Block a user