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