[LLVMdev] [Polly][GSOC2013] FastPolly -- SCOP Detection Pass

Star Tan tanmx_star at yeah.net
Mon Jul 1 19:04:43 PDT 2013

At 2013-07-01 23:47:06,"Tobias Grosser" <tobias at grosser.es> wrote:

>On 07/01/2013 06:51 AM, Star Tan wrote:
>>> Great. Now we have two test cases we can work with. Can you
>>> upload the LLVM-IR produced by clang -O0 (without Polly)?
>> Since tramp3d-v4.ll is to large (19M with 267 thousand lines), I would focus on the oggenc benchmark at firat.
>> I attached the oggenc.ll (LLVM-IR produced by clang -O0 without Polly), which compressed into the file oggenc.tgz.
>Sounds good.
>>> 2) Check why the Polly scop detection is failing
>>> You can use 'opt -polly-detect -analyze' to see the most common reasons
>>> the scop detection failed. We should verify that we perform the most
>>> common and cheap tests early.
>> I also attached the output file oggenc_polly_detect_analyze.log produced by "polly-opt -O3 -polly-detect -analyze oggenc.ll". Unfortunately, it only dumps valid scop regions. At first, I thought to dump all debugging information by "-debug" option, but it will dump too many unrelated information produced by other passes. Do you know any option that allows me to dump debugging information for the "-polly-detect" pass, but at the same time disabling debugging information for other passes?
>I really propose to not attach such large files. ;-)
>To dump debug info of just one pass you can use 
>-debug-only=polly-detect. However, for performance measurements, you 
>want to use
>a release build to get accurate numbers.
>Another flag that is interesting is the flag '-stats'. It gives me the 
>following information:
>     4 polly-detect
>                  - Number of bad regions for Scop: CFG too complex
>   183 polly-detect
>                  - Number of bad regions for Scop: Expression not affine
>   103 polly-detect
>                  - Number of bad regions for Scop: Found base address
>                    alias
>   167 polly-detect
>                  - Number of bad regions for Scop: Found invalid region
>                    entering edges
>    59 polly-detect
>                  - Number of bad regions for Scop: Function call with
>                    side effects appeared
>   725 polly-detect
>                  - Number of bad regions for Scop: Loop bounds can not
>                    be computed
>    93 polly-detect
>                  - Number of bad regions for Scop: Non canonical
>                    induction variable in loop
>     8 polly-detect
>                  - Number of bad regions for Scop: Others
>    53 polly-detect
>                  - Number of regions that a valid part of Scop
>This seems to suggest that we most scops fail due to loop bounds that 
>can not be computed. It would be interesting to see what kind of 
>expressions these are. In case SCEV often does not deliver a result,
>this may be one of the cases where bottom up scop detection would help
>a lot, as outer regions are automatically invalidated if we can not get 
>a SCEV for the loop bounds of the inner regions.
Thank you so much. This is what I need. I just want to know why these scops are invalid!

>However, I still have the feeling the test case is too large. You can 
>reduce it I propose to first run opt with 'opt -O3 -polly 
>-disable-inlining -time-passes'. You then replace all function 
>definitions with
>s/define internal/define/. After this preprocessing you can use a regexp 
>such as "'<,'>s/define \([^{}]* \){\_[^{}]*}/declare \1" to replace 
>function definitions with their declaration. You can use this to binary 
>search for functions that have a large overhead in ScopDetect time.
>I tried this a little, but realized that no matter if I removed the 
>first or the second part of a module, the relative scop-detect time 
>always went down. This is surprising. If you see similar effects, it 
>would be interesting to investigate.

No problem. I will try to reduce code size.
Star Tan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130702/0210262e/attachment.html>

More information about the llvm-dev mailing list