From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1666) id E3D3B3858425; Fri, 23 Jun 2023 12:16:42 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E3D3B3858425 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1687522602; bh=/6abtjLRP8NX7gBNlg68FcYQKuLoOQDJyyKMlG69q4g=; h=From:To:Subject:Date:From; b=LQhnmddNX5sLYr5E8G5PI0QfkCxetinxasAqYGVQ926Wg3OxTGyn5NBhmOjH2vuw3 Wp4a7/V4lFLxECJ5P5xsiA/9NULzE9xqe2RWJe4ETQPgUtsr1BWYaHRKwBE4ynOx/E IUoQmuBf7pH4DElw0wS8XTdG0QRpHn2aMTTL3nhM= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Richard Biener To: gcc-cvs@gcc.gnu.org Subject: [gcc r14-2045] Deal with vector typed operands in conversions X-Act-Checkin: gcc X-Git-Author: Richard Biener X-Git-Refname: refs/heads/master X-Git-Oldrev: 85d8e0d8d5342ec8b4e6a54e22741c30b33c6f04 X-Git-Newrev: 96854fd753868d26dd8f270fff8c3703f7cb6c86 Message-Id: <20230623121642.E3D3B3858425@sourceware.org> Date: Fri, 23 Jun 2023 12:16:42 +0000 (GMT) List-Id: https://gcc.gnu.org/g:96854fd753868d26dd8f270fff8c3703f7cb6c86 commit r14-2045-g96854fd753868d26dd8f270fff8c3703f7cb6c86 Author: Richard Biener Date: Fri Jun 23 12:48:36 2023 +0200 Deal with vector typed operands in conversions The following avoids using TYPE_PRECISION on VECTOR_TYPE when looking for bit-precision changes in vectorizable_assignment. We didn't anticipate a stmt like _21 = VIEW_CONVERT_EXPR(vect__1.7_28); and the following makes sure to handle that. * tree-vect-stmts.cc (vectorizable_assignment): Properly handle non-integral operands when analyzing conversions. Diff: --- gcc/tree-vect-stmts.cc | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc index e6649789540..01cb19ce933 100644 --- a/gcc/tree-vect-stmts.cc +++ b/gcc/tree-vect-stmts.cc @@ -5833,12 +5833,15 @@ vectorizable_assignment (vec_info *vinfo, /* We do not handle bit-precision changes. */ if ((CONVERT_EXPR_CODE_P (code) || code == VIEW_CONVERT_EXPR) - && INTEGRAL_TYPE_P (TREE_TYPE (scalar_dest)) - && (!type_has_mode_precision_p (TREE_TYPE (scalar_dest)) - || !type_has_mode_precision_p (TREE_TYPE (op))) + && ((INTEGRAL_TYPE_P (TREE_TYPE (scalar_dest)) + && !type_has_mode_precision_p (TREE_TYPE (scalar_dest))) + || (INTEGRAL_TYPE_P (TREE_TYPE (op)) + && !type_has_mode_precision_p (TREE_TYPE (op)))) /* But a conversion that does not change the bit-pattern is ok. */ - && !((TYPE_PRECISION (TREE_TYPE (scalar_dest)) - > TYPE_PRECISION (TREE_TYPE (op))) + && !(INTEGRAL_TYPE_P (TREE_TYPE (scalar_dest)) + && INTEGRAL_TYPE_P (TREE_TYPE (op)) + && (TYPE_PRECISION (TREE_TYPE (scalar_dest)) + > TYPE_PRECISION (TREE_TYPE (op))) && TYPE_UNSIGNED (TREE_TYPE (op)))) { if (dump_enabled_p ())