sse.md (<sse4_1>_round<ssemodesuffix><avxsizesuffix>): Limit 1st alternative to noavx...
authorJakub Jelinek <jakub@redhat.com>
Tue, 24 May 2016 19:12:06 +0000 (21:12 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 24 May 2016 19:12:06 +0000 (21:12 +0200)
* config/i386/sse.md (<sse4_1>_round<ssemodesuffix><avxsizesuffix>):
Limit 1st alternative to noavx isa, split 2nd alternative into one
noavx and one avx alternative, use *x and Bm in the former and
x and m in the latter.

From-SVN: r236661

gcc/ChangeLog
gcc/config/i386/sse.md

index d91c352..90b14cb 100644 (file)
@@ -1,5 +1,10 @@
 2016-05-24  Jakub Jelinek  <jakub@redhat.com>
 
+       * config/i386/sse.md (<sse4_1>_round<ssemodesuffix><avxsizesuffix>):
+       Limit 1st alternative to noavx isa, split 2nd alternative into one
+       noavx and one avx alternative, use *x and Bm in the former and
+       x and m in the latter.
+
        * config/i386/sse.md (vec_set<mode>_0): Use sse4_noavx isa instead
        of sse4 for the first alternative, drop %v from the template
        and d operand modifier.  Split second alternative into one sse4_noavx
index 10ce494..3c60998 100644 (file)
    (set_attr "mode" "<sseinsnmode>")])
 
 (define_insn "<sse4_1>_round<ssemodesuffix><avxsizesuffix>"
-  [(set (match_operand:VF_128_256 0 "register_operand" "=Yr,*x")
+  [(set (match_operand:VF_128_256 0 "register_operand" "=Yr,*x,x")
        (unspec:VF_128_256
-         [(match_operand:VF_128_256 1 "vector_operand" "YrBm,*xBm")
-          (match_operand:SI 2 "const_0_to_15_operand" "n,n")]
+         [(match_operand:VF_128_256 1 "vector_operand" "YrBm,*xBm,xm")
+          (match_operand:SI 2 "const_0_to_15_operand" "n,n,n")]
          UNSPEC_ROUND))]
   "TARGET_ROUND"
   "%vround<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}"
-  [(set_attr "type" "ssecvt")
-   (set (attr "prefix_data16")
-     (if_then_else
-       (match_test "TARGET_AVX")
-     (const_string "*")
-     (const_string "1")))
+  [(set_attr "isa" "noavx,noavx,avx")
+   (set_attr "type" "ssecvt")
+   (set_attr "prefix_data16" "1,1,*")
    (set_attr "prefix_extra" "1")
    (set_attr "length_immediate" "1")
-   (set_attr "prefix" "maybe_vex")
+   (set_attr "prefix" "orig,orig,vex")
    (set_attr "mode" "<MODE>")])
 
 (define_expand "<sse4_1>_round<ssemodesuffix>_sfix<avxsizesuffix>"