On Thu, Oct 2, 2008 at 8:50 PM, DJ Delorie <[EMAIL PROTECTED]> wrote:
>
> Ok, here's where it's getting expanded:
>
> #12 0x081e2805 in convert_modes (mode=PSImode, oldmode=HImode, x=0xb7f63450, 
> unsignedp=1)
>    at ../../gcc/gcc/expr.c:859
> #13 0x0831f83a in expand_binop_directly (mode=945, binoptab=0x8824de0, 
> op0=0xb7f63410,
>    op1=0xb7f63450, target=0xb7f63440, unsignedp=<value optimized out>, 
> methods=OPTAB_LIB_WIDEN,
>    last=0xb7ef16c0) at ../../gcc/gcc/optabs.c:1488
> #14 0x0831aa62 in expand_binop (mode=PSImode, binoptab=0x8824de0, 
> op0=0xb7f63410, op1=0xb7f63450,
>    target=0xb7f63440, unsignedp=1, methods=OPTAB_LIB_WIDEN) at 
> ../../gcc/gcc/optabs.c:1601
> #15 0x0821cb22 in expand_expr_real_1 (exp=0xb7ef160c, target=0xb7f63440, 
> tmode=PSImode,
>    modifier=EXPAND_NORMAL, alt_rtl=0x0) at ../../gcc/gcc/expr.c:9452
>
> At #15 the type of the target is used to decide if the math is signed
> or unsigned, so adding a signed HI to an unsigned PSI results in a
> zero extend.
>
> The patch you added was for the multiply-and-add case, such as "int *p
> += 1" but it's skipped if there's no multiply (char *p).

Ok, I just looked for POINTER_PLUS_EXPR and tried to make sure its offset is
always sign-extended.  Can you check where on the call path above we miss this
special treatment?

Thanks,
Richard.

Reply via email to