diff options
author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-04-22 04:11:00 +0000 |
---|---|---|
committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-04-22 04:11:00 +0000 |
commit | fae374b95efd9f07a7bcb9fae374c10b02b9283d (patch) | |
tree | 5643343e503dddcf70a7d2c2b1490653f13b52b5 /test/Linker/override-with-internal-linkage-2.ll | |
parent | d9443d717dbb3ec01ae8441dd70c2a077a7b5c09 (diff) |
Linker: Add flag to override linkage rules
Add a flag to lib/Linker (and `llvm-link`) to override linkage rules.
When set, the functions in the source module *always* replace those in
the destination module.
The `llvm-link` option is `-override=abc.ll`. All the "regular" modules
are loaded and linked first, followed by the `-override` modules. This
is useful for debugging workflows where some subset of the module (e.g.,
a single function) is extracted into a separate file where it's
optimized differently, before being merged back in.
Patch by Luqman Aden!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235473 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Linker/override-with-internal-linkage-2.ll')
-rw-r--r-- | test/Linker/override-with-internal-linkage-2.ll | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/test/Linker/override-with-internal-linkage-2.ll b/test/Linker/override-with-internal-linkage-2.ll new file mode 100644 index 00000000000..2de52a925b2 --- /dev/null +++ b/test/Linker/override-with-internal-linkage-2.ll @@ -0,0 +1,23 @@ +; RUN: llvm-link %s -override %S/Inputs/override-with-internal-linkage-2.ll -S | FileCheck %s +; RUN: llvm-link -override %S/Inputs/override-with-internal-linkage-2.ll %s -S | FileCheck %s + +; CHECK-LABEL: define i32 @foo +; CHECK-NEXT: entry: +; CHECK-NEXT: %add = add nsw i32 %i, %i +; CHECK-NEXT: ret i32 %add +define i32 @foo(i32 %i) { +entry: + %add = add nsw i32 %i, %i + ret i32 %add +} + +; CHECK-LABEL: define internal i32 @foo1 +; CHECK-NEXT: entry: +; CHECK-NEXT: ret i32 4 + +; Function Attrs: nounwind ssp uwtable +define i32 @main(i32 %argc, i8** %argv) { +entry: + %a = call i32 @foo(i32 2) + ret i32 %a +} |