This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: egcs 2.91.14: packed-1 failure on openvms/alpha, more info


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);
      }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]