re PR target/65561 (avx512fintrin.h:5344:1: internal compiler error: in curr_insn_tra...
authorUros Bizjak <uros@gcc.gnu.org>
Thu, 26 Mar 2015 20:37:53 +0000 (21:37 +0100)
committerUros Bizjak <uros@gcc.gnu.org>
Thu, 26 Mar 2015 20:37:53 +0000 (21:37 +0100)
PR target/65561
* config/i386/sse.md (avx512dq_vextract<shuffletype>64x2_1_maskm):
Check operand 4 and operand 0 for equality.
(avx512f_vextract<shuffletype>32x4_1_maskm):
Check operand 6 and operand 0 for equality.
(vec_extract_lo_<mode>_maskm): Check operand 2 and operand 0
for equality.
(vec_extract_hi_<mode>_maskm): Ditto.

From-SVN: r221709

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

index 896477060efa85f8e27706500d1584a1823b1052..5593ef8fd15f4ed99633aeb826b2072dafc1694a 100644 (file)
@@ -1,3 +1,14 @@
+2015-03-26  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/65561
+       * config/i386/sse.md (avx512dq_vextract<shuffletype>64x2_1_maskm):
+       Check operand 4 and operand 0 for equality.
+       (avx512f_vextract<shuffletype>32x4_1_maskm):
+       Check operand 6 and operand 0 for equality.
+       (vec_extract_lo_<mode>_maskm): Check operand 2 and operand 0
+       for equality.
+       (vec_extract_hi_<mode>_maskm): Ditto.
+
 2015-03-26  Jan Hubicka  <hubicka@ucw.cz>
 
        * cgraph.c (cgraph_update_edges_for_call_stmt_node): Do not bring
@@ -17,7 +28,7 @@
        (compute_inline_parameters): Compute contains_cilk_spawn.
        (inline_read_section, inline_write_summary): Stream
        contains_cilk_spawn.
-       * ipa-inline.c (can_inline_edge_p): Do not tuch 
+       * ipa-inline.c (can_inline_edge_p): Do not touch
        DECL_STRUCT_FUNCTION that may not be available;
        use CIF_CILK_SPAWN for cilk; fix optimization attribute checks;
        remove check for callee_fun->can_throw_non_call_exceptions and
@@ -41,8 +52,7 @@
 2015-03-26  Jakub Jelinek  <jakub@redhat.com>
 
        PR tree-optimization/64715
-       * passes.def: Add another instance of pass_object_sizes before
-       ccp1.
+       * passes.def: Add another instance of pass_object_sizes before ccp1.
        * tree-object-size.c (pass_object_sizes::execute): In
        first_pass_instance, only handle __bos (, 1) and __bos (, 3)
        calls, and keep the call in the IL, as {MIN,MAX}_EXPR of the
index 5800a3eebf21f5b24866a228a10bc26e8cfa98d0..490fd6b6c3f9fc1cf0bd9d1a440a71374f62964e 100644 (file)
          (match_operand:QI 5 "register_operand" "k")))]
   "TARGET_AVX512DQ
    && (INTVAL (operands[2]) % 2 == 0)
-   && (INTVAL (operands[2]) == INTVAL (operands[3]) - 1 )"
+   && (INTVAL (operands[2]) == INTVAL (operands[3]) - 1)
+   && rtx_equal_p (operands[4], operands[0])"
 {
   operands[2] = GEN_INT ((INTVAL (operands[2])) >> 1);
   return "vextract<shuffletype>64x2\t{%2, %1, %0%{%5%}|%0%{%5%}, %1, %2}";
    && ((INTVAL (operands[2]) % 4 == 0)
        && INTVAL (operands[2]) == (INTVAL (operands[3]) - 1)
        && INTVAL (operands[3]) == (INTVAL (operands[4]) - 1)
-       && INTVAL (operands[4]) == (INTVAL (operands[5]) - 1))"
+       && INTVAL (operands[4]) == (INTVAL (operands[5]) - 1))
+   && rtx_equal_p (operands[6], operands[0])"
 {
   operands[2] = GEN_INT ((INTVAL (operands[2])) >> 2);
   return "vextract<shuffletype>32x4\t{%2, %1, %0%{%7%}|%0%{%7%}, %1, %2}";
              (const_int 2) (const_int 3)]))
          (match_operand:<ssehalfvecmode> 2 "memory_operand" "0")
          (match_operand:QI 3 "register_operand" "Yk")))]
-  "TARGET_AVX512F"
+  "TARGET_AVX512F
+   && rtx_equal_p (operands[2], operands[0])"
   "vextract<shuffletype>64x4\t{$0x0, %1, %0%{%3%}|%0%{%3%}, %1, 0x0}"
   [(set_attr "type" "sselog1")
    (set_attr "prefix_extra" "1")
              (const_int 6) (const_int 7)]))
          (match_operand:<ssehalfvecmode> 2 "memory_operand" "0")
          (match_operand:QI 3 "register_operand" "Yk")))]
-  "TARGET_AVX512F"
+  "TARGET_AVX512F
+   && rtx_equal_p (operands[2], operands[0])"
   "vextract<shuffletype>64x4\t{$0x1, %1, %0%{%3%}|%0%{%3%}, %1, 0x1}"
   [(set_attr "type" "sselog")
    (set_attr "prefix_extra" "1")
              (const_int 14) (const_int 15)]))
          (match_operand:<ssehalfvecmode> 2 "memory_operand" "0")
          (match_operand:QI 3 "register_operand" "k")))]
-  "TARGET_AVX512DQ"
+  "TARGET_AVX512DQ
+   && rtx_equal_p (operands[2], operands[0])"
   "vextract<shuffletype>32x8\t{$0x1, %1, %0%{%3%}|%0%{%3%}, %1, 0x1}"
   [(set_attr "type" "sselog1")
    (set_attr "prefix_extra" "1")
                      (const_int 2) (const_int 3)]))
          (match_operand:<ssehalfvecmode> 2 "memory_operand" "0")
          (match_operand:QI 3 "register_operand" "k")))]
-  "TARGET_AVX512VL && TARGET_AVX512F"
-  "vextract<shuffletype>32x4\t{$0x0, %1, %0%{3%}|%0%{%3%}, %1, 0x0}"
+  "TARGET_AVX512VL && TARGET_AVX512F
+   && rtx_equal_p (operands[2], operands[0])"
+  "vextract<shuffletype>32x4\t{$0x0, %1, %0%{%3%}|%0%{%3%}, %1, 0x0}"
   [(set_attr "type" "sselog1")
    (set_attr "prefix_extra" "1")
    (set_attr "length_immediate" "1")
                      (const_int 6) (const_int 7)]))
          (match_operand:<ssehalfvecmode> 2 "memory_operand" "0")
          (match_operand:<ssehalfvecmode> 3 "register_operand" "k")))]
-  "TARGET_AVX512F && TARGET_AVX512VL"
-{
-  return "vextract<shuffletype>32x4\t{$0x1, %1, %0%{%3%}|%0%{%3%}, %1, 0x1}";
-}
+  "TARGET_AVX512F && TARGET_AVX512VL
+   && rtx_equal_p (operands[2], operands[0])"
+  "vextract<shuffletype>32x4\t{$0x1, %1, %0%{%3%}|%0%{%3%}, %1, 0x1}"
   [(set_attr "type" "sselog1")
    (set_attr "prefix_extra" "1")
    (set_attr "length_immediate" "1")