[llvm-dev] [cfe-dev] [PATCH/DRAFT] Embed metadata into object file

Christian Dietrich via llvm-dev llvm-dev at lists.llvm.org
Wed Apr 6 03:35:17 PDT 2016


Mehdi Amini <mehdi.amini at apple.com> writes:

> Yes, I meant conceptually it is the same as debug info, so it makes
> sense to solve it the same way (i.e. metadata + backend support for
> codegen).

Ah ok, I thought you were suggesting to use the debugging
infrastructure.

Ok, then there are several directions this effort could go:

- The current patch is usable for others in its current form.
  (Transporting only strings)
- A more elaborated and diverse metadata storage format is useful. When
  thinking about that, something like:

  !llvm.extra_sections = {!0, !1, !2}
  !0 = !StringSection(section=!"clang.strings", data=!"My Analysis Backend")
  !1 = !MetadataSection(section=!"clang.metadata", data=!4)
  !2 = !JSONSection(section=!"clang.json", data=!4)

  !4 = !{!"fooo", i32 123, i8 255, !5}
  !5 = !{!"Barfoo"}


  In this fictive example,
    - clang.strings would be a metadata string section, and the most
      flexible possibility.
    - clang.metadata would contain a materialized bitcode stream which
      contains only metadata referenced by !4
    - clang.json would contain a json string, derived from !4

  Would this would only be the LLVM side. How would the path from
  AST->IR look like. For !StringSection, I already drafted a
  possibility.
  
  For !MetadataSection, and JSONSection, it would be necessary to attach
  more complex structures to the AST. I currently don't know how we
  could attach these structures.  An attribute with a Metadata * just
  feels bad, since it mixes LLVM and clang types.

- The third possibility is: This is all bullshit and is not needed for LLVM.

> The FrontendAction is totally separated from the LLVM-pass, but I
> don’t see why your plugin can’t contain both.
>
> To load an LLVM pass into the pipeline, see what Polly is doing for
> instance: http://polly.llvm.org/example_load_Polly_into_clang.html

After looking in the code, I realized that it is possible to register
passes by llvm::RegisterStandardPasses, which in executed on plugin
load. I was not aware of this possibility. Thank you very much :-)
Perhaps it would be nice to have an clang plugin example that contains
as well an FrontentAction, and a associated LLVM pass to demonstrate
this possibility?

chris
-- 
Christian Dietrich, M.Sc. (Wissenschaftlicher Mitarbeiter)
Lehrstuhl für Informatik 4 (Verteilte Systeme und Betriebssysteme)
Friedrich-Alexander-Universität Erlangen-Nürnberg
Martensstr. 1
91058 Erlangen

Tel:    (09131) 85-27280
Fax:    (09131) 85-28732
eMail:  christian.dietrich at fau.de
WWW:    http://www4.cs.fau.de/~dietrich


More information about the llvm-dev mailing list