This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: egcs 2.91.14: packed-1 failure on openvms/alpha, more info
- To: kkaempf at progis dot de
- Subject: Re: egcs 2.91.14: packed-1 failure on openvms/alpha, more info
- From: Jim Wilson <wilson at cygnus dot com>
- Date: Wed, 25 Mar 1998 17:22:20 -0800
- cc: egcs at cygnus dot com, rth at cygnus dot com
The problem here is that pseudo 82 was marked as a pointer, because it holds
the result of pointer arithmetic at one point, and num_sign_bit_copies in
combine `knows' that pointers are always 32 bit sign extended values for
alpha-dec-vms. However, the pseudo is later re-assigned a non-pointer 64 bit
value, and then num_sign_bit_copies returns the wrong value because gcc still
thinks it holds a pointer value.
We can fix this by not mixing pointer and non-pointer values in the same
pseudo. This patch seems to work.
*** patches-egcs-980321/gcc/config/alpha/alpha.c Tue Feb 24 16:00:27 1998
--- kaempf-egcs-980321/gcc/config/alpha/alpha.c Wed Mar 25 17:06:08 1998
*************** alpha_expand_unaligned_load (tgt, mem, s
*** 1337,1343 ****
emit_insn (gen_extxl (extl, meml, GEN_INT (64), addr));
emit_insn (gen_extqh (exth, memh, addr));
! addr = expand_binop (DImode, ior_optab, extl, exth, addr, 1, OPTAB_WIDEN);
addr = expand_binop (DImode, ashr_optab, addr, GEN_INT (48),
addr, 1, OPTAB_WIDEN);
}
--- 1337,1346 ----
emit_insn (gen_extxl (extl, meml, GEN_INT (64), addr));
emit_insn (gen_extqh (exth, memh, addr));
! /* We must use tgt here for the target. Alpha-vms port fails if we use
! addr for the target, because addr is marked as a pointer and combine
! knows that pointers are always sign-extended 32 bit values. */
! addr = expand_binop (DImode, ior_optab, extl, exth, tgt, 1, OPTAB_WIDEN);
addr = expand_binop (DImode, ashr_optab, addr, GEN_INT (48),
addr, 1, OPTAB_WIDEN);
}