aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Krebbel <Andreas.Krebbel@de.ibm.com>2012-12-04 14:04:39 +0000
committerAndreas Krebbel <krebbel@gcc.gnu.org>2012-12-04 14:04:39 +0000
commit71ce1a34856faf6e981c68864004a4478bb220ce (patch)
treec5d001aa0b40b92ede6aa3742720dbbe30c54b87
parent5005fe220a46685544e05626fc5528fd072bacd9 (diff)
downloadgcc-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
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/s390/s390.c5
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;