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:
Jan Hubicka 2002-07-17 00:20:10 +02:00 committed by Jan Hubicka
parent 554b811104
commit 2a500b9e70
4 changed files with 51 additions and 0 deletions

View File

@ -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

View File

@ -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));

View File

@ -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"

View File

@ -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