From bf3b2de71f7c545159ac897c83f6533e09256f91 Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Thu, 26 Mar 2015 21:37:53 +0100 Subject: [PATCH] re PR target/65561 (avx512fintrin.h:5344:1: internal compiler error: in curr_insn_transform, at lra-constraints.c:3494) PR target/65561 * config/i386/sse.md (avx512dq_vextract64x2_1_maskm): Check operand 4 and operand 0 for equality. (avx512f_vextract32x4_1_maskm): Check operand 6 and operand 0 for equality. (vec_extract_lo__maskm): Check operand 2 and operand 0 for equality. (vec_extract_hi__maskm): Ditto. From-SVN: r221709 --- gcc/ChangeLog | 16 +++++++++++++--- gcc/config/i386/sse.md | 27 ++++++++++++++++----------- 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 896477060ef..5593ef8fd15 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2015-03-26 Uros Bizjak + + PR target/65561 + * config/i386/sse.md (avx512dq_vextract64x2_1_maskm): + Check operand 4 and operand 0 for equality. + (avx512f_vextract32x4_1_maskm): + Check operand 6 and operand 0 for equality. + (vec_extract_lo__maskm): Check operand 2 and operand 0 + for equality. + (vec_extract_hi__maskm): Ditto. + 2015-03-26 Jan Hubicka * 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 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 diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index 5800a3eebf2..490fd6b6c3f 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -6633,7 +6633,8 @@ (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 "vextract64x2\t{%2, %1, %0%{%5%}|%0%{%5%}, %1, %2}"; @@ -6660,7 +6661,8 @@ && ((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 "vextract32x4\t{%2, %1, %0%{%7%}|%0%{%7%}, %1, %2}"; @@ -6777,7 +6779,8 @@ (const_int 2) (const_int 3)])) (match_operand: 2 "memory_operand" "0") (match_operand:QI 3 "register_operand" "Yk")))] - "TARGET_AVX512F" + "TARGET_AVX512F + && rtx_equal_p (operands[2], operands[0])" "vextract64x4\t{$0x0, %1, %0%{%3%}|%0%{%3%}, %1, 0x0}" [(set_attr "type" "sselog1") (set_attr "prefix_extra" "1") @@ -6813,7 +6816,8 @@ (const_int 6) (const_int 7)])) (match_operand: 2 "memory_operand" "0") (match_operand:QI 3 "register_operand" "Yk")))] - "TARGET_AVX512F" + "TARGET_AVX512F + && rtx_equal_p (operands[2], operands[0])" "vextract64x4\t{$0x1, %1, %0%{%3%}|%0%{%3%}, %1, 0x1}" [(set_attr "type" "sselog") (set_attr "prefix_extra" "1") @@ -6847,7 +6851,8 @@ (const_int 14) (const_int 15)])) (match_operand: 2 "memory_operand" "0") (match_operand:QI 3 "register_operand" "k")))] - "TARGET_AVX512DQ" + "TARGET_AVX512DQ + && rtx_equal_p (operands[2], operands[0])" "vextract32x8\t{$0x1, %1, %0%{%3%}|%0%{%3%}, %1, 0x1}" [(set_attr "type" "sselog1") (set_attr "prefix_extra" "1") @@ -7071,8 +7076,9 @@ (const_int 2) (const_int 3)])) (match_operand: 2 "memory_operand" "0") (match_operand:QI 3 "register_operand" "k")))] - "TARGET_AVX512VL && TARGET_AVX512F" - "vextract32x4\t{$0x0, %1, %0%{3%}|%0%{%3%}, %1, 0x0}" + "TARGET_AVX512VL && TARGET_AVX512F + && rtx_equal_p (operands[2], operands[0])" + "vextract32x4\t{$0x0, %1, %0%{%3%}|%0%{%3%}, %1, 0x0}" [(set_attr "type" "sselog1") (set_attr "prefix_extra" "1") (set_attr "length_immediate" "1") @@ -7088,10 +7094,9 @@ (const_int 6) (const_int 7)])) (match_operand: 2 "memory_operand" "0") (match_operand: 3 "register_operand" "k")))] - "TARGET_AVX512F && TARGET_AVX512VL" -{ - return "vextract32x4\t{$0x1, %1, %0%{%3%}|%0%{%3%}, %1, 0x1}"; -} + "TARGET_AVX512F && TARGET_AVX512VL + && rtx_equal_p (operands[2], operands[0])" + "vextract32x4\t{$0x1, %1, %0%{%3%}|%0%{%3%}, %1, 0x1}" [(set_attr "type" "sselog1") (set_attr "prefix_extra" "1") (set_attr "length_immediate" "1") -- 2.30.2