| ================================================== |
| Tips and Tricks on using and contributing to Polly |
| ================================================== |
| |
| Commiting to polly trunk |
| ------------------------ |
| - `General reference to git-svn workflow <https://stackoverflow.com/questions/190431/is-git-svn-dcommit-after-merging-in-git-dangerous>`_ |
| |
| |
| Using bugpoint to track down errors in large files |
| -------------------------------------------------- |
| |
| If you know the ``opt`` invocation and have a large ``.ll`` file that causes |
| an error, ``bugpoint`` allows one to reduce the size of test cases. |
| |
| The general calling pattern is: |
| |
| - ``$ bugpoint <file.ll> <pass that causes the crash> -opt-args <opt option flags>`` |
| |
| An example invocation is: |
| |
| - ``$ bugpoint crash.ll -polly-codegen -opt-args -polly-canonicalize -polly-process-unprofitable`` |
| |
| For more documentation on bugpoint, `Visit the LLVM manual <http://llvm.org/docs/Bugpoint.html>`_ |
| |
| |
| Understanding which pass makes a particular change |
| -------------------------------------------------- |
| |
| If you know that something like `opt -O3 -polly` makes a change, but you wish to |
| isolate which pass makes a change, the steps are as follows: |
| |
| - ``$ bugpoint -O3 file.ll -opt-args -polly`` will allow bugpoint to track down the pass which causes the crash. |
| |
| To do this manually: |
| |
| - ``$ opt -O3 -polly -debug-pass=Arguments`` to get all passes that are run by default. ``-debug-pass=Arguments`` will list all passes that have run. |
| - Bisect down to the pass that changes it. |
| |
| |
| Debugging regressions introduced at some unknown earlier point |
| -------------------------------------------------------------- |
| |
| In case of a regression in performance or correctness (e.g., an earlier version |
| of Polly behaved as expected and a later version does not), bisecting over the |
| version history is the standard approach to identify the commit that introduced |
| the regression. |
| |
| LLVM has a single repository that contains all projects. It can be cloned at: |
| `<https://github.com/llvm-project/llvm-project-20170507>`_. How to bisect on a |
| git repository is explained here |
| `<https://www.metaltoad.com/blog/beginners-guide-git-bisect-process-elimination>`_. |
| The bisect process can also be automated as explained here: |
| `<https://www.metaltoad.com/blog/mechanizing-git-bisect-bug-hunting-lazy>`_. |
| An LLVM specific run script is available here: |
| `<https://gist.github.com/dcci/891cd98d80b1b95352a407d80914f7cf>`_. |