X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=test%2FLinker%2Ftestlink1.ll;h=6ba6fd5fd7e9575a502163ceb195f25ab7ef171a;hb=b55dcfe47fbbcfc1dccd07cb27c02b9a86533d05;hp=dd89d8b6960a890b2ecc210ed3f567d4cb92d232;hpb=fce9d7002db96bc94e0a47ddb3c2e823cd2da605;p=oota-llvm.git diff --git a/test/Linker/testlink1.ll b/test/Linker/testlink1.ll index dd89d8b6960..6ba6fd5fd7e 100644 --- a/test/Linker/testlink1.ll +++ b/test/Linker/testlink1.ll @@ -1,45 +1,101 @@ -; RUN: as < %s > Output/%s.bc -; RUN: as < testlink2.ll > Output/testlink2.bc -; RUN: link Output/%s.bc Output/testlink2.bc +; RUN: llvm-as < %s > %t.bc +; RUN: llvm-as < %p/testlink2.ll > %t2.bc +; RUN: llvm-link %t.bc %t2.bc -S | FileCheck %s -%MyVar = uninitialized global int -%MyIntList = global { \2 *, int } { { \2, int }* null, int 17 } - uninitialized global int ; int*:0 +; CHECK: %Ty2 = type { %Ty1* } +; CHECK: %Ty1 = type { %Ty2* } +%Ty1 = type opaque +%Ty2 = type { %Ty1* } -%AConst = constant int 123 +; CHECK: %intlist = type { %intlist*, i32 } +%intlist = type { %intlist*, i32 } -%Intern1 = internal constant int 42 -%Intern2 = internal constant int 792 +; The uses of intlist in the other file should be remapped. +; CHECK-NOT: {{%intlist.[0-9]}} -; Initialized to point to external %MyVar -%MyVarPtr = global { int * } { int * %MyVar } +; CHECK: %VecSize = type { <5 x i32> } +; CHECK: %VecSize.{{[0-9]}} = type { <10 x i32> } +%VecSize = type { <5 x i32> } -declare int "foo"(int %blah) ;; Declared in testlink2.ll +%Struct1 = type opaque +@S1GV = external global %Struct1* -declare void "print"(int %Value) -implementation +@GVTy1 = external global %Ty1* +@GVTy2 = global %Ty2* null -void "main"() -begin - %v1 = load int* %MyVar - call void %print(int %v1) ;; Should start out 4 - %v2 = load { \2 *, int }* %MyIntList, uint 0, ubyte 1 - call void %print(int %v2) ;; Should start out 17 +; This should stay the same +; CHECK: @MyIntList = global %intlist { %intlist* null, i32 17 } +@MyIntList = global %intlist { %intlist* null, i32 17 } - call int %foo(int 5) ;; Modify global variablesx - %v3 = load int* %MyVar - call void %print(int %v3) ;; Should now be 5 +; Nothing to link here. - %v4 = load { \2 *, int }* %MyIntList, uint 0, ubyte 1 - call void %print(int %v4) ;; Should start out 12 +; CHECK: @0 = external global i32 +@0 = external global i32 +; CHECK: @Inte = global i32 1 +@Inte = global i32 1 - ret void -end +; Intern1 is intern in both files, rename testlink2's. +; CHECK: @Intern1 = internal constant i32 42 +@Intern1 = internal constant i32 42 -internal void "testintern"() begin ret void end -internal void "Testintern"() begin ret void end - void "testIntern"() begin ret void end +; 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 + + +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)