AVX-512. Avoid upper-bank registers when splitting vec_extract_lo instruction.
authorAlexander Fomin <alexander.fomin@intel.com>
Tue, 6 Oct 2015 13:49:30 +0000 (13:49 +0000)
committerKirill Yukhin <kyukhin@gcc.gnu.org>
Tue, 6 Oct 2015 13:49:30 +0000 (13:49 +0000)
gcc/
PR target/67849
* config/i386/sse.md (define_split vec_select/V8FI): Restrict
split for upper-bank registers when target does not support
AVX512VL.
(define_insn "vec_extract_lo_<mode><mask_name>"): Restrict
split when target does not support AVX512VL.

From-SVN: r228525

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

index d8e7a86a89bbfab0ae0e369f36137495a825f484..75de0c94c28c953f15ac8266b49791808e40ddcf 100644 (file)
@@ -1,9 +1,18 @@
+2015-10-06  Alexander Fomin  <alexander.fomin@intel.com>
+
+       PR target/67849
+       * config/i386/sse.md (define_split vec_select/V8FI): Restrict
+       split for upper-bank registers when target does not support
+       AVX512VL.
+       (define_insn "vec_extract_lo_<mode><mask_name>"): Restrict
+       split when target does not support AVX512VL.
+
 2015-10-06  David Edelsohn  <dje.gcc@gmail.com>
 
        PR c/65345
        * config/rs6000/rs6000.c (rs6000_atomic_assign_expand_fenv):
        Adjust to use create_tmp_var_raw instead of create_tmp_var.
-       
+
 2015-10-06  Nick Clifton  <nickc@redhat.com>
 
        * config/rl78/rl78.c (rl78_rtx_costs): Improve cost estimates for
        readability.
 
 2015-10-02  Kirill Yukhin  <kirill.yukhin@intel.com>
+
        * config/i386/i386.c (processor_features): Add F_AVX512VBMI,
        F_AVX512IFMA.
        (isa_names_table): Handle F_AVX512VBMI and F_AVX512IFMA.
index 311bf3fe45ab635821e6c1e5a3118117c6105c64..e5680f1939c8b4a9e78a49c8817ed636c48e975f 100644 (file)
          (parallel [(const_int 0) (const_int 1)
             (const_int 2) (const_int 3)])))]
   "TARGET_AVX512F && !(MEM_P (operands[0]) && MEM_P (operands[1]))
-  && reload_completed"
+  && reload_completed
+  && (TARGET_AVX512VL || (REG_P (operands[0]) && !EXT_REX_SSE_REG_P (operands[1])))"
   [(const_int 0)]
 {
   rtx op1 = operands[1];
             (const_int 2) (const_int 3)])))]
   "TARGET_AVX512F && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
 {
-  if (<mask_applied>)
+  if (<mask_applied> || !TARGET_AVX512VL)
     return "vextract<shuffletype>64x4\t{$0x0, %1, %0<mask_operand2>|%0<mask_operand2>, %1, 0x0}";
   else
     return "#";