aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndreas Krebbel <Andreas.Krebbel@de.ibm.com>2014-04-11 10:42:27 +0000
committerAndreas Krebbel <krebbel@gcc.gnu.org>2014-04-11 10:42:27 +0000
commit3c91f126f470758738a0cddbec8f978f42486754 (patch)
tree5252b1c1b1eb89237d703ff6aa43e8d452f14ad2 /gcc
parent8f0ad2e592685fd41693f43acb58c4f503ecb2d1 (diff)
downloadgcc-3c91f126f470758738a0cddbec8f978f42486754.zip
gcc-3c91f126f470758738a0cddbec8f978f42486754.tar.gz
gcc-3c91f126f470758738a0cddbec8f978f42486754.tar.bz2
s390.md: Add a splitter for NOT rtx.
2014-04-11 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> * config/s390/s390.md: Add a splitter for NOT rtx. From-SVN: r209295
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/config/s390/s390.md15
2 files changed, 19 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d702fae..b4173bc 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2014-04-11 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
+
+ * config/s390/s390.md: Add a splitter for NOT rtx.
+
2014-04-11 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/60663
diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md
index 7d9d1ad..b17c1fa 100644
--- a/gcc/config/s390/s390.md
+++ b/gcc/config/s390/s390.md
@@ -7001,6 +7001,21 @@
""
"s390_expand_logical_operator (XOR, <MODE>mode, operands); DONE;")
+; Combine replaces (xor (x) (const_int -1)) with (not (x)) when doing
+; simplifications. So its better to have something matching.
+(define_split
+ [(set (match_operand:INT 0 "nonimmediate_operand" "")
+ (not:INT (match_operand:INT 1 "nonimmediate_operand" "")))]
+ ""
+ [(parallel
+ [(set (match_dup 0) (xor:INT (match_dup 1) (match_dup 2)))
+ (clobber (reg:CC CC_REGNUM))])]
+{
+ operands[2] = constm1_rtx;
+ if (!s390_logical_operator_ok_p (operands))
+ FAIL;
+})
+
;
; xordi3 instruction pattern(s).
;