On Wed, Dec 18, 2013 at 04:16:57PM +0000, Iyer, Balaji V wrote:
> > Don't do this, compute loop count during omp expansion (there is already
> > code that does that for you, after all, for #pragma omp for the loop count 
> > is
> > typically (unless static schedule) passed as parameter to the runtime as 
> > well.
> 
> Where does this happen? Is there a routine that you can point me to that will 
> compute the loop-count?

E.g. extract_omp_for_data (that does that only for collapse>1 though),
otherwise you get from that routine just n1, n2, step and cond_code
and from that you can easily compute it as extract_omp_for_data does:
              tree itype = TREE_TYPE (loop->v);
          
              if (POINTER_TYPE_P (itype))
                itype = signed_type_for (itype);
              t = build_int_cst (itype, (loop->cond_code == LT_EXPR ? -1 : 1));
              t = fold_build2_loc (loc,
                               PLUS_EXPR, itype,
                               fold_convert_loc (loc, itype, loop->step), t);
              t = fold_build2_loc (loc, PLUS_EXPR, itype, t,
                               fold_convert_loc (loc, itype, loop->n2));
              t = fold_build2_loc (loc, MINUS_EXPR, itype, t,
                               fold_convert_loc (loc, itype, loop->n1));
              if (TYPE_UNSIGNED (itype) && loop->cond_code == GT_EXPR)
                t = fold_build2_loc (loc, TRUNC_DIV_EXPR, itype,
                                 fold_build1_loc (loc, NEGATE_EXPR, itype, t),
                                 fold_build1_loc (loc, NEGATE_EXPR, itype,
                                              fold_convert_loc (loc, itype,
                                                                loop->step)));
              else
                t = fold_build2_loc (loc, TRUNC_DIV_EXPR, itype, t,
                                 fold_convert_loc (loc, itype, loop->step));

        Jakub

Reply via email to