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 14c618340b4de8c1b622b4b3be044c6428d10165..5e826d097658358d6f20cad5ab568051962dc07c 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 c1492363bca35fa6a9e75f4200a094e3874a59fc..3d9141ae450e49e86f03e2ad9cefb3bae3f9937d 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"))