(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
tree-ssa/
cunroll-13.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-O3 -fgimple -fdump-tree-cunroll-blocks-details" } */
       3  
       4  #if __SIZEOF_INT__ < 4
       5  __extension__ typedef __INT32_TYPE__ i32;
       6  #else
       7  typedef int i32;
       8  #endif
       9  
      10  struct a {i32 a[8];i32 b;};
      11  
      12  void __GIMPLE (ssa,startwith("fix_loops"))
      13  t (struct a * a)
      14  {
      15    i32 i;
      16    i32 _1;
      17    i32 _2;
      18    i32 _9;
      19    i32 _11;
      20  
      21  __BB(2):
      22    _11 = a_6(D)->a[0];
      23    if (_11 != _Literal (i32) 0)
      24      goto __BB6;
      25    else
      26      goto __BB3;
      27  
      28  __BB(3):
      29    return;
      30  
      31  __BB(4):
      32    _1 = _2 + _Literal (i32) 1;
      33    a_6(D)->a[i_19] = _1;
      34    i_8 = i_19 + _Literal (i32) 1;
      35    if (i_8 <= _Literal (i32) 123455)
      36      goto __BB5;
      37    else
      38      goto __BB3;
      39  
      40  __BB(5):
      41    i_19 = __PHI (__BB6: _Literal (i32) 1, __BB4: i_8);
      42    _2 = a_6(D)->a[i_19];
      43    if (_2 != _Literal (i32) 0)
      44      goto __BB4;
      45    else
      46      goto __BB3;
      47  
      48  __BB(6):
      49    _9 = _11 + _Literal (i32) 1;
      50    a_6(D)->a[0] = _9;
      51    goto __BB5;
      52  }
      53  
      54  /* This testcase relies on the fact that we do not eliminate the redundant test
      55     for i early.  It is necessary to disable all passes that do so, for the
      56     moment starting with the loop pipeline is good enough.  */
      57  /* { dg-final { scan-tree-dump-times "Loop 1 iterates 123454 times" 1 "cunroll" } } */
      58  /* { dg-final { scan-tree-dump-times "Last iteration exit edge was proved true" 1 "cunroll" } } */
      59  /* { dg-final { scan-tree-dump-times "Exit condition of peeled iterations was eliminated" 1 "cunroll" } } */
      60  /* { dg-final { scan-tree-dump-times "loop with 6 iterations completely unrolled" 1 "cunroll" } } */
      61  /* { dg-final { scan-tree-dump-not "Invalid sum" "cunroll" } } */