Commit 87935f60 by Jim Wilson

(find_reloads_address_1): Handle SUBREGs same as REGs.

From-SVN: r5240
parent 5555d6d1
...@@ -4379,30 +4379,44 @@ find_reloads_address_1 (x, context, loc, opnum, type, ind_levels) ...@@ -4379,30 +4379,44 @@ find_reloads_address_1 (x, context, loc, opnum, type, ind_levels)
if (code == PLUS) if (code == PLUS)
{ {
register rtx op0 = XEXP (x, 0); register rtx orig_op0 = XEXP (x, 0);
register rtx op1 = XEXP (x, 1); register rtx orig_op1 = XEXP (x, 1);
register RTX_CODE code0 = GET_CODE (op0); register RTX_CODE code0 = GET_CODE (orig_op0);
register RTX_CODE code1 = GET_CODE (op1); register RTX_CODE code1 = GET_CODE (orig_op1);
register rtx op0 = orig_op0;
register rtx op1 = orig_op1;
if (GET_CODE (op0) == SUBREG)
{
op0 = SUBREG_REG (op0);
code0 = GET_CODE (op0);
}
if (GET_CODE (op1) == SUBREG)
{
op1 = SUBREG_REG (op1);
code1 = GET_CODE (op1);
}
if (code0 == MULT || code0 == SIGN_EXTEND || code1 == MEM) if (code0 == MULT || code0 == SIGN_EXTEND || code1 == MEM)
{ {
find_reloads_address_1 (op0, 1, &XEXP (x, 0), opnum, type, find_reloads_address_1 (orig_op0, 1, &XEXP (x, 0), opnum, type,
ind_levels); ind_levels);
find_reloads_address_1 (op1, 0, &XEXP (x, 1), opnum, type, find_reloads_address_1 (orig_op1, 0, &XEXP (x, 1), opnum, type,
ind_levels); ind_levels);
} }
else if (code1 == MULT || code1 == SIGN_EXTEND || code0 == MEM) else if (code1 == MULT || code1 == SIGN_EXTEND || code0 == MEM)
{ {
find_reloads_address_1 (op0, 0, &XEXP (x, 0), opnum, type, find_reloads_address_1 (orig_op0, 0, &XEXP (x, 0), opnum, type,
ind_levels); ind_levels);
find_reloads_address_1 (op1, 1, &XEXP (x, 1), opnum, type, find_reloads_address_1 (orig_op1, 1, &XEXP (x, 1), opnum, type,
ind_levels); ind_levels);
} }
else if (code0 == CONST_INT || code0 == CONST else if (code0 == CONST_INT || code0 == CONST
|| code0 == SYMBOL_REF || code0 == LABEL_REF) || code0 == SYMBOL_REF || code0 == LABEL_REF)
find_reloads_address_1 (op1, 0, &XEXP (x, 1), opnum, type, ind_levels); find_reloads_address_1 (orig_op1, 0, &XEXP (x, 1), opnum, type, ind_levels);
else if (code1 == CONST_INT || code1 == CONST else if (code1 == CONST_INT || code1 == CONST
|| code1 == SYMBOL_REF || code1 == LABEL_REF) || code1 == SYMBOL_REF || code1 == LABEL_REF)
find_reloads_address_1 (op0, 0, &XEXP (x, 0), opnum, type, ind_levels); find_reloads_address_1 (orig_op0, 0, &XEXP (x, 0), opnum, type, ind_levels);
else if (code0 == REG && code1 == REG) else if (code0 == REG && code1 == REG)
{ {
if (REG_OK_FOR_INDEX_P (op0) if (REG_OK_FOR_INDEX_P (op0)
...@@ -4412,37 +4426,37 @@ find_reloads_address_1 (x, context, loc, opnum, type, ind_levels) ...@@ -4412,37 +4426,37 @@ find_reloads_address_1 (x, context, loc, opnum, type, ind_levels)
&& REG_OK_FOR_BASE_P (op0)) && REG_OK_FOR_BASE_P (op0))
return 0; return 0;
else if (REG_OK_FOR_BASE_P (op1)) else if (REG_OK_FOR_BASE_P (op1))
find_reloads_address_1 (op0, 1, &XEXP (x, 0), opnum, type, find_reloads_address_1 (orig_op0, 1, &XEXP (x, 0), opnum, type,
ind_levels); ind_levels);
else if (REG_OK_FOR_BASE_P (op0)) else if (REG_OK_FOR_BASE_P (op0))
find_reloads_address_1 (op1, 1, &XEXP (x, 1), opnum, type, find_reloads_address_1 (orig_op1, 1, &XEXP (x, 1), opnum, type,
ind_levels); ind_levels);
else if (REG_OK_FOR_INDEX_P (op1)) else if (REG_OK_FOR_INDEX_P (op1))
find_reloads_address_1 (op0, 0, &XEXP (x, 0), opnum, type, find_reloads_address_1 (orig_op0, 0, &XEXP (x, 0), opnum, type,
ind_levels); ind_levels);
else if (REG_OK_FOR_INDEX_P (op0)) else if (REG_OK_FOR_INDEX_P (op0))
find_reloads_address_1 (op1, 0, &XEXP (x, 1), opnum, type, find_reloads_address_1 (orig_op1, 0, &XEXP (x, 1), opnum, type,
ind_levels); ind_levels);
else else
{ {
find_reloads_address_1 (op0, 1, &XEXP (x, 0), opnum, type, find_reloads_address_1 (orig_op0, 1, &XEXP (x, 0), opnum, type,
ind_levels); ind_levels);
find_reloads_address_1 (op1, 0, &XEXP (x, 1), opnum, type, find_reloads_address_1 (orig_op1, 0, &XEXP (x, 1), opnum, type,
ind_levels); ind_levels);
} }
} }
else if (code0 == REG) else if (code0 == REG)
{ {
find_reloads_address_1 (op0, 1, &XEXP (x, 0), opnum, type, find_reloads_address_1 (orig_op0, 1, &XEXP (x, 0), opnum, type,
ind_levels); ind_levels);
find_reloads_address_1 (op1, 0, &XEXP (x, 1), opnum, type, find_reloads_address_1 (orig_op1, 0, &XEXP (x, 1), opnum, type,
ind_levels); ind_levels);
} }
else if (code1 == REG) else if (code1 == REG)
{ {
find_reloads_address_1 (op1, 1, &XEXP (x, 1), opnum, type, find_reloads_address_1 (orig_op1, 1, &XEXP (x, 1), opnum, type,
ind_levels); ind_levels);
find_reloads_address_1 (op0, 0, &XEXP (x, 0), opnum, type, find_reloads_address_1 (orig_op0, 0, &XEXP (x, 0), opnum, type,
ind_levels); ind_levels);
} }
} }
......
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