[clangd-dev] Using clangd to retrieve backend optimization remarks

Sam McCall via clangd-dev clangd-dev at lists.llvm.org
Mon Sep 17 07:42:51 PDT 2018

Hi Laurin,

I'm not really familiar with clang/LLVM backends, but here's a guess.

The simplest idea is to change the existing code that parses the file and
generates diagnostics.
At least to prototype, I think you might want to change
clangd::ClangdFrontendAction (in ClangdUnit.cpp) to subclass
clang::EmitCodeGenOnlyAction (or one of the other CodeGenActions) instead
of clang::SyntaxOnlyAction. And then add the relevant flags.

However I'm not sure that's going to work well:
 - with the backend enabled, everything is going to get a lot slower
 - we have optimizations (like not parsing function bodies in the preamble)
that probably aren't compatible with codegen
 - doing codegen is probably going to force clang to deserialize all of the
preamble, which is also slow
 - obviously it means linking in the backend, which is quite a big thing
for a release build if this is a niche feature

For performance, I'm not sure how feasible it is to run codegen for code
directly referenced by the main file only (again, not a backend person!),
this would be the analogue to how we keep frontend diagnostics fast.

We have a vague wish to support some more-expensive diagnostics (template
expansions, clang-tidy analysis) that can't be computed every loop, but
haven't come up with a good design yet.

Cheers, Sam

On Mon, Sep 17, 2018 at 2:24 PM Laurin Brandner via clangd-dev <
clangd-dev at lists.llvm.org> wrote:

> Hi,
> I’m fairly new to this community so I hope I’m not asking a very trivial
> question.
> Anyways, I’m looking into the possibility of returning optimization
> remarks like the option -Rpass=loop-vectorize would do. By looking at
> clangd’s source code I realized that clangd only preprocesses the project
> but does not really invoke the backend.
> Thus, I would like to implement an action that enables the output of
> optimization remarks. Could I maybe get some guidance on to what I need to
> do to achieve this? I saw that I most likely need to subclass Action but
> I’m not quite sure what subclass I should have a closer look at.
> Thanks a lot for any kind of help.
> Cheers,
> Laurin
> _______________________________________________
> clangd-dev mailing list
> clangd-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/clangd-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/clangd-dev/attachments/20180917/69110831/attachment.html>

More information about the clangd-dev mailing list