[AArch64] Simplify patterns for sshr_n_[us]64 intrinsic
authorAlan Lawrence <alan.lawrence@arm.com>
Thu, 18 Dec 2014 15:00:51 +0000 (15:00 +0000)
committerAlan Lawrence <alalaw01@gcc.gnu.org>
Thu, 18 Dec 2014 15:00:51 +0000 (15:00 +0000)
        * config/aarch64/aarch64.md (enum "unspec"): Remove UNSPEC_SSHR64.

        * config/aarch64/aarch64-simd.md (aarch64_ashr_simddi): Change shift
        amount to 63 if was 64.
        (aarch64_sshr_simddi): Remove.

From-SVN: r218867

gcc/ChangeLog
gcc/config/aarch64/aarch64-simd.md
gcc/config/aarch64/aarch64.md

index 6d5bb44e562a94b644d81324a1e90a81cdd75e2e..3bb1dae5d073686e53b0b60620f98e08cc313d43 100644 (file)
@@ -1,3 +1,11 @@
+2014-12-18  Alan Lawrence  <alan.lawrence@arm.com>
+
+       * config/aarch64/aarch64.md (enum "unspec"): Remove UNSPEC_SSHR64.
+
+       * config/aarch64/aarch64-simd.md (aarch64_ashr_simddi): Change shift
+       amount to 63 if was 64.
+       (aarch64_sshr_simddi): Remove.
+
 2014-12-18  Wilco Dijkstra  <wilco.dijkstra@arm.com>
 
        * gcc/config/aarch64/aarch64.c (TARGET_MIN_DIVISIONS_FOR_RECIP_MUL):
index d4256a5fee45255419d18e08266cf751ef3929de..9a48537a33bc097051f9dd7095a816d5221259f0 100644 (file)
    (match_operand:SI 2 "aarch64_shift_imm64_di" "")]
   "TARGET_SIMD"
   {
+    /* An arithmetic shift right by 64 fills the result with copies of the sign
+       bit, just like asr by 63 - however the standard pattern does not handle
+       a shift by 64.  */
     if (INTVAL (operands[2]) == 64)
-      emit_insn (gen_aarch64_sshr_simddi (operands[0], operands[1]));
-    else
-      emit_insn (gen_ashrdi3 (operands[0], operands[1], operands[2]));
+      operands[2] = GEN_INT (63);
+    emit_insn (gen_ashrdi3 (operands[0], operands[1], operands[2]));
     DONE;
   }
 )
 
-;; SIMD shift by 64.  This pattern is a special case as standard pattern does
-;; not handle NEON shifts by 64.
-(define_insn "aarch64_sshr_simddi"
-  [(set (match_operand:DI 0 "register_operand" "=w")
-        (unspec:DI
-          [(match_operand:DI 1 "register_operand" "w")] UNSPEC_SSHR64))]
-  "TARGET_SIMD"
-  "sshr\t%d0, %d1, 64"
-  [(set_attr "type" "neon_shift_imm")]
-)
-
 (define_expand "vlshr<mode>3"
  [(match_operand:VDQ_BHSI 0 "register_operand" "")
   (match_operand:VDQ_BHSI 1 "register_operand" "")
index a0ee362e391d938fd1cb6b5edb6041e8f5e5ebf2..ebde2768d30c80825645b0ab9ce9921e9ca730ab 100644 (file)
     UNSPEC_SISD_SSHL
     UNSPEC_SISD_USHL
     UNSPEC_SSHL_2S
-    UNSPEC_SSHR64
     UNSPEC_ST1
     UNSPEC_ST2
     UNSPEC_ST3