diff options
author | Andreas Krebbel <Andreas.Krebbel@de.ibm.com> | 2012-12-04 14:04:39 +0000 |
---|---|---|
committer | Andreas Krebbel <krebbel@gcc.gnu.org> | 2012-12-04 14:04:39 +0000 |
commit | 71ce1a34856faf6e981c68864004a4478bb220ce (patch) | |
tree | c5d001aa0b40b92ede6aa3742720dbbe30c54b87 /gcc | |
parent | 5005fe220a46685544e05626fc5528fd072bacd9 (diff) | |
download | gcc-71ce1a34856faf6e981c68864004a4478bb220ce.zip gcc-71ce1a34856faf6e981c68864004a4478bb220ce.tar.gz gcc-71ce1a34856faf6e981c68864004a4478bb220ce.tar.bz2 |
s390.c (s390_select_ccmode): Enable using CC of x + imm for higher immediates on z9-109 upwards.
2012-12-04 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
* config/s390/s390.c (s390_select_ccmode): Enable using CC of
x + imm for higher immediates on z9-109 upwards.
From-SVN: r194141
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/s390/s390.c | 5 |
2 files changed, 9 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4bd2082..077191a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2012-12-04 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> + + * config/s390/s390.c (s390_select_ccmode): Enable using CC of + x + imm for higher immediates on z9-109 upwards. + 2012-12-04 Richard Earnshaw <rearnsha@arm.com> * arm.opt (cirrus-fix-invalid-insns): Delete option. diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index 4ce1dc9..6517bce 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -691,7 +691,10 @@ s390_select_ccmode (enum rtx_code code, rtx op0, rtx op1) 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_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; |