Commit 5f286f4a by Yao Qi Committed by Yao Qi

Makefile.in: Add $(TARGET_H) to the regrename.o rule.

        * Makefile.in: Add $(TARGET_H) to the regrename.o rule.
        * regrename.c (struct du_head): Add new element length.
        (sort_du_head, get_element, merge, merge_sort_comparison):
        New functions of merge sort implementation to du_head list.
        (regrename_optimize): Sort du_head linked list by length.
        Iterate registers in a preferred-register-first order.
        Move some code to ...
        (check_new_reg_p): here.  New function.
        (create_new_chain):  Initialize length.
        (scan_rtx_reg): Increase length for non-debug insns.
        * target.def: New hook preferred_rename_class.
        * targhook.c (default_preferred_rename_class): New.
        * targhook.h: Declare it.
        * doc/tm.texi.in: New hook TARGET_PREFERRED_RENAME_CLASS.
        * doc/tm.texi: Regenerate.

From-SVN: r167534
parent 9ff70652
2010-12-07 Yao Qi <yao@codesourcery.com>
* Makefile.in: Add $(TARGET_H) to the regrename.o rule.
* regrename.c (struct du_head): Add new element length.
(sort_du_head, get_element, merge, merge_sort_comparison):
New functions of merge sort implementation to du_head list.
(regrename_optimize): Sort du_head linked list by length.
Iterate registers in a preferred-register-first order.
Move some code to ...
(check_new_reg_p): here. New function.
(create_new_chain): Initialize length.
(scan_rtx_reg): Increase length for non-debug insns.
* target.def: New hook preferred_rename_class.
* targhook.c (default_preferred_rename_class): New.
* targhook.h: Declare it.
* doc/tm.texi.in: New hook TARGET_PREFERRED_RENAME_CLASS.
* doc/tm.texi: Regenerate.
2010-12-07 Jakub Jelinek <jakub@redhat.com> 2010-12-07 Jakub Jelinek <jakub@redhat.com>
PR debug/46799 PR debug/46799
...@@ -3493,7 +3493,7 @@ regcprop.o : regcprop.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ ...@@ -3493,7 +3493,7 @@ regcprop.o : regcprop.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
regrename.o : regrename.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ regrename.o : regrename.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(RTL_ERROR_H) insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h \ $(RTL_ERROR_H) insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h \
output.h $(RECOG_H) $(FUNCTION_H) $(OBSTACK_H) $(FLAGS_H) $(TM_P_H) \ output.h $(RECOG_H) $(FUNCTION_H) $(OBSTACK_H) $(FLAGS_H) $(TM_P_H) \
addresses.h reload.h $(TIMEVAR_H) $(TREE_PASS_H) $(DF_H) addresses.h reload.h $(TIMEVAR_H) $(TREE_PASS_H) $(DF_H) $(TARGET_H)
ifcvt.o : ifcvt.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ ifcvt.o : ifcvt.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
$(REGS_H) $(DIAGNOSTIC_CORE_H) $(FLAGS_H) insn-config.h $(FUNCTION_H) $(RECOG_H) \ $(REGS_H) $(DIAGNOSTIC_CORE_H) $(FLAGS_H) insn-config.h $(FUNCTION_H) $(RECOG_H) \
$(TARGET_H) $(BASIC_BLOCK_H) $(EXPR_H) output.h $(EXCEPT_H) $(TM_P_H) \ $(TARGET_H) $(BASIC_BLOCK_H) $(EXPR_H) output.h $(EXCEPT_H) $(TM_P_H) \
......
...@@ -2504,6 +2504,10 @@ looking for one that is valid, and will reload one or both registers ...@@ -2504,6 +2504,10 @@ looking for one that is valid, and will reload one or both registers
only if neither labeling works. only if neither labeling works.
@end defmac @end defmac
@deftypefn {Target Hook} reg_class_t TARGET_PREFERRED_RENAME_CLASS (reg_class_t @var{rclass})
A target hook that places additional preference on the register class to use when it is necessary to rename a register in class @var{class} to another class, or perhaps @var{NO_REGS}, if no prefered register class is found or hook @code{preferred_rename_class} is not implemented. Sometimes returning a more restrictive class makes better code. For example, on ARM, thumb-2 instructions using @code{LO_REGS} may be smaller than instructions using @code{GENERIC_REGS}. By returning @code{LO_REGS} from @code{preferred_rename_class}, code size can be reduced.
@end deftypefn
@deftypefn {Target Hook} reg_class_t TARGET_PREFERRED_RELOAD_CLASS (rtx @var{x}, reg_class_t @var{rclass}) @deftypefn {Target Hook} reg_class_t TARGET_PREFERRED_RELOAD_CLASS (rtx @var{x}, reg_class_t @var{rclass})
A target hook that places additional restrictions on the register class A target hook that places additional restrictions on the register class
to use when it is necessary to copy value @var{x} into a register in class to use when it is necessary to copy value @var{x} into a register in class
......
...@@ -2494,6 +2494,8 @@ looking for one that is valid, and will reload one or both registers ...@@ -2494,6 +2494,8 @@ looking for one that is valid, and will reload one or both registers
only if neither labeling works. only if neither labeling works.
@end defmac @end defmac
@hook TARGET_PREFERRED_RENAME_CLASS
@hook TARGET_PREFERRED_RELOAD_CLASS @hook TARGET_PREFERRED_RELOAD_CLASS
A target hook that places additional restrictions on the register class A target hook that places additional restrictions on the register class
to use when it is necessary to copy value @var{x} into a register in class to use when it is necessary to copy value @var{x} into a register in class
......
...@@ -2224,6 +2224,21 @@ DEFHOOK ...@@ -2224,6 +2224,21 @@ DEFHOOK
bool, (reg_class_t rclass), bool, (reg_class_t rclass),
default_class_likely_spilled_p) default_class_likely_spilled_p)
DEFHOOK
(preferred_rename_class,
"A target hook that places additional preference on the register\
class to use when it is necessary to rename a register in class\
@var{class} to another class, or perhaps @var{NO_REGS}, if no\
prefered register class is found or hook @code{preferred_rename_class}\
is not implemented.\
Sometimes returning a more restrictive class makes better code. For\
example, on ARM, thumb-2 instructions using @code{LO_REGS} may be\
smaller than instructions using @code{GENERIC_REGS}. By returning\
@code{LO_REGS} from @code{preferred_rename_class}, code size can\
be reduced.",
reg_class_t, (reg_class_t rclass),
default_preferred_rename_class)
/* This target hook allows the backend to perform additional /* This target hook allows the backend to perform additional
processing while initializing for variable expansion. */ processing while initializing for variable expansion. */
DEFHOOK DEFHOOK
......
...@@ -1278,6 +1278,13 @@ default_preferred_output_reload_class (rtx x ATTRIBUTE_UNUSED, ...@@ -1278,6 +1278,13 @@ default_preferred_output_reload_class (rtx x ATTRIBUTE_UNUSED,
#endif #endif
} }
/* The default implementation of TARGET_PREFERRED_RENAME_CLASS. */
reg_class_t
default_preferred_rename_class (reg_class_t rclass ATTRIBUTE_UNUSED)
{
return NO_REGS;
}
/* The default implementation of TARGET_CLASS_LIKELY_SPILLED_P. */ /* The default implementation of TARGET_CLASS_LIKELY_SPILLED_P. */
bool bool
......
...@@ -160,6 +160,7 @@ extern int default_register_move_cost (enum machine_mode, reg_class_t, ...@@ -160,6 +160,7 @@ extern int default_register_move_cost (enum machine_mode, reg_class_t,
extern bool default_profile_before_prologue (void); extern bool default_profile_before_prologue (void);
extern reg_class_t default_preferred_reload_class (rtx, reg_class_t); extern reg_class_t default_preferred_reload_class (rtx, reg_class_t);
extern reg_class_t default_preferred_output_reload_class (rtx, reg_class_t); extern reg_class_t default_preferred_output_reload_class (rtx, reg_class_t);
extern reg_class_t default_preferred_rename_class (reg_class_t rclass);
extern bool default_class_likely_spilled_p (reg_class_t); extern bool default_class_likely_spilled_p (reg_class_t);
extern enum unwind_info_type default_debug_unwind_info (void); extern enum unwind_info_type default_debug_unwind_info (void);
......
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