diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5d064f80f12..3dc102c1d57 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2000-12-01 Alexandre Oliva + * config/sh/sh.c (shiftcosts): Don't get INTVAL before testing + whether X is a CONST_INT. + (addsubcosts): Likewise. + * config/sh/sh.h (OUTPUT_ADDR_CONST_EXTRA): Use INTVAL instead of mis-used XINT. (ARG_POINTER_REGNUM): Set to AP_REG. diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index b17295f76ae..80b1808530c 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -965,12 +965,14 @@ int shiftcosts (x) rtx x; { - int value = INTVAL (XEXP (x, 1)); + int value; /* If shift by a non constant, then this will be expensive. */ if (GET_CODE (XEXP (x, 1)) != CONST_INT) return SH_DYNAMIC_SHIFT_COST; + value = INTVAL (XEXP (x, 1)); + /* Otherwise, return the true cost in instructions. */ if (GET_CODE (x) == ASHIFTRT) { @@ -1025,7 +1027,8 @@ addsubcosts (x) return 1; /* Likewise for small constants. */ - if (CONST_OK_FOR_I (INTVAL (XEXP (x, 1)))) + if (GET_CODE (XEXP (x, 1)) == CONST_INT + && CONST_OK_FOR_I (INTVAL (XEXP (x, 1)))) return 1; /* Any other constant requires a 2 cycle pc-relative load plus an