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

Reply via email to