llvm-6502/include/llvm/IR
Rafael Espindola eee41dbb65 Ask the module for its the identified types.
When lazy reading a module, the types used in a function will not be visible to
a TypeFinder until the body is read.

This patch fixes that by asking the module for its identified struct types.
If a materializer is present, the module asks it. If not, it uses a TypeFinder.

This fixes pr21374.

I will be the first to say that this is ugly, but it was the best I could find.

Some of the options I looked at:

* Asking the LLVMContext. This could be made to work for gold, but not currently
  for ld64. ld64 will load multiple modules into a single context before merging
  them. This causes us to see types from future merges. Unfortunately,
  MappedTypes is not just a cache when it comes to opaque types. Once the
  mapping has been made, we have to remember it for as long as the key may
  be used. This would mean moving MappedTypes to the Linker class and having
  to drop the Linker::LinkModules static methods, which are visible from C.

* Adding an option to ignore function bodies in the TypeFinder. This would
  fix the PR by picking the worst result. It would work, but unfortunately
  we are currently quite dependent on the upfront type merging. I will
  try to reduce our dependency, but it is not clear that we will be able
  to get rid of it for now.

The only clean solution I could think of is making the Module own the types.
This would have other advantages, but it is a much bigger change. I will
propose it, but it is nice to have this fixed while that is discussed.

With the gold plugin, this patch takes the number of types in the LTO clang
binary from 52817 to 49669.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@223215 91177308-0d34-0410-b5e6-96231b3b80d8
2014-12-03 07:18:23 +00:00
..
Argument.h
AssemblyAnnotationWriter.h
Attributes.h Revert accidentally committed r217107 2014-09-03 23:38:05 +00:00
AutoUpgrade.h
BasicBlock.h
CallingConv.h X86: Implement the vectorcall calling convention 2014-10-28 01:29:26 +00:00
CallSite.h
CFG.h
CMakeLists.txt
Comdat.h
Constant.h
ConstantFolder.h
ConstantRange.h
Constants.h Rename END_WITH_NULL to LLVM_END_WITH_NULL and move to Compiler.h 2014-11-04 01:12:21 +00:00
DataLayout.h AArch64: treat [N x Ty] as a block during procedure calls. 2014-11-27 21:02:42 +00:00
DebugInfo.h Debug Info: revert r222195, r222210 and r222239. 2014-11-21 19:55:23 +00:00
DebugLoc.h
DerivedTypes.h Add params() to FunctionType. NFC. 2014-11-21 19:03:35 +00:00
DiagnosticInfo.h Update the error handling of lib/Linker. 2014-10-25 04:06:10 +00:00
DiagnosticPrinter.h
DIBuilder.h DIBuilder: Use Constant instead of Value 2014-11-15 00:23:49 +00:00
Dominators.h
Function.h Prologue support 2014-12-03 02:08:38 +00:00
GetElementPtrTypeIterator.h
GlobalAlias.h
GlobalObject.h Fix broken C++ mode comment 2014-11-05 01:36:22 +00:00
GlobalValue.h Modernize the error handling of the Materialize function. 2014-10-24 22:50:48 +00:00
GlobalVariable.h
GVMaterializer.h Ask the module for its the identified types. 2014-12-03 07:18:23 +00:00
InlineAsm.h
InstIterator.h
InstrTypes.h Revert r220349 to re-instate r220277 with a fix for PR21330 -- quite 2014-11-25 08:20:27 +00:00
Instruction.def
Instruction.h Revert "IR: MDNode => Value" 2014-11-11 21:30:22 +00:00
Instructions.h Update comment on AtomicRMWInst::Nand 2014-09-22 06:47:10 +00:00
InstVisitor.h
IntrinsicInst.h Move the complex address expression out of DIVariable and into an extra 2014-10-01 18:55:02 +00:00
Intrinsics.h Revert "Masked Vector Load and Store Intrinsics." 2014-11-28 21:29:14 +00:00
Intrinsics.td [Statepoints 1/4] Statepoint infrastructure for garbage collection: IR Intrinsics 2014-12-01 21:18:12 +00:00
IntrinsicsAArch64.td
IntrinsicsARM.td ARM: add @llvm.arm.space intrinsic for testing ConstantIslands. 2014-11-13 17:58:48 +00:00
IntrinsicsHexagon.td
IntrinsicsMips.td
IntrinsicsNVVM.td
IntrinsicsPowerPC.td [PowerPC] Add VSX builtins for vec_div 2014-11-14 12:10:40 +00:00
IntrinsicsR600.td R600/SI: Add missing parameter to div_fmas intrinsic 2014-10-21 22:20:55 +00:00
IntrinsicsX86.td [AVX512] Add 512b integer shift by variable intrinsics and patterns. 2014-11-25 20:41:51 +00:00
IntrinsicsXCore.td
IRBuilder.h Revert "Masked Vector Load and Store Intrinsics." 2014-11-28 21:29:14 +00:00
IRPrintingPasses.h
LeakDetector.h
LegacyPassManager.h
LegacyPassManagers.h FunctionPassManager isn't used by the JIT anymore, it is used in 2014-09-10 10:48:06 +00:00
LegacyPassNameParser.h
LLVMContext.h Introduce enum values for previously defined metadata types. (NFC) 2014-10-21 00:13:20 +00:00
Mangler.h
MDBuilder.h
Metadata.h IR: Sink MDNode::Hash down to GenericMDNode::Hash 2014-11-18 02:20:29 +00:00
Module.h Ask the module for its the identified types. 2014-12-03 07:18:23 +00:00
NoFolder.h
OperandTraits.h
Operator.h InstCombine: Don't assume that m_ZExt matches an Instruction 2014-11-01 23:46:05 +00:00
PassManager.h
PatternMatch.h Unbreak the build. 2014-10-25 18:20:17 +00:00
PredIteratorCache.h
Statepoint.h GCRelocateOperands: Try to appease msc17. 2014-12-03 02:40:24 +00:00
SymbolTableListTraits.h
Type.h Add and use Type::subtypes. NFC. 2014-11-24 20:44:36 +00:00
TypeBuilder.h
TypeFinder.h
Use.h
UseListOrder.h
User.h IR: Move NumOperands from User to Value, NFC 2014-10-15 20:39:05 +00:00
Value.h [InstCombine] Re-commit of r218721 (Optimize icmp-select-icmp sequence) 2014-11-21 23:36:44 +00:00
ValueHandle.h IR: Cleanup comments for Value, User, and MDNode 2014-10-15 20:28:31 +00:00
ValueMap.h
ValueSymbolTable.h
Verifier.h