On Mon, 2023-07-10 at 10:33 +0000, 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 <vector(2) long unsigned int> [(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<vector(2) long int>(vect_patt_39.31_113); > > > > This is obviously incorrect. This pach has implemented it as: > > > > vect__ifc__25.16_62 = > > MEM <vector(2) long unsigned int> [(struct Item > > *)vectp_a.14_60]; > > vect_patt_31.17_63 = > > VIEW_CONVERT_EXPR<vector(2) long int>(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 <xry...@xry111.site> School of Aerospace Science and Technology, Xidian University