Exploit graph properties during domain generation
authorJohannes Doerfert <doerfert@cs.uni-saarland.de>
Mon, 4 Apr 2016 07:57:39 +0000 (07:57 +0000)
committerJohannes Doerfert <doerfert@cs.uni-saarland.de>
Mon, 4 Apr 2016 07:57:39 +0000 (07:57 +0000)
commit642594ae87aca5181827cf9daff02e851b24ca09
treeb9dfcf89606042b73ffcebda7291c9734bcf2481
parenta07f0ac73f152f1d39ac7781f50363799fbf2cf4
Exploit graph properties during domain generation

  As a CFG is often structured we can simplify the steps performed during
  domain generation. When we push domain information we can utilize the
  information from a block A to build the domain of a block B, if A dominates B
  and there is no loop backede on a path from A to B. When we pull domain
  information we can use information from a block A to build the domain of a
  block B if B post-dominates A. This patch implements both ideas and thereby
  simplifies domains that were not simplified by isl. For the FINAL basic block
  in test/ScopInfo/complex-successor-structure-3.ll we used to build a universe
  set with 81 basic sets. Now it actually is represented as universe set.

  While the initial idea to utilize the graph structure depended on the
  dominator and post-dominator tree we can use the available region
  information as a coarse grained replacement. To this end we push the
  region entry domain to the region exit and pull it from the region
  entry for the region exit if applicable.

  With this patch we now successfully compile
    External/SPEC/CINT2006/400_perlbench/400_perlbench
  and
    SingleSource/Benchmarks/Adobe-C++/loop_unroll.

Differential Revision: http://reviews.llvm.org/D18450

llvm-svn: 265285
14 files changed:
polly/include/polly/ScopInfo.h
polly/lib/Analysis/ScopInfo.cpp
polly/test/Isl/CodeGen/phi_scalar_simple_1.ll
polly/test/ScopInfo/complex-successor-structure-2.ll [new file with mode: 0644]
polly/test/ScopInfo/complex-successor-structure-3.ll [new file with mode: 0644]
polly/test/ScopInfo/complex-successor-structure.ll
polly/test/ScopInfo/intra_and_inter_bb_scalar_dep.ll
polly/test/ScopInfo/non-affine-region-with-loop-2.ll
polly/test/ScopInfo/non_affine_region_1.ll
polly/test/ScopInfo/pointer-used-as-base-pointer-and-scalar-read.ll
polly/test/ScopInfo/remarks.ll
polly/test/ScopInfo/switch-1.ll
polly/test/ScopInfo/switch-2.ll
polly/test/ScopInfo/switch-4.ll