From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1666) id DE8DE3858D20; Fri, 23 Jun 2023 11:30:20 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DE8DE3858D20 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1687519820; bh=kEJuElS61iZN2NUYprYKekYafYaR1oQFdGWNHE5PZ+I=; h=From:To:Subject:Date:From; b=cKxR0w1YxVjs/V0rpFjF6EV+Rs4mKLboZq6tueTjXQygmyykbBAIuDI25EzqnJ7si snGveDDmePqQ+XXHJcjvJDaXtjGR+3j75v8otlprNqKNiFHP/PHW2tEz75SD+6DtfZ yKWmEqoWVB84fxF2FMjoz+3J5iKkgxm1y6/G7z1I= 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 r12-9722] middle-end/110182 - TYPE_PRECISION on VECTOR_TYPE causes wrong-code X-Act-Checkin: gcc X-Git-Author: Richard Biener X-Git-Refname: refs/heads/releases/gcc-12 X-Git-Oldrev: c3f04b79eca06c8fe4ad5d2e3d194942a7c2ef10 X-Git-Newrev: f06f1b4102b1c6965ad6b1da0094d6de5c3a2940 Message-Id: <20230623113020.DE8DE3858D20@sourceware.org> Date: Fri, 23 Jun 2023 11:30:20 +0000 (GMT) List-Id: https://gcc.gnu.org/g:f06f1b4102b1c6965ad6b1da0094d6de5c3a2940 commit r12-9722-gf06f1b4102b1c6965ad6b1da0094d6de5c3a2940 Author: Richard Biener Date: Fri Jun 9 09:29:09 2023 +0200 middle-end/110182 - TYPE_PRECISION on VECTOR_TYPE causes wrong-code When folding two conversions in a row we use TYPE_PRECISION but that's invalid for VECTOR_TYPE. The following fixes this by using element_precision instead. PR middle-end/110182 * match.pd (two conversions in a row): Use element_precision to DTRT for VECTOR_TYPE. (cherry picked from commit 3e12669a0eb968cfcbe9242b382fd8020935edf8) Diff: --- gcc/match.pd | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gcc/match.pd b/gcc/match.pd index 70b85b965b9..f2828006fd6 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -3711,19 +3711,19 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) int inside_ptr = POINTER_TYPE_P (inside_type); int inside_float = FLOAT_TYPE_P (inside_type); int inside_vec = VECTOR_TYPE_P (inside_type); - unsigned int inside_prec = TYPE_PRECISION (inside_type); + unsigned int inside_prec = element_precision (inside_type); int inside_unsignedp = TYPE_UNSIGNED (inside_type); int inter_int = INTEGRAL_TYPE_P (inter_type); int inter_ptr = POINTER_TYPE_P (inter_type); int inter_float = FLOAT_TYPE_P (inter_type); int inter_vec = VECTOR_TYPE_P (inter_type); - unsigned int inter_prec = TYPE_PRECISION (inter_type); + unsigned int inter_prec = element_precision (inter_type); int inter_unsignedp = TYPE_UNSIGNED (inter_type); int final_int = INTEGRAL_TYPE_P (type); int final_ptr = POINTER_TYPE_P (type); int final_float = FLOAT_TYPE_P (type); int final_vec = VECTOR_TYPE_P (type); - unsigned int final_prec = TYPE_PRECISION (type); + unsigned int final_prec = element_precision (type); int final_unsignedp = TYPE_UNSIGNED (type); } (switch