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).