[LLVMdev] [Polly] Question about Polly's speed up on huffbench.c without optimization and code generation

Tobias Grosser tobias at grosser.es
Mon Aug 5 22:29:50 PDT 2013


On 08/05/2013 08:08 PM, Star Tan wrote:
> Hi all,
>
>
>   It seems that Polly could still speed up  test-suite/SingleSource/Benchmarks/CoyoteBench/huffbench.c even without any optimization and code generation. Our evaluation show that when compiled with "clang -Xclang -load -Xclang LLVMPolly.so -mllvm -polly -mllvm -polly-optimizer=none -mllvm -polly-code-generator=none", the execution time of huffbench would reduced to 15 secs from the original 19 secs without Polly.
>
>
> By investigating Polly's canonicalication passes, I find the speedup mainly comes from "createIndVarSimplifyPass()", which is controlled by the variable SCEVCodegen:
>
>
>      if (!SCEVCodegen)
>         PM.add(polly::createIndVarSimplifyPass());
>
>
> If we remove this canonicalication pass, then there would be no performance improvement.
>
>
> Could anyone give me some hints why Polly needs this canonicalication pass in normal cases but refuse it in SCEVCodegen case? Is it possible to remove this canonicalication pass at all?

Hi Star,

polly::createIndVarSimplifyPass() is used in Polly to create canonical 
induction variables in case we do not use the SCEV based code 
generation. For SCEV based code generation this pass is not needed any 
more and one motivation for writing the SCEV based code generation was 
in fact to remove the need for this pass. It still exists as we did not 
yet fully test the SCEV based code generation and for the classical code
generation we need canonical induction variables.

Regarding the speed up due to Polly. It seems the rewrites introduced by 
the createIndVarSimplifyPass happen to yield faster code. If you can 
easily reproduce a reduced test case that shows a missing optimization,
it would be great to get a bug report for this. On the other hand, I 
remember the induction variable canonicalization was removed due to 
introducing unpredictable performance regressions (and possible 
improvements?). Hence, I would not spend too much time tracking on this
in case there is no obvious missed optimization.

Cheers,
Tobi



More information about the llvm-dev mailing list