HomePhabricator

IR: Add assembly/bitcode support for function metadata attachments

Description

IR: Add assembly/bitcode support for function metadata attachments

Add serialization support for function metadata attachments (added in
r235783). The syntax is:

define @foo() !attach !0 {

Metadata attachments are only allowed on functions with bodies. Since
they come before the {, they're not really part of the body; since
they require a body, they're not really part of the header. In
LLParser I gave them a separate function called from ParseDefine(),
ParseOptionalFunctionMetadata().

In bitcode, I'm using the same METADATA_ATTACHMENT record used by
instructions. Instruction metadata attachments are included in a
special "attachment" block at the end of a Function. The attachment
records are laid out like this:

InstID (KindID MetadataID)+

Note that these records always have an odd number of fields. The new
code takes advantage of this to recognize function attachments (which
don't need an instruction ID):

(KindID MetadataID)+

This means we can use the same attachment block already used for
instructions.

This is part of PR23340.

Details

Committed
dexonsmithApr 24 2015, 3:04 PM
Parents
rL235784: Verifier: Function metadata attachments require a body
Branches
Unknown
Tags
Unknown