diff options
author | Reid Spencer <rspencer@reidspencer.com> | 2007-01-26 08:25:06 +0000 |
---|---|---|
committer | Reid Spencer <rspencer@reidspencer.com> | 2007-01-26 08:25:06 +0000 |
commit | e3ff5ada8a8f6cc166ecc45147da0d63c3683026 (patch) | |
tree | ccd4a6b0d605384b41f7d3b84cc019344c2dd65a /test/Transforms | |
parent | 950bf6030101d670ea205efd307ea5d3b375544d (diff) |
For PR761:
Remove "target endian/pointersize" or add "target datalayout" to make
the test parse properly or set the datalayout because defaults changes.
For PR645:
Make global names use the @ prefix.
For llvm-upgrade changes:
Fix test cases or completely remove use of llvm-upgrade for test cases
that cannot survive the new renaming or upgrade capabilities.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33533 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms')
25 files changed, 72 insertions, 63 deletions
diff --git a/test/Transforms/FunctionResolve/2002-08-19-ResolveGlobalVars.ll b/test/Transforms/FunctionResolve/2002-08-19-ResolveGlobalVars.ll index e17e9d740f..427227aeb3 100644 --- a/test/Transforms/FunctionResolve/2002-08-19-ResolveGlobalVars.ll +++ b/test/Transforms/FunctionResolve/2002-08-19-ResolveGlobalVars.ll @@ -1,17 +1,17 @@ ; Test that: extern int X[] and int X[] = { 1, 2, 3, 4 } are resolved ; correctly. ; -; RUN: llvm-upgrade < %s | llvm-as | opt -funcresolve | llvm-dis | not grep external +; RUN: llvm-as < %s | opt -funcresolve | llvm-dis | not grep external -%X = external global [0 x int] -%X = global [4 x int] [ int 1, int 2, int 3, int 4 ] +@X = external global [0 x int] +@X = global [4 x int] [ int 1, int 2, int 3, int 4 ] implementation ; Functions: -int %foo(int %x) { +int @foo(int %x) { bb1: ;[#uses=0] - store int 5, int* getelementptr ([0 x int]* %X, long 0, long 2) - %F = getelementptr [0 x int]* %X, long 0, long 2 + store int 5, int* getelementptr ([0 x int]* @X, long 0, long 2) + %F = getelementptr [0 x int]* @X, long 0, long 2 %val = load int* %F ret int %val } diff --git a/test/Transforms/FunctionResolve/2002-08-19-ResolveGlobalVarsEasier.ll b/test/Transforms/FunctionResolve/2002-08-19-ResolveGlobalVarsEasier.ll index e9c1d8ce7a..188fc95b12 100644 --- a/test/Transforms/FunctionResolve/2002-08-19-ResolveGlobalVarsEasier.ll +++ b/test/Transforms/FunctionResolve/2002-08-19-ResolveGlobalVarsEasier.ll @@ -1,19 +1,19 @@ ; Test that: extern int X[] and int X[] = { 1, 2, 3, 4 } are resolved ; correctly. This doesn't have constantexprs ; -; RUN: llvm-upgrade < %s | llvm-as | opt -funcresolve | llvm-dis | not grep external +; RUN: llvm-as < %s | opt -funcresolve | llvm-dis | not grep external ; -%X = external global [0 x int] -%X = global [4 x int] [ int 1, int 2, int 3, int 4 ] +@X = external global [0 x int] +@X = global [4 x int] [ int 1, int 2, int 3, int 4 ] implementation ; Functions: int %foo(int %x) { bb1: ;[#uses=0] - %G = getelementptr [0 x int]* %X, long 0, long 1 + %G = getelementptr [0 x int]* @X, long 0, long 1 store int 5, int* %G - %F = getelementptr [0 x int]* %X, long 0, long 2 + %F = getelementptr [0 x int]* @X, long 0, long 2 %val = load int* %F ret int %val } diff --git a/test/Transforms/FunctionResolve/2003-10-21-GlobalResolveHack.ll b/test/Transforms/FunctionResolve/2003-10-21-GlobalResolveHack.ll index 0865f0d923..df5340f46a 100644 --- a/test/Transforms/FunctionResolve/2003-10-21-GlobalResolveHack.ll +++ b/test/Transforms/FunctionResolve/2003-10-21-GlobalResolveHack.ll @@ -1,14 +1,12 @@ ; This tests a hack put into place specifically for the C++ libstdc++ library. ; It uses an ugly hack which is cleaned up by the funcresolve pass. +; +; RUN: llvm-as < %s | opt -funcresolve | llvm-dis | grep @X | grep '{' -; RUN: llvm-upgrade < %s | llvm-as | opt -funcresolve | llvm-dis | grep %X | grep '{' +@X = external global { i32 } +@X = global [ 4 x i8 ] zeroinitializer -%X = external global { int } -%X = global [ 4 x sbyte ] zeroinitializer - -implementation - -int* %test() { - %P = getelementptr {int}* %X, long 0, uint 0 - ret int* %P +define i32* @test() { + %P = getelementptr {i32}* @X, i64 0, i32 0 + ret i32* %P } diff --git a/test/Transforms/GlobalDCE/2003-10-09-PreserveWeakGlobals.ll b/test/Transforms/GlobalDCE/2003-10-09-PreserveWeakGlobals.ll index 4c45e7208c..ff41163ce7 100644 --- a/test/Transforms/GlobalDCE/2003-10-09-PreserveWeakGlobals.ll +++ b/test/Transforms/GlobalDCE/2003-10-09-PreserveWeakGlobals.ll @@ -1,6 +1,6 @@ ; Weak variables should be preserved by global DCE! -; RUN: llvm-upgrade < %s | llvm-as | opt -globaldce | llvm-dis | grep %A +; RUN: llvm-upgrade < %s | llvm-as | opt -globaldce | llvm-dis | grep @A %A = weak global int 54 diff --git a/test/Transforms/GlobalOpt/storepointer-compare.llx b/test/Transforms/GlobalOpt/storepointer-compare.llx index 5340feed38..688cf1a49a 100644 --- a/test/Transforms/GlobalOpt/storepointer-compare.llx +++ b/test/Transforms/GlobalOpt/storepointer-compare.llx @@ -1,4 +1,4 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -globalopt | llvm-dis | grep 'call void %Actual' +; RUN: llvm-upgrade < %s | llvm-as | opt -globalopt | llvm-dis | grep 'call void @Actual' ; Check that a comparison does not prevent an indirect call from being made ; direct. The global will still remain, but indirect call elim is still good. diff --git a/test/Transforms/IndVarsSimplify/2007-01-06-TripCount.ll b/test/Transforms/IndVarsSimplify/2007-01-06-TripCount.ll index 7275722783..7f79091321 100644 --- a/test/Transforms/IndVarsSimplify/2007-01-06-TripCount.ll +++ b/test/Transforms/IndVarsSimplify/2007-01-06-TripCount.ll @@ -3,15 +3,13 @@ ; PR1015 target datalayout = "e-p:32:32" -target endian = little -target pointersize = 32 target triple = "i686-apple-darwin8" -%foo = internal constant [5 x i8] c"\00abc\00" ; <[5 x i8]*> [#uses=1] -%str = internal constant [4 x i8] c"%d\0A\00" ; <[4 x i8]*> [#uses=1] +@foo = internal constant [5 x i8] c"\00abc\00" ; <[5 x i8]*> [#uses=1] +@str = internal constant [4 x i8] c"%d\0A\00" ; <[4 x i8]*> [#uses=1] implementation ; Functions: -define i32 %test(i32 %J) { +define i32 @test(i32 %J) { entry: br label %bb2 @@ -28,7 +26,7 @@ cond_true: ; preds = %bb2 br label %bb cond_next: ; preds = %bb2 - %tmp = getelementptr [5 x i8]* %foo, i32 0, i32 %i.0 ; <i8*> [#uses=1] + %tmp = getelementptr [5 x i8]* @foo, i32 0, i32 %i.0 ; <i8*> [#uses=1] %tmp = load i8* %tmp ; <i8> [#uses=1] %tmp5 = icmp eq i8 %tmp, 0 ; <i1> [#uses=1] br i1 %tmp5, label %bb6, label %bb diff --git a/test/Transforms/IndVarsSimplify/2007-01-08-X86-64-Pointer.ll b/test/Transforms/IndVarsSimplify/2007-01-08-X86-64-Pointer.ll index 028e81f61c..a80d6d9d5e 100644 --- a/test/Transforms/IndVarsSimplify/2007-01-08-X86-64-Pointer.ll +++ b/test/Transforms/IndVarsSimplify/2007-01-08-X86-64-Pointer.ll @@ -1,7 +1,7 @@ ; RUN: llvm-as < %s | llc -march=x86-64 | grep '(%rdi,%rax,8)' && ; RUN: llvm-as < %s | llc -march=x86-64 | not grep 'addq.*8' -define void %foo(double* %y) { +define void @foo(double* %y) { entry: br label %bb diff --git a/test/Transforms/InstCombine/2007-01-13-ExtCompareMiscompile.ll b/test/Transforms/InstCombine/2007-01-13-ExtCompareMiscompile.ll index 0add14bf24..a5ee87b9ef 100644 --- a/test/Transforms/InstCombine/2007-01-13-ExtCompareMiscompile.ll +++ b/test/Transforms/InstCombine/2007-01-13-ExtCompareMiscompile.ll @@ -1,7 +1,7 @@ ; RUN: llvm-as < %s | opt -instcombine | llvm-dis | grep zext ; PR1107 -define i1 %test(i8 %A, i8 %B) { +define i1 @test(i8 %A, i8 %B) { %a = zext i8 %A to i32 %b = zext i8 %B to i32 %c = icmp sgt i32 %a, %b diff --git a/test/Transforms/InstCombine/2007-01-14-FcmpSelf.ll b/test/Transforms/InstCombine/2007-01-14-FcmpSelf.ll index 3b34a7db9d..6d27d4544d 100644 --- a/test/Transforms/InstCombine/2007-01-14-FcmpSelf.ll +++ b/test/Transforms/InstCombine/2007-01-14-FcmpSelf.ll @@ -1,6 +1,6 @@ ; RUN: llvm-as < %s | opt -instcombine | llvm-dis | grep 'fcmp uno.*0.0' ; PR1111 -define i1 %test(double %X) { -%tmp = fcmp une double %X, %X +define i1 @test(double %X) { + %tmp = fcmp une double %X, %X ret i1 %tmp } diff --git a/test/Transforms/InstCombine/2007-01-18-VectorInfLoop.ll b/test/Transforms/InstCombine/2007-01-18-VectorInfLoop.ll index 0aa2022829..83d05d9d94 100644 --- a/test/Transforms/InstCombine/2007-01-18-VectorInfLoop.ll +++ b/test/Transforms/InstCombine/2007-01-18-VectorInfLoop.ll @@ -1,6 +1,6 @@ ; RUN: llvm-as < %s | opt -instcombine -disable-output -define <4 x i32> %test(<4 x i32> %A) { +define <4 x i32> @test(<4 x i32> %A) { %B = xor <4 x i32> %A, < i32 -1, i32 -1, i32 -1, i32 -1 > %C = and <4 x i32> %B, < i32 -1, i32 -1, i32 -1, i32 -1 > ret <4 x i32> %C diff --git a/test/Transforms/InstCombine/IntPtrCast.ll b/test/Transforms/InstCombine/IntPtrCast.ll index 9f509b6fbc..7ff71c86b7 100644 --- a/test/Transforms/InstCombine/IntPtrCast.ll +++ b/test/Transforms/InstCombine/IntPtrCast.ll @@ -1,4 +1,5 @@ ; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | notcast +target endian = little target pointersize = 32 int *%test(int *%P) { diff --git a/test/Transforms/InstCombine/add.ll b/test/Transforms/InstCombine/add.ll index ec3aea3c87..033743c64f 100644 --- a/test/Transforms/InstCombine/add.ll +++ b/test/Transforms/InstCombine/add.ll @@ -241,9 +241,9 @@ ubyte %test34(ubyte %A) { ret ubyte %C } -i32 %test34(i32 %a) { ;; -> -1 - %tmpnot = xor i32 %a, -1 - %tmp2 = add i32 %tmpnot, %a - ret i32 %tmp2 +int %test34(int %a) { ;; -> -1 + %tmpnot = xor int %a, -1 + %tmp2 = add int %tmpnot, %a + ret int %tmp2 } diff --git a/test/Transforms/InstCombine/cast-malloc.ll b/test/Transforms/InstCombine/cast-malloc.ll index 2458bf3ea4..e863197a98 100644 --- a/test/Transforms/InstCombine/cast-malloc.ll +++ b/test/Transforms/InstCombine/cast-malloc.ll @@ -1,6 +1,11 @@ ; test that casted mallocs get converted to malloc of the right type -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | not grep bitcast +; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | \ +; RUN: not grep bitcast +; The target datalayout is important for this test case. We have to tell +; instcombine that the ABI alignment for a long is 4-bytes, not 8, otherwise +; it won't do the transform. +target datalayout = "e-l:32:64" int* %test(uint %size) { %X = malloc long, uint %size %ret = bitcast long* %X to int* diff --git a/test/Transforms/InstCombine/sub.ll b/test/Transforms/InstCombine/sub.ll index be38da97e1..5d9cab929a 100644 --- a/test/Transforms/InstCombine/sub.ll +++ b/test/Transforms/InstCombine/sub.ll @@ -2,7 +2,7 @@ ; ; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | \ -; RUN: grep -v 'sub i32 %Cok.s, %Bok.s' | not grep sub +; RUN: grep -v 'sub i32 %Cok, %Bok' | not grep sub implementation diff --git a/test/Transforms/InstCombine/vec_shuffle.ll b/test/Transforms/InstCombine/vec_shuffle.ll index e90d3bef61..a8c83afe73 100644 --- a/test/Transforms/InstCombine/vec_shuffle.ll +++ b/test/Transforms/InstCombine/vec_shuffle.ll @@ -5,36 +5,36 @@ implementation -define %T %test1(%T %v1) { +define %T @test1(%T %v1) { %v2 = shufflevector %T %v1, %T undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> ret %T %v2 } -define %T %test2(%T %v1) { +define %T @test2(%T %v1) { %v2 = shufflevector %T %v1, %T %v1, <4 x i32> <i32 0, i32 5, i32 2, i32 7> ret %T %v2 } -define float %test3(%T %A, %T %B, float %f) { +define float @test3(%T %A, %T %B, float %f) { %C = insertelement %T %A, float %f, i32 0 %D = shufflevector %T %C, %T %B, <4 x i32> <i32 5, i32 0, i32 2, i32 7> %E = extractelement %T %D, i32 1 ret float %E } -define i32 %test4(<4 x i32> %X) { +define i32 @test4(<4 x i32> %X) { %tmp152.i53899.i = shufflevector <4 x i32> %X, <4 x i32> undef, <4 x i32> zeroinitializer %tmp34 = extractelement <4 x i32> %tmp152.i53899.i, i32 0 ret i32 %tmp34 } -define i32 %test5(<4 x i32> %X) { +define i32 @test5(<4 x i32> %X) { %tmp152.i53899.i = shufflevector <4 x i32> %X, <4 x i32> undef, <4 x i32> <i32 3, i32 2, i32 undef, i32 undef> %tmp34 = extractelement <4 x i32> %tmp152.i53899.i, i32 0 ret i32 %tmp34 } -define float %test6(<4 x float> %X) { +define float @test6(<4 x float> %X) { %X = bitcast <4 x float> %X to <4 x i32> %tmp152.i53899.i = shufflevector <4 x i32> %X, <4 x i32> undef, <4 x i32> zeroinitializer %tmp152.i53900.i = bitcast <4 x i32> %tmp152.i53899.i to <4 x float> @@ -42,7 +42,7 @@ define float %test6(<4 x float> %X) { ret float %tmp34 } -define <4 x float> %test7(<4 x float> %tmp45.i) { +define <4 x float> @test7(<4 x float> %tmp45.i) { %tmp1642.i = shufflevector <4 x float> %tmp45.i, <4 x float> undef, <4 x i32> < i32 0, i32 1, i32 6, i32 7 > ret <4 x float> %tmp1642.i } diff --git a/test/Transforms/InstCombine/xor.ll b/test/Transforms/InstCombine/xor.ll index f87e53a922..b6c923d5b4 100644 --- a/test/Transforms/InstCombine/xor.ll +++ b/test/Transforms/InstCombine/xor.ll @@ -182,11 +182,11 @@ int %test26(int %a, int %b) { } -i32 %test27(i32 %b, i32 %c, i32 %d) { - %tmp2 = xor i32 %d, %b - %tmp5 = xor i32 %d, %c - %tmp = icmp eq i32 %tmp2, %tmp5 - %tmp6 = zext bool %tmp to i32 - ret i32 %tmp6 +int %test27(int %b, int %c, int %d) { + %tmp2 = xor int %d, %b + %tmp5 = xor int %d, %c + %tmp = icmp eq int %tmp2, %tmp5 + %tmp6 = zext bool %tmp to int + ret int %tmp6 } diff --git a/test/Transforms/InstCombine/zeroext-and-reduce.ll b/test/Transforms/InstCombine/zeroext-and-reduce.ll index e171f3aacb..a863d55d4c 100644 --- a/test/Transforms/InstCombine/zeroext-and-reduce.ll +++ b/test/Transforms/InstCombine/zeroext-and-reduce.ll @@ -1,5 +1,5 @@ ; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | \ -; RUN: grep 'and i32 %Y.s, 8' +; RUN: grep 'and i32 %Y, 8' int %test1(ubyte %X) { %Y = cast ubyte %X to int diff --git a/test/Transforms/LCSSA/2006-06-03-IncorrectIDFPhis.ll b/test/Transforms/LCSSA/2006-06-03-IncorrectIDFPhis.ll index 21ca2b1693..ffbe6fb425 100644 --- a/test/Transforms/LCSSA/2006-06-03-IncorrectIDFPhis.ll +++ b/test/Transforms/LCSSA/2006-06-03-IncorrectIDFPhis.ll @@ -1,7 +1,7 @@ ; RUN: llvm-upgrade < %s | llvm-as | opt -lcssa | llvm-dis | \ -; RUN: grep "%SJE.0.0.pntr.s1.u1.lcssa = phi .struct.SetJmpMapEntry" && +; RUN: grep "%SJE.0.0.lcssa = phi .struct.SetJmpMapEntry" && ; RUN: llvm-upgrade < %s | llvm-as | opt -lcssa | llvm-dis | \ -; RUN: grep "%SJE.0.0.pntr.s1.u1.lcssa1 = phi .struct.SetJmpMapEntry" +; RUN: grep "%SJE.0.0.lcssa1 = phi .struct.SetJmpMapEntry" %struct.SetJmpMapEntry = type { sbyte*, uint, %struct.SetJmpMapEntry* } diff --git a/test/Transforms/LCSSA/2006-06-12-MultipleExitsSameBlock.ll b/test/Transforms/LCSSA/2006-06-12-MultipleExitsSameBlock.ll index e88660a1fb..3647008e3a 100644 --- a/test/Transforms/LCSSA/2006-06-12-MultipleExitsSameBlock.ll +++ b/test/Transforms/LCSSA/2006-06-12-MultipleExitsSameBlock.ll @@ -1,7 +1,7 @@ ; RUN: llvm-upgrade < %s | llvm-as | opt -lcssa | llvm-dis | \ -; RUN: grep "%X.1.s.lcssa" && +; RUN: grep "%X.1.lcssa" && ; RUN: llvm-upgrade < %s | llvm-as | opt -lcssa | llvm-dis | \ -; RUN: not grep "%X.1.s.lcssa1" +; RUN: not grep "%X.1.lcssa1" declare bool %c1() declare bool %c2() diff --git a/test/Transforms/LCSSA/basictest.ll b/test/Transforms/LCSSA/basictest.ll index 92f754a157..1dc69a6b11 100644 --- a/test/Transforms/LCSSA/basictest.ll +++ b/test/Transforms/LCSSA/basictest.ll @@ -1,7 +1,7 @@ ; RUN: llvm-upgrade < %s | llvm-as | opt -lcssa | llvm-dis | \ -; RUN: grep "X3.s.lcssa = phi i32" && +; RUN: grep "X3.lcssa = phi i32" && ; RUN: llvm-upgrade < %s | llvm-as | opt -lcssa | llvm-dis | \ -; RUN: grep "%X4.s = add i32 3, %X3.s.lcssa" +; RUN: grep "X4 = add i32 3, %X3.lcssa" void %lcssa(bool %S2) { entry: diff --git a/test/Transforms/LevelRaise/2002-03-21-MissedRaise.ll b/test/Transforms/LevelRaise/2002-03-21-MissedRaise.ll index d26b0570d3..182575f2cf 100644 --- a/test/Transforms/LevelRaise/2002-03-21-MissedRaise.ll +++ b/test/Transforms/LevelRaise/2002-03-21-MissedRaise.ll @@ -2,6 +2,8 @@ ; LevelRaise should eliminate all cast instructions from this testcase. ; ; XFAIL: * +; RUN: llvm-upgrade < %s && +; RUN: llvm-upgrade < %s | llvm-as > /dev/null && ; RUN: llvm-upgrade < %s | llvm-as | opt -raise | llvm-dis | notcast %Hash = type { { uint, sbyte *, \2 } * *, int (uint) *, int } * diff --git a/test/Transforms/SimplifyLibCalls/StrLen.ll b/test/Transforms/SimplifyLibCalls/StrLen.ll index 20aa7a8dca..d50b7c573f 100644 --- a/test/Transforms/SimplifyLibCalls/StrLen.ll +++ b/test/Transforms/SimplifyLibCalls/StrLen.ll @@ -1,5 +1,8 @@ ; Test that the StrCatOptimizer works correctly -; RUN: llvm-upgrade < %s | llvm-as | opt -simplify-libcalls | llvm-dis | not grep 'call.*strlen' +; RUN: llvm-upgrade < %s | llvm-as | opt -simplify-libcalls | llvm-dis | \ +; RUN: not grep 'call.*strlen' + +target datalayout = "e-p:32:32" declare uint %strlen(sbyte*) %hello = constant [6 x sbyte] c"hello\00" diff --git a/test/Transforms/TailCallElim/dont-tce-tail-marked-call.ll b/test/Transforms/TailCallElim/dont-tce-tail-marked-call.ll index 6ddb1b7084..2a4cdcef76 100644 --- a/test/Transforms/TailCallElim/dont-tce-tail-marked-call.ll +++ b/test/Transforms/TailCallElim/dont-tce-tail-marked-call.ll @@ -1,4 +1,5 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -tailcallelim | llvm-dis | grep 'call i32 %foo' +; RUN: llvm-upgrade < %s | llvm-as | opt -tailcallelim | llvm-dis | \ +; RUN: grep 'call i32 @foo' declare void %bar(int*) int %foo(uint %N) { diff --git a/test/Transforms/TailCallElim/move_alloca_for_tail_call.ll b/test/Transforms/TailCallElim/move_alloca_for_tail_call.ll index 8125960ec2..d8bd855dfe 100644 --- a/test/Transforms/TailCallElim/move_alloca_for_tail_call.ll +++ b/test/Transforms/TailCallElim/move_alloca_for_tail_call.ll @@ -1,4 +1,5 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -tailcallelim | llvm-dis | %prcontext alloca 1 | grep 'i32 %foo' +; RUN: llvm-upgrade < %s | llvm-as | opt -tailcallelim | llvm-dis | \ +; RUN: %prcontext alloca 1 | grep 'i32 @foo' declare void %bar(int*) int %foo() { diff --git a/test/Transforms/TailCallElim/trivial_codegen_tailcall.ll b/test/Transforms/TailCallElim/trivial_codegen_tailcall.ll index 6fb574e561..01e762ef51 100644 --- a/test/Transforms/TailCallElim/trivial_codegen_tailcall.ll +++ b/test/Transforms/TailCallElim/trivial_codegen_tailcall.ll @@ -1,4 +1,4 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -tailcallelim | llvm-dis | grep 'tail call void %foo' +; RUN: llvm-upgrade < %s | llvm-as | opt -tailcallelim | llvm-dis | grep 'tail call void @foo' declare void %foo() |