From: Jim Wilson Date: Wed, 1 Sep 1993 22:07:57 +0000 (-0700) Subject: (find_reloads_address_1): Handle SUBREGs same as REGs. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=87935f601efe35aa8fbefbd4cb53c92864148b14;p=gcc.git (find_reloads_address_1): Handle SUBREGs same as REGs. From-SVN: r5240 --- diff --git a/gcc/reload.c b/gcc/reload.c index f3e880224bb..37d0efce933 100644 --- a/gcc/reload.c +++ b/gcc/reload.c @@ -4379,30 +4379,44 @@ find_reloads_address_1 (x, context, loc, opnum, type, ind_levels) if (code == PLUS) { - register rtx op0 = XEXP (x, 0); - register rtx op1 = XEXP (x, 1); - register RTX_CODE code0 = GET_CODE (op0); - register RTX_CODE code1 = GET_CODE (op1); + register rtx orig_op0 = XEXP (x, 0); + register rtx orig_op1 = XEXP (x, 1); + register RTX_CODE code0 = GET_CODE (orig_op0); + 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) { - 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); - 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); } 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); - 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); } else if (code0 == CONST_INT || code0 == CONST || 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 || 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) { if (REG_OK_FOR_INDEX_P (op0) @@ -4412,37 +4426,37 @@ find_reloads_address_1 (x, context, loc, opnum, type, ind_levels) && REG_OK_FOR_BASE_P (op0)) return 0; 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); 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); 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); 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); 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); - 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); } } 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); - 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); } 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); - 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); } }