diff --git a/polly/lib/DeadCodeElimination.cpp b/polly/lib/DeadCodeElimination.cpp index 8e6e1eacf8b7..ba51d87fa964 100644 --- a/polly/lib/DeadCodeElimination.cpp +++ b/polly/lib/DeadCodeElimination.cpp @@ -47,9 +47,10 @@ namespace { cl::opt DCEPreciseSteps( "polly-dce-precise-steps", - cl::desc( - "The number of precise steps between two approximating iterations"), - cl::init(2)); + cl::desc("The number of precise steps between two approximating " + "iterations. (A value of -1 schedules another approximation stage " + "before the actual dead code elimination."), + cl::init(-1)); class DeadCodeElim : public ScopPass { @@ -103,6 +104,9 @@ bool DeadCodeElim::eliminateDeadCode(Scop &S, int PreciseSteps) { isl_union_map *Dep = D->getDependences(Dependences::TYPE_RAW); Dep = isl_union_map_reverse(Dep); + if (PreciseSteps == -1) + Live = isl_union_set_affine_hull(Live); + isl_union_set *OriginalDomain = S.getDomains(); int Steps = 0; while (true) { diff --git a/polly/test/DeadCodeElimination/dead_iteration_elimination.ll b/polly/test/DeadCodeElimination/dead_iteration_elimination.ll index af81e2d967af..8549a0cfc084 100644 --- a/polly/test/DeadCodeElimination/dead_iteration_elimination.ll +++ b/polly/test/DeadCodeElimination/dead_iteration_elimination.ll @@ -1,4 +1,4 @@ -; RUN: opt -S %loadPolly -basicaa -polly-dependences-analysis-type=value-based -polly-dce -polly-ast -analyze < %s | FileCheck %s -check-prefix=CHECK +; RUN: opt -S %loadPolly -basicaa -polly-dependences-analysis-type=value-based -polly-dce -polly-dce-precise-steps=2 -polly-ast -analyze < %s | FileCheck %s -check-prefix=CHECK target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" target triple = "x86_64-pc-linux-gnu" ;