llvm/unittests/IR
Peter Collingbourne 99e2e27b37 IR: Allow metadata attachments on declarations, and fix lazy loaded metadata issue with globals.
This change is motivated by an upcoming change to the metadata representation
used for CFI. The indirect function call checker needs type information for
external function declarations in order to correctly generate jump table
entries for such declarations. We currently associate such type information
with declarations using a global metadata node, but I plan [1] to move all
such metadata to global object attachments.

In bitcode, metadata attachments for function declarations appear in the
global metadata block. This seems reasonable to me because I expect metadata
attachments on declarations to be uncommon. In the long term I'd also expect
this to be the case for CFI, because we'd want to use some specialized bitcode
format for this metadata that could be read as part of the ThinLTO thin-link
phase, which would mean that it would not appear in the global metadata block.

To solve the lazy loaded metadata issue I was seeing with D20147, I use the
same bitcode representation for metadata attachments for global variables as I
do for function declarations. Since there's a use case for metadata attachments
in the global metadata block, we might as well use that representation for
global variables as well, at least until we have a mechanism for lazy loading
global variables.

In the assembly format, the metadata attachments appear after the "declare"
keyword in order to avoid a parsing ambiguity.

[1] http://lists.llvm.org/pipermail/llvm-dev/2016-June/100462.html

Differential Revision: http://reviews.llvm.org/D21052

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273336 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-21 23:42:48 +00:00
..
AsmWriterTest.cpp Fix crash when printing instructions that have a metadata attached but no parent. 2016-01-07 20:14:30 +00:00
AttributesTest.cpp Fix non-determinism in order of LLVM attributes 2016-04-04 23:06:05 +00:00
CMakeLists.txt IR: LLVMContextTest => DebugTypeODRUniquingTest, NFC 2016-04-19 17:11:06 +00:00
ConstantRangeTest.cpp [ConstantRange] Add an getEquivalentICmp helper 2016-05-19 03:53:06 +00:00
ConstantsTest.cpp Fix constant folding of addrspacecast of null 2016-05-21 00:14:04 +00:00
DebugInfoTest.cpp IR: Give 'DI' prefix to debug info metadata 2015-04-29 16:38:44 +00:00
DebugTypeODRUniquingTest.cpp IR: Enable debug info type ODR uniquing for forward decls 2016-04-19 18:00:19 +00:00
DominatorTreeTest.cpp Remove every uses of getGlobalContext() in LLVM (but the C API) 2016-04-14 21:59:01 +00:00
FunctionTest.cpp IRMover: Steal arguments when moving functions, NFC 2016-04-06 06:38:15 +00:00
InstructionsTest.cpp Remove every uses of getGlobalContext() in LLVM (but the C API) 2016-04-14 21:59:01 +00:00
IntrinsicsTest.cpp Handle more edge cases in intrinsic name binary search 2016-01-26 22:33:19 +00:00
IRBuilderTest.cpp Remove some unused variables 2016-03-13 22:00:18 +00:00
LegacyPassManagerTest.cpp [NFC] Header cleanup 2016-04-18 09:17:29 +00:00
MDBuilderTest.cpp IR: Split Metadata from Value 2014-12-09 18:38:53 +00:00
MetadataTest.cpp IR: Allow metadata attachments on declarations, and fix lazy loaded metadata issue with globals. 2016-06-21 23:42:48 +00:00
PassManagerTest.cpp [PM] Run clang-format over various parts of the new pass manager code 2016-06-17 07:15:29 +00:00
PatternMatch.cpp Remove PreserveNames template parameter from IRBuilder 2016-03-13 21:05:13 +00:00
TypeBuilderTest.cpp [NFC] Header cleanup 2016-04-18 09:17:29 +00:00
TypesTest.cpp Fix several accidental DOS line endings in source files 2016-01-03 17:22:03 +00:00
UserTest.cpp Remove every uses of getGlobalContext() in LLVM (but the C API) 2016-04-14 21:59:01 +00:00
UseTest.cpp Format: Modernize using variadic templates. 2015-02-15 22:15:41 +00:00
ValueHandleTest.cpp Remove every uses of getGlobalContext() in LLVM (but the C API) 2016-04-14 21:59:01 +00:00
ValueMapTest.cpp Remove every uses of getGlobalContext() in LLVM (but the C API) 2016-04-14 21:59:01 +00:00
ValueTest.cpp Remove every uses of getGlobalContext() in LLVM (but the C API) 2016-04-14 21:59:01 +00:00
VerifierTest.cpp Port the strip-invalid-debuginfo logic to the legacy verifier pass, too. 2016-05-25 21:33:20 +00:00
WaymarkTest.cpp Remove every uses of getGlobalContext() in LLVM (but the C API) 2016-04-14 21:59:01 +00:00