On Wed, Jun 28, 2017 at 2:36 PM, Richard Sandiford <richard.sandif...@linaro.org> wrote: > Index: gcc/tree-data-ref.c > =================================================================== > --- gcc/tree-data-ref.c 2017-06-28 14:33:41.294720044 +0100 > +++ gcc/tree-data-ref.c 2017-06-28 14:35:30.475155670 +0100 > @@ -749,15 +749,29 @@ canonicalize_base_object_address (tree a > return build_fold_addr_expr (TREE_OPERAND (addr, 0)); > } > > -/* Analyzes the behavior of the memory reference DR in the innermost loop or > - basic block that contains it. Returns true if analysis succeed or false > - otherwise. */ > +/* Analyze the behavior of memory reference DR. There are two modes: > + > + - BB analysis. In this case we simply split the address into base, > + init and offset components, without reference to any containing loop. > + The resulting base and offset are general expressions and they can > + vary arbitrarily from one iteration of the containing loop to the next. > + The step is always zero. > + > + - loop analysis. In this case we analyze the reference both wrt LOOP > + and on the basis that the reference occurs (is "used") in LOOP; > + see the comment above analyze_scalar_evolution_in_loop for more > + information about this distinction. The base, init, offset and > + step fields are all invariant in LOOP. > + > + Perform BB analysis if LOOP is null, or if LOOP is the function's > + dummy outermost loop. In other cases perform loop analysis. > + > + Return true if the analysis succeeded and store the results in DR if so. > + BB analysis can only fail for bitfield or reversed-storage accesses. */ > > bool > -dr_analyze_innermost (struct data_reference *dr, struct loop *nest) > +dr_analyze_innermost (struct data_reference *dr, struct loop *loop) > { > - gimple *stmt = DR_STMT (dr); > - struct loop *loop = loop_containing_stmt (stmt); > tree ref = DR_REF (dr); > HOST_WIDE_INT pbitsize, pbitpos; > tree base, poffset; > @@ -806,22 +820,11 @@ dr_analyze_innermost (struct data_refere > > if (in_loop) A nit. No need to use bool variable now? We can check loop != NULL instead.
Thanks, bin