Hi,

I've committed the attached patch which enables the CC of x+constant
instructions to be used in more situations on z9 or higher.

No regressions on s390 and s390x (--with-arch=z196).

Bye,

-Andreas-

2012-12-04  Andreas Krebbel  <andreas.kreb...@de.ibm.com>

        * config/s390/s390.c (s390_select_ccmode): Enable using CC of
          x + imm for higher immediates on z9-109 upwards.

---
 gcc/config/s390/s390.c |    5 !!!!!
 1 file changed, 5 modifications(!)

Index: gcc/config/s390/s390.c
===================================================================
*** gcc/config/s390/s390.c.orig
--- gcc/config/s390/s390.c
*************** s390_select_ccmode (enum rtx_code code, 
*** 691,697 ****
             int a, b; if ((b = a + c) > 0)
           with c as a constant value: c < 0 -> CCAN and c >= 0 -> CCAP  */
        if (GET_CODE (op0) == PLUS && GET_CODE (XEXP (op0, 1)) == CONST_INT
!           && CONST_OK_FOR_K (INTVAL (XEXP (op0, 1))))
          {
            if (INTVAL (XEXP((op0), 1)) < 0)
              return CCANmode;
--- 691,700 ----
             int a, b; if ((b = a + c) > 0)
           with c as a constant value: c < 0 -> CCAN and c >= 0 -> CCAP  */
        if (GET_CODE (op0) == PLUS && GET_CODE (XEXP (op0, 1)) == CONST_INT
!           && (CONST_OK_FOR_K (INTVAL (XEXP (op0, 1)))
!               || (CONST_OK_FOR_CONSTRAINT_P (INTVAL (XEXP (op0, 1)), 'O', 
"Os")
!                   /* Avoid INT32_MIN on 32 bit.  */
!                   && (!TARGET_ZARCH || INTVAL (XEXP (op0, 1)) != -0x7fffffff 
- 1))))
          {
            if (INTVAL (XEXP((op0), 1)) < 0)
              return CCANmode;

Reply via email to