X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=test%2FBitcode%2Fuse-list-order.ll;h=09ec44897e739d588b2137e38aea6c63c2bb4302;hb=0021a54ae5f3f96db589870c0932f5488abb457c;hp=33cc13edb05ab7675a81a4e779199c125feffea1;hpb=cd29d802047b018f77ebbd0cdadfa41911036cdf;p=oota-llvm.git diff --git a/test/Bitcode/use-list-order.ll b/test/Bitcode/use-list-order.ll index 33cc13edb05..09ec44897e7 100644 --- a/test/Bitcode/use-list-order.ll +++ b/test/Bitcode/use-list-order.ll @@ -1,7 +1,7 @@ -; RUN: llvm-uselistorder < %s -preserve-bc-use-list-order -num-shuffles=5 +; RUN: verify-uselistorder < %s @a = global [4 x i1] [i1 0, i1 1, i1 0, i1 1] -@b = alias i1* getelementptr ([4 x i1]* @a, i64 0, i64 2) +@b = alias i1* getelementptr ([4 x i1], [4 x i1]* @a, i64 0, i64 2) ; Check use-list order of constants used by globals. @glob1 = global i5 7 @@ -17,6 +17,24 @@ @var2 = global i3* @target @var3 = global i3* @target +; Check use-list order for a global when used both by a global and in a +; function. +@globalAndFunction = global i4 4 +@globalAndFunctionGlobalUser = global i4* @globalAndFunction + +; Check use-list order for constants used by globals that are themselves used +; as aliases. This confirms that this globals are recognized as GlobalValues +; (not general constants). +@const.global = global i63 0 +@const.global.ptr = global i63* @const.global +@const.global.2 = global i63 0 + +; Same as above, but for aliases. +@const.target = global i62 1 +@const.alias = alias i62* @const.target +@const.alias.ptr = alias i62* @const.alias +@const.alias.2 = alias i62* @const.target + define i64 @f(i64 %f) { entry: %sum = add i64 %f, 0 @@ -61,13 +79,13 @@ entry: define i1 @loadb() { entry: - %b = load i1* @b + %b = load i1, i1* @b ret i1 %b } define i1 @loada() { entry: - %a = load i1* getelementptr ([4 x i1]* @a, i64 0, i64 2) + %a = load i1, i1* getelementptr ([4 x i1], [4 x i1]* @a, i64 0, i64 2) ret i1 %a } @@ -94,3 +112,57 @@ first: %gotosecond = icmp slt i32 %gh, -9 br i1 %gotosecond, label %second, label %exit } + +define i4 @globalAndFunctionFunctionUser() { +entry: + %local = load i4, i4* @globalAndFunction + ret i4 %local +} + +; Check for when an instruction is its own user. +define void @selfUser(i1 %a) { +entry: + ret void + +loop1: + br label %loop2 + +loop2: + %var = phi i32 [ %var, %loop1 ], [ %var, %loop2 ] + br label %loop2 +} + +; Check that block addresses work. +@ba1 = constant i8* blockaddress (@bafunc1, %bb) +@ba2 = constant i8* getelementptr (i8, i8* blockaddress (@bafunc2, %bb), i61 0) +@ba3 = constant i8* getelementptr (i8, i8* blockaddress (@bafunc2, %bb), i61 0) + +define i8* @babefore() { + ret i8* getelementptr (i8, i8* blockaddress (@bafunc2, %bb), i61 0) +bb1: + ret i8* blockaddress (@bafunc1, %bb) +bb2: + ret i8* blockaddress (@bafunc3, %bb) +} +define void @bafunc1() { + unreachable +bb: + unreachable +} +define void @bafunc2() { + unreachable +bb: + unreachable +} +define void @bafunc3() { + unreachable +bb: + unreachable +} +define i8* @baafter() { + ret i8* blockaddress (@bafunc2, %bb) +bb1: + ret i8* blockaddress (@bafunc1, %bb) +bb2: + ret i8* blockaddress (@bafunc3, %bb) +}