From: Jakub Jelinek Date: Fri, 20 Dec 2019 17:41:17 +0000 (+0100) Subject: backport: re PR target/92723 (ICE in expand_shift_1, at expmed.c:2635) X-Git-Tag: releases/gcc-9.3.0~283 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=86a5b74ed42dd1328f891e53bbe274108cbd1a76;p=thirdparty%2Fgcc.git backport: re PR target/92723 (ICE in expand_shift_1, at expmed.c:2635) Backported from mainline 2019-12-11 Jakub Jelinek PR target/92723 * tree-vect-patterns.c (vect_recog_rotate_pattern): If dt is not vect_internal_def, use oprnd1 as is, without trying to cast it. Formatting fix. * gcc.dg/vect/pr92723.c: New test. From-SVN: r279671 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fd856d9e78ec..28ec8783edee 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -5,6 +5,13 @@ diagnose teams not closely nested inside of target. Backported from mainline + 2019-12-11 Jakub Jelinek + + PR target/92723 + * tree-vect-patterns.c (vect_recog_rotate_pattern): If dt is not + vect_internal_def, use oprnd1 as is, without trying to cast it. + Formatting fix. + 2019-11-27 Jakub Jelinek PR debug/92664 diff --git a/gcc/testsuite/gcc.dg/vect/pr92723.c b/gcc/testsuite/gcc.dg/vect/pr92723.c new file mode 100644 index 000000000000..0d60883cadd0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr92723.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ + +void +foo (unsigned long long *x, unsigned long long *y, int z) +{ + int i; + for (i = 0; i < 1024; i++) + x[i] = (y[i] >> z) | (y[i] << (-z & (__SIZEOF_LONG_LONG__ * __CHAR_BIT__ - 1))); +} diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c index ff952d6f464f..badf4e7104e4 100644 --- a/gcc/tree-vect-patterns.c +++ b/gcc/tree-vect-patterns.c @@ -2070,14 +2070,12 @@ vect_recog_rotate_pattern (stmt_vec_info stmt_vinfo, tree *type_out) *type_out = vectype; - if (dt == vect_external_def - && TREE_CODE (oprnd1) == SSA_NAME) + if (dt == vect_external_def && TREE_CODE (oprnd1) == SSA_NAME) ext_def = vect_get_external_def_edge (vinfo, oprnd1); def = NULL_TREE; scalar_int_mode mode = SCALAR_INT_TYPE_MODE (type); - if (TREE_CODE (oprnd1) == INTEGER_CST - || TYPE_MODE (TREE_TYPE (oprnd1)) == mode) + if (dt != vect_internal_def || TYPE_MODE (TREE_TYPE (oprnd1)) == mode) def = oprnd1; else if (def_stmt && gimple_assign_cast_p (def_stmt)) { @@ -2092,14 +2090,7 @@ vect_recog_rotate_pattern (stmt_vec_info stmt_vinfo, tree *type_out) { def = vect_recog_temp_ssa_var (type, NULL); def_stmt = gimple_build_assign (def, NOP_EXPR, oprnd1); - if (ext_def) - { - basic_block new_bb - = gsi_insert_on_edge_immediate (ext_def, def_stmt); - gcc_assert (!new_bb); - } - else - append_pattern_def_seq (stmt_vinfo, def_stmt); + append_pattern_def_seq (stmt_vinfo, def_stmt); } stype = TREE_TYPE (def); scalar_int_mode smode = SCALAR_INT_TYPE_MODE (stype);