S/390: Remove code duplication in vec_unordered<mode>
authorIlya Leoshkevich <iii@linux.ibm.com>
Mon, 30 Sep 2019 17:40:02 +0000 (17:40 +0000)
committerIlya Leoshkevich <iii@gcc.gnu.org>
Mon, 30 Sep 2019 17:40:02 +0000 (17:40 +0000)
vec_unordered<mode> is vec_ordered<mode> plus a negation at the end.
Reuse vec_unordered<mode> logic.

gcc/ChangeLog:

2019-09-30  Ilya Leoshkevich  <iii@linux.ibm.com>

PR target/77918
* config/s390/vector.md (vec_unordered<mode>): Call
gen_vec_ordered<mode>.

From-SVN: r276360

gcc/ChangeLog
gcc/config/s390/vector.md

index 0d90ef4d5b1fe073e0b5849a8e85c86cb098c439..28296d5a786e993cf3285d612802de4b27f5eb5e 100644 (file)
@@ -1,3 +1,9 @@
+2019-09-30  Ilya Leoshkevich  <iii@linux.ibm.com>
+
+       PR target/77918
+       * config/s390/vector.md (vec_unordered<mode>): Call
+       gen_vec_ordered<mode>.
+
 2019-09-30  Yuliang Wang  <yuliang.wang@arm.com>
 
        * config/aarch64/aarch64-sve.md (sdiv_pow2<mode>3):
index 0702e1de83524661691f12bc0be5d8eb588606d9..961d2c655e4a692fc3b5e42f7d0b4adcbfdbf28d 100644 (file)
 
 ; UNORDERED (a, b): !ORDERED (a, b)
 (define_expand "vec_unordered<mode>"
-  [(set (match_operand:<tointvec>          0 "register_operand" "=v")
-       (ge:<tointvec> (match_operand:VFT 1 "register_operand"  "v")
-                (match_operand:VFT 2 "register_operand"  "v")))
-   (set (match_dup 3) (gt:<tointvec> (match_dup 2) (match_dup 1)))
-   (set (match_dup 0) (ior:<tointvec> (match_dup 0) (match_dup 3)))
-   (set (match_dup 0) (not:<tointvec> (match_dup 0)))]
+  [(match_operand:<tointvec> 0 "register_operand" "=v")
+   (match_operand:VFT        1 "register_operand" "v")
+   (match_operand:VFT        2 "register_operand" "v")]
   "TARGET_VX"
 {
-  operands[3] = gen_reg_rtx (<tointvec>mode);
+  emit_insn (gen_vec_ordered<mode> (operands[0], operands[1], operands[2]));
+  emit_insn (gen_rtx_SET (operands[0],
+            gen_rtx_NOT (<tointvec>mode, operands[0])));
+  DONE;
 })
 
 (define_expand "vec_unordered"