summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Linker/LinkModules.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Capitalize messages so that they appear nicely with the linker's error messages.Bill Wendling2012-02-141-9/+9
| | | | llvm-svn: 150466
* [WIP] Initial code for module flags.Bill Wendling2012-02-111-5/+186
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Module flags are key-value pairs associated with the module. They include a 'behavior' value, indicating how module flags react when mergine two files. Normally, it's just the union of the two module flags. But if two module flags have the same key, then the resulting flags are dictated by the behaviors. Allowable behaviors are: Error Emits an error if two values disagree. Warning Emits a warning if two values disagree. Require Emits an error when the specified value is not present or doesn't have the specified value. It is an error for two (or more) llvm.module.flags with the same ID to have the Require behavior but different values. There may be multiple Require flags per ID. Override Uses the specified value if the two values disagree. It is an error for two (or more) llvm.module.flags with the same ID to have the Override behavior but different values. llvm-svn: 150300
* Convert assert(0) to llvm_unreachableCraig Topper2012-02-071-1/+1
| | | | llvm-svn: 149967
* use Constant::getAggregateElement to simplify a bunch of code.Chris Lattner2012-01-251-15/+4
| | | | llvm-svn: 148934
* add more support for ConstantDataSequentialChris Lattner2012-01-241-18/+21
| | | | llvm-svn: 148802
* Link symbols with different visibilities according to the rules in theRafael Espindola2012-01-051-24/+54
| | | | | | | | System V Application Binary Interface. This lets us use -fvisibility-inlines-hidden with LTO. Fixes PR11697. llvm-svn: 147624
* When not destroying the source, the linker is not remapping the types. Added ↵Mon P Wang2011-12-231-1/+1
| | | | | | | | support to CloneFunctionInto to allow remapping for this case. llvm-svn: 147217
* Fix a nasty bug in the type remapping stuff that I added that is breaking ↵Chris Lattner2011-12-201-1/+8
| | | | | | | | | | | | | | | | kc++ on the build bot in some cases. The basic issue happens when a source module contains both a "%foo" type and a "%foo.42" type. It will see the later one, check to see if the destination module contains a "%foo" type, and it will return true... because both the source and destination modules are in the same LLVMContext. We don't want to map source types to other source types, so don't do the remapping if the mapped type came from the source module. Unfortunately, I've been unable to reduce a decent testcase for this, kc++ is pretty great that way. llvm-svn: 147010
* Now that PR11464 is fixed, reapply the patch to fix PR11464, Chris Lattner2011-12-201-0/+25
| | | | | | | | merging types by name when we can. We still don't guarantee type name linkage but we do it when obviously the right thing to do. This makes LTO type names easier to read, for example. llvm-svn: 146932
* fix PR11464 by preventing the linker from mapping two different struct types ↵Chris Lattner2011-12-201-12/+27
| | | | | | from the source module onto the same opaque destination type. An opaque type can only be resolved to one thing or another after all. llvm-svn: 146929
* Revert 146728 as it's causing failures on some of the external bots as well as Chad Rosier2011-12-171-25/+0
| | | | | | | | | | | internal nightly testers. Original commit message: By popular demand, link up types by name if they are isomorphic and one is an autorenamed version of the other. This makes the IR easier to read, because we don't end up with random renamed versions of the types after LTO'ing a large app. llvm-svn: 146838
* By popular demand, link up types by name if they are isomorphic and one is anChris Lattner2011-12-161-0/+25
| | | | | | | autorenamed version of the other. This makes the IR easier to read, because we don't end up with random renamed versions of the types after LTO'ing a large app. llvm-svn: 146728
* Add support to the linker to lazily link in functions. This change only ↵Tanya Lattner2011-11-021-0/+58
| | | | | | links functions marked with specific linkage (internal, private, linker_private, linker_private_weak, linker_private_weak_def_auto, linkonce, linkonce_odr, and available_externally) if they have uses in the destination module. Instead of automatically linking, these functions are placed onto a worklist to be processed in the final stage of linking. We iterate over the list and if any functions on the list have uses in the destination module, we link them in and repeat the process until no changes in the state (uses) has changed. This means that any functions in the LazilyLink worklist that have a use in the destination module will be linked in and none that don't. llvm-svn: 143524
* Teach ModuleLinker::getLinkageResult about materialisable functionsPeter Collingbourne2011-10-301-1/+1
| | | | llvm-svn: 143316
* Allow the source module to be materialized during the linking process.Tanya Lattner2011-10-141-2/+11
| | | | llvm-svn: 142010
* Make it possible to use the linker without destroying the source module. ↵Tanya Lattner2011-10-111-30/+55
| | | | | | | | | | | | | | This is so the source module can be linked to multiple other destination modules. For all that used LinkModules() before, they will continue to destroy the source module as before. This line, and those below, will be ignored-- M include/llvm/Linker.h M tools/bugpoint/Miscompilation.cpp M tools/bugpoint/BugDriver.cpp M tools/llvm-link/llvm-link.cpp M lib/Linker/LinkModules.cpp llvm-svn: 141606
* switch to the new struct api.Chris Lattner2011-08-121-3/+3
| | | | llvm-svn: 137482
* Linke NamedMDNodes after linking global values as comment suggests.Devang Patel2011-08-041-5/+5
| | | | llvm-svn: 136909
* Migrate LLVM and Clang to use the new makeArrayRef(...) functions where ↵Frits van Bommel2011-07-181-1/+1
| | | | | | | | previously explicit non-default constructors were used. Mostly mechanical with some manual reformatting. llvm-svn: 135390
* Link NamedMDNode before linking function bodies.Devang Patel2011-07-141-5/+5
| | | | llvm-svn: 135204
* simplify this logic now that GlobalAlias::isDeclaration is fixed.Chris Lattner2011-07-141-4/+2
| | | | llvm-svn: 135183
* Land the long talked about "type system rewrite" patch. ThisChris Lattner2011-07-091-1074/+742
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | patch brings numerous advantages to LLVM. One way to look at it is through diffstat: 109 files changed, 3005 insertions(+), 5906 deletions(-) Removing almost 3K lines of code is a good thing. Other advantages include: 1. Value::getType() is a simple load that can be CSE'd, not a mutating union-find operation. 2. Types a uniqued and never move once created, defining away PATypeHolder. 3. Structs can be "named" now, and their name is part of the identity that uniques them. This means that the compiler doesn't merge them structurally which makes the IR much less confusing. 4. Now that there is no way to get a cycle in a type graph without a named struct type, "upreferences" go away. 5. Type refinement is completely gone, which should make LTO much MUCH faster in some common cases with C++ code. 6. Types are now generally immutable, so we can use "Type *" instead "const Type *" everywhere. Downsides of this patch are that it removes some functions from the C API, so people using those will have to upgrade to (not yet added) new API. "LLVM 3.0" is the right time to do this. There are still some cleanups pending after this, this patch is large enough as-is. llvm-svn: 134829
* Set the unnamed_addr only when we're creating a new GV in the dest module.Bill Wendling2011-03-291-0/+1
| | | | llvm-svn: 128507
* Revert r128501. It caused test failures.Bill Wendling2011-03-291-1/+0
| | | | llvm-svn: 128506
* We need to copy over the unnamed_addr attribute.Bill Wendling2011-03-291-0/+1
| | | | llvm-svn: 128501
* Correctly merge available_externally and regular definitions when they haveRafael Espindola2011-02-011-2/+4
| | | | | | different visibilities. llvm-svn: 124650
* Allow unnamed_addr on declarations.Rafael Espindola2011-01-151-3/+7
| | | | llvm-svn: 123529
* Keep unnamed_addr when linking.Rafael Espindola2011-01-131-0/+2
| | | | llvm-svn: 123364
* Revamp the ValueMapper interfaces in a couple ways:Chris Lattner2011-01-081-29/+6
| | | | | | | | | | | | | | | | 1. Take a flags argument instead of a bool. This makes it more clear to the reader what it is used for. 2. Add a flag that says that "remapping a value not in the map is ok". 3. Reimplement MapValue to share a bunch of code and be a lot more efficient. For lookup failures, don't drop null values into the map. 4. Using the new flag a bunch of code can vaporize in LinkModules and LoopUnswitch, kill it. No functionality change. llvm-svn: 123058
* include the module identifier when emitting this warning, PR8865.Chris Lattner2010-12-301-4/+7
| | | | llvm-svn: 122637
* print the right string, thanks for Frits for noticing.Chris Lattner2010-12-301-1/+1
| | | | llvm-svn: 122636
* improve warning message to at least say what the triples are.Chris Lattner2010-12-291-1/+3
| | | | llvm-svn: 122632
* Fix whitespace.Michael J. Spencer2010-12-181-8/+8
| | | | llvm-svn: 122158
* Support/PathV1: Deprecate get{Basename,Dirname,Suffix}.Michael J. Spencer2010-12-181-4/+3
| | | | llvm-svn: 122157
* Revert r122143 through r122140, which collectively broke the LLVMC tests onOwen Anderson2010-12-181-11/+12
| | | | | | the buildbots. llvm-svn: 122149
* Fix whitespace.Michael J. Spencer2010-12-181-8/+8
| | | | llvm-svn: 122142
* Support/PathV1: Deprecate get{Basename,Dirname,Suffix}.Michael J. Spencer2010-12-181-4/+3
| | | | llvm-svn: 122141
* Merge System into Support.Michael J. Spencer2010-11-291-1/+1
| | | | llvm-svn: 120298
* Fix PR8300 by remembering to keep the bitcast in all cases.Rafael Espindola2010-10-191-9/+10
| | | | llvm-svn: 116788
* Revert "RequiresUnique" patch. This should be handled at a lower level.Bill Wendling2010-10-061-37/+7
| | | | llvm-svn: 115827
* Change RequiresMerge to RequiresUnique. It's a better description of what thisBill Wendling2010-10-061-7/+8
| | | | | | | | fix is trying to accomplish. This code could still use some polishing. llvm-svn: 115759
* If the destination module all ready has a copy of the global coming from theBill Wendling2010-10-061-7/+36
| | | | | | | | | | | | | source module *and* it must be merged (instead of simply replaced or appended to), then merge instead of replacing or adding another global. The ObjC __image_info section was being appended to because of this failure. This caused a crash because the linker expects the image info section to be a specific size. <rdar://problem/8198537> llvm-svn: 115753
* dead code patrolChris Lattner2010-09-011-9/+0
| | | | llvm-svn: 112713
* Reapply r112091 and r111922, support for metadata linking, with aDan Gohman2010-08-261-4/+23
| | | | | | | | | | | | | | fix: add a flag to MapValue and friends which indicates whether any module-level mappings are being made. In the common case of inlining, no module-level mappings are needed, so MapValue doesn't need to examine non-function-local metadata, which can be very expensive in the case of a large module with really deep metadata (e.g. a large C++ program compiled with -g). This flag is a little awkward; perhaps eventually it can be moved into the ClonedCodeInfo class. llvm-svn: 112190
* Revert r112091, "Remap metadata attached to instructions when remappingDaniel Dunbar2010-08-261-19/+1
| | | | | | individual ...", which depends on r111922, which I am reverting. llvm-svn: 112157
* Remap metadata attached to instructions when remapping individualDan Gohman2010-08-251-1/+19
| | | | | | instructions, not when remapping modules. llvm-svn: 112091
* - Add the LinkerPrivateWeakDefAutoLinkage to the Ada bindings.Bill Wendling2010-08-241-0/+6
| | | | | | - Support the LinkerWeak*Linkage types in llvm-nm and in LinkModules.cpp. llvm-svn: 111952
* Link NamedMDNodes after linking GlobalValues, so that MDNodesDan Gohman2010-08-241-3/+5
| | | | | | which reference GlobalValues are properly remapped. llvm-svn: 111949
* When linking NamedMDNodes, remap their operands.Dan Gohman2010-08-241-3/+5
| | | | llvm-svn: 111948
* Use MapValue in the Linker instead of having a private functionDan Gohman2010-08-241-104/+16
| | | | | | | | which does the same thing. This eliminates redundant code and handles MDNodes better. MDNode linking still doesn't fully work yet though. llvm-svn: 111941
OpenPOWER on IntegriCloud