Commit 0b04ec8c by Richard Kenner

(convert_memory_address, case PLUS, MULT): Don't commute operation

with extension if not adding small integer.

From-SVN: r12292
parent 489af5d1
...@@ -304,8 +304,11 @@ convert_memory_address (to_mode, x) ...@@ -304,8 +304,11 @@ convert_memory_address (to_mode, x)
enum machine_mode to_mode; enum machine_mode to_mode;
rtx x; rtx x;
{ {
enum machine_mode from_mode = to_mode == ptr_mode ? Pmode : ptr_mode;
rtx temp; rtx temp;
/* Here we handle some special cases. If none of them apply, fall through
to the default case. */
switch (GET_CODE (x)) switch (GET_CODE (x))
{ {
case CONST_INT: case CONST_INT:
...@@ -320,21 +323,25 @@ convert_memory_address (to_mode, x) ...@@ -320,21 +323,25 @@ convert_memory_address (to_mode, x)
SYMBOL_REF_FLAG (temp) = SYMBOL_REF_FLAG (x); SYMBOL_REF_FLAG (temp) = SYMBOL_REF_FLAG (x);
return temp; return temp;
case PLUS:
case MULT:
return gen_rtx (GET_CODE (x), to_mode,
convert_memory_address (to_mode, XEXP (x, 0)),
convert_memory_address (to_mode, XEXP (x, 1)));
case CONST: case CONST:
return gen_rtx (CONST, to_mode, return gen_rtx (CONST, to_mode,
convert_memory_address (to_mode, XEXP (x, 0))); convert_memory_address (to_mode, XEXP (x, 0)));
default: case PLUS:
return convert_modes (to_mode, case MULT:
to_mode == ptr_mode ? Pmode : ptr_mode, /* For addition the second operand is a small constant, we can safely
x, POINTERS_EXTEND_UNSIGNED); permute the converstion and addition operation. We can always safely
permute them if we are making the address narrower. */
if (GET_MODE_SIZE (to_mode) < GET_MODE_SIZE (from_mode)
|| (GET_CODE (x) == PLUS && GET_CODE (XEXP (x, 1)) == CONST_INT
&& INTVAL (x) + 20000 < 40000))
return gen_rtx (GET_CODE (x), to_mode,
convert_memory_address (to_mode, XEXP (x, 0)),
convert_memory_address (to_mode, XEXP (x, 1)));
} }
return convert_modes (to_mode, from_mode,
x, POINTERS_EXTEND_UNSIGNED);
} }
#endif #endif
......
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