Commit 6e9ee54c by Anatoly Sokolov Committed by Anatoly Sokolov

mmix.h (REGISTER_MOVE_COST): Remove macro.

	* config/mmix/mmix.h (REGISTER_MOVE_COST): Remove macro.
	* config/mmix/mmix-protos.h (mmix_register_move_cost): Remove.
	* config/mmix/mmix.c (mmix_register_move_cost): Make static.
	Change 'from' and 'to' arguments type to reg_class_t.
	(TARGET_REGISTER_MOVE_COST): Define.

From-SVN: r177600
parent 394b1520
2011-08-09 Anatoly Sokolov <aesok@post.ru>
* config/mmix/mmix.h (REGISTER_MOVE_COST): Remove macro.
* config/mmix/mmix-protos.h (mmix_register_move_cost): Remove.
* config/mmix/mmix.c (mmix_register_move_cost): Make static.
Change 'from' and 'to' arguments type to reg_class_t.
(TARGET_REGISTER_MOVE_COST): Define.
2011-08-09 Vladimir Makarov <vmakarov@redhat.com> 2011-08-09 Vladimir Makarov <vmakarov@redhat.com>
PR target/50026 PR target/50026
......
...@@ -26,8 +26,6 @@ extern int mmix_starting_frame_offset (void); ...@@ -26,8 +26,6 @@ extern int mmix_starting_frame_offset (void);
extern int mmix_function_arg_regno_p (int, int); extern int mmix_function_arg_regno_p (int, int);
extern void mmix_function_profiler (FILE *, int); extern void mmix_function_profiler (FILE *, int);
extern int mmix_reversible_cc_mode (enum machine_mode); extern int mmix_reversible_cc_mode (enum machine_mode);
extern int mmix_register_move_cost
(enum machine_mode, enum reg_class, enum reg_class);
extern const char *mmix_text_section_asm_op (void); extern const char *mmix_text_section_asm_op (void);
extern const char *mmix_data_section_asm_op (void); extern const char *mmix_data_section_asm_op (void);
extern void mmix_output_quoted_string (FILE *, const char *, int); extern void mmix_output_quoted_string (FILE *, const char *, int);
......
...@@ -141,6 +141,8 @@ static void mmix_setup_incoming_varargs ...@@ -141,6 +141,8 @@ static void mmix_setup_incoming_varargs
static void mmix_file_start (void); static void mmix_file_start (void);
static void mmix_file_end (void); static void mmix_file_end (void);
static bool mmix_rtx_costs (rtx, int, int, int *, bool); static bool mmix_rtx_costs (rtx, int, int, int *, bool);
static int mmix_register_move_cost (enum machine_mode,
reg_class_t, reg_class_t);
static rtx mmix_struct_value_rtx (tree, int); static rtx mmix_struct_value_rtx (tree, int);
static enum machine_mode mmix_promote_function_mode (const_tree, static enum machine_mode mmix_promote_function_mode (const_tree,
enum machine_mode, enum machine_mode,
...@@ -224,6 +226,9 @@ static void mmix_conditional_register_usage (void); ...@@ -224,6 +226,9 @@ static void mmix_conditional_register_usage (void);
#undef TARGET_ADDRESS_COST #undef TARGET_ADDRESS_COST
#define TARGET_ADDRESS_COST hook_int_rtx_bool_0 #define TARGET_ADDRESS_COST hook_int_rtx_bool_0
#undef TARGET_REGISTER_MOVE_COST
#define TARGET_REGISTER_MOVE_COST mmix_register_move_cost
#undef TARGET_MACHINE_DEPENDENT_REORG #undef TARGET_MACHINE_DEPENDENT_REORG
#define TARGET_MACHINE_DEPENDENT_REORG mmix_reorg #define TARGET_MACHINE_DEPENDENT_REORG mmix_reorg
...@@ -1233,12 +1238,15 @@ mmix_rtx_costs (rtx x ATTRIBUTE_UNUSED, ...@@ -1233,12 +1238,15 @@ mmix_rtx_costs (rtx x ATTRIBUTE_UNUSED,
return false; return false;
} }
/* REGISTER_MOVE_COST. */ /* TARGET_REGISTER_MOVE_COST.
int The special registers can only move to and from general regs, and we
need to check that their constraints match, so say 3 for them. */
static int
mmix_register_move_cost (enum machine_mode mode ATTRIBUTE_UNUSED, mmix_register_move_cost (enum machine_mode mode ATTRIBUTE_UNUSED,
enum reg_class from, reg_class_t from,
enum reg_class to) reg_class_t to)
{ {
return (from == GENERAL_REGS && from == to) ? 2 : 3; return (from == GENERAL_REGS && from == to) ? 2 : 3;
} }
......
...@@ -617,23 +617,6 @@ typedef struct { int regs; int lib; } CUMULATIVE_ARGS; ...@@ -617,23 +617,6 @@ typedef struct { int regs; int lib; } CUMULATIVE_ARGS;
/* Node: Costs */ /* Node: Costs */
/* The special registers can only move to and from general regs, and we
need to check that their constraints match, so say 3 for them. */
/* WARNING: gcc-2.7.2.2 i686-pc-linux-gnulibc1 (as shipped with RH 4.2)
miscompiles reload1.c:reload_cse_simplify_set; a call to
reload_cse_regno_equal_p is missing when checking if a substitution of
a register setting is valid if this is defined to just the expression
in mmix_register_move_cost.
Symptom: a (all?) register setting is optimized away for e.g.
"char *p1(char *p) { return p+1; }" and the value of register zero ($0)
is returned.
We can workaround by making this a function call - unknown if this
causes dire speed effects. */
#define REGISTER_MOVE_COST(MODE, FROM, TO) \
mmix_register_move_cost (MODE, FROM, TO)
#define SLOW_BYTE_ACCESS 0 #define SLOW_BYTE_ACCESS 0
......
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