File s390-symref-preferredreload of Package gcc43

Index: gcc/config/s390/s390.c
===================================================================
*** gcc/config/s390/s390.c.orig
--- gcc/config/s390/s390.c
*************** s390_preferred_reload_class (rtx op, enu
*** 2859,2870 ****
  	 it is most likely being used as an address, so
  	 prefer ADDR_REGS.  If 'class' is not a superset
  	 of ADDR_REGS, e.g. FP_REGS, reject this reload.  */
-       case PLUS:
        case LABEL_REF:
        case SYMBOL_REF:
        case CONST:
  	if (reg_class_subset_p (ADDR_REGS, class))
!           return ADDR_REGS;
  	else
  	  return NO_REGS;
  
--- 2859,2874 ----
  	 it is most likely being used as an address, so
  	 prefer ADDR_REGS.  If 'class' is not a superset
  	 of ADDR_REGS, e.g. FP_REGS, reject this reload.  */
        case LABEL_REF:
        case SYMBOL_REF:
        case CONST:
+ 	if (!legitimate_reload_constant_p (op))
+           return NO_REGS;
+ 	/* fallthrough */
+       case PLUS:
+ 	/* load address will be used.  */
  	if (reg_class_subset_p (ADDR_REGS, class))
! 	  return ADDR_REGS;
  	else
  	  return NO_REGS;
  
*************** s390_secondary_reload (bool in_p, rtx x,
*** 2980,2991 ****
  
    if (TARGET_Z10)
      {
        /* On z10 several optimizer steps may generate larl operands with
  	 an odd addend.  */
        if (in_p
! 	  && s390_symref_operand_p (x, NULL, NULL)
  	  && mode == Pmode
! 	  && !s390_check_symref_alignment (x, 2))
  	sri->icode = ((mode == DImode) ? CODE_FOR_reloaddi_larl_odd_addend_z10
  		      : CODE_FOR_reloadsi_larl_odd_addend_z10);
  
--- 2984,2999 ----
  
    if (TARGET_Z10)
      {
+       HOST_WIDE_INT offset;
+       rtx symref;
+ 
        /* On z10 several optimizer steps may generate larl operands with
  	 an odd addend.  */
        if (in_p
! 	  && s390_symref_operand_p (x, &symref, &offset)
  	  && mode == Pmode
! 	  && !SYMBOL_REF_ALIGN1_P (symref)
! 	  && (offset & 1) == 1)
  	sri->icode = ((mode == DImode) ? CODE_FOR_reloaddi_larl_odd_addend_z10
  		      : CODE_FOR_reloadsi_larl_odd_addend_z10);
  
openSUSE Build Service is sponsored by