https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116059
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Component|tree-optimization |target Target Milestone|--- |14.2 --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- The gimple looks like: ``` ;; Function main (main, funcdef_no=0, decl_uid=2758, cgraph_uid=1, symbol_order=2) (executed once) int main () { vector([4,4]) char vect_iftmp.18; vector([4,4]) char vect__33.17; vector([4,4]) char vect__32.16; vector([4,4]) char vect_iftmp.15; vector([4,4]) unsigned char vect__3.14; _Bool * vectp_b.13; vector([4,4]) unsigned char * vectp_b.12; vector([4,4]) <signed-boolean:1> mask__15.11; vector([4,4]) int vect__11.10; vector([4,4]) int vect_vec_iv_.9; char D.2780; char a_lsm.6; int d; char _4(D); int _5; int _45; vector([4,4]) int vect_cst__46; vector([4,4]) int _48; unsigned long _63; char _64; unsigned long ivtmp_65; unsigned long ivtmp_66; unsigned long _67; <bb 2> [local count: 63136016]: <bb 3> [local count: 252544065]: # vect_vec_iv_.9_47 = PHI <_48(3), { 0, 1, 2, ... }(2)> # vectp_b.12_54 = PHI <vectp_b.12_55(3), &b(2)> # ivtmp_65 = PHI <ivtmp_66(3), 16(2)> _67 = .SELECT_VL (ivtmp_65, POLY_INT_CST [4, 4]); _45 = (int) _67; vect_cst__46 = [vec_duplicate_expr] _45; _48 = vect_cst__46 + vect_vec_iv_.9_47; vect__11.10_50 = vect_vec_iv_.9_47 & { 1, ... }; // 0/1 mask__15.11_52 = vect__11.10_50 != { 0, ... }; // 0/-1 vect__3.14_56 = .MASK_LEN_LOAD (vectp_b.12_54, 8B, mask__15.11_52, _67, 0); // 1/0 vect_iftmp.15_57 = VIEW_CONVERT_EXPR<vector([4,4]) char>(vect__3.14_56); // 1 vect__32.16_58 = (vector([4,4]) char) vect__11.10_50; vect__33.17_60 = vect__32.16_58 ^ { 1, ... }; //0, 1 vect_iftmp.18_61 = vect_iftmp.15_57 | vect__33.17_60; // 1 vectp_b.12_55 = vectp_b.12_54 + _67; ivtmp_66 = ivtmp_65 - _67; if (ivtmp_66 != 0) goto <bb 3>; [75.00%] else goto <bb 4>; [25.00%] <bb 4> [local count: 63136016]: _63 = _67 + 18446744073709551615; //_67 - 1 _64 = .VEC_EXTRACT (vect_iftmp.18_61, _63); a = _64; _5 = (int) _64; __builtin_printf ("%u\n", _5); return 0; } ``` I don't see anything wrong here in the gimple here. Someone from the riscv side will need to debug it from an instruction side because the gimple looks fine and correct (still).