i386: Use OI/TImode in *mov[ot]i_internal_avx with AVX512VL
authorH.J. Lu <hongjiu.lu@intel.com>
Fri, 8 Feb 2019 11:30:53 +0000 (11:30 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Fri, 8 Feb 2019 11:30:53 +0000 (03:30 -0800)
OImode and TImode moves must be done in XImode to access upper 16
vector registers without AVX512VL.  With AVX512VL, we can access
upper 16 vector registers in OImode and TImode.

PR target/89229
* config/i386/i386.md (*movoi_internal_avx): Set mode to XI for
upper 16 vector registers without TARGET_AVX512VL.
(*movti_internal): Likewise.

From-SVN: r268678

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

index 14c6183..5e826d0 100644 (file)
@@ -1,3 +1,10 @@
+2019-02-08  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/89229
+       * config/i386/i386.md (*movoi_internal_avx): Set mode to XI for
+       upper 16 vector registers without TARGET_AVX512VL.
+       (*movti_internal): Likewise.
+
 2019-02-08  Jakub Jelinek  <jakub@redhat.com>
 
        PR rtl-optimization/89234
index c149236..3d9141a 100644 (file)
    (set_attr "type" "sselog1,sselog1,ssemov,ssemov")
    (set_attr "prefix" "vex")
    (set (attr "mode")
-       (cond [(ior (match_operand 0 "ext_sse_reg_operand")
-                   (match_operand 1 "ext_sse_reg_operand"))
+       (cond [(and (not (match_test "TARGET_AVX512VL"))
+                   (ior (match_operand 0 "ext_sse_reg_operand")
+                        (match_operand 1 "ext_sse_reg_operand")))
                 (const_string "XI")
               (and (eq_attr "alternative" "1")
                    (match_test "TARGET_AVX512VL"))
    (set (attr "mode")
        (cond [(eq_attr "alternative" "0,1")
                 (const_string "DI")
-              (ior (match_operand 0 "ext_sse_reg_operand")
-                   (match_operand 1 "ext_sse_reg_operand"))
+              (and (not (match_test "TARGET_AVX512VL"))
+                   (ior (match_operand 0 "ext_sse_reg_operand")
+                        (match_operand 1 "ext_sse_reg_operand")))
                 (const_string "XI")
               (and (eq_attr "alternative" "3")
                    (match_test "TARGET_AVX512VL"))