i386.h (MACHINE_DEPENDENT_REORG): New macro.
* i386.h (MACHINE_DEPENDENT_REORG): New macro. * i386.c (x86_machine_dependent_reorg): New function. * i386-protos.h (x86_machine_dependent_reorg): Declare. From-SVN: r55498
This commit is contained in:
parent
554b811104
commit
2a500b9e70
@ -1,3 +1,9 @@
|
||||
Wed Jul 17 00:19:20 CEST 2002 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
* i386.h (MACHINE_DEPENDENT_REORG): New macro.
|
||||
* i386.c (x86_machine_dependent_reorg): New function.
|
||||
* i386-protos.h (x86_machine_dependent_reorg): Declare.
|
||||
|
||||
2002-07-16 Zack Weinberg <zack@codesourcery.com>
|
||||
|
||||
* builtins.c (std_expand_builtin_va_start): Remove unused
|
||||
|
@ -209,6 +209,7 @@ extern int x86_field_alignment PARAMS ((tree, int));
|
||||
#endif
|
||||
|
||||
extern rtx ix86_tls_get_addr PARAMS ((void));
|
||||
extern void x86_machine_dependent_reorg PARAMS ((rtx));
|
||||
|
||||
/* In winnt.c */
|
||||
extern void i386_pe_encode_section_info PARAMS ((tree, int));
|
||||
|
@ -13677,4 +13677,47 @@ x86_field_alignment (field, computed)
|
||||
return computed;
|
||||
}
|
||||
|
||||
/* Implement machine specific optimizations.
|
||||
At the moment we implement single transformation: AMD Athlon works faster
|
||||
when RET is not destination of conditional jump or directly preceeded
|
||||
by other jump instruction. We avoid the penalty by inserting NOP just
|
||||
before the RET instructions in such cases. */
|
||||
void
|
||||
x86_machine_dependent_reorg (first)
|
||||
rtx first ATTRIBUTE_UNUSED;
|
||||
{
|
||||
edge e;
|
||||
|
||||
if (!TARGET_ATHLON || !optimize || optimize_size)
|
||||
return;
|
||||
for (e = EXIT_BLOCK_PTR->pred; e; e = e->pred_next)
|
||||
{
|
||||
basic_block bb = e->src;
|
||||
rtx ret = bb->end;
|
||||
rtx prev;
|
||||
bool insert = false;
|
||||
|
||||
if (!returnjump_p (ret) || !maybe_hot_bb_p (bb))
|
||||
continue;
|
||||
prev = prev_nonnote_insn (ret);
|
||||
if (prev && GET_CODE (prev) == CODE_LABEL)
|
||||
{
|
||||
edge e;
|
||||
for (e = bb->pred; e; e = e->pred_next)
|
||||
if (EDGE_FREQUENCY (e) && e->src->index > 0
|
||||
&& !(e->flags & EDGE_FALLTHRU))
|
||||
insert = 1;
|
||||
}
|
||||
if (!insert)
|
||||
{
|
||||
prev = prev_real_insn (ret);
|
||||
if (prev && GET_CODE (prev) == JUMP_INSN
|
||||
&& any_condjump_p (prev))
|
||||
insert = 1;
|
||||
}
|
||||
if (insert)
|
||||
emit_insn_before (gen_nop (), ret);
|
||||
}
|
||||
}
|
||||
|
||||
#include "gt-i386.h"
|
||||
|
@ -3354,6 +3354,7 @@ enum fp_cw_mode {FP_CW_STORED, FP_CW_UNINITIALIZED, FP_CW_ANY};
|
||||
((SRC) < FIRST_STACK_REG || (SRC) > LAST_STACK_REG)
|
||||
|
||||
|
||||
#define MACHINE_DEPENDENT_REORG(X) x86_machine_dependent_reorg(X)
|
||||
/*
|
||||
Local variables:
|
||||
version-control: t
|
||||
|
Loading…
Reference in New Issue
Block a user