[PATCH pushed] testsuite: Unbreak pr110557.cc where long is 32-bit (was Re: Pushed: [PATCH v2] vect: Fix vectorized BIT_FIELD_REF for signed bit-fields [PR110557])
On Tue, 2023-07-11 at 13:04 +0530, Prathamesh Kulkarni wrote: /* snip */ > Hi Xi, > Your commit: > https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=63ae6bc60c0f67fb2791991bf4b6e7e0a907d420, > > seems to cause following regressions on arm-linux-gnueabihf: > FAIL: g++.dg/vect/pr110557.cc -std=c++98 (test for excess errors) > FAIL: g++.dg/vect/pr110557.cc -std=c++14 (test for excess errors) > FAIL: g++.dg/vect/pr110557.cc -std=c++17 (test for excess errors) > FAIL: g++.dg/vect/pr110557.cc -std=c++20 (test for excess errors) > > Excess error: > gcc/testsuite/g++.dg/vect/pr110557.cc:12:8: warning: width of > 'Item::y' exceeds its type Ah sorry, I didn't consider ports with 32-bit long. The attached patch should fix the issue. It has been tested and pushed r14-2427 and r13-7555. -- Xi Ruoyao School of Aerospace Science and Technology, Xidian University From 312839653b8295599c63cae90278a87af528edad Mon Sep 17 00:00:00 2001 From: Xi Ruoyao Date: Tue, 11 Jul 2023 15:55:54 +0800 Subject: [PATCH] testsuite: Unbreak pr110557.cc where long is 32-bit On ports with 32-bit long, the test produced excess errors: gcc/testsuite/g++.dg/vect/pr110557.cc:12:8: warning: width of 'Item::y' exceeds its type Reported-by: Prathamesh Kulkarni gcc/testsuite/ChangeLog: * g++.dg/vect/pr110557.cc: Use long long instead of long for 64-bit type. (test): Remove an unnecessary cast. --- gcc/testsuite/g++.dg/vect/pr110557.cc | 14 -- 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/gcc/testsuite/g++.dg/vect/pr110557.cc b/gcc/testsuite/g++.dg/vect/pr110557.cc index e1fbe1caac4..effb67e2df3 100644 --- a/gcc/testsuite/g++.dg/vect/pr110557.cc +++ b/gcc/testsuite/g++.dg/vect/pr110557.cc @@ -1,7 +1,9 @@ // { dg-additional-options "-mavx" { target { avx_runtime } } } -static inline long -min (long a, long b) +typedef long long i64; + +static inline i64 +min (i64 a, i64 b) { return a < b ? a : b; } @@ -9,16 +11,16 @@ min (long a, long b) struct Item { int x : 8; - long y : 55; + i64 y : 55; bool z : 1; }; -__attribute__ ((noipa)) long +__attribute__ ((noipa)) i64 test (Item *a, int cnt) { - long size = 0; + i64 size = 0; for (int i = 0; i < cnt; i++) -size = min ((long)a[i].y, size); +size = min (a[i].y, size); return size; } -- 2.41.0
Re: Pushed: [PATCH v2] vect: Fix vectorized BIT_FIELD_REF for signed bit-fields [PR110557]
On Mon, 10 Jul 2023 at 16:43, Xi Ruoyao via Gcc-patches wrote: > > On Mon, 2023-07-10 at 10:33 +, Richard Biener wrote: > > On Fri, 7 Jul 2023, Xi Ruoyao wrote: > > > > > If a bit-field is signed and it's wider than the output type, we > > > must > > > ensure the extracted result sign-extended. But this was not handled > > > correctly. > > > > > > For example: > > > > > > int x : 8; > > > long y : 55; > > > bool z : 1; > > > > > > The vectorized extraction of y was: > > > > > > vect__ifc__49.29_110 = > > > MEM [(struct Item > > > *)vectp_a.27_108]; > > > vect_patt_38.30_112 = > > > vect__ifc__49.29_110 & { 9223372036854775552, > > > 9223372036854775552 }; > > > vect_patt_39.31_113 = vect_patt_38.30_112 >> 8; > > > vect_patt_40.32_114 = > > > VIEW_CONVERT_EXPR(vect_patt_39.31_113); > > > > > > This is obviously incorrect. This pach has implemented it as: > > > > > > vect__ifc__25.16_62 = > > > MEM [(struct Item > > > *)vectp_a.14_60]; > > > vect_patt_31.17_63 = > > > VIEW_CONVERT_EXPR(vect__ifc__25.16_62); > > > vect_patt_32.18_64 = vect_patt_31.17_63 << 1; > > > vect_patt_33.19_65 = vect_patt_32.18_64 >> 9; > > > > OK. > > Pushed r14-2407 and r13-7553. Hi Xi, Your commit: https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=63ae6bc60c0f67fb2791991bf4b6e7e0a907d420, seems to cause following regressions on arm-linux-gnueabihf: FAIL: g++.dg/vect/pr110557.cc -std=c++98 (test for excess errors) FAIL: g++.dg/vect/pr110557.cc -std=c++14 (test for excess errors) FAIL: g++.dg/vect/pr110557.cc -std=c++17 (test for excess errors) FAIL: g++.dg/vect/pr110557.cc -std=c++20 (test for excess errors) Excess error: gcc/testsuite/g++.dg/vect/pr110557.cc:12:8: warning: width of 'Item::y' exceeds its type Thanks, Prathamesh > > -- > Xi Ruoyao > School of Aerospace Science and Technology, Xidian University
Pushed: [PATCH v2] vect: Fix vectorized BIT_FIELD_REF for signed bit-fields [PR110557]
On Mon, 2023-07-10 at 10:33 +, Richard Biener wrote: > On Fri, 7 Jul 2023, Xi Ruoyao wrote: > > > If a bit-field is signed and it's wider than the output type, we > > must > > ensure the extracted result sign-extended. But this was not handled > > correctly. > > > > For example: > > > > int x : 8; > > long y : 55; > > bool z : 1; > > > > The vectorized extraction of y was: > > > > vect__ifc__49.29_110 = > > MEM [(struct Item > > *)vectp_a.27_108]; > > vect_patt_38.30_112 = > > vect__ifc__49.29_110 & { 9223372036854775552, > > 9223372036854775552 }; > > vect_patt_39.31_113 = vect_patt_38.30_112 >> 8; > > vect_patt_40.32_114 = > > VIEW_CONVERT_EXPR(vect_patt_39.31_113); > > > > This is obviously incorrect. This pach has implemented it as: > > > > vect__ifc__25.16_62 = > > MEM [(struct Item > > *)vectp_a.14_60]; > > vect_patt_31.17_63 = > > VIEW_CONVERT_EXPR(vect__ifc__25.16_62); > > vect_patt_32.18_64 = vect_patt_31.17_63 << 1; > > vect_patt_33.19_65 = vect_patt_32.18_64 >> 9; > > OK. Pushed r14-2407 and r13-7553. -- Xi Ruoyao School of Aerospace Science and Technology, Xidian University