[llvm-dev] Definitive list of optimisations at each optimisation level

Sean Silva via llvm-dev llvm-dev at lists.llvm.org
Wed Jun 28 20:14:43 PDT 2017


On Mon, Jun 26, 2017 at 5:04 AM, ORiordan, Martin <martin.oriordan at intel.com
> wrote:

> Thanks Sean and Silva.
>
>
>
> I guess what I was seeking was a URL that I could point (non-compiler)
> people at, but I guess no such reference exists.  What I can do if
> reference bot the source manager and use ‘-mllvm -debug-pass=Structure’
> for each optimisation level, and document that.  The downside is that this
> will continuously go out of data with each release.
>


Yeah, the nasty thing is that as each user of LLVM is running potentially
different pass pipelines, we don't really have a good way to write a
user-facing (or at least non-compiler-dev-facing) page describing the
optimizations that they should expect the compiler to do, as the compiler
developers using LLVM may have changed it. In theory, we could provide such
a page for the open-source clang. Such a page of course couldn't go into
massive detail about each pass and as such will likely be mostly describing
the basics.

Most of the information that users would care about is likely to not get
out of date very easily (e.g. we might switch GVN implementations, but the
way in which they differ isn't going to be relevant to such a document; we
might switch EarlyCSE to MemorySSA, but that isn't relevant to such a
document).

-- Sean Silva


>
>
> All the best,
>
>
>
>             MartinO
>
>
>
> PS: Movidius is now part of Intel, so I will be gradually switching to my
> Intel email address.
>
>
>
> *From:* Ryan Taylor [mailto:ryta1203 at gmail.com]
> *Sent:* Sunday, June 25, 2017 2:59 AM
> *To:* Sean Silva <chisophugis at gmail.com>
> *Cc:* Martin J. O'Riordan <martin.oriordan at movidius.com>; llvm-dev <
> llvm-dev at lists.llvm.org>
> *Subject:* Re: [llvm-dev] Definitive list of optimisations at each
> optimisation level
>
>
>
> I agree, it's much clearer, it just takes runs at multiple opt levels and
> therefore I don't find it to be a "one stop shop".
>
>
>
> On Jun 24, 2017 8:44 PM, "Sean Silva" <chisophugis at gmail.com> wrote:
>
> Looking at PassManagerBuilder can be useful because there are sometimes
> comments giving some idea of the intent of the particular choice of passes,
> but it can be difficult to see the big picture of all the passes that are
> run because it is very parameterized and split across multiple subroutines.
>
>
>
> Running clang at O0 through O3 with -mllvm -debug-pass=Structure is
> generally more enlightening because then you see everything in one place
> for each optimization level.
>
>
>
> -- Sean Silva
>
>
>
> On Jun 24, 2017 12:54 PM, "Ryan Taylor" <ryta1203 at gmail.com> wrote:
>
> Right but then you'll have to call each opt level. Have u looked in the
> pass manager?
>
>
>
> On Jun 24, 2017 3:52 PM, "Sean Silva via llvm-dev" <
> llvm-dev at lists.llvm.org> wrote:
>
> The most definitive list you can probably hope to get will be obtained by
> passing -mllvm -debug-pass=Structure to a clang invocation.
>
>
>
> -- Sean Silva
>
>
>
> On Jun 24, 2017 7:10 AM, "Martin J. O'Riordan via llvm-dev" <
> llvm-dev at lists.llvm.org> wrote:
>
> I am often asked what optimisations “our” compiler performs at each
> level.  But “our” compiler is actually CLang/LLVM which we have retargeted
> to our proprietary target.
>
>
>
> Most of the work we do is in maintaining our target specific backend.
> Certainly there are optimisations that we do to take best advantage of our
> instruction set during lowering and instruction selection, and we have also
> added a couple of additional passes which manipulate the IR in advance of
> lowering to better shape it for our target.
>
>
>
> But in practice the vast majority of optimisations are contributed by the
> continuously evolving and excellent LLVM target independent passes, and
> have little or nothing to do with the work we do in our backend - though it
> is obviously directed/tuned by the various target call-backs and the target
> cost models.
>
>
>
> Is there a “one stop shop” list of the optimisation passes that LLVM
> performs, and identification of which are enabled by default for each of
> the 4 standard optimisation levels ‘-O0’ thru ‘-O3’?
>
>
>
> The reason that I ask, is that I really don’t have an honest or informed
> answer that I can provide to people when they ask, and I haven’t found a
> definitive statement of this in the LLVM documentation that I could refer
> them to.
>
>
>
> Thanks,
>
>
>
>             MartinO
>
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
>
>
> --------------------------------------------------------------
> Intel Research and Development Ireland Limited
> Registered in Ireland
> Registered Office: Collinstown Industrial Park, Leixlip, County Kildare
> Registered Number: 308263
>
> This e-mail and any attachments may contain confidential material for the
> sole use of the intended recipient(s). Any review or distribution by others
> is strictly prohibited. If you are not the intended recipient, please
> contact the sender and delete all copies.
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170628/0391321e/attachment.html>


More information about the llvm-dev mailing list