diff options
author | Stephen Hines <srhines@google.com> | 2015-03-23 12:10:34 -0700 |
---|---|---|
committer | Stephen Hines <srhines@google.com> | 2015-03-23 12:10:34 -0700 |
commit | ebe69fe11e48d322045d5949c83283927a0d790b (patch) | |
tree | c92f1907a6b8006628a4b01615f38264d29834ea /test/Linker/testlink.ll | |
parent | b7d2e72b02a4cb8034f32f8247a2558d2434e121 (diff) | |
download | external_llvm-ebe69fe11e48d322045d5949c83283927a0d790b.zip external_llvm-ebe69fe11e48d322045d5949c83283927a0d790b.tar.gz external_llvm-ebe69fe11e48d322045d5949c83283927a0d790b.tar.bz2 |
Update aosp/master LLVM for rebase to r230699.
Change-Id: I2b5be30509658cb8266be782de0ab24f9099f9b9
Diffstat (limited to 'test/Linker/testlink.ll')
-rw-r--r-- | test/Linker/testlink.ll | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/test/Linker/testlink.ll b/test/Linker/testlink.ll new file mode 100644 index 0000000..aad4b9b --- /dev/null +++ b/test/Linker/testlink.ll @@ -0,0 +1,104 @@ +; RUN: llvm-link %s %S/Inputs/testlink.ll -S | FileCheck %s + +; CHECK: %Ty2 = type { %Ty1* } +; CHECK: %Ty1 = type { %Ty2* } +%Ty1 = type opaque +%Ty2 = type { %Ty1* } + +; CHECK: %intlist = type { %intlist*, i32 } +%intlist = type { %intlist*, i32 } + +; The uses of intlist in the other file should be remapped. +; CHECK-NOT: {{%intlist.[0-9]}} + +; CHECK: %VecSize = type { <5 x i32> } +; CHECK: %VecSize.{{[0-9]}} = type { <10 x i32> } +%VecSize = type { <5 x i32> } + +%Struct1 = type opaque +@S1GV = external global %Struct1* + + +@GVTy1 = external global %Ty1* +@GVTy2 = global %Ty2* null + + +; This should stay the same +; CHECK-DAG: @MyIntList = global %intlist { %intlist* null, i32 17 } +@MyIntList = global %intlist { %intlist* null, i32 17 } + + +; Nothing to link here. + +; CHECK-DAG: @0 = external global i32 +@0 = external global i32 +; CHECK-DAG: @Inte = global i32 1 +@Inte = global i32 1 + +; Intern1 is intern in both files, rename testlink2's. +; CHECK-DAG: @Intern1 = internal constant i32 42 +@Intern1 = internal constant i32 42 + +@UseIntern1 = global i32* @Intern1 + +; This should get renamed since there is a definition that is non-internal in +; the other module. +; CHECK-DAG: @Intern2{{[0-9]+}} = internal constant i32 792 +@Intern2 = internal constant i32 792 + +@UseIntern2 = global i32* @Intern2 + +; CHECK-DAG: @MyVarPtr = linkonce global { i32* } { i32* @MyVar } +@MyVarPtr = linkonce global { i32* } { i32* @MyVar } + +@UseMyVarPtr = global { i32* }* @MyVarPtr + +; CHECK-DAG: @MyVar = global i32 4 +@MyVar = external global i32 + +; Take value from other module. +; CHECK-DAG: AConst = constant i32 1234 +@AConst = linkonce constant i32 123 + +; Renamed version of Intern1. +; CHECK-DAG: @Intern1{{[0-9]+}} = internal constant i32 52 + + +; Globals linked from testlink2. +; CHECK-DAG: @Intern2 = constant i32 12345 + +; CHECK-DAG: @MyIntListPtr = constant +; CHECK-DAG: @1 = constant i32 412 + + +declare i32 @foo(i32) + +declare void @print(i32) + +define void @main() { + %v1 = load i32* @MyVar + call void @print(i32 %v1) + %idx = getelementptr %intlist* @MyIntList, i64 0, i32 1 + %v2 = load i32* %idx + call void @print(i32 %v2) + %1 = call i32 @foo(i32 5) + %v3 = load i32* @MyVar + call void @print(i32 %v3) + %v4 = load i32* %idx + call void @print(i32 %v4) + ret void +} + +define internal void @testintern() { + ret void +} + +define internal void @Testintern() { + ret void +} + +define void @testIntern() { + ret void +} + +declare void @VecSizeCrash(%VecSize) |