https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69110

vries at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |spop at gcc dot gnu.org

--- Comment #8 from vries at gcc dot gnu.org ---
loop before parloops, at ivcanon:
...
  # z_10 = PHI <z_7(4), 0(2)>
  # .MEM_11 = PHI <.MEM_6(4), .MEM_3(D)(2)>
  # ivtmp_12 = PHI <ivtmp_2(4), 1000(2)>

  # VUSE <.MEM_11>
  i.1_4 = iD.1855;

  _5 = i.1_4 + 1;

  # .MEM_6 = VDEF <.MEM_11>
  iD.1855 = _5;

  z_7 = z_10 + 1;

  ivtmp_2 = ivtmp_12 - 1;

  if (ivtmp_2 != 0)
    goto <bb 4>;
  else
    goto <bb 5>;
...

The loop cannot be parallelized because the store to iD.1855 in every loop
iteration aliases with the load from and store to iD.1855 in every other loop
iteration.

However, parloops concludes that parallelization is possible:
...
;; Function foo (foo, funcdef_no=0, decl_uid=1857, cgraph_uid=0,
symbol_order=1) (executed once)


Pass statistics of "parloops": ----------------

Trying loop 1 as candidate
loop 1 is innermost
Analyzing # of iterations of loop 1
  exit condition [999, + , 4294967295] != 0
  bounds on difference of bases: -999 ... -999
  result:
    # of iterations 999, bounded by 999
Analyzing # of iterations of loop 1
  exit condition [999, + , 4294967295] != 0
  bounds on difference of bases: -999 ... -999
  result:
    # of iterations 999, bounded by 999
doloop-2.c:6:1: note: === vect_analyze_loop_form ===
doloop-2.c:6:1: note: === get_loop_niters ===
Considering loop 1
loop is innermost
Creating dr for i
analyze_innermost: success.
        base_address: &i
        offset from base address: 0
        constant offset from base address: 0
        step: 0
        aligned to: 128
        base_object: i
Creating dr for i
analyze_innermost: success.
        base_address: &i
        offset from base address: 0
        constant offset from base address: 0
        step: 0
        aligned to: 128
        base_object: i
(compute_affine_dependence
  stmt_a: i.1_4 = i;
  stmt_b: i = _5;
)
(compute_affine_dependence
  stmt_a: i.1_4 = i;
  stmt_b: i.1_4 = i;
)
(compute_affine_dependence
  stmt_a: i = _5;
  stmt_b: i = _5;
)
Dependence tester statistics:
Number of dependence tests: 3
Number of dependence tests classified dependent: 3
Number of dependence tests classified independent: 0
Number of undetermined dependence tests: 0
Number of subscript tests: 0
Number of undetermined subscript tests: 0
Number of same subscript function: 0
Number of ziv tests: 0
Number of ziv tests returning dependent: 0
Number of ziv tests returning independent: 0
Number of ziv tests unimplemented: 0
Number of siv tests: 0
Number of siv tests returning dependent: 0
Number of siv tests returning independent: 0
Number of siv tests unimplemented: 0
Number of miv tests: 0
Number of miv tests returning dependent: 0
Number of miv tests returning independent: 0
Number of miv tests unimplemented: 0
(Data Dep: 
#(Data Ref: 
#  bb: 3 
#  stmt: i.1_4 = i;
#  ref: i
#  base_object: i;
#)
#(Data Ref: 
#  bb: 3 
#  stmt: i = _5;
#  ref: i
#  base_object: i;
#)
  inner loop index: 0
  loop nest: (1 )
  distance_vector:   0 
  direction_vector:     =
)
(Data Dep: 
#(Data Ref: 
#  bb: 3 
#  stmt: i.1_4 = i;
#  ref: i
#  base_object: i;
#)
#(Data Ref: 
#  bb: 3 
#  stmt: i.1_4 = i;
#  ref: i
#  base_object: i;
#)
  inner loop index: 0
  loop nest: (1 )
  distance_vector:   0 
  direction_vector:     =
)
(Data Dep: 
#(Data Ref: 
#  bb: 3 
#  stmt: i = _5;
#  ref: i
#  base_object: i;
#)
#(Data Ref: 
#  bb: 3 
#  stmt: i = _5;
#  ref: i
#  base_object: i;
#)
  inner loop index: 0
  loop nest: (1 )
  distance_vector:   0 
  direction_vector:     =
)
  SUCCESS: may be parallelized
...

Reply via email to