[all-commits] [llvm/llvm-project] a5b895: [Polly] Gist new access relations using the SCoP c...

Michael Kruse via All-commits all-commits at lists.llvm.org
Sat Jan 23 11:09:25 PST 2021


  Branch: refs/heads/master
  Home:   https://github.com/llvm/llvm-project
  Commit: a5b895110f02c69465dfa605c036abf420c5acc3
      https://github.com/llvm/llvm-project/commit/a5b895110f02c69465dfa605c036abf420c5acc3
  Author: Michael Kruse <llvm-project at meinersbur.de>
  Date:   2021-01-23 (Sat, 23 Jan 2021)

  Changed paths:
    M polly/lib/Analysis/ScopInfo.cpp
    M polly/test/DeLICM/reduction_looprotate_hoisted.ll
    M polly/test/Simplify/coalesce_3partials.ll
    M polly/test/Simplify/coalesce_disjointelements.ll
    M polly/test/Simplify/coalesce_overlapping.ll
    M polly/test/Simplify/coalesce_partial.ll

  Log Message:
  -----------
  [Polly] Gist new access relations using the SCoP context.

This simplifies the access relations.


  Commit: de0457a013a93d6470094194ece1a1bc4eec1bad
      https://github.com/llvm/llvm-project/commit/de0457a013a93d6470094194ece1a1bc4eec1bad
  Author: Michael Kruse <llvm-project at meinersbur.de>
  Date:   2021-01-23 (Sat, 23 Jan 2021)

  Changed paths:
    M polly/include/polly/ScopInfo.h
    M polly/lib/Analysis/ScopInfo.cpp

  Log Message:
  -----------
  [Polly] Clean up hasFeasibleRuntimeContext.


  Commit: 02e8a5ad3c72ac53275e1dd4de9a2449f072051b
      https://github.com/llvm/llvm-project/commit/02e8a5ad3c72ac53275e1dd4de9a2449f072051b
  Author: Michael Kruse <llvm-project at meinersbur.de>
  Date:   2021-01-23 (Sat, 23 Jan 2021)

  Changed paths:
    M polly/lib/Support/ISLTools.cpp

  Log Message:
  -----------
  [Polly] Allow param sets for dumpPw().


  Commit: 3b9677e1eced0eafc17bdf3f6a41f1fd7db9f120
      https://github.com/llvm/llvm-project/commit/3b9677e1eced0eafc17bdf3f6a41f1fd7db9f120
  Author: Michael Kruse <llvm-project at meinersbur.de>
  Date:   2021-01-23 (Sat, 23 Jan 2021)

  Changed paths:
    M polly/include/polly/ScopInfo.h
    M polly/include/polly/Support/ScopHelper.h
    M polly/lib/Analysis/ScopBuilder.cpp
    M polly/lib/Analysis/ScopInfo.cpp
    M polly/lib/Support/ScopHelper.cpp
    M polly/lib/Transform/DeLICM.cpp
    M polly/lib/Transform/ForwardOpTree.cpp
    M polly/lib/Transform/ZoneAlgo.cpp
    M polly/test/DeLICM/pr41656.ll
    A polly/test/DeLICM/pr48783.ll
    M polly/test/DeLICM/reduction_looprotate_hoisted.ll
    M polly/test/Isl/CodeGen/exprModDiv___%for.cond---%for.end.jscop
    M polly/test/Isl/CodeGen/exprModDiv___%for.cond---%for.end.jscop.pow2
    M polly/test/Isl/CodeGen/invariant_load_parameters_cyclic_dependence.ll
    M polly/test/Isl/CodeGen/param_div_div_div_2.ll
    M polly/test/ScopInfo/NonAffine/non-affine-loop-condition-dependent-access_1.ll
    M polly/test/ScopInfo/NonAffine/non-affine-loop-condition-dependent-access_2.ll
    M polly/test/ScopInfo/NonAffine/non-affine-loop-condition-dependent-access_3.ll
    M polly/test/ScopInfo/NonAffine/non_affine_conditional_surrounding_affine_loop.ll
    M polly/test/ScopInfo/NonAffine/non_affine_conditional_surrounding_non_affine_loop.ll
    M polly/test/ScopInfo/NonAffine/non_affine_float_compare.ll
    M polly/test/ScopInfo/NonAffine/non_affine_loop_condition.ll
    M polly/test/ScopInfo/NonAffine/non_affine_loop_used_later.ll
    M polly/test/ScopInfo/avoid_new_parameters_from_geps.ll
    M polly/test/ScopInfo/constant_functions_as_unknowns.ll
    M polly/test/ScopInfo/modulo_zext_1.ll
    M polly/test/ScopInfo/modulo_zext_2.ll
    M polly/test/ScopInfo/modulo_zext_3.ll
    M polly/test/ScopInfo/multidim_2d_with_modref_call.ll
    M polly/test/ScopInfo/multidim_2d_with_modref_call_2.ll
    M polly/test/ScopInfo/multidim_fold_constant_dim_zero.ll
    M polly/test/ScopInfo/multidim_fortran_2d_with_modref_call.ll

  Log Message:
  -----------
  [Polly] Track defined behavior for PHI predecessor computation.

ZoneAlgorithms's computePHI relies on being provided with consistent a
schedule to compute the statement prodecessors of a statement containing
PHINodes. Otherwise unexpected results such as PHI nodes with multiple
predecessors can occur which would result in problems in the
algorithms expecting consistent data.

In the added test case, statement instances are scrubbed from the
SCoP their execution would result in undefined behavior (Due to a nsw
overflow). As already being undefined behavior in LLVM-IR, neither
AssumedContext nor InvalidContext are updated, giving computePHI no
means to avoid these cases.

Intoduce a new SCoP property, the DefinedBehaviorContext, that among
the runtime-checked conditions, also tracks the assumptions not needing
a runtime check, in particular those affecting the assumed control flow.
This replaces the manual combination of the 3 other contexts that was
already done in computePHI and setNewAccessRelation. Currently, the only
additional assumption is that loop induction variables will nsw flag for
not wrap, but potentially more can be added. Use in
hasFeasibleRuntimeContext, isl::ast_build and gisting are other
potential uses.

To limit computational complexity, the DefinedBehaviorContext is not
availabe if it grows too large (atm hardcoded to 8 disjuncts).

Possible other fixes include bailing out in computePHI when
inconsistencies are detected, choose an arbitrary value for inconsistent
cases (since it is undefined behavior anyways), or make the code
receiving the result from ComputePHI handle inconsistent data. All of
them reduce the quality of implementation having to bail out more often
and disabling the ability to assert on actually wrong results.

This fixes llvm.org/PR48783.


Compare: https://github.com/llvm/llvm-project/compare/1238378f1850...3b9677e1eced


More information about the All-commits mailing list