diff options
Diffstat (limited to 'test/Linker')
-rw-r--r-- | test/Linker/2003-01-30-LinkerRename.ll | 2 | ||||
-rw-r--r-- | test/Linker/2003-01-30-LinkerTypeRename.ll | 3 | ||||
-rw-r--r-- | test/Linker/2003-05-31-LinkerRename.ll | 2 | ||||
-rw-r--r-- | test/Linker/2003-08-23-GlobalVarLinking.ll | 2 | ||||
-rw-r--r-- | test/Linker/2003-08-23-RecursiveOpaqueTypeResolve.ll | 3 | ||||
-rw-r--r-- | test/Linker/2003-08-28-TypeResolvesGlobal.ll | 2 | ||||
-rw-r--r-- | test/Linker/2003-10-21-ConflictingTypesTolerance.ll | 6 | ||||
-rw-r--r-- | test/Linker/inlineasm.ll | 17 | ||||
-rw-r--r-- | test/Linker/testlink1.ll | 99 | ||||
-rw-r--r-- | test/Linker/testlink2.ll | 48 | ||||
-rw-r--r-- | test/Linker/unnamed-addr1-a.ll | 6 |
11 files changed, 135 insertions, 55 deletions
diff --git a/test/Linker/2003-01-30-LinkerRename.ll b/test/Linker/2003-01-30-LinkerRename.ll index af0e643..cc34634 100644 --- a/test/Linker/2003-01-30-LinkerRename.ll +++ b/test/Linker/2003-01-30-LinkerRename.ll @@ -3,7 +3,7 @@ ; RUN: echo {define internal i32 @foo() \{ ret i32 7 \} } | llvm-as > %t.1.bc ; RUN: llvm-as %s -o %t.2.bc -; RUN: llvm-link %t.1.bc %t.2.bc -S | grep @foo() | grep -v internal +; RUN: llvm-link %t.1.bc %t.2.bc -S | grep {@foo()} | grep -v internal define i32 @foo() { ret i32 0 } diff --git a/test/Linker/2003-01-30-LinkerTypeRename.ll b/test/Linker/2003-01-30-LinkerTypeRename.ll index 67a0626..6cd2406 100644 --- a/test/Linker/2003-01-30-LinkerTypeRename.ll +++ b/test/Linker/2003-01-30-LinkerTypeRename.ll @@ -5,5 +5,6 @@ ; RUN: llvm-as < %s > %t.2.bc ; RUN: llvm-link %t.1.bc %t.2.bc -S | grep {%Ty } | not grep opaque -%Ty = type i32 +%Ty = type {i32} +@GV = global %Ty* null
\ No newline at end of file diff --git a/test/Linker/2003-05-31-LinkerRename.ll b/test/Linker/2003-05-31-LinkerRename.ll index 498fc14..80e0a69 100644 --- a/test/Linker/2003-05-31-LinkerRename.ll +++ b/test/Linker/2003-05-31-LinkerRename.ll @@ -6,7 +6,7 @@ ; RUN: echo { define internal i32 @foo() \{ ret i32 7 \} } | llvm-as > %t.1.bc ; RUN: llvm-as < %s > %t.2.bc -; RUN: llvm-link %t.1.bc %t.2.bc -S | grep internal | not grep @foo( +; RUN: llvm-link %t.1.bc %t.2.bc -S | grep internal | not grep {@foo(} declare i32 @foo() diff --git a/test/Linker/2003-08-23-GlobalVarLinking.ll b/test/Linker/2003-08-23-GlobalVarLinking.ll index c3f61f8..8acbbd2 100644 --- a/test/Linker/2003-08-23-GlobalVarLinking.ll +++ b/test/Linker/2003-08-23-GlobalVarLinking.ll @@ -1,5 +1,5 @@ ; RUN: llvm-as < %s > %t.out1.bc -; RUN: echo {@S = external global \{ i32, opaque* \} declare void @F(opaque*)}\ +; RUN: echo {%T1 = type opaque %T2 = type opaque @S = external global \{ i32, %T1* \} declare void @F(%T2*)}\ ; RUN: | llvm-as > %t.out2.bc ; RUN: llvm-link %t.out1.bc %t.out2.bc -S | not grep opaque diff --git a/test/Linker/2003-08-23-RecursiveOpaqueTypeResolve.ll b/test/Linker/2003-08-23-RecursiveOpaqueTypeResolve.ll index ea82075..d810dba 100644 --- a/test/Linker/2003-08-23-RecursiveOpaqueTypeResolve.ll +++ b/test/Linker/2003-08-23-RecursiveOpaqueTypeResolve.ll @@ -5,5 +5,6 @@ ; RUN: echo "%M = type { %M*, i32* }" | llvm-as > %t.out2.bc ; RUN: llvm-link %t.out1.bc %t.out2.bc -%M = type { %M*, opaque* } +%T1 = type opaque +%M = type { %M*, %T1* } diff --git a/test/Linker/2003-08-28-TypeResolvesGlobal.ll b/test/Linker/2003-08-28-TypeResolvesGlobal.ll index 80b6162..53ae581 100644 --- a/test/Linker/2003-08-28-TypeResolvesGlobal.ll +++ b/test/Linker/2003-08-28-TypeResolvesGlobal.ll @@ -1,5 +1,5 @@ ; RUN: llvm-as < %s > %t.out1.bc -; RUN: echo "%M = type i32" | llvm-as > %t.out2.bc +; RUN: echo "%M = type { i32} " | llvm-as > %t.out2.bc ; RUN: llvm-link %t.out2.bc %t.out1.bc %M = type opaque diff --git a/test/Linker/2003-10-21-ConflictingTypesTolerance.ll b/test/Linker/2003-10-21-ConflictingTypesTolerance.ll deleted file mode 100644 index 7cdf7ad..0000000 --- a/test/Linker/2003-10-21-ConflictingTypesTolerance.ll +++ /dev/null @@ -1,6 +0,0 @@ -; RUN: llvm-as < %s > %t.out1.bc -; RUN: echo { %M = type \[8 x i32\] external global %M } | llvm-as > %t.out2.bc -; RUN: llvm-link %t.out1.bc %t.out2.bc -S | grep %M | grep \\{ -%M = type { i32 } - - diff --git a/test/Linker/inlineasm.ll b/test/Linker/inlineasm.ll new file mode 100644 index 0000000..d77f3a7 --- /dev/null +++ b/test/Linker/inlineasm.ll @@ -0,0 +1,17 @@ +; RUN: echo > %t.ll +; RUN: llvm-link %t.ll %s -S + +; ModuleID = 'bitfield-access-2.o' +target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128-n8:16:32" +target triple = "i386-apple-macosx10.6.8" + +; rdar://9776316 - type remapping needed for inline asm blobs. + +%T = type { [18 x i32], [4 x i8*] } + +define void @f(%T* %x) nounwind ssp { +entry: +call void asm sideeffect "", "=*m"(%T* %x) nounwind +unreachable +} + diff --git a/test/Linker/testlink1.ll b/test/Linker/testlink1.ll index 4a94025..a874637 100644 --- a/test/Linker/testlink1.ll +++ b/test/Linker/testlink1.ll @@ -1,42 +1,95 @@ ; RUN: llvm-as < %s > %t.bc ; RUN: llvm-as < %p/testlink2.ll > %t2.bc -; RUN: llvm-link %t.bc %t2.bc +; RUN: llvm-link %t.bc %t2.bc -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]}} + +%Struct1 = type opaque +@S1GV = external global %Struct1* + + +@GVTy1 = external global %Ty1* +@GVTy2 = global %Ty2* null + + +; This should stay the same +; CHECK: @MyIntList = global %intlist { %intlist* null, i32 17 } +@MyIntList = global %intlist { %intlist* null, i32 17 } + + +; Nothing to link here. + +; CHECK: @0 = external global i32 +@0 = external global i32 +; CHECK: @Inte = global i32 1 +@Inte = global i32 1 + +; Intern1 is intern in both files, rename testlink2's. +; CHECK: @Intern1 = internal constant i32 42 +@Intern1 = internal constant i32 42 + +; This should get renamed since there is a definition that is non-internal in +; the other module. +; CHECK: @Intern2{{[0-9]+}} = internal constant i32 792 +@Intern2 = internal constant i32 792 + + +; CHECK: @MyVarPtr = linkonce global { i32* } { i32* @MyVar } +@MyVarPtr = linkonce global { i32* } { i32* @MyVar } + +; CHECK: @MyVar = global i32 4 +@MyVar = external global i32 + +; Take value from other module. +; CHECK: AConst = constant i32 1234 +@AConst = linkonce constant i32 123 + +; Renamed version of Intern1. +; CHECK: @Intern1{{[0-9]+}} = internal constant i32 52 + + +; Globals linked from testlink2. +; CHECK: @Intern2 = constant i32 12345 + +; CHECK: @MyIntListPtr = constant +; CHECK: @1 = constant i32 412 -@MyVar = external global i32 ; <i32*> [#uses=3] -@MyIntList = global { \2*, i32 } { { \2*, i32 }* null, i32 17 } ; <{ \2*, i32 }*> [#uses=1] -external global i32 ; <i32*>:0 [#uses=0] -@Inte = global i32 1 ; <i32*> [#uses=0] -@AConst = linkonce constant i32 123 ; <i32*> [#uses=0] -@Intern1 = internal constant i32 42 ; <i32*> [#uses=0] -@Intern2 = internal constant i32 792 ; <i32*> [#uses=0] -@MyVarPtr = linkonce global { i32* } { i32* @MyVar } ; <{ i32* }*> [#uses=0] declare i32 @foo(i32) declare void @print(i32) define void @main() { - %v1 = load i32* @MyVar ; <i32> [#uses=1] - call void @print( i32 %v1 ) - %idx = getelementptr { \2*, i32 }* @MyIntList, i64 0, i32 1 ; <i32*> [#uses=2] - %v2 = load i32* %idx ; <i32> [#uses=1] - call void @print( i32 %v2 ) - call i32 @foo( i32 5 ) ; <i32>:1 [#uses=0] - %v3 = load i32* @MyVar ; <i32> [#uses=1] - call void @print( i32 %v3 ) - %v4 = load i32* %idx ; <i32> [#uses=1] - call void @print( i32 %v4 ) - ret void + %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 + ret void } define internal void @Testintern() { - ret void + ret void } define void @testIntern() { - ret void + ret void } diff --git a/test/Linker/testlink2.ll b/test/Linker/testlink2.ll index d243e3c..1798e31 100644 --- a/test/Linker/testlink2.ll +++ b/test/Linker/testlink2.ll @@ -2,40 +2,54 @@ ; ; RUN: true -@MyVar = global i32 4 ; <i32*> [#uses=2] -@MyIntList = external global { \2*, i32 } ; <{ \2*, i32 }*> [#uses=2] -@AConst = constant i32 123 ; <i32*> [#uses=0] +%intlist = type { %intlist*, i32 } + + +%Ty1 = type { %Ty2* } +%Ty2 = type opaque + +@GVTy1 = global %Ty1* null +@GVTy2 = external global %Ty2* + + +@MyVar = global i32 4 +@MyIntList = external global %intlist +@AConst = constant i32 1234 ;; Intern in both testlink[12].ll -@Intern1 = internal constant i32 52 ; <i32*> [#uses=0] +@Intern1 = internal constant i32 52 ;; Intern in one but not in other -@Intern2 = constant i32 12345 ; <i32*> [#uses=0] +@Intern2 = constant i32 12345 + +@MyIntListPtr = constant { %intlist* } { %intlist* @MyIntList } +@MyVarPtr = linkonce global { i32* } { i32* @MyVar } +@0 = constant i32 412 -@MyIntListPtr = constant { { \2*, i32 }* } { { \2*, i32 }* @MyIntList } ; <{ { \2*, i32 }* }*> [#uses=0] -@MyVarPtr = linkonce global { i32* } { i32* @MyVar } ; <{ i32* }*> [#uses=0] -constant i32 412 ; <i32*>:0 [#uses=1] +; Provides definition of Struct1 and of S1GV. +%Struct1 = type { i32 } +@S1GV = global %Struct1* null define i32 @foo(i32 %blah) { - store i32 %blah, i32* @MyVar - %idx = getelementptr { \2*, i32 }* @MyIntList, i64 0, i32 1 ; <i32*> [#uses=1] - store i32 12, i32* %idx - %ack = load i32* @0 ; <i32> [#uses=1] - %fzo = add i32 %ack, %blah ; <i32> [#uses=1] - ret i32 %fzo + store i32 %blah, i32* @MyVar + %idx = getelementptr %intlist* @MyIntList, i64 0, i32 1 + store i32 12, i32* %idx + %ack = load i32* @0 + %fzo = add i32 %ack, %blah + ret i32 %fzo } declare void @unimp(float, double) define internal void @testintern() { - ret void + ret void } define void @Testintern() { - ret void + ret void } define internal void @testIntern() { - ret void + ret void } diff --git a/test/Linker/unnamed-addr1-a.ll b/test/Linker/unnamed-addr1-a.ll index 1ddac9c..e9c03ee 100644 --- a/test/Linker/unnamed-addr1-a.ll +++ b/test/Linker/unnamed-addr1-a.ll @@ -10,15 +10,15 @@ @c = common unnamed_addr global i32 0 ; CHECK: @c = common unnamed_addr global i32 0 @d = external global i32 -; CHECK: @d = global i32 42 +; CHECK: @d = unnamed_addr global i32 42 @e = external unnamed_addr global i32 ; CHECK: @e = unnamed_addr global i32 42 @f = weak global i32 42 -; CHECK: @f = global i32 42 +; CHECK: @f = unnamed_addr global i32 42 ; Other file has non-unnamed_addr definition @g = common unnamed_addr global i32 0 -; CHECK: @g = common global i32 0 +; CHECK: @g = common unnamed_addr global i32 0 @h = external global i32 ; CHECK: @h = global i32 42 @i = external unnamed_addr global i32 |