diff options
Diffstat (limited to 'llvm/test/Transforms')
64 files changed, 8 insertions, 2437 deletions
diff --git a/llvm/test/Transforms/ArgumentPromotion/inalloca.ll b/llvm/test/Transforms/ArgumentPromotion/inalloca.ll index 80bd6fdbc40..5bf57c8ff46 100644 --- a/llvm/test/Transforms/ArgumentPromotion/inalloca.ll +++ b/llvm/test/Transforms/ArgumentPromotion/inalloca.ll @@ -1,10 +1,10 @@ -; RUN: opt %s -argpromotion -scalarrepl -S | FileCheck %s +; RUN: opt %s -argpromotion -sroa -S | FileCheck %s target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128" %struct.ss = type { i32, i32 } -; Argpromote + scalarrepl should change this to passing the two integers by value. +; Argpromote + sroa should change this to passing the two integers by value. define internal i32 @f(%struct.ss* inalloca %s) { entry: %f0 = getelementptr %struct.ss, %struct.ss* %s, i32 0, i32 0 diff --git a/llvm/test/Transforms/Inline/basictest.ll b/llvm/test/Transforms/Inline/basictest.ll index 8f0b3eafaec..5847e623831 100644 --- a/llvm/test/Transforms/Inline/basictest.ll +++ b/llvm/test/Transforms/Inline/basictest.ll @@ -1,4 +1,4 @@ -; RUN: opt < %s -inline -scalarrepl -S | FileCheck %s +; RUN: opt < %s -inline -sroa -S | FileCheck %s target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128" define i32 @test1f(i32 %i) { diff --git a/llvm/test/Transforms/Inline/crash2.ll b/llvm/test/Transforms/Inline/crash2.ll index 4c0dfaea036..e3a136010ee 100644 --- a/llvm/test/Transforms/Inline/crash2.ll +++ b/llvm/test/Transforms/Inline/crash2.ll @@ -1,4 +1,4 @@ -; RUN: opt -inline -scalarrepl -max-cg-scc-iterations=1 -disable-output < %s +; RUN: opt -inline -sroa -max-cg-scc-iterations=1 -disable-output < %s target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" target triple = "x86_64-apple-darwin10.3" diff --git a/llvm/test/Transforms/Inline/devirtualize-3.ll b/llvm/test/Transforms/Inline/devirtualize-3.ll index 76c8150de01..2a0a6d7f65a 100644 --- a/llvm/test/Transforms/Inline/devirtualize-3.ll +++ b/llvm/test/Transforms/Inline/devirtualize-3.ll @@ -1,4 +1,4 @@ -; RUN: opt -basicaa -inline -S -scalarrepl -gvn -instcombine < %s | FileCheck %s +; RUN: opt -basicaa -inline -S -sroa -gvn -instcombine < %s | FileCheck %s ; PR5009 ; CHECK: define i32 @main() diff --git a/llvm/test/Transforms/InstCombine/2009-02-20-InstCombine-SROA.ll b/llvm/test/Transforms/InstCombine/2009-02-20-InstCombine-SROA.ll index 0f8b38c8e9c..35cd3affec6 100644 --- a/llvm/test/Transforms/InstCombine/2009-02-20-InstCombine-SROA.ll +++ b/llvm/test/Transforms/InstCombine/2009-02-20-InstCombine-SROA.ll @@ -1,4 +1,4 @@ -; RUN: opt < %s -instcombine -scalarrepl -S | not grep " = alloca" +; RUN: opt < %s -instcombine -sroa -S | not grep " = alloca" ; rdar://6417724 ; Instcombine shouldn't do anything to this function that prevents promoting the allocas inside it. diff --git a/llvm/test/Transforms/LoopSimplify/2004-04-13-LoopSimplifyUpdateDomFrontier.ll b/llvm/test/Transforms/LoopSimplify/2004-04-13-LoopSimplifyUpdateDomFrontier.ll index 5818808ae0c..df7034baf66 100644 --- a/llvm/test/Transforms/LoopSimplify/2004-04-13-LoopSimplifyUpdateDomFrontier.ll +++ b/llvm/test/Transforms/LoopSimplify/2004-04-13-LoopSimplifyUpdateDomFrontier.ll @@ -1,4 +1,4 @@ -; RUN: opt < %s -scalarrepl -loop-simplify -licm -disable-output -verify-dom-info -verify-loop-info +; RUN: opt < %s -sroa -loop-simplify -licm -disable-output -verify-dom-info -verify-loop-info define void @inflate() { entry: diff --git a/llvm/test/Transforms/LoopUnswitch/2011-09-26-EHCrash.ll b/llvm/test/Transforms/LoopUnswitch/2011-09-26-EHCrash.ll index 1a929d68573..5d763a9b3e7 100644 --- a/llvm/test/Transforms/LoopUnswitch/2011-09-26-EHCrash.ll +++ b/llvm/test/Transforms/LoopUnswitch/2011-09-26-EHCrash.ll @@ -1,4 +1,4 @@ -; RUN: opt < %s -scalarrepl-ssa -loop-unswitch -disable-output +; RUN: opt < %s -sroa -loop-unswitch -disable-output ; PR11016 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" target triple = "x86_64-apple-macosx10.7.2" diff --git a/llvm/test/Transforms/ScalarRepl/2003-05-29-ArrayFail.ll b/llvm/test/Transforms/ScalarRepl/2003-05-29-ArrayFail.ll deleted file mode 100644 index 336c0a9dfa6..00000000000 --- a/llvm/test/Transforms/ScalarRepl/2003-05-29-ArrayFail.ll +++ /dev/null @@ -1,13 +0,0 @@ -; RUN: opt < %s -scalarrepl -instcombine -S | not grep alloca -target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64" - -; Test that an array is not incorrectly deconstructed. - -define i32 @test() nounwind { - %X = alloca [4 x i32] ; <[4 x i32]*> [#uses=1] - %Y = getelementptr [4 x i32], [4 x i32]* %X, i64 0, i64 0 ; <i32*> [#uses=1] - ; Must preserve arrayness! - %Z = getelementptr i32, i32* %Y, i64 1 ; <i32*> [#uses=1] - %A = load i32, i32* %Z ; <i32> [#uses=1] - ret i32 %A -} diff --git a/llvm/test/Transforms/ScalarRepl/2003-09-12-IncorrectPromote.ll b/llvm/test/Transforms/ScalarRepl/2003-09-12-IncorrectPromote.ll deleted file mode 100644 index c5ca428be4b..00000000000 --- a/llvm/test/Transforms/ScalarRepl/2003-09-12-IncorrectPromote.ll +++ /dev/null @@ -1,12 +0,0 @@ -; Scalar replacement was incorrectly promoting this alloca!! -; -; RUN: opt < %s -scalarrepl -S | FileCheck %s - -define i8* @test() { - %A = alloca [30 x i8] ; <[30 x i8]*> [#uses=1] - %B = getelementptr [30 x i8], [30 x i8]* %A, i64 0, i64 0 ; <i8*> [#uses=2] - %C = getelementptr i8, i8* %B, i64 1 ; <i8*> [#uses=1] - store i8 0, i8* %B - ret i8* %C -} -; CHECK: alloca [ diff --git a/llvm/test/Transforms/ScalarRepl/2003-10-29-ArrayProblem.ll b/llvm/test/Transforms/ScalarRepl/2003-10-29-ArrayProblem.ll deleted file mode 100644 index ce652737bc1..00000000000 --- a/llvm/test/Transforms/ScalarRepl/2003-10-29-ArrayProblem.ll +++ /dev/null @@ -1,16 +0,0 @@ -; RUN: opt < %s -scalarrepl -S | grep "alloca %%T" - -%T = type { [80 x i8], i32, i32 } -declare i32 @.callback_1(i8*) - -declare void @.iter_2(i32 (i8*)*, i8*) - -define i32 @main() { - %d = alloca %T ; <{ [80 x i8], i32, i32 }*> [#uses=2] - %tmp.0 = getelementptr %T, %T* %d, i64 0, i32 2 ; <i32*> [#uses=1] - store i32 0, i32* %tmp.0 - %tmp.1 = getelementptr %T, %T* %d, i64 0, i32 0, i64 0 ; <i8*> [#uses=1] - call void @.iter_2( i32 (i8*)* @.callback_1, i8* %tmp.1 ) - ret i32 0 -} - diff --git a/llvm/test/Transforms/ScalarRepl/2006-11-07-InvalidArrayPromote.ll b/llvm/test/Transforms/ScalarRepl/2006-11-07-InvalidArrayPromote.ll deleted file mode 100644 index 2701fdaea51..00000000000 --- a/llvm/test/Transforms/ScalarRepl/2006-11-07-InvalidArrayPromote.ll +++ /dev/null @@ -1,20 +0,0 @@ -; RUN: opt < %s -scalarrepl -S | not grep alloca -target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64" - -define i32 @func(<4 x float> %v0, <4 x float> %v1) nounwind { - %vsiidx = alloca [2 x <4 x i32>], align 16 ; <[2 x <4 x i32>]*> [#uses=3] - %tmp = call <4 x i32> @llvm.x86.sse2.cvttps2dq( <4 x float> %v0 ) ; <<4 x i32>> [#uses=2] - %tmp.upgrd.1 = bitcast <4 x i32> %tmp to <2 x i64> ; <<2 x i64>> [#uses=0] - %tmp.upgrd.2 = getelementptr [2 x <4 x i32>], [2 x <4 x i32>]* %vsiidx, i32 0, i32 0 ; <<4 x i32>*> [#uses=1] - store <4 x i32> %tmp, <4 x i32>* %tmp.upgrd.2 - %tmp10 = call <4 x i32> @llvm.x86.sse2.cvttps2dq( <4 x float> %v1 ) ; <<4 x i32>> [#uses=2] - %tmp10.upgrd.3 = bitcast <4 x i32> %tmp10 to <2 x i64> ; <<2 x i64>> [#uses=0] - %tmp14 = getelementptr [2 x <4 x i32>], [2 x <4 x i32>]* %vsiidx, i32 0, i32 1 ; <<4 x i32>*> [#uses=1] - store <4 x i32> %tmp10, <4 x i32>* %tmp14 - %tmp15 = getelementptr [2 x <4 x i32>], [2 x <4 x i32>]* %vsiidx, i32 0, i32 0, i32 4 ; <i32*> [#uses=1] - %tmp.upgrd.4 = load i32, i32* %tmp15 ; <i32> [#uses=1] - ret i32 %tmp.upgrd.4 -} - -declare <4 x i32> @llvm.x86.sse2.cvttps2dq(<4 x float>) - diff --git a/llvm/test/Transforms/ScalarRepl/2007-05-29-MemcpyPreserve.ll b/llvm/test/Transforms/ScalarRepl/2007-05-29-MemcpyPreserve.ll deleted file mode 100644 index 966b17939fe..00000000000 --- a/llvm/test/Transforms/ScalarRepl/2007-05-29-MemcpyPreserve.ll +++ /dev/null @@ -1,24 +0,0 @@ -; RUN: opt < %s -scalarrepl -S | grep memcpy -; PR1421 - -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" -target triple = "i686-apple-darwin8" - -%struct.LongestMember = type { i8, i32 } -%struct.MyString = type { i32 } -%struct.UnionType = type { %struct.LongestMember } - -define void @_Z4testP9UnionTypePS0_(%struct.UnionType* %p, %struct.UnionType** %pointerToUnion) { -entry: - %tmp = alloca %struct.UnionType, align 8 - %tmp2 = getelementptr %struct.UnionType, %struct.UnionType* %tmp, i32 0, i32 0, i32 0 - %tmp13 = getelementptr %struct.UnionType, %struct.UnionType* %p, i32 0, i32 0, i32 0 - call void @llvm.memcpy.p0i8.p0i8.i32(i8* %tmp2, i8* %tmp13, i32 8, i32 0, i1 false) - %tmp5 = load %struct.UnionType*, %struct.UnionType** %pointerToUnion - %tmp56 = getelementptr %struct.UnionType, %struct.UnionType* %tmp5, i32 0, i32 0, i32 0 - %tmp7 = getelementptr %struct.UnionType, %struct.UnionType* %tmp, i32 0, i32 0, i32 0 - call void @llvm.memcpy.p0i8.p0i8.i32(i8* %tmp56, i8* %tmp7, i32 8, i32 0, i1 false) - ret void -} - -declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind diff --git a/llvm/test/Transforms/ScalarRepl/2007-11-03-bigendian_apint.ll b/llvm/test/Transforms/ScalarRepl/2007-11-03-bigendian_apint.ll deleted file mode 100644 index 28f503a210c..00000000000 --- a/llvm/test/Transforms/ScalarRepl/2007-11-03-bigendian_apint.ll +++ /dev/null @@ -1,36 +0,0 @@ -; RUN: opt < %s -scalarrepl -S | not grep shr - -; FIXME: I think this test is no longer valid. -; It was working because SROA was aborting when -; no datalayout was supplied -; XFAIL: * - - -%struct.S = type { i16 } - -define zeroext i1 @f(i16 signext %b) { -entry: - %b_addr = alloca i16 ; <i16*> [#uses=2] - %retval = alloca i32 ; <i32*> [#uses=2] - %s = alloca %struct.S ; <%struct.S*> [#uses=2] - %tmp = alloca i32 ; <i32*> [#uses=2] - %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0] - store i16 %b, i16* %b_addr - %tmp1 = getelementptr %struct.S, %struct.S* %s, i32 0, i32 0 ; <i16*> [#uses=1] - %tmp2 = load i16, i16* %b_addr, align 2 ; <i16> [#uses=1] - store i16 %tmp2, i16* %tmp1, align 2 - %tmp3 = getelementptr %struct.S, %struct.S* %s, i32 0, i32 0 ; <i16*> [#uses=1] - %tmp34 = bitcast i16* %tmp3 to [2 x i1]* ; <[2 x i1]*> [#uses=1] - %tmp5 = getelementptr [2 x i1], [2 x i1]* %tmp34, i32 0, i32 1 ; <i1*> [#uses=1] - %tmp6 = load i1, i1* %tmp5, align 1 ; <i1> [#uses=1] - %tmp67 = zext i1 %tmp6 to i32 ; <i32> [#uses=1] - store i32 %tmp67, i32* %tmp, align 4 - %tmp8 = load i32, i32* %tmp, align 4 ; <i32> [#uses=1] - store i32 %tmp8, i32* %retval, align 4 - br label %return - -return: ; preds = %entry - %retval9 = load i32, i32* %retval ; <i32> [#uses=1] - %retval910 = trunc i32 %retval9 to i1 ; <i1> [#uses=1] - ret i1 %retval910 -} diff --git a/llvm/test/Transforms/ScalarRepl/2008-01-29-PromoteBug.ll b/llvm/test/Transforms/ScalarRepl/2008-01-29-PromoteBug.ll deleted file mode 100644 index 99366b36442..00000000000 --- a/llvm/test/Transforms/ScalarRepl/2008-01-29-PromoteBug.ll +++ /dev/null @@ -1,21 +0,0 @@ -; RUN: opt < %s -scalarrepl -instcombine -S | grep "ret i8 17" -; rdar://5707076 -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-darwin9.1.0" - %struct.T = type <{ i8, [3 x i8] }> - -define i8 @f() { -entry: - %s = alloca [1 x %struct.T], align 4 ; <[1 x %struct.T]*> [#uses=2] - %T3 = bitcast [1 x %struct.T]* %s to i32* - store i32 -61184, i32* %T3 - - %tmp16 = getelementptr [1 x %struct.T], [1 x %struct.T]* %s, i32 0, i32 0 ; <%struct.T*> [#uses=1] - %tmp17 = getelementptr %struct.T, %struct.T* %tmp16, i32 0, i32 1 ; <[3 x i8]*> [#uses=1] - %tmp1718 = bitcast [3 x i8]* %tmp17 to i32* ; <i32*> [#uses=1] - %tmp19 = load i32, i32* %tmp1718, align 4 ; <i32> [#uses=1] - %mask = and i32 %tmp19, 16777215 ; <i32> [#uses=2] - %mask2324 = trunc i32 %mask to i8 ; <i8> [#uses=1] - ret i8 %mask2324 -} - diff --git a/llvm/test/Transforms/ScalarRepl/2008-02-28-SubElementExtractCrash.ll b/llvm/test/Transforms/ScalarRepl/2008-02-28-SubElementExtractCrash.ll deleted file mode 100644 index f37b6529a54..00000000000 --- a/llvm/test/Transforms/ScalarRepl/2008-02-28-SubElementExtractCrash.ll +++ /dev/null @@ -1,16 +0,0 @@ -; RUN: opt < %s -scalarrepl -S | not grep alloca -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" -target triple = "i686-apple-darwin8" - %struct..0anon = type { <1 x i64> } - -define i32 @main(i32 %argc, i8** %argv) { -entry: - %c = alloca %struct..0anon ; <%struct..0anon*> [#uses=2] - %tmp2 = getelementptr %struct..0anon, %struct..0anon* %c, i32 0, i32 0 ; <<1 x i64>*> [#uses=1] - store <1 x i64> zeroinitializer, <1 x i64>* %tmp2, align 8 - %tmp7 = getelementptr %struct..0anon, %struct..0anon* %c, i32 0, i32 0 ; <<1 x i64>*> [#uses=1] - %tmp78 = bitcast <1 x i64>* %tmp7 to [2 x i32]* ; <[2 x i32]*> [#uses=1] - %tmp9 = getelementptr [2 x i32], [2 x i32]* %tmp78, i32 0, i32 0 ; <i32*> [#uses=1] - %tmp10 = load i32, i32* %tmp9, align 4 ; <i32> [#uses=0] - unreachable -} diff --git a/llvm/test/Transforms/ScalarRepl/2008-06-05-loadstore-agg.ll b/llvm/test/Transforms/ScalarRepl/2008-06-05-loadstore-agg.ll deleted file mode 100644 index d1f33121174..00000000000 --- a/llvm/test/Transforms/ScalarRepl/2008-06-05-loadstore-agg.ll +++ /dev/null @@ -1,33 +0,0 @@ -; This test shows an alloca of a struct and an array that can be reduced to -; multiple variables easily. However, the alloca is used by a store -; instruction, which was not possible before aggregrates were first class -; values. This checks of scalarrepl splits up the struct and array properly. - -; RUN: opt < %s -scalarrepl -S | not grep alloca -target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64" - -define i32 @foo() { - %target = alloca { i32, i32 } ; <{ i32, i32 }*> [#uses=1] - ; Build a first class struct to store - %res1 = insertvalue { i32, i32 } undef, i32 1, 0 ; <{ i32, i32 }> [#uses=1] - %res2 = insertvalue { i32, i32 } %res1, i32 2, 1 ; <{ i32, i32 }> [#uses=1] - ; And store it - store { i32, i32 } %res2, { i32, i32 }* %target - ; Actually use %target, so it doesn't get removed altogether - %ptr = getelementptr { i32, i32 }, { i32, i32 }* %target, i32 0, i32 0 - %val = load i32, i32* %ptr - ret i32 %val -} - -define i32 @bar() { - %target = alloca [ 2 x i32 ] ; <{ i32, i32 }*> [#uses=1] - ; Build a first class array to store - %res1 = insertvalue [ 2 x i32 ] undef, i32 1, 0 ; <{ i32, i32 }> [#uses=1] - %res2 = insertvalue [ 2 x i32 ] %res1, i32 2, 1 ; <{ i32, i32 }> [#uses=1] - ; And store it - store [ 2 x i32 ] %res2, [ 2 x i32 ]* %target - ; Actually use %target, so it doesn't get removed altogether - %ptr = getelementptr [ 2 x i32 ], [ 2 x i32 ]* %target, i32 0, i32 0 - %val = load i32, i32* %ptr - ret i32 %val -} diff --git a/llvm/test/Transforms/ScalarRepl/2008-06-22-LargeArray.ll b/llvm/test/Transforms/ScalarRepl/2008-06-22-LargeArray.ll deleted file mode 100644 index f597613ef2b..00000000000 --- a/llvm/test/Transforms/ScalarRepl/2008-06-22-LargeArray.ll +++ /dev/null @@ -1,17 +0,0 @@ -; RUN: opt < %s -scalarrepl -S | grep "call.*mem" -; PR2369 - -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" -target triple = "i386-apple-darwin8" - -define void @memtest1(i8* %dst, i8* %src) nounwind { -entry: - %temp = alloca [200 x i8] - %temp1 = bitcast [200 x i8]* %temp to i8* - call void @llvm.memcpy.p0i8.p0i8.i32(i8* %temp1, i8* %src, i32 200, i32 1, i1 false) - %temp3 = bitcast [200 x i8]* %temp to i8* - call void @llvm.memcpy.p0i8.p0i8.i32(i8* %dst, i8* %temp3, i32 200, i32 1, i1 false) - ret void -} - -declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind diff --git a/llvm/test/Transforms/ScalarRepl/2008-08-22-out-of-range-array-promote.ll b/llvm/test/Transforms/ScalarRepl/2008-08-22-out-of-range-array-promote.ll deleted file mode 100644 index c0ff25f3541..00000000000 --- a/llvm/test/Transforms/ScalarRepl/2008-08-22-out-of-range-array-promote.ll +++ /dev/null @@ -1,23 +0,0 @@ -; RUN: opt < %s -scalarrepl -S | grep "s = alloca .struct.x" -; PR2423 -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" -target triple = "i386-apple-darwin8" - -%struct.x = type { [1 x i32], i32, i32 } - -define i32 @b() nounwind { -entry: - %s = alloca %struct.x - %r = alloca %struct.x - %0 = call i32 @a(%struct.x* %s) nounwind - %r1 = bitcast %struct.x* %r to i8* - %s2 = bitcast %struct.x* %s to i8* - call void @llvm.memcpy.p0i8.p0i8.i32(i8* %r1, i8* %s2, i32 12, i32 8, i1 false) - %1 = getelementptr %struct.x, %struct.x* %r, i32 0, i32 0, i32 1 - %2 = load i32, i32* %1, align 4 - ret i32 %2 -} - -declare i32 @a(%struct.x*) - -declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind diff --git a/llvm/test/Transforms/ScalarRepl/2008-09-22-vector-gep.ll b/llvm/test/Transforms/ScalarRepl/2008-09-22-vector-gep.ll deleted file mode 100644 index 16d9108bb24..00000000000 --- a/llvm/test/Transforms/ScalarRepl/2008-09-22-vector-gep.ll +++ /dev/null @@ -1,25 +0,0 @@ -; This test checks to see if scalarrepl also works when a gep with all zeroes is -; used instead of a bitcast to prepare a memmove pointer argument. Previously, -; this would not work when there was a vector involved in the struct, preventing -; scalarrepl from removing the alloca below. - -; RUN: opt < %s -scalarrepl -S > %t -; RUN: cat %t | not grep alloca -target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64" - -%struct.two = type <{ < 2 x i8 >, i16 }> - -define void @main(%struct.two* %D, i16 %V) { -entry: - %S = alloca %struct.two - %S.2 = getelementptr %struct.two, %struct.two* %S, i32 0, i32 1 - store i16 %V, i16* %S.2 - ; This gep is effectively a bitcast to i8*, but is sometimes generated - ; because the type of the first element in %struct.two is i8. - %tmpS = getelementptr %struct.two, %struct.two* %S, i32 0, i32 0, i32 0 - %tmpD = bitcast %struct.two* %D to i8* - call void @llvm.memmove.p0i8.p0i8.i32(i8* %tmpD, i8* %tmpS, i32 4, i32 1, i1 false) - ret void -} - -declare void @llvm.memmove.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind diff --git a/llvm/test/Transforms/ScalarRepl/2009-02-02-ScalarPromoteOutOfRange.ll b/llvm/test/Transforms/ScalarRepl/2009-02-02-ScalarPromoteOutOfRange.ll deleted file mode 100644 index f0af1caa461..00000000000 --- a/llvm/test/Transforms/ScalarRepl/2009-02-02-ScalarPromoteOutOfRange.ll +++ /dev/null @@ -1,16 +0,0 @@ -; RUN: opt < %s -scalarrepl -instcombine -S | grep "ret i32 %x" -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:32:32" -target triple = "i386-pc-linux-gnu" - -%pair = type { [1 x i32], i32 } - -define i32 @f(i32 %x, i32 %y) { - %instance = alloca %pair - %first = getelementptr %pair, %pair* %instance, i32 0, i32 0 - %cast = bitcast [1 x i32]* %first to i32* - store i32 %x, i32* %cast - %second = getelementptr %pair, %pair* %instance, i32 0, i32 1 - store i32 %y, i32* %second - %v = load i32, i32* %cast - ret i32 %v -} diff --git a/llvm/test/Transforms/ScalarRepl/2009-02-05-LoadFCA.ll b/llvm/test/Transforms/ScalarRepl/2009-02-05-LoadFCA.ll deleted file mode 100644 index 56375ffe793..00000000000 --- a/llvm/test/Transforms/ScalarRepl/2009-02-05-LoadFCA.ll +++ /dev/null @@ -1,20 +0,0 @@ -; RUN: opt < %s -scalarrepl -instcombine -inline -instcombine -S | grep "ret i32 42" -; PR3489 -target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128" -target triple = "x86_64-apple-darwin10.0" - %struct.anon = type <{ i32, i32, i32 }> - -define i32 @f({ i64, i64 }) nounwind { -entry: - %tmp = alloca { i64, i64 }, align 8 ; <{ i64, i64 }*> [#uses=2] - store { i64, i64 } %0, { i64, i64 }* %tmp - %1 = bitcast { i64, i64 }* %tmp to %struct.anon* ; <%struct.anon*> [#uses=1] - %2 = load %struct.anon, %struct.anon* %1, align 8 ; <%struct.anon> [#uses=1] - %tmp3 = extractvalue %struct.anon %2, 0 - ret i32 %tmp3 -} - -define i32 @g() { - %a = call i32 @f({i64,i64} { i64 42, i64 1123123123123123 }) - ret i32 %a -} diff --git a/llvm/test/Transforms/ScalarRepl/2009-03-04-MemCpyAlign.ll b/llvm/test/Transforms/ScalarRepl/2009-03-04-MemCpyAlign.ll deleted file mode 100644 index 025578c7f44..00000000000 --- a/llvm/test/Transforms/ScalarRepl/2009-03-04-MemCpyAlign.ll +++ /dev/null @@ -1,19 +0,0 @@ -; The store into %p should end up with a known alignment of 1, since the memcpy -; is only known to access it with 1-byte alignment. -; RUN: opt < %s -scalarrepl -S | grep "store i16 1, .*, align 1" -; PR3720 -target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64" - - %struct.st = type { i16 } - -define void @f(i8* %p) nounwind { -entry: - %s = alloca %struct.st, align 4 ; <%struct.st*> [#uses=2] - %0 = getelementptr %struct.st, %struct.st* %s, i32 0, i32 0 ; <i16*> [#uses=1] - store i16 1, i16* %0, align 4 - %s1 = bitcast %struct.st* %s to i8* ; <i8*> [#uses=1] - call void @llvm.memcpy.p0i8.p0i8.i32(i8* %p, i8* %s1, i32 2, i32 1, i1 false) - ret void -} - -declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind diff --git a/llvm/test/Transforms/ScalarRepl/2009-12-11-NeonTypes.ll b/llvm/test/Transforms/ScalarRepl/2009-12-11-NeonTypes.ll deleted file mode 100644 index d1cc4244ccf..00000000000 --- a/llvm/test/Transforms/ScalarRepl/2009-12-11-NeonTypes.ll +++ /dev/null @@ -1,90 +0,0 @@ -; RUN: opt < %s -scalarrepl -S | FileCheck %s -; Radar 7441282 - -target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:32-f32:32:32-f64:32:32-v64:64:64-v128:128:128-a0:0:32-n32" -target triple = "thumbv7-apple-darwin10" - -%struct.__neon_int16x8x2_t = type { <8 x i16>, <8 x i16> } -%struct.int16x8_t = type { <8 x i16> } -%struct.int16x8x2_t = type { [2 x %struct.int16x8_t] } -%union..0anon = type { %struct.int16x8x2_t } - -define void @test(<8 x i16> %tmp.0, %struct.int16x8x2_t* %dst) nounwind { -; CHECK-LABEL: @test( -; CHECK-NOT: alloca -; CHECK: "alloca point" -; CHECK: store <8 x i16> -; CHECK: store <8 x i16> - -entry: - %tmp_addr = alloca %struct.int16x8_t - %dst_addr = alloca %struct.int16x8x2_t* - %__rv = alloca %union..0anon - %__bx = alloca %struct.int16x8_t - %__ax = alloca %struct.int16x8_t - %tmp2 = alloca %struct.int16x8x2_t - %0 = alloca %struct.int16x8x2_t - %"alloca point" = bitcast i32 0 to i32 - %1 = getelementptr inbounds %struct.int16x8_t, %struct.int16x8_t* %tmp_addr, i32 0, i32 0 - store <8 x i16> %tmp.0, <8 x i16>* %1 - store %struct.int16x8x2_t* %dst, %struct.int16x8x2_t** %dst_addr - %2 = getelementptr inbounds %struct.int16x8_t, %struct.int16x8_t* %__ax, i32 0, i32 0 - %3 = getelementptr inbounds %struct.int16x8_t, %struct.int16x8_t* %tmp_addr, i32 0, i32 0 - %4 = load <8 x i16>, <8 x i16>* %3, align 16 - store <8 x i16> %4, <8 x i16>* %2, align 16 - %5 = getelementptr inbounds %struct.int16x8_t, %struct.int16x8_t* %__bx, i32 0, i32 0 - %6 = getelementptr inbounds %struct.int16x8_t, %struct.int16x8_t* %tmp_addr, i32 0, i32 0 - %7 = load <8 x i16>, <8 x i16>* %6, align 16 - store <8 x i16> %7, <8 x i16>* %5, align 16 - %8 = getelementptr inbounds %struct.int16x8_t, %struct.int16x8_t* %__ax, i32 0, i32 0 - %9 = load <8 x i16>, <8 x i16>* %8, align 16 - %10 = getelementptr inbounds %struct.int16x8_t, %struct.int16x8_t* %__bx, i32 0, i32 0 - %11 = load <8 x i16>, <8 x i16>* %10, align 16 - %12 = getelementptr inbounds %union..0anon, %union..0anon* %__rv, i32 0, i32 0 - %13 = bitcast %struct.int16x8x2_t* %12 to %struct.__neon_int16x8x2_t* - %14 = shufflevector <8 x i16> %9, <8 x i16> %11, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14> - %15 = getelementptr inbounds %struct.__neon_int16x8x2_t, %struct.__neon_int16x8x2_t* %13, i32 0, i32 0 - store <8 x i16> %14, <8 x i16>* %15 - %16 = shufflevector <8 x i16> %9, <8 x i16> %11, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15> - %17 = getelementptr inbounds %struct.__neon_int16x8x2_t, %struct.__neon_int16x8x2_t* %13, i32 0, i32 1 - store <8 x i16> %16, <8 x i16>* %17 - %18 = getelementptr inbounds %union..0anon, %union..0anon* %__rv, i32 0, i32 0 - %19 = bitcast %struct.int16x8x2_t* %0 to i8* - %20 = bitcast %struct.int16x8x2_t* %18 to i8* - call void @llvm.memcpy.p0i8.p0i8.i32(i8* %19, i8* %20, i32 32, i32 16, i1 false) - %tmp21 = bitcast %struct.int16x8x2_t* %tmp2 to i8* - %21 = bitcast %struct.int16x8x2_t* %0 to i8* - call void @llvm.memcpy.p0i8.p0i8.i32(i8* %tmp21, i8* %21, i32 32, i32 16, i1 false) - %22 = load %struct.int16x8x2_t*, %struct.int16x8x2_t** %dst_addr, align 4 - %23 = bitcast %struct.int16x8x2_t* %22 to i8* - %tmp22 = bitcast %struct.int16x8x2_t* %tmp2 to i8* - call void @llvm.memcpy.p0i8.p0i8.i32(i8* %23, i8* %tmp22, i32 32, i32 16, i1 false) - br label %return - -return: ; preds = %entry - ret void -} - -; Radar 7466574 -%struct._NSRange = type { i64 } - -define void @test_memcpy_self() nounwind { -entry: - %range = alloca %struct._NSRange - br i1 undef, label %cond.true, label %cond.false - -cond.true: ; preds = %entry - %tmp3 = bitcast %struct._NSRange* %range to i8* - %tmp4 = bitcast %struct._NSRange* %range to i8* - call void @llvm.memcpy.p0i8.p0i8.i32(i8* %tmp3, i8* %tmp4, i32 8, i32 8, i1 false) - ret void - -cond.false: ; preds = %entry - ret void - -; CHECK-LABEL: @test_memcpy_self( -; CHECK-NOT: alloca -; CHECK: br i1 -} - -declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind diff --git a/llvm/test/Transforms/ScalarRepl/2010-01-18-SelfCopy.ll b/llvm/test/Transforms/ScalarRepl/2010-01-18-SelfCopy.ll deleted file mode 100644 index b926b021caf..00000000000 --- a/llvm/test/Transforms/ScalarRepl/2010-01-18-SelfCopy.ll +++ /dev/null @@ -1,18 +0,0 @@ -; RUN: opt < %s -scalarrepl -S | FileCheck %s -; Radar 7552893 - -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" - -%struct.test = type { [3 x double] } - -define void @test_memcpy_self() nounwind { -; CHECK-LABEL: @test_memcpy_self( -; CHECK-NOT: alloca -; CHECK: ret void - %1 = alloca %struct.test - %2 = bitcast %struct.test* %1 to i8* - call void @llvm.memcpy.p0i8.p0i8.i32(i8* %2, i8* %2, i32 24, i32 4, i1 false) - ret void -} - -declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind diff --git a/llvm/test/Transforms/ScalarRepl/2011-05-06-CapturedAlloca.ll b/llvm/test/Transforms/ScalarRepl/2011-05-06-CapturedAlloca.ll deleted file mode 100644 index 997d03b059e..00000000000 --- a/llvm/test/Transforms/ScalarRepl/2011-05-06-CapturedAlloca.ll +++ /dev/null @@ -1,26 +0,0 @@ -; RUN: opt < %s -instcombine -S | FileCheck %s -; PR9820 - -target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" -target triple = "x86_64-unknown-linux-gnu" - -@func_1.l_10 = internal unnamed_addr constant [4 x i32] [i32 1, i32 0, i32 0, i32 0], align 16 - -define i32* @noop(i32* %p_29) nounwind readnone { -entry: - ret i32* %p_29 -} - -define i32 @main() nounwind { -entry: - %l_10 = alloca [4 x i32], align 16 - %tmp = bitcast [4 x i32]* %l_10 to i8* - call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp, i8* bitcast ([4 x i32]* @func_1.l_10 to i8*), i64 16, i32 16, i1 false) -; CHECK: call void @llvm.memcpy - %arrayidx = getelementptr inbounds [4 x i32], [4 x i32]* %l_10, i64 0, i64 0 - %call = call i32* @noop(i32* %arrayidx) - store i32 0, i32* %call - ret i32 0 -} - -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i32, i1) nounwind diff --git a/llvm/test/Transforms/ScalarRepl/2011-06-08-VectorExtractValue.ll b/llvm/test/Transforms/ScalarRepl/2011-06-08-VectorExtractValue.ll deleted file mode 100644 index dee27f8e306..00000000000 --- a/llvm/test/Transforms/ScalarRepl/2011-06-08-VectorExtractValue.ll +++ /dev/null @@ -1,75 +0,0 @@ -; RUN: opt < %s -S -scalarrepl | FileCheck %s -; RUN: opt < %s -S -scalarrepl-ssa | FileCheck %s -target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" -target triple = "x86_64-apple-macosx10.7.0" - -%0 = type { <2 x float>, float } -%struct.PointC3 = type { %struct.array } -%struct.Point_3 = type { %struct.PointC3 } -%struct.array = type { [3 x float], [4 x i8] } - -; CHECK: main -; CHECK-NOT: alloca -; CHECK: extractelement <2 x float> zeroinitializer, i32 0 - -define void @main() uwtable ssp { -entry: - %ref.tmp2 = alloca %0, align 16 - %tmpcast = bitcast %0* %ref.tmp2 to %struct.Point_3* - %0 = getelementptr %0, %0* %ref.tmp2, i64 0, i32 0 - store <2 x float> zeroinitializer, <2 x float>* %0, align 16 - %1 = getelementptr inbounds %struct.Point_3, %struct.Point_3* %tmpcast, i64 0, i32 0 - %base.i.i.i = getelementptr inbounds %struct.PointC3, %struct.PointC3* %1, i64 0, i32 0 - %arrayidx.i.i.i.i = getelementptr inbounds %struct.array, %struct.array* %base.i.i.i, i64 0, i32 0, i64 0 - %tmp5.i.i = load float, float* %arrayidx.i.i.i.i, align 4 - ret void -} - -; CHECK: test1 -; CHECK-NOT: alloca -; CHECK: extractelement <2 x float> zeroinitializer, i32 0 - -define void @test1() uwtable ssp { -entry: - %ref.tmp2 = alloca {<2 x float>, float}, align 16 - %tmpcast = bitcast {<2 x float>, float}* %ref.tmp2 to float* - %0 = getelementptr {<2 x float>, float}, {<2 x float>, float}* %ref.tmp2, i64 0, i32 0 - store <2 x float> zeroinitializer, <2 x float>* %0, align 16 - %tmp5.i.i = load float, float* %tmpcast, align 4 - ret void -} - -; CHECK: test2 -; CHECK-NOT: alloca -; CHECK: %[[A:[a-z0-9]*]] = extractelement <2 x float> zeroinitializer, i32 0 -; CHECK: fadd float %[[A]], 1.000000e+00 -; CHECK-NOT: insertelement -; CHECK-NOT: extractelement - -define float @test2() uwtable ssp { -entry: - %ref.tmp2 = alloca {<2 x float>, float}, align 16 - %tmpcast = bitcast {<2 x float>, float}* %ref.tmp2 to float* - %tmpcast2 = getelementptr {<2 x float>, float}, {<2 x float>, float}* %ref.tmp2, i64 0, i32 1 - %0 = getelementptr {<2 x float>, float}, {<2 x float>, float}* %ref.tmp2, i64 0, i32 0 - store <2 x float> zeroinitializer, <2 x float>* %0, align 16 - store float 1.0, float* %tmpcast2, align 4 - %r1 = load float, float* %tmpcast, align 4 - %r2 = load float, float* %tmpcast2, align 4 - %r = fadd float %r1, %r2 - ret float %r -} - -; CHECK: test3 -; CHECK: %[[A:[a-z0-9]*]] = extractelement <2 x float> <float 2.000000e+00, float 3.000000e+00>, i32 1 -; CHECK: ret float %[[A]] - -define float @test3() { -entry: - %ai = alloca { <2 x float>, <2 x float> }, align 8 - store { <2 x float>, <2 x float> } {<2 x float> <float 0.0, float 1.0>, <2 x float> <float 2.0, float 3.0>}, { <2 x float>, <2 x float> }* %ai, align 8 - %tmpcast = bitcast { <2 x float>, <2 x float> }* %ai to [4 x float]* - %arrayidx = getelementptr inbounds [4 x float], [4 x float]* %tmpcast, i64 0, i64 3 - %f = load float, float* %arrayidx, align 4 - ret float %f -} diff --git a/llvm/test/Transforms/ScalarRepl/2011-06-17-VectorPartialMemset.ll b/llvm/test/Transforms/ScalarRepl/2011-06-17-VectorPartialMemset.ll deleted file mode 100644 index af6d1f36fae..00000000000 --- a/llvm/test/Transforms/ScalarRepl/2011-06-17-VectorPartialMemset.ll +++ /dev/null @@ -1,37 +0,0 @@ -; RUN: opt < %s -scalarrepl -S | FileCheck %s -target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:32-f32:32:32-f64:32:32-v64:32:64-v128:32:128-a0:0:32-n32" -target triple = "thumbv7-apple-darwin10" - -; CHECK: f -; CHECK-NOT: alloca -; CHECK: %[[A:[a-z0-9]*]] = and i128 undef, -16777216 -; CHECK: %[[B:[a-z0-9]*]] = bitcast i128 %[[A]] to <4 x float> -; CHECK: %[[C:[a-z0-9]*]] = extractelement <4 x float> %[[B]], i32 0 -; CHECK: ret float %[[C]] - -define float @f() nounwind ssp { -entry: - %a = alloca <4 x float>, align 16 - %p = bitcast <4 x float>* %a to i8* - call void @llvm.memset.p0i8.i32(i8* %p, i8 0, i32 3, i32 16, i1 false) - %vec = load <4 x float>, <4 x float>* %a, align 8 - %val = extractelement <4 x float> %vec, i32 0 - ret float %val -} - -; CHECK: g -; CHECK-NOT: alloca -; CHECK: and i128 - -define void @g() nounwind ssp { -entry: - %a = alloca { <4 x float> }, align 16 - %p = bitcast { <4 x float> }* %a to i8* - call void @llvm.memset.p0i8.i32(i8* %p, i8 0, i32 16, i32 16, i1 false) - %q = bitcast { <4 x float> }* %a to [2 x <2 x float>]* - %arrayidx = getelementptr inbounds [2 x <2 x float>], [2 x <2 x float>]* %q, i32 0, i32 0 - store <2 x float> undef, <2 x float>* %arrayidx, align 8 - ret void -} - -declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) nounwind diff --git a/llvm/test/Transforms/ScalarRepl/2011-09-22-PHISpeculateInvoke.ll b/llvm/test/Transforms/ScalarRepl/2011-09-22-PHISpeculateInvoke.ll deleted file mode 100644 index bff6566d178..00000000000 --- a/llvm/test/Transforms/ScalarRepl/2011-09-22-PHISpeculateInvoke.ll +++ /dev/null @@ -1,40 +0,0 @@ -; RUN: opt < %s -scalarrepl -S | FileCheck %s -; PR10987 - -; Make sure scalarrepl doesn't move a load across an invoke which could -; modify the loaded value. -; (The PHI could theoretically be transformed by splitting the critical -; edge, but scalarrepl doesn't modify the CFG, at least at the moment.) - -declare void @extern_fn(i32*) -declare i32 @extern_fn2(i32) -declare i32 @__gcc_personality_v0(i32, i64, i8*, i8*) - -define void @odd_fn(i1) noinline personality i32 (i32, i64, i8*, i8*)* @__gcc_personality_v0 { - %retptr1 = alloca i32 - %retptr2 = alloca i32 - br i1 %0, label %then, label %else - -then: ; preds = %2 - invoke void @extern_fn(i32* %retptr1) - to label %join unwind label %unwind - -else: ; preds = %2 - store i32 3, i32* %retptr2 - br label %join - -join: ; preds = %then, %else - %storemerge.in = phi i32* [ %retptr2, %else ], [ %retptr1, %then ] - %storemerge = load i32, i32* %storemerge.in - %x3 = call i32 @extern_fn2(i32 %storemerge) - ret void - -unwind: ; preds = %then - %info = landingpad { i8*, i32 } - cleanup - call void @extern_fn(i32* null) - unreachable -} - -; CHECK-LABEL: define void @odd_fn( -; CHECK: %storemerge.in = phi i32* [ %retptr2, %else ], [ %retptr1, %then ] diff --git a/llvm/test/Transforms/ScalarRepl/2011-10-11-VectorMemset.ll b/llvm/test/Transforms/ScalarRepl/2011-10-11-VectorMemset.ll deleted file mode 100644 index 9e312314929..00000000000 --- a/llvm/test/Transforms/ScalarRepl/2011-10-11-VectorMemset.ll +++ /dev/null @@ -1,22 +0,0 @@ -; RUN: opt < %s -S -scalarrepl | FileCheck %s -target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" -target triple = "x86_64-apple-darwin11.0.1" - -; CHECK: test -; CHECK-NOT: alloca - -define void @test() nounwind { -entry: - %a156286 = alloca [4 x <4 x float>], align 16 - br i1 undef, label %cif_done, label %for_test158.preheader - -for_test158.preheader: ; preds = %entry - %a156286305 = bitcast [4 x <4 x float>]* %a156286 to i8* - call void @llvm.memset.p0i8.i64(i8* %a156286305, i8 -1, i64 64, i32 16, i1 false) - unreachable - -cif_done: ; preds = %entry - ret void -} - -declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) nounwind diff --git a/llvm/test/Transforms/ScalarRepl/2011-10-22-VectorCrash.ll b/llvm/test/Transforms/ScalarRepl/2011-10-22-VectorCrash.ll deleted file mode 100644 index c9c1a148a48..00000000000 --- a/llvm/test/Transforms/ScalarRepl/2011-10-22-VectorCrash.ll +++ /dev/null @@ -1,19 +0,0 @@ -; RUN: opt < %s -S -scalarrepl | FileCheck %s -target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:32:64-v128:32:128-a0:0:32-n32-S32" -target triple = "thumbv7-apple-ios5.0.0" - -%union.anon = type { <4 x float> } - -; CHECK-LABEL: @test( -; CHECK-NOT: alloca - -define void @test() nounwind { -entry: - %u = alloca %union.anon, align 16 - %u164 = bitcast %union.anon* %u to [4 x i32]* - %arrayidx165 = getelementptr inbounds [4 x i32], [4 x i32]* %u164, i32 0, i32 0 - store i32 undef, i32* %arrayidx165, align 4 - %v186 = bitcast %union.anon* %u to <4 x float>* - store <4 x float> undef, <4 x float>* %v186, align 16 - ret void -} diff --git a/llvm/test/Transforms/ScalarRepl/2011-11-11-EmptyStruct.ll b/llvm/test/Transforms/ScalarRepl/2011-11-11-EmptyStruct.ll deleted file mode 100644 index 51d1d146a90..00000000000 --- a/llvm/test/Transforms/ScalarRepl/2011-11-11-EmptyStruct.ll +++ /dev/null @@ -1,26 +0,0 @@ -; RUN: opt < %s -S -scalarrepl | FileCheck %s - -target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" - -%struct.S = type { [2 x %struct.anon], double } -%struct.anon = type {} - -; CHECK: @test() -; CHECK-NOT: alloca -; CHECK: ret double 1.0 - -define double @test() nounwind uwtable ssp { -entry: - %retval = alloca %struct.S, align 8 - %ret = alloca %struct.S, align 8 - %b = getelementptr inbounds %struct.S, %struct.S* %ret, i32 0, i32 1 - store double 1.000000e+00, double* %b, align 8 - %0 = bitcast %struct.S* %retval to i8* - %1 = bitcast %struct.S* %ret to i8* - call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false) - %2 = bitcast %struct.S* %retval to double* - %3 = load double, double* %2, align 1 - ret double %3 -} - -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i32, i1) nounwind diff --git a/llvm/test/Transforms/ScalarRepl/AggregatePromote.ll b/llvm/test/Transforms/ScalarRepl/AggregatePromote.ll deleted file mode 100644 index f6dfdf55346..00000000000 --- a/llvm/test/Transforms/ScalarRepl/AggregatePromote.ll +++ /dev/null @@ -1,51 +0,0 @@ -; RUN: opt < %s -scalarrepl -S | \ -; RUN: not grep alloca - -target datalayout = "E-p:32:32" -target triple = "powerpc-apple-darwin8.0.0" - -define i64 @test1(i64 %X) { - %A = alloca i64 ; <i64*> [#uses=3] - store i64 %X, i64* %A - %B = bitcast i64* %A to i32* ; <i32*> [#uses=1] - %C = bitcast i32* %B to i8* ; <i8*> [#uses=1] - store i8 0, i8* %C - %Y = load i64, i64* %A ; <i64> [#uses=1] - ret i64 %Y -} - -define i8 @test2(i64 %X) { - %X_addr = alloca i64 ; <i64*> [#uses=2] - store i64 %X, i64* %X_addr - %tmp.0 = bitcast i64* %X_addr to i32* ; <i32*> [#uses=1] - %tmp.1 = getelementptr i32, i32* %tmp.0, i32 1 ; <i32*> [#uses=1] - %tmp.2 = bitcast i32* %tmp.1 to i8* ; <i8*> [#uses=1] - %tmp.3 = getelementptr i8, i8* %tmp.2, i32 3 ; <i8*> [#uses=1] - %tmp.2.upgrd.1 = load i8, i8* %tmp.3 ; <i8> [#uses=1] - ret i8 %tmp.2.upgrd.1 -} - -define i16 @crafty(i64 %X) { - %a = alloca { i64 } ; <{ i64 }*> [#uses=2] - %tmp.0 = getelementptr { i64 }, { i64 }* %a, i32 0, i32 0 ; <i64*> [#uses=1] - store i64 %X, i64* %tmp.0 - %tmp.3 = bitcast { i64 }* %a to [4 x i16]* ; <[4 x i16]*> [#uses=2] - %tmp.4 = getelementptr [4 x i16], [4 x i16]* %tmp.3, i32 0, i32 3 ; <i16*> [#uses=1] - %tmp.5 = load i16, i16* %tmp.4 ; <i16> [#uses=1] - %tmp.8 = getelementptr [4 x i16], [4 x i16]* %tmp.3, i32 0, i32 2 ; <i16*> [#uses=1] - %tmp.9 = load i16, i16* %tmp.8 ; <i16> [#uses=1] - %tmp.10 = or i16 %tmp.9, %tmp.5 ; <i16> [#uses=1] - ret i16 %tmp.10 -} - -define i16 @crafty2(i64 %X) { - %a = alloca i64 ; <i64*> [#uses=2] - store i64 %X, i64* %a - %tmp.3 = bitcast i64* %a to [4 x i16]* ; <[4 x i16]*> [#uses=2] - %tmp.4 = getelementptr [4 x i16], [4 x i16]* %tmp.3, i32 0, i32 3 ; <i16*> [#uses=1] - %tmp.5 = load i16, i16* %tmp.4 ; <i16> [#uses=1] - %tmp.8 = getelementptr [4 x i16], [4 x i16]* %tmp.3, i32 0, i32 2 ; <i16*> [#uses=1] - %tmp.9 = load i16, i16* %tmp.8 ; <i16> [#uses=1] - %tmp.10 = or i16 %tmp.9, %tmp.5 ; <i16> [#uses=1] - ret i16 %tmp.10 -} diff --git a/llvm/test/Transforms/ScalarRepl/DifferingTypes.ll b/llvm/test/Transforms/ScalarRepl/DifferingTypes.ll deleted file mode 100644 index 3860f6cd757..00000000000 --- a/llvm/test/Transforms/ScalarRepl/DifferingTypes.ll +++ /dev/null @@ -1,16 +0,0 @@ -; This is a feature test. Hopefully one day this will be implemented. The -; generated code should perform the appropriate masking operations required -; depending on the endianness of the target... -; RUN: opt < %s -scalarrepl -S | \ -; RUN: not grep alloca -target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64" - -define i32 @testfunc(i32 %i, i8 %j) { - %I = alloca i32 ; <i32*> [#uses=3] - store i32 %i, i32* %I - %P = bitcast i32* %I to i8* ; <i8*> [#uses=1] - store i8 %j, i8* %P - %t = load i32, i32* %I ; <i32> [#uses=1] - ret i32 %t -} - diff --git a/llvm/test/Transforms/ScalarRepl/address-space.ll b/llvm/test/Transforms/ScalarRepl/address-space.ll deleted file mode 100644 index b8b90efefc3..00000000000 --- a/llvm/test/Transforms/ScalarRepl/address-space.ll +++ /dev/null @@ -1,35 +0,0 @@ -; RUN: opt -S -scalarrepl < %s | FileCheck %s -; PR7437 - Make sure SROA preserves address space of memcpy when -; hacking on it. -target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" -target triple = "x86_64-apple-darwin10" - -%struct.anon = type { [1 x float] } - -; CHECK-LABEL: define void @Test( -; CHECK: load float, float addrspace(2)* -; CHECK-NEXT: fsub float -; CHECK: store float {{.*}}, float addrspace(2)* -define void @Test(%struct.anon addrspace(2)* %pPtr) nounwind { -entry: - %s = alloca %struct.anon, align 4 ; <%struct.anon*> [#uses=3] - %arrayidx = getelementptr inbounds %struct.anon, %struct.anon addrspace(2)* %pPtr, i64 0 ; <%struct.anon addrspace(2)*> [#uses=1] - %tmp1 = bitcast %struct.anon* %s to i8* ; <i8*> [#uses=1] - %tmp2 = bitcast %struct.anon addrspace(2)* %arrayidx to i8 addrspace(2)* ; <i8 addrspace(2)*> [#uses=1] - call void @llvm.memcpy.p0i8.p2i8.i64(i8* %tmp1, i8 addrspace(2)* %tmp2, i64 4, i32 4, i1 false) - %tmp3 = getelementptr inbounds %struct.anon, %struct.anon* %s, i32 0, i32 0 ; <[1 x float]*> [#uses=1] - %arrayidx4 = getelementptr inbounds [1 x float], [1 x float]* %tmp3, i32 0, i64 0 ; <float*> [#uses=2] - %tmp5 = load float, float* %arrayidx4 ; <float> [#uses=1] - %sub = fsub float %tmp5, 5.000000e+00 ; <float> [#uses=1] - store float %sub, float* %arrayidx4 - %arrayidx7 = getelementptr inbounds %struct.anon, %struct.anon addrspace(2)* %pPtr, i64 0 ; <%struct.anon addrspace(2)*> [#uses=1] - %tmp8 = bitcast %struct.anon addrspace(2)* %arrayidx7 to i8 addrspace(2)* ; <i8 addrspace(2)*> [#uses=1] - %tmp9 = bitcast %struct.anon* %s to i8* ; <i8*> [#uses=1] - call void @llvm.memcpy.p2i8.p0i8.i64(i8 addrspace(2)* %tmp8, i8* %tmp9, i64 4, i32 4, i1 false) - ret void -} - -declare void @llvm.memcpy.p0i8.p2i8.i64(i8* nocapture, i8 addrspace(2)* nocapture, i64, i32, i1) nounwind - -declare void @llvm.memcpy.p2i8.p0i8.i64(i8 addrspace(2)* nocapture, i8* nocapture, i64, i32, i1) nounwind - diff --git a/llvm/test/Transforms/ScalarRepl/arraytest.ll b/llvm/test/Transforms/ScalarRepl/arraytest.ll deleted file mode 100644 index 486e725fa6a..00000000000 --- a/llvm/test/Transforms/ScalarRepl/arraytest.ll +++ /dev/null @@ -1,11 +0,0 @@ -; RUN: opt < %s -scalarrepl -mem2reg -S | not grep alloca -target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64" - -define i32 @test() { - %X = alloca [4 x i32] ; <[4 x i32]*> [#uses=1] - %Y = getelementptr [4 x i32], [4 x i32]* %X, i64 0, i64 0 ; <i32*> [#uses=2] - store i32 0, i32* %Y - %Z = load i32, i32* %Y ; <i32> [#uses=1] - ret i32 %Z -} - diff --git a/llvm/test/Transforms/ScalarRepl/badarray.ll b/llvm/test/Transforms/ScalarRepl/badarray.ll deleted file mode 100644 index 6f5bc95b43b..00000000000 --- a/llvm/test/Transforms/ScalarRepl/badarray.ll +++ /dev/null @@ -1,57 +0,0 @@ -; RUN: opt < %s -scalarrepl -S | FileCheck %s - -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:32:32-n8:16:32" -target triple = "i386-pc-linux-gnu" - - -; PR3466 -; Off end of array, don't transform. -define i32 @test1() { -; CHECK-LABEL: @test1( -; CHECK-NOT: = alloca - %X = alloca [4 x i32] - %Y = getelementptr [4 x i32], [4 x i32]* %X, i64 0, i64 6 ; <i32*> [#uses=2] - store i32 0, i32* %Y - %Z = load i32, i32* %Y ; <i32> [#uses=1] - ret i32 %Z -} - - -; Off end of array, don't transform. -define i32 @test2() nounwind { -entry: -; CHECK-LABEL: @test2( -; CHECK-NOT: = alloca - %yx2.i = alloca float, align 4 ; <float*> [#uses=1] - %yx26.i = bitcast float* %yx2.i to i64* ; <i64*> [#uses=1] - %0 = load i64, i64* %yx26.i, align 8 ; <i64> [#uses=0] - unreachable -} - -%base = type { i32, [0 x i8] } -%padded = type { %base, [1 x i32] } - -; PR5436 -define void @test3() { -entry: -; CHECK-LABEL: @test3( -; CHECK-NOT: = alloca -; CHECK: store i64 - %var_1 = alloca %padded, align 8 ; <%padded*> [#uses=3] - %0 = getelementptr inbounds %padded, %padded* %var_1, i32 0, i32 0 ; <%base*> [#uses=2] - - %p2 = getelementptr inbounds %base, %base* %0, i32 0, i32 1, i32 0 ; <i8*> [#uses=1] - store i8 72, i8* %p2, align 1 - - ; 72 -> a[0]. - - %callret = call %padded *@test3f() ; <i32> [#uses=2] - %callretcast = bitcast %padded* %callret to i8* ; <i8*> [#uses=1] - %var_11 = bitcast %padded* %var_1 to i8* ; <i8*> [#uses=1] - call void @llvm.memcpy.p0i8.p0i8.i32(i8* %callretcast, i8* %var_11, i32 8, i32 4, i1 false) - ret void -} - -declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind - -declare %padded* @test3f() diff --git a/llvm/test/Transforms/ScalarRepl/basictest.ll b/llvm/test/Transforms/ScalarRepl/basictest.ll deleted file mode 100644 index 35d4d3ba86f..00000000000 --- a/llvm/test/Transforms/ScalarRepl/basictest.ll +++ /dev/null @@ -1,30 +0,0 @@ -; RUN: opt < %s -scalarrepl -S | FileCheck %s -target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64" - -define i32 @test1() { - %X = alloca { i32, float } ; <{ i32, float }*> [#uses=1] - %Y = getelementptr { i32, float }, { i32, float }* %X, i64 0, i32 0 ; <i32*> [#uses=2] - store i32 0, i32* %Y - %Z = load i32, i32* %Y ; <i32> [#uses=1] - ret i32 %Z -; CHECK-LABEL: @test1( -; CHECK-NOT: alloca -; CHECK: ret i32 0 -} - -; PR8980 -define i64 @test2(i64 %X) { - %A = alloca [8 x i8] - %B = bitcast [8 x i8]* %A to i64* - - store i64 %X, i64* %B - br label %L2 - -L2: - %Z = load i64, i64* %B ; <i32> [#uses=1] - ret i64 %Z -; CHECK-LABEL: @test2( -; CHECK-NOT: alloca -; CHECK: ret i64 %X -} - diff --git a/llvm/test/Transforms/ScalarRepl/bitfield-sroa.ll b/llvm/test/Transforms/ScalarRepl/bitfield-sroa.ll deleted file mode 100644 index 52986b0a49d..00000000000 --- a/llvm/test/Transforms/ScalarRepl/bitfield-sroa.ll +++ /dev/null @@ -1,17 +0,0 @@ -; RUN: opt < %s -scalarrepl -S | not grep alloca -; rdar://6532315 -target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64" -%t = type { { i32, i16, i8, i8 } } - -define i8 @foo(i64 %A) { - %ALL = alloca %t, align 8 - %tmp59172 = bitcast %t* %ALL to i64* - store i64 %A, i64* %tmp59172, align 8 - %C = getelementptr %t, %t* %ALL, i32 0, i32 0, i32 1 - %D = bitcast i16* %C to i32* - %E = load i32, i32* %D, align 4 - %F = bitcast %t* %ALL to i8* - %G = load i8, i8* %F, align 8 - ret i8 %G -} - diff --git a/llvm/test/Transforms/ScalarRepl/copy-aggregate.ll b/llvm/test/Transforms/ScalarRepl/copy-aggregate.ll deleted file mode 100644 index 97977dbf11f..00000000000 --- a/llvm/test/Transforms/ScalarRepl/copy-aggregate.ll +++ /dev/null @@ -1,107 +0,0 @@ -; RUN: opt < %s -scalarrepl -S | FileCheck %s -; PR3290 -target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64" - -;; Store of integer to whole alloca struct. -define i32 @test1(i64 %V) nounwind { -; CHECK: test1 -; CHECK-NOT: alloca - %X = alloca {{i32, i32}} - %Y = bitcast {{i32,i32}}* %X to i64* - store i64 %V, i64* %Y - - %A = getelementptr {{i32,i32}}, {{i32,i32}}* %X, i32 0, i32 0, i32 0 - %B = getelementptr {{i32,i32}}, {{i32,i32}}* %X, i32 0, i32 0, i32 1 - %a = load i32, i32* %A - %b = load i32, i32* %B - %c = add i32 %a, %b - ret i32 %c -} - -;; Store of integer to whole struct/array alloca. -define float @test2(i128 %V) nounwind { -; CHECK: test2 -; CHECK-NOT: alloca - %X = alloca {[4 x float]} - %Y = bitcast {[4 x float]}* %X to i128* - store i128 %V, i128* %Y - - %A = getelementptr {[4 x float]}, {[4 x float]}* %X, i32 0, i32 0, i32 0 - %B = getelementptr {[4 x float]}, {[4 x float]}* %X, i32 0, i32 0, i32 3 - %a = load float, float* %A - %b = load float, float* %B - %c = fadd float %a, %b - ret float %c -} - -;; Load of whole alloca struct as integer -define i64 @test3(i32 %a, i32 %b) nounwind { -; CHECK: test3 -; CHECK-NOT: alloca - %X = alloca {{i32, i32}} - - %A = getelementptr {{i32,i32}}, {{i32,i32}}* %X, i32 0, i32 0, i32 0 - %B = getelementptr {{i32,i32}}, {{i32,i32}}* %X, i32 0, i32 0, i32 1 - store i32 %a, i32* %A - store i32 %b, i32* %B - - %Y = bitcast {{i32,i32}}* %X to i64* - %Z = load i64, i64* %Y - ret i64 %Z -} - -;; load of integer from whole struct/array alloca. -define i128 @test4(float %a, float %b) nounwind { -; CHECK: test4 -; CHECK-NOT: alloca - %X = alloca {[4 x float]} - %A = getelementptr {[4 x float]}, {[4 x float]}* %X, i32 0, i32 0, i32 0 - %B = getelementptr {[4 x float]}, {[4 x float]}* %X, i32 0, i32 0, i32 3 - store float %a, float* %A - store float %b, float* %B - - %Y = bitcast {[4 x float]}* %X to i128* - %V = load i128, i128* %Y - ret i128 %V -} - -;; If the elements of a struct or array alloca contain padding, SROA can still -;; split up the alloca as long as there is no padding between the elements. -%padded = type { i16, i8 } -define void @test5([4 x %padded]* %p, [4 x %padded]* %q) { -entry: -; CHECK: test5 -; CHECK-NOT: i128 - %var = alloca [4 x %padded], align 4 - %vari8 = bitcast [4 x %padded]* %var to i8* - %pi8 = bitcast [4 x %padded]* %p to i8* - call void @llvm.memcpy.p0i8.p0i8.i32(i8* %vari8, i8* %pi8, i32 16, i32 4, i1 false) - %qi8 = bitcast [4 x %padded]* %q to i8* - call void @llvm.memcpy.p0i8.p0i8.i32(i8* %qi8, i8* %vari8, i32 16, i32 4, i1 false) - ret void -} - -;; Check that an array alloca can be split up when it is also accessed with -;; a load or store as a homogeneous structure with the same element type and -;; number of elements as the array. -%homogeneous = type { <8 x i16>, <8 x i16>, <8 x i16> } -%wrapped_array = type { [3 x <8 x i16>] } -define void @test6(i8* %p, %wrapped_array* %arr) { -entry: -; CHECK: test6 -; CHECK: store <8 x i16> -; CHECK: store <8 x i16> -; CHECK: store <8 x i16> - %var = alloca %wrapped_array, align 16 - %res = call %homogeneous @test6callee(i8* %p) - %varcast = bitcast %wrapped_array* %var to %homogeneous* - store %homogeneous %res, %homogeneous* %varcast - %tmp1 = bitcast %wrapped_array* %arr to i8* - %tmp2 = bitcast %wrapped_array* %var to i8* - call void @llvm.memcpy.p0i8.p0i8.i32(i8* %tmp1, i8* %tmp2, i32 48, i32 16, i1 false) - ret void -} - -declare %homogeneous @test6callee(i8* nocapture) nounwind - -declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind diff --git a/llvm/test/Transforms/ScalarRepl/crash.ll b/llvm/test/Transforms/ScalarRepl/crash.ll deleted file mode 100644 index 72e9f090fb6..00000000000 --- a/llvm/test/Transforms/ScalarRepl/crash.ll +++ /dev/null @@ -1,286 +0,0 @@ -; RUN: opt -scalarrepl -disable-output < %s -; RUN: opt -scalarrepl-ssa -disable-output < %s - -target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" -target triple = "x86_64-apple-darwin10.0.0" - -; PR9017 -define void @test1() nounwind readnone ssp { -entry: - %l_72 = alloca i32*, align 8 - unreachable - -for.cond: ; preds = %for.cond - %tmp1.i = load i32*, i32** %l_72, align 8 - store i32* %tmp1.i, i32** %l_72, align 8 - br label %for.cond - -if.end: ; No predecessors! - ret void -} - - -define void @test2() { - %E = alloca { { i32, float, double, i64 }, { i32, float, double, i64 } } ; <{ { i32, float, double, i64 }, { i32, float, double, i64 } }*> [#uses=1] - %tmp.151 = getelementptr { { i32, float, double, i64 }, { i32, float, double, i64 } }, { { i32, float, double, i64 }, { i32, float, double, i64 } }* %E, i64 0, i32 1, i32 3 ; <i64*> [#uses=0] - ret void -} - -define i32 @test3() { - %X = alloca { [4 x i32] } ; <{ [4 x i32] }*> [#uses=1] - %Y = getelementptr { [4 x i32] }, { [4 x i32] }* %X, i64 0, i32 0, i64 2 ; <i32*> [#uses=2] - store i32 4, i32* %Y - %Z = load i32, i32* %Y ; <i32> [#uses=1] - ret i32 %Z -} - - -%struct.rtx_def = type { [2 x i8], i32, [1 x %union.rtunion_def] } -%union.rtunion_def = type { i32 } - -define void @test4() { -entry: - %c_addr.i = alloca i8 ; <i8*> [#uses=1] - switch i32 0, label %return [ - i32 36, label %label.7 - i32 34, label %label.7 - i32 41, label %label.5 - ] -label.5: ; preds = %entry - ret void -label.7: ; preds = %entry, %entry - br i1 false, label %then.4, label %switchexit.0 -then.4: ; preds = %label.7 - %tmp.0.i = bitcast i8* %c_addr.i to i32* ; <i32*> [#uses=1] - store i32 44, i32* %tmp.0.i - ret void -switchexit.0: ; preds = %label.7 - ret void -return: ; preds = %entry - ret void -} - - -define void @test5() { -entry: - %source_ptr = alloca i8*, align 4 ; <i8**> [#uses=2] - br i1 false, label %bb1357, label %cond_next583 -cond_next583: ; preds = %entry - ret void -bb1357: ; preds = %entry - br i1 false, label %bb1365, label %bb27055 -bb1365: ; preds = %bb1357 - switch i32 0, label %cond_next10377 [ - i32 0, label %bb4679 - i32 1, label %bb4679 - i32 2, label %bb4679 - i32 3, label %bb4679 - i32 4, label %bb5115 - i32 5, label %bb6651 - i32 6, label %bb7147 - i32 7, label %bb8683 - i32 8, label %bb9131 - i32 9, label %bb9875 - i32 10, label %bb4679 - i32 11, label %bb4859 - i32 12, label %bb4679 - i32 16, label %bb10249 - ] -bb4679: ; preds = %bb1365, %bb1365, %bb1365, %bb1365, %bb1365, %bb1365 - ret void -bb4859: ; preds = %bb1365 - ret void -bb5115: ; preds = %bb1365 - ret void -bb6651: ; preds = %bb1365 - ret void -bb7147: ; preds = %bb1365 - ret void -bb8683: ; preds = %bb1365 - ret void -bb9131: ; preds = %bb1365 - ret void -bb9875: ; preds = %bb1365 - %source_ptr9884 = bitcast i8** %source_ptr to i8** ; <i8**> [#uses=1] - %tmp9885 = load i8*, i8** %source_ptr9884 ; <i8*> [#uses=0] - ret void -bb10249: ; preds = %bb1365 - %source_ptr10257 = bitcast i8** %source_ptr to i16** ; <i16**> [#uses=1] - %tmp10258 = load i16*, i16** %source_ptr10257 ; <i16*> [#uses=0] - ret void -cond_next10377: ; preds = %bb1365 - ret void -bb27055: ; preds = %bb1357 - ret void -} - - - %"struct.__gnu_cxx::balloc::_Inclusive_between<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*>" = type { %"struct.__gnu_cxx::bitmap_allocator<char>::_Alloc_block"* } - %"struct.__gnu_cxx::bitmap_allocator<char>" = type { i8 } - %"struct.__gnu_cxx::bitmap_allocator<char>::_Alloc_block" = type { [8 x i8] } - -; PR1045 -define void @test6() { -entry: - %this_addr.i = alloca %"struct.__gnu_cxx::balloc::_Inclusive_between<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*>"* ; <%"struct.__gnu_cxx::balloc::_Inclusive_between<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*>"**> [#uses=3] - %tmp = alloca %"struct.__gnu_cxx::balloc::_Inclusive_between<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*>", align 4 ; <%"struct.__gnu_cxx::balloc::_Inclusive_between<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*>"*> [#uses=1] - store %"struct.__gnu_cxx::balloc::_Inclusive_between<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*>"* %tmp, %"struct.__gnu_cxx::balloc::_Inclusive_between<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*>"** %this_addr.i - %tmp.i = load %"struct.__gnu_cxx::balloc::_Inclusive_between<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*>"*, %"struct.__gnu_cxx::balloc::_Inclusive_between<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*>"** %this_addr.i ; <%"struct.__gnu_cxx::balloc::_Inclusive_between<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*>"*> [#uses=1] - %tmp.i.upgrd.1 = bitcast %"struct.__gnu_cxx::balloc::_Inclusive_between<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*>"* %tmp.i to %"struct.__gnu_cxx::bitmap_allocator<char>"* ; <%"struct.__gnu_cxx::bitmap_allocator<char>"*> [#uses=0] - %tmp1.i = load %"struct.__gnu_cxx::balloc::_Inclusive_between<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*>"*, %"struct.__gnu_cxx::balloc::_Inclusive_between<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*>"** %this_addr.i ; <%"struct.__gnu_cxx::balloc::_Inclusive_between<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*>"*> [#uses=1] - %tmp.i.upgrd.2 = getelementptr %"struct.__gnu_cxx::balloc::_Inclusive_between<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*>", %"struct.__gnu_cxx::balloc::_Inclusive_between<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*>"* %tmp1.i, i32 0, i32 0 ; <%"struct.__gnu_cxx::bitmap_allocator<char>::_Alloc_block"**> [#uses=0] - unreachable -} - - %struct.CGPoint = type { float, float } - %struct.aal_big_range_t = type { i32, i32 } %struct.aal_callback_t = type { i8* (i8*, i32)*, void (i8*, i8*)* } %struct.aal_edge_pool_t = type { %struct.aal_edge_pool_t*, i32, i32, [0 x %struct.aal_edge_t] } %struct.aal_edge_t = type { %struct.CGPoint, %struct.CGPoint, i32 } - %struct.aal_range_t = type { i16, i16 } - %struct.aal_span_pool_t = type { %struct.aal_span_pool_t*, [341 x %struct.aal_span_t] } - %struct.aal_span_t = type { %struct.aal_span_t*, %struct.aal_big_range_t } - %struct.aal_spanarray_t = type { [2 x %struct.aal_range_t] } - %struct.aal_spanbucket_t = type { i16, [2 x i8], %struct.anon } - %struct.aal_state_t = type { %struct.CGPoint, %struct.CGPoint, %struct.CGPoint, i32, float, float, float, float, %struct.CGPoint, %struct.CGPoint, float, float, float, float, i32, i32, i32, i32, float, float, i8*, i32, i32, %struct.aal_edge_pool_t*, %struct.aal_edge_pool_t*, i8*, %struct.aal_callback_t*, i32, %struct.aal_span_t*, %struct.aal_span_t*, %struct.aal_span_t*, %struct.aal_span_pool_t*, i8, float, i8, i32 } - %struct.anon = type { %struct.aal_spanarray_t } - - - -define fastcc void @test7() { -entry: - %SB = alloca %struct.aal_spanbucket_t, align 4 ; <%struct.aal_spanbucket_t*> [#uses=2] - br i1 false, label %cond_true, label %cond_next79 - -cond_true: ; preds = %entry - br i1 false, label %cond_next, label %cond_next114.i - -cond_next114.i: ; preds = %cond_true - ret void - -cond_next: ; preds = %cond_true - %SB19 = bitcast %struct.aal_spanbucket_t* %SB to i8* ; <i8*> [#uses=1] - call void @llvm.memcpy.p0i8.p0i8.i32(i8* %SB19, i8* null, i32 12, i32 0, i1 false) - br i1 false, label %cond_next34, label %cond_next79 - -cond_next34: ; preds = %cond_next - %i.2.reload22 = load i32, i32* null ; <i32> [#uses=1] - %tmp51 = getelementptr %struct.aal_spanbucket_t, %struct.aal_spanbucket_t* %SB, i32 0, i32 2, i32 0, i32 0, i32 %i.2.reload22, i32 1 - ; <i16*> [#uses=0] - ret void - -cond_next79: ; preds = %cond_next, %entry - ret void -} - - - %struct.c37304a__vrec = type { i8, %struct.c37304a__vrec___disc___XVN } - %struct.c37304a__vrec___disc___XVN = type { -%struct.c37304a__vrec___disc___XVN___O } - %struct.c37304a__vrec___disc___XVN___O = type { } - -; PR3304 -define void @test8() { -entry: - %v = alloca %struct.c37304a__vrec - %0 = getelementptr %struct.c37304a__vrec, %struct.c37304a__vrec* %v, i32 0, i32 0 - store i8 8, i8* %0, align 1 - unreachable -} - - - -; rdar://6808691 - ZeroLengthMemSet - %0 = type <{ i32, i16, i8, i8, i64, i64, i16, [0 x i16] }> - -define i32 @test9() { -entry: - %.compoundliteral = alloca %0 - %tmp228 = getelementptr %0, %0* %.compoundliteral, i32 0, i32 7 - %tmp229 = bitcast [0 x i16]* %tmp228 to i8* - call void @llvm.memset.p0i8.i64(i8* %tmp229, i8 0, i64 0, i32 2, i1 false) - unreachable -} - -declare void @llvm.memset.i64(i8* nocapture, i8, i64, i32) nounwind - - -; PR4146 - i1 handling -%wrapper = type { i1 } -define void @test10() { -entry: - %w = alloca %wrapper, align 8 ; <%wrapper*> [#uses=1] - %0 = getelementptr %wrapper, %wrapper* %w, i64 0, i32 0 ; <i1*> - store i1 true, i1* %0 - ret void -} - - - %struct.singlebool = type <{ i8 }> -; PR4286 -define zeroext i8 @test11() nounwind { -entry: - %a = alloca %struct.singlebool, align 1 ; <%struct.singlebool*> [#uses=2] - %storetmp.i = bitcast %struct.singlebool* %a to i1* ; <i1*> [#uses=1] - store i1 true, i1* %storetmp.i - %tmp = getelementptr %struct.singlebool, %struct.singlebool* %a, i64 0, i32 0 ; <i8*> [#uses=1] - %tmp1 = load i8, i8* %tmp ; <i8> [#uses=1] - ret i8 %tmp1 -} - - - %struct.Item = type { [4 x i16], %struct.rule* } - %struct.rule = type { [4 x i16], i32, i32, i32, %struct.nonterminal*, %struct.pattern*, i8 } - %struct.nonterminal = type { i8*, i32, i32, i32, %struct.plankMap*, %struct.rule* } - %struct.plankMap = type { %struct.list*, i32, %struct.stateMap* } - %struct.list = type { i8*, %struct.list* } - %struct.stateMap = type { i8*, %struct.plank*, i32, i16* } - %struct.plank = type { i8*, %struct.list*, i32 } - %struct.pattern = type { %struct.nonterminal*, %struct.operator*, [2 x %struct.nonterminal*] } - %struct.operator = type { i8*, i8, i32, i32, i32, i32, %struct.table* } - %struct.table = type { %struct.operator*, %struct.list*, i16*, [2 x %struct.dimension*], %struct.item_set** } - %struct.dimension = type { i16*, %struct.Index_Map, %struct.mapping*, i32, %struct.plankMap* } - %struct.Index_Map = type { i32, %struct.item_set** } - %struct.item_set = type { i32, i32, %struct.operator*, [2 x %struct.item_set*], %struct.item_set*, i16*, %struct.Item*, %struct.Item* } - %struct.mapping = type { %struct.list**, i32, i32, i32, %struct.item_set** } - -; VLAs. -define void @test12() { -bb4.i: - %malloccall = tail call i8* @malloc(i32 0) - %0 = bitcast i8* %malloccall to [0 x %struct.Item]* - %.sub.i.c.i = getelementptr [0 x %struct.Item], [0 x %struct.Item]* %0, i32 0, i32 0 ; <%struct.Item*> [#uses=0] - unreachable -} -declare noalias i8* @malloc(i32) - -; PR8680 -define void @test13() nounwind { -entry: - %memtmp = alloca i32, align 4 - %0 = bitcast i32* %memtmp to void ()* - call void %0() nounwind - ret void -} - -; rdar://11861001 - The dynamic GEP here was incorrectly making all accesses -; to the alloca think they were also dynamic. Inserts and extracts created to -; access the vector were all being based from the dynamic access, even in BBs -; not dominated by the GEP. -define fastcc void @test() optsize inlinehint ssp align 2 { -entry: - %alloc.0.0 = alloca <4 x float>, align 16 - %bitcast = bitcast <4 x float>* %alloc.0.0 to [4 x float]* - %idx3 = getelementptr inbounds [4 x float], [4 x float]* %bitcast, i32 0, i32 3 - store float 0.000000e+00, float* %idx3, align 4 - br label %for.body10 - -for.body10: ; preds = %for.body10, %entry - %loopidx = phi i32 [ 0, %entry ], [ undef, %for.body10 ] - %unusedidx = getelementptr inbounds <4 x float>, <4 x float>* %alloc.0.0, i32 0, i32 %loopidx - br i1 undef, label %for.end, label %for.body10 - -for.end: ; preds = %for.body10 - store <4 x float> <float -1.000000e+00, float -1.000000e+00, float -1.000000e+00, float 0.000000e+00>, <4 x float>* %alloc.0.0, align 16 - ret void -} - -declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind -declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) nounwind diff --git a/llvm/test/Transforms/ScalarRepl/debuginfo-preserved.ll b/llvm/test/Transforms/ScalarRepl/debuginfo-preserved.ll deleted file mode 100644 index 8dab20a735c..00000000000 --- a/llvm/test/Transforms/ScalarRepl/debuginfo-preserved.ll +++ /dev/null @@ -1,64 +0,0 @@ -; RUN: opt < %s -scalarrepl -S | FileCheck %s -; RUN: opt < %s -scalarrepl-ssa -S | FileCheck %s -target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" -target triple = "x86_64-apple-macosx10.6.0" - -; CHECK: f -; CHECK-NOT: llvm.dbg.declare -; CHECK: llvm.dbg.value -; CHECK: llvm.dbg.value -; CHECK: llvm.dbg.value -; CHECK: llvm.dbg.value -; CHECK: llvm.dbg.value - -define i32 @f(i32 %a, i32 %b) nounwind ssp !dbg !1 { -entry: - %a.addr = alloca i32, align 4 - %b.addr = alloca i32, align 4 - %c = alloca i32, align 4 - store i32 %a, i32* %a.addr, align 4 - call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !6, metadata !DIExpression()), !dbg !7 - store i32 %b, i32* %b.addr, align 4 - call void @llvm.dbg.declare(metadata i32* %b.addr, metadata !8, metadata !DIExpression()), !dbg !9 - call void @llvm.dbg.declare(metadata i32* %c, metadata !10, metadata !DIExpression()), !dbg !12 - %tmp = load i32, i32* %a.addr, align 4, !dbg !13 - store i32 %tmp, i32* %c, align 4, !dbg !13 - %tmp1 = load i32, i32* %a.addr, align 4, !dbg !14 - %tmp2 = load i32, i32* %b.addr, align 4, !dbg !14 - %add = add nsw i32 %tmp1, %tmp2, !dbg !14 - store i32 %add, i32* %a.addr, align 4, !dbg !14 - %tmp3 = load i32, i32* %c, align 4, !dbg !15 - %tmp4 = load i32, i32* %b.addr, align 4, !dbg !15 - %sub = sub nsw i32 %tmp3, %tmp4, !dbg !15 - store i32 %sub, i32* %b.addr, align 4, !dbg !15 - %tmp5 = load i32, i32* %a.addr, align 4, !dbg !16 - %tmp6 = load i32, i32* %b.addr, align 4, !dbg !16 - %add7 = add nsw i32 %tmp5, %tmp6, !dbg !16 - ret i32 %add7, !dbg !16 -} - -declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone - -!llvm.dbg.cu = !{!0} -!llvm.module.flags = !{!20} - -!0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.0 (trunk 131941)", isOptimized: false, emissionKind: FullDebug, file: !18, enums: !19, retainedTypes: !19) -!1 = distinct !DISubprogram(name: "f", line: 1, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 1, file: !18, scope: !2, type: !3) -!2 = !DIFile(filename: "/d/j/debug-test.c", directory: "/Volumes/Data/b") -!3 = !DISubroutineType(types: !4) -!4 = !{!5} -!5 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed) -!6 = !DILocalVariable(name: "a", line: 1, arg: 1, scope: !1, file: !2, type: !5) -!7 = !DILocation(line: 1, column: 11, scope: !1) -!8 = !DILocalVariable(name: "b", line: 1, arg: 2, scope: !1, file: !2, type: !5) -!9 = !DILocation(line: 1, column: 18, scope: !1) -!10 = !DILocalVariable(name: "c", line: 2, scope: !11, file: !2, type: !5) -!11 = distinct !DILexicalBlock(line: 1, column: 21, file: !18, scope: !1) -!12 = !DILocation(line: 2, column: 9, scope: !11) -!13 = !DILocation(line: 2, column: 14, scope: !11) -!14 = !DILocation(line: 3, column: 5, scope: !11) -!15 = !DILocation(line: 4, column: 5, scope: !11) -!16 = !DILocation(line: 5, column: 5, scope: !11) -!18 = !DIFile(filename: "/d/j/debug-test.c", directory: "/Volumes/Data/b") -!19 = !{} -!20 = !{i32 1, !"Debug Info Version", i32 3} diff --git a/llvm/test/Transforms/ScalarRepl/inline-vector.ll b/llvm/test/Transforms/ScalarRepl/inline-vector.ll deleted file mode 100644 index 85f37414e65..00000000000 --- a/llvm/test/Transforms/ScalarRepl/inline-vector.ll +++ /dev/null @@ -1,53 +0,0 @@ -; RUN: opt < %s -scalarrepl -S | FileCheck %s -; RUN: opt < %s -scalarrepl-ssa -S | FileCheck %s -target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:32-f32:32:32-f64:32:32-v64:64:64-v128:128:128-a0:0:32-n32" -target triple = "thumbv7-apple-darwin10.0.0" - -%struct.Vector4 = type { float, float, float, float } -@f.vector = internal constant %struct.Vector4 { float 1.000000e+00, float 2.000000e+00, float 3.000000e+00, float 4.000000e+00 }, align 16 - -; CHECK-LABEL: define void @f( -; CHECK-NOT: alloca -; CHECK: phi <4 x float> - -define void @f() nounwind ssp { -entry: - %i = alloca i32, align 4 - %vector = alloca %struct.Vector4, align 16 - %agg.tmp = alloca %struct.Vector4, align 16 - %tmp = bitcast %struct.Vector4* %vector to i8* - call void @llvm.memcpy.p0i8.p0i8.i32(i8* %tmp, i8* bitcast (%struct.Vector4* @f.vector to i8*), i32 16, i32 16, i1 false) - br label %for.cond - -for.cond: ; preds = %for.body, %entry - %storemerge = phi i32 [ 0, %entry ], [ %inc, %for.body ] - store i32 %storemerge, i32* %i, align 4 - %cmp = icmp slt i32 %storemerge, 1000000 - br i1 %cmp, label %for.body, label %for.end - -for.body: ; preds = %for.cond - %tmp2 = bitcast %struct.Vector4* %agg.tmp to i8* - %tmp3 = bitcast %struct.Vector4* %vector to i8* - call void @llvm.memcpy.p0i8.p0i8.i32(i8* %tmp2, i8* %tmp3, i32 16, i32 16, i1 false) - %0 = bitcast %struct.Vector4* %agg.tmp to [2 x i64]* - %1 = load [2 x i64], [2 x i64]* %0, align 16 - %tmp2.i = extractvalue [2 x i64] %1, 0 - %tmp3.i = zext i64 %tmp2.i to i128 - %tmp10.i = bitcast i128 %tmp3.i to <4 x float> - %sub.i.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %tmp10.i - %2 = bitcast %struct.Vector4* %vector to <4 x float>* - store <4 x float> %sub.i.i, <4 x float>* %2, align 16 - %tmp4 = load i32, i32* %i, align 4 - %inc = add nsw i32 %tmp4, 1 - br label %for.cond - -for.end: ; preds = %for.cond - %x = getelementptr inbounds %struct.Vector4, %struct.Vector4* %vector, i32 0, i32 0 - %tmp5 = load float, float* %x, align 16 - %conv = fpext float %tmp5 to double - %call = call i32 (...) @printf(double %conv) nounwind - ret void -} - -declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind -declare i32 @printf(...) diff --git a/llvm/test/Transforms/ScalarRepl/lifetime.ll b/llvm/test/Transforms/ScalarRepl/lifetime.ll deleted file mode 100644 index c0ddfb58bbd..00000000000 --- a/llvm/test/Transforms/ScalarRepl/lifetime.ll +++ /dev/null @@ -1,139 +0,0 @@ -; RUN: opt -scalarrepl -S < %s | FileCheck %s - -target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" -target triple = "x86_64-unknown-linux-gnu" - -declare void @llvm.lifetime.start(i64, i8*) -declare void @llvm.lifetime.end(i64, i8*) - -%t1 = type {i32, i32, i32} - -define void @test1() { -; CHECK-LABEL: @test1( - %A = alloca %t1 - %A1 = getelementptr %t1, %t1* %A, i32 0, i32 0 - %A2 = getelementptr %t1, %t1* %A, i32 0, i32 1 - %A3 = getelementptr %t1, %t1* %A, i32 0, i32 2 - %B = bitcast i32* %A1 to i8* - store i32 0, i32* %A1 - call void @llvm.lifetime.start(i64 -1, i8* %B) - ret void -; CHECK-NEXT: ret void -} - -define void @test2() { -; CHECK-LABEL: @test2( - %A = alloca %t1 - %A1 = getelementptr %t1, %t1* %A, i32 0, i32 0 - %A2 = getelementptr %t1, %t1* %A, i32 0, i32 1 - %A3 = getelementptr %t1, %t1* %A, i32 0, i32 2 - %B = bitcast i32* %A2 to i8* - store i32 0, i32* %A2 - call void @llvm.lifetime.start(i64 -1, i8* %B) - %C = load i32, i32* %A2 - ret void -; CHECK: ret void -} - -define void @test3() { -; CHECK-LABEL: @test3( - %A = alloca %t1 - %A1 = getelementptr %t1, %t1* %A, i32 0, i32 0 - %A2 = getelementptr %t1, %t1* %A, i32 0, i32 1 - %A3 = getelementptr %t1, %t1* %A, i32 0, i32 2 - %B = bitcast i32* %A2 to i8* - store i32 0, i32* %A2 - call void @llvm.lifetime.start(i64 6, i8* %B) - %C = load i32, i32* %A2 - ret void -; CHECK-NEXT: ret void -} - -define void @test4() { -; CHECK-LABEL: @test4( - %A = alloca %t1 - %A1 = getelementptr %t1, %t1* %A, i32 0, i32 0 - %A2 = getelementptr %t1, %t1* %A, i32 0, i32 1 - %A3 = getelementptr %t1, %t1* %A, i32 0, i32 2 - %B = bitcast i32* %A2 to i8* - store i32 0, i32* %A2 - call void @llvm.lifetime.start(i64 1, i8* %B) - %C = load i32, i32* %A2 - ret void -; CHECK-NEXT: ret void -} - -%t2 = type {i32, [4 x i8], i32} - -define void @test5() { -; CHECK-LABEL: @test5( - %A = alloca %t2 -; CHECK: alloca{{.*}}i8 -; CHECK: alloca{{.*}}i8 -; CHECK: alloca{{.*}}i8 - - %A21 = getelementptr %t2, %t2* %A, i32 0, i32 1, i32 0 - %A22 = getelementptr %t2, %t2* %A, i32 0, i32 1, i32 1 - %A23 = getelementptr %t2, %t2* %A, i32 0, i32 1, i32 2 - %A24 = getelementptr %t2, %t2* %A, i32 0, i32 1, i32 3 -; CHECK-NOT: store i8 1 - store i8 1, i8* %A21 - store i8 2, i8* %A22 - store i8 3, i8* %A23 - store i8 4, i8* %A24 - - %A1 = getelementptr %t2, %t2* %A, i32 0, i32 0 - %A2 = getelementptr %t2, %t2* %A, i32 0, i32 1, i32 1 - %A3 = getelementptr %t2, %t2* %A, i32 0, i32 2 - store i8 0, i8* %A2 - call void @llvm.lifetime.start(i64 5, i8* %A2) -; CHECK: llvm.lifetime{{.*}}i64 1 -; CHECK: llvm.lifetime{{.*}}i64 1 -; CHECK: llvm.lifetime{{.*}}i64 1 - %C = load i8, i8* %A2 - ret void -} - -%t3 = type {[4 x i16], [4 x i8]} - -define void @test6() { -; CHECK-LABEL: @test6( - %A = alloca %t3 -; CHECK: alloca i8 -; CHECK: alloca i8 -; CHECK: alloca i8 - - %A11 = getelementptr %t3, %t3* %A, i32 0, i32 0, i32 0 - %A12 = getelementptr %t3, %t3* %A, i32 0, i32 0, i32 1 - %A13 = getelementptr %t3, %t3* %A, i32 0, i32 0, i32 2 - %A14 = getelementptr %t3, %t3* %A, i32 0, i32 0, i32 3 - store i16 11, i16* %A11 - store i16 12, i16* %A12 - store i16 13, i16* %A13 - store i16 14, i16* %A14 -; CHECK-NOT: store i16 11 -; CHECK-NOT: store i16 12 -; CHECK-NOT: store i16 13 -; CHECK-NOT: store i16 14 - - %A21 = getelementptr %t3, %t3* %A, i32 0, i32 1, i32 0 - %A22 = getelementptr %t3, %t3* %A, i32 0, i32 1, i32 1 - %A23 = getelementptr %t3, %t3* %A, i32 0, i32 1, i32 2 - %A24 = getelementptr %t3, %t3* %A, i32 0, i32 1, i32 3 - store i8 21, i8* %A21 - store i8 22, i8* %A22 - store i8 23, i8* %A23 - store i8 24, i8* %A24 -; CHECK: store i8 21 -; CHECK: store i8 22 -; CHECK: store i8 23 -; CHECK-NOT: store i8 24 - - %B = bitcast i16* %A13 to i8* - call void @llvm.lifetime.start(i64 7, i8* %B) -; CHECK: lifetime.start{{.*}}i64 1 -; CHECK: lifetime.start{{.*}}i64 1 -; CHECK: lifetime.start{{.*}}i64 1 - - ret void -} diff --git a/llvm/test/Transforms/ScalarRepl/load-store-aggregate.ll b/llvm/test/Transforms/ScalarRepl/load-store-aggregate.ll deleted file mode 100644 index 88299f3679c..00000000000 --- a/llvm/test/Transforms/ScalarRepl/load-store-aggregate.ll +++ /dev/null @@ -1,31 +0,0 @@ -; This testcase shows that scalarrepl is able to replace struct alloca's which -; are directly loaded from or stored to (using the first class aggregates -; feature). -target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64" - -; RUN: opt < %s -scalarrepl -S > %t -; RUN: cat %t | not grep alloca - -%struct.foo = type { i32, i32 } - -define i32 @test(%struct.foo* %P) { -entry: - %L = alloca %struct.foo, align 8 ; <%struct.foo*> [#uses=2] - %V = load %struct.foo, %struct.foo* %P - store %struct.foo %V, %struct.foo* %L - - %tmp4 = getelementptr %struct.foo, %struct.foo* %L, i32 0, i32 0 ; <i32*> [#uses=1] - %tmp5 = load i32, i32* %tmp4 ; <i32> [#uses=1] - ret i32 %tmp5 -} - -define %struct.foo @test2(i32 %A, i32 %B) { -entry: - %L = alloca %struct.foo, align 8 ; <%struct.foo*> [#uses=2] - %L.0 = getelementptr %struct.foo, %struct.foo* %L, i32 0, i32 0 - store i32 %A, i32* %L.0 - %L.1 = getelementptr %struct.foo, %struct.foo* %L, i32 0, i32 1 - store i32 %B, i32* %L.1 - %V = load %struct.foo, %struct.foo* %L - ret %struct.foo %V -} diff --git a/llvm/test/Transforms/ScalarRepl/memcpy-align.ll b/llvm/test/Transforms/ScalarRepl/memcpy-align.ll deleted file mode 100644 index 29a1bb8a4b5..00000000000 --- a/llvm/test/Transforms/ScalarRepl/memcpy-align.ll +++ /dev/null @@ -1,32 +0,0 @@ -; RUN: opt -scalarrepl -S < %s | FileCheck %s -; PR6832 -target datalayout = -"e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-n32" -target triple = "arm-u-u" - -%0 = type { %struct.anon, %struct.anon } -%struct.anon = type { [4 x i8] } - -@c = external global %0 ; <%0*> [#uses=1] - -define void @good() nounwind { -entry: - %x0 = alloca %struct.anon, align 4 ; <%struct.anon*> [#uses=2] - %tmp = bitcast %struct.anon* %x0 to i8* ; <i8*> [#uses=1] - call void @llvm.memset.p0i8.i32(i8* %tmp, i8 0, i32 4, i32 4, i1 false) - %tmp1 = bitcast %struct.anon* %x0 to i8* ; <i8*> [#uses=1] - call void @llvm.memcpy.p0i8.p0i8.i32(i8* getelementptr inbounds (%0, %0* @c, i32 -0, i32 0, i32 0, i32 0), i8* %tmp1, i32 4, i32 4, i1 false) - ret void - -; CHECK: store i8 0, i8*{{.*}}, align 4 -; CHECK: store i8 0, i8*{{.*}}, align 1 -; CHECK: store i8 0, i8*{{.*}}, align 2 -; CHECK: store i8 0, i8*{{.*}}, align 1 -} - -declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) nounwind - -declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, -i1) nounwind - diff --git a/llvm/test/Transforms/ScalarRepl/memset-aggregate-byte-leader.ll b/llvm/test/Transforms/ScalarRepl/memset-aggregate-byte-leader.ll deleted file mode 100644 index e8088c121fb..00000000000 --- a/llvm/test/Transforms/ScalarRepl/memset-aggregate-byte-leader.ll +++ /dev/null @@ -1,23 +0,0 @@ -; PR1226 -; RUN: opt < %s -scalarrepl -S | \ -; RUN: not grep "call void @llvm.memcpy.p0i8.p0i8.i32" -; RUN: opt < %s -scalarrepl -S | grep getelementptr -; END. - -target datalayout = "E-p:32:32" -target triple = "powerpc-apple-darwin8.8.0" - %struct.foo = type { i8, i8 } - - -define i32 @test1(%struct.foo* %P) { -entry: - %L = alloca %struct.foo, align 2 ; <%struct.foo*> [#uses=1] - %L2 = getelementptr %struct.foo, %struct.foo* %L, i32 0, i32 0 ; <i8*> [#uses=2] - %tmp13 = getelementptr %struct.foo, %struct.foo* %P, i32 0, i32 0 ; <i8*> [#uses=1] - call void @llvm.memcpy.p0i8.p0i8.i32( i8* %L2, i8* %tmp13, i32 2, i32 1, i1 false) - %tmp5 = load i8, i8* %L2 ; <i8> [#uses=1] - %tmp56 = sext i8 %tmp5 to i32 ; <i32> [#uses=1] - ret i32 %tmp56 -} - -declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) diff --git a/llvm/test/Transforms/ScalarRepl/memset-aggregate.ll b/llvm/test/Transforms/ScalarRepl/memset-aggregate.ll deleted file mode 100644 index 98e2dddefe7..00000000000 --- a/llvm/test/Transforms/ScalarRepl/memset-aggregate.ll +++ /dev/null @@ -1,67 +0,0 @@ -; PR1226 -; RUN: opt < %s -scalarrepl -S | grep "ret i32 16843009" -; RUN: opt < %s -scalarrepl -S | not grep alloca -; RUN: opt < %s -scalarrepl -instcombine -S | grep "ret i16 514" - -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" -target triple = "i686-apple-darwin8" - %struct.bar = type { %struct.foo, i64, double } - %struct.foo = type { i32, i32 } - - -define i32 @test1(%struct.foo* %P) { -entry: - %L = alloca %struct.foo, align 8 ; <%struct.foo*> [#uses=2] - %L2 = bitcast %struct.foo* %L to i8* ; <i8*> [#uses=1] - %tmp13 = bitcast %struct.foo* %P to i8* ; <i8*> [#uses=1] - call void @llvm.memcpy.p0i8.p0i8.i32(i8* %L2, i8* %tmp13, i32 8, i32 4, i1 false) - %tmp4 = getelementptr %struct.foo, %struct.foo* %L, i32 0, i32 0 ; <i32*> [#uses=1] - %tmp5 = load i32, i32* %tmp4 ; <i32> [#uses=1] - ret i32 %tmp5 -} - - -define i32 @test2() { -entry: - %L = alloca [4 x %struct.foo], align 16 ; <[4 x %struct.foo]*> [#uses=2] - %L12 = bitcast [4 x %struct.foo]* %L to i8* ; <i8*> [#uses=1] - call void @llvm.memset.p0i8.i32(i8* %L12, i8 0, i32 32, i32 16, i1 false) - %tmp4 = getelementptr [4 x %struct.foo], [4 x %struct.foo]* %L, i32 0, i32 0, i32 0 ; <i32*> [#uses=1] - %tmp5 = load i32, i32* %tmp4 ; <i32> [#uses=1] - ret i32 %tmp5 -} - - -define i32 @test3() { -entry: - %B = alloca %struct.bar, align 16 ; <%struct.bar*> [#uses=4] - %B1 = bitcast %struct.bar* %B to i8* ; <i8*> [#uses=1] - call void @llvm.memset.p0i8.i32(i8* %B1, i8 1, i32 24, i32 16, i1 false) - %tmp3 = getelementptr %struct.bar, %struct.bar* %B, i32 0, i32 0, i32 0 ; <i32*> [#uses=1] - store i32 1, i32* %tmp3 - %tmp4 = getelementptr %struct.bar, %struct.bar* %B, i32 0, i32 2 ; <double*> [#uses=1] - store double 1.000000e+01, double* %tmp4 - %tmp6 = getelementptr %struct.bar, %struct.bar* %B, i32 0, i32 0, i32 1 ; <i32*> [#uses=1] - %tmp7 = load i32, i32* %tmp6 ; <i32> [#uses=1] - ret i32 %tmp7 -} - - - %struct.f = type { i32, i32, i32, i32, i32, i32 } - -define i16 @test4() nounwind { -entry: - %A = alloca %struct.f, align 8 ; <%struct.f*> [#uses=3] - %0 = getelementptr %struct.f, %struct.f* %A, i32 0, i32 0 ; <i32*> [#uses=1] - store i32 1, i32* %0, align 8 - %1 = getelementptr %struct.f, %struct.f* %A, i32 0, i32 1 ; <i32*> [#uses=1] - %2 = bitcast i32* %1 to i8* ; <i8*> [#uses=1] - call void @llvm.memset.p0i8.i32(i8* %2, i8 2, i32 12, i32 4, i1 false) - %3 = getelementptr %struct.f, %struct.f* %A, i32 0, i32 2 ; <i32*> [#uses=1] - %4 = load i32, i32* %3, align 8 ; <i32> [#uses=1] - %retval12 = trunc i32 %4 to i16 ; <i16> [#uses=1] - ret i16 %retval12 -} -declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind - -declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) nounwind diff --git a/llvm/test/Transforms/ScalarRepl/negative-memset.ll b/llvm/test/Transforms/ScalarRepl/negative-memset.ll deleted file mode 100644 index 458d9610cd7..00000000000 --- a/llvm/test/Transforms/ScalarRepl/negative-memset.ll +++ /dev/null @@ -1,20 +0,0 @@ -; PR12202 -; RUN: opt < %s -scalarrepl -S -; Ensure that we do not hang or crash when feeding a negative value to memset - -target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f80:128:128-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32-S32" -target triple = "i686-pc-win32" - -define i32 @test() nounwind { -entry: - %retval = alloca i32, align 4 - %buff = alloca [1 x i8], align 1 - store i32 0, i32* %retval - %0 = bitcast [1 x i8]* %buff to i8* - call void @llvm.memset.p0i8.i32(i8* %0, i8 0, i32 1, i32 1, i1 false) - %arraydecay = getelementptr inbounds [1 x i8], [1 x i8]* %buff, i32 0, i32 0 - call void @llvm.memset.p0i8.i32(i8* %arraydecay, i8 -1, i32 -8, i32 1, i1 false) ; Negative 8! - ret i32 0 -} - -declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) nounwind diff --git a/llvm/test/Transforms/ScalarRepl/nonzero-first-index.ll b/llvm/test/Transforms/ScalarRepl/nonzero-first-index.ll deleted file mode 100644 index da757b08d45..00000000000 --- a/llvm/test/Transforms/ScalarRepl/nonzero-first-index.ll +++ /dev/null @@ -1,53 +0,0 @@ -; RUN: opt < %s -scalarrepl -S | FileCheck %s - -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:32:32-n8:16:32" -target triple = "i386-pc-linux-gnu" - -%nested = type { i32, [4 x i32] } - -; Check that a GEP with a non-zero first index does not prevent SROA as long -; as the resulting offset corresponds to an element in the alloca. -define i32 @test1() { -; CHECK-LABEL: @test1( -; CHECK-NOT: = i160 -; CHECK: ret i32 undef - %A = alloca %nested - %B = getelementptr %nested, %nested* %A, i32 0, i32 1, i32 0 - %C = getelementptr i32, i32* %B, i32 2 - %D = load i32, i32* %C - ret i32 %D -} - -; But, if the offset is out of range, then it should not be transformed. -define i32 @test2() { -; CHECK-LABEL: @test2( -; CHECK: i160 - %A = alloca %nested - %B = getelementptr %nested, %nested* %A, i32 0, i32 1, i32 0 - %C = getelementptr i32, i32* %B, i32 4 - %D = load i32, i32* %C - ret i32 %D -} - -; Try it with a bitcast and single GEP.... -define i32 @test3() { -; CHECK-LABEL: @test3( -; CHECK-NOT: = i160 -; CHECK: ret i32 undef - %A = alloca %nested - %B = bitcast %nested* %A to i32* - %C = getelementptr i32, i32* %B, i32 2 - %D = load i32, i32* %C - ret i32 %D -} - -; ...and again make sure that out-of-range accesses are not transformed. -define i32 @test4() { -; CHECK-LABEL: @test4( -; CHECK: i160 - %A = alloca %nested - %B = bitcast %nested* %A to i32* - %C = getelementptr i32, i32* %B, i32 -1 - %D = load i32, i32* %C - ret i32 %D -} diff --git a/llvm/test/Transforms/ScalarRepl/not-a-vector.ll b/llvm/test/Transforms/ScalarRepl/not-a-vector.ll deleted file mode 100644 index 04c1f93617b..00000000000 --- a/llvm/test/Transforms/ScalarRepl/not-a-vector.ll +++ /dev/null @@ -1,20 +0,0 @@ -; RUN: opt < %s -scalarrepl -S | not grep alloca -; RUN: opt < %s -scalarrepl -S | not grep "7 x double" -; RUN: opt < %s -scalarrepl -instcombine -S | grep "ret double %B" -target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64" - -define double @test(double %A, double %B) { - %ARR = alloca [7 x i64] - %C = bitcast [7 x i64]* %ARR to double* - store double %A, double* %C - - %D = getelementptr [7 x i64], [7 x i64]* %ARR, i32 0, i32 4 - %E = bitcast i64* %D to double* - store double %B, double* %E - - %F = getelementptr double, double* %C, i32 4 - %G = load double, double* %F - ret double %G -} - - diff --git a/llvm/test/Transforms/ScalarRepl/only-memcpy-uses.ll b/llvm/test/Transforms/ScalarRepl/only-memcpy-uses.ll deleted file mode 100644 index d0ed20b26bc..00000000000 --- a/llvm/test/Transforms/ScalarRepl/only-memcpy-uses.ll +++ /dev/null @@ -1,27 +0,0 @@ -; RUN: opt < %s -scalarrepl -S | FileCheck %s -target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" -target triple = "x86_64-apple-darwin10.0.0" - -%struct.S = type { [12 x i32] } - -; CHECK-LABEL: @bar4( -define void @bar4(%struct.S* byval %s) nounwind ssp { -entry: -; CHECK: alloca -; CHECK-NOT: load -; CHECK: memcpy - %t = alloca %struct.S, align 4 - %agg.tmp = alloca %struct.S, align 4 - %tmp = bitcast %struct.S* %t to i8* - %tmp1 = bitcast %struct.S* %s to i8* - call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp, i8* %tmp1, i64 48, i32 4, i1 false) - %tmp2 = bitcast %struct.S* %agg.tmp to i8* - %tmp3 = bitcast %struct.S* %t to i8* - call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp2, i8* %tmp3, i64 48, i32 4, i1 false) - %call = call i32 (...) @bazz(%struct.S* byval %agg.tmp) - ret void -} - -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i32, i1) nounwind - -declare i32 @bazz(...) diff --git a/llvm/test/Transforms/ScalarRepl/phi-cycle.ll b/llvm/test/Transforms/ScalarRepl/phi-cycle.ll deleted file mode 100644 index a44f0818064..00000000000 --- a/llvm/test/Transforms/ScalarRepl/phi-cycle.ll +++ /dev/null @@ -1,80 +0,0 @@ -; RUN: opt -S -scalarrepl-ssa < %s | FileCheck %s -; rdar://10589171 - -target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" -target triple = "x86_64-unknown-linux-gnu" - -%struct.foo = type { i32, i32 } - -@.str = private unnamed_addr constant [6 x i8] c"x=%d\0A\00", align 1 - -define i32 @main(i32 %argc, i8** nocapture %argv) nounwind uwtable { -entry: - %f = alloca %struct.foo, align 4 - %x.i = getelementptr inbounds %struct.foo, %struct.foo* %f, i64 0, i32 0 - store i32 1, i32* %x.i, align 4 - %y.i = getelementptr inbounds %struct.foo, %struct.foo* %f, i64 0, i32 1 - br label %while.cond.i - -; CHECK: while.cond.i: -; CHECK-NEXT: %tmp = phi i32 [ 1, %entry ], [ %tmp2, %while.cond.backedge.i ] -; CHECK-NEXT: %pos.0.i = phi i32 [ 1, %entry ], [ %xtmp.i, %while.cond.backedge.i ] -; CHECK-NEXT: %left.0.i = phi i32 [ 1, %entry ], [ %dec.i, %while.cond.backedge.i ] -; CHECK-NOT: phi -while.cond.i: ; preds = %while.cond.backedge.i, %entry - %tmp = phi i32 [ 1, %entry ], [ %tmp2, %while.cond.backedge.i ] - %pos.0.i = phi i32 [ 1, %entry ], [ %xtmp.i, %while.cond.backedge.i ] - %left.0.i = phi i32 [ 1, %entry ], [ %dec.i, %while.cond.backedge.i ] - %cmp.i = icmp sgt i32 %left.0.i, 0 - br i1 %cmp.i, label %while.body.i, label %while.cond.i.func.exit_crit_edge - -while.cond.i.func.exit_crit_edge: ; preds = %while.cond.i - br label %func.exit - -while.body.i: ; preds = %while.cond.i - %dec.i = add nsw i32 %left.0.i, -1 - switch i32 1, label %while.body.i.func.exit_crit_edge [ - i32 0, label %while.cond.backedge.i - i32 1, label %sw.bb.i - ] - -while.body.i.func.exit_crit_edge: ; preds = %while.body.i - br label %func.exit - -sw.bb.i: ; preds = %while.body.i - %cmp2.i = icmp eq i32 %tmp, 1 - br i1 %cmp2.i, label %if.then.i, label %if.end.i - -if.then.i: ; preds = %sw.bb.i - store i32 %pos.0.i, i32* %x.i, align 4 - br label %if.end.i - -; CHECK: if.end.i: -; CHECK-NEXT: %tmp1 = phi i32 [ %pos.0.i, %if.then.i ], [ %tmp, %sw.bb.i ] -; CHECK-NOT: phi -if.end.i: ; preds = %if.then.i, %sw.bb.i - %tmp1 = phi i32 [ %pos.0.i, %if.then.i ], [ %tmp, %sw.bb.i ] - store i32 %tmp1, i32* %y.i, align 4 - br label %while.cond.backedge.i - -; CHECK: while.cond.backedge.i: -; CHECK-NEXT: %tmp2 = phi i32 [ %tmp1, %if.end.i ], [ %tmp, %while.body.i ] -; CHECK-NOT: phi -while.cond.backedge.i: ; preds = %if.end.i, %while.body.i - %tmp2 = phi i32 [ %tmp1, %if.end.i ], [ %tmp, %while.body.i ] - %xtmp.i = add i32 %pos.0.i, 1 - br label %while.cond.i - -; CHECK: func.exit: -; CHECK-NOT: load -; CHECK: %call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str, i64 0, i64 0), i32 %tmp) [[NUW:#[0-9]+]] -func.exit: ; preds = %while.body.i.func.exit_crit_edge, %while.cond.i.func.exit_crit_edge - %tmp3 = load i32, i32* %x.i, align 4 - %call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str, i64 0, i64 0), i32 %tmp3) nounwind - ret i32 0 -} - -declare i32 @printf(i8* nocapture, ...) nounwind - -; CHECK: attributes #0 = { nounwind uwtable } -; CHECK: attributes [[NUW]] = { nounwind } diff --git a/llvm/test/Transforms/ScalarRepl/phi-select.ll b/llvm/test/Transforms/ScalarRepl/phi-select.ll deleted file mode 100644 index a6c7135a492..00000000000 --- a/llvm/test/Transforms/ScalarRepl/phi-select.ll +++ /dev/null @@ -1,153 +0,0 @@ -; RUN: opt -scalarrepl -S < %s | FileCheck %s -; Test promotion of allocas that have phis and select users. -target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" -target triple = "x86_64-apple-darwin10.2" - -%struct.X = type { i32 } -%PairTy = type {i32, i32} - -; CHECK-LABEL: @test1( -; CHECK: %a.0 = alloca i32 -; CHECK: %b.0 = alloca i32 -define i32 @test1(i32 %x) nounwind readnone ssp { -entry: - %a = alloca %struct.X, align 8 ; <%struct.X*> [#uses=2] - %b = alloca %struct.X, align 8 ; <%struct.X*> [#uses=2] - %0 = getelementptr inbounds %struct.X, %struct.X* %a, i64 0, i32 0 ; <i32*> [#uses=1] - store i32 1, i32* %0, align 8 - %1 = getelementptr inbounds %struct.X, %struct.X* %b, i64 0, i32 0 ; <i32*> [#uses=1] - store i32 2, i32* %1, align 8 - %2 = icmp eq i32 %x, 0 ; <i1> [#uses=1] - %p.0 = select i1 %2, %struct.X* %b, %struct.X* %a ; <%struct.X*> [#uses=1] - %3 = getelementptr inbounds %struct.X, %struct.X* %p.0, i64 0, i32 0 ; <i32*> [#uses=1] - %4 = load i32, i32* %3, align 8 ; <i32> [#uses=1] - ret i32 %4 -} - -; CHECK-LABEL: @test2( -; CHECK: %X.ld = phi i32 [ 1, %entry ], [ 2, %T ] -; CHECK-NEXT: ret i32 %X.ld -define i32 @test2(i1 %c) { -entry: - %A = alloca {i32, i32} - %B = getelementptr {i32, i32}, {i32, i32}* %A, i32 0, i32 0 - store i32 1, i32* %B - br i1 %c, label %T, label %F -T: - %C = getelementptr {i32, i32}, {i32, i32}* %A, i32 0, i32 1 - store i32 2, i32* %C - br label %F -F: - %X = phi i32* [%B, %entry], [%C, %T] - %Q = load i32, i32* %X - ret i32 %Q -} - -; CHECK-LABEL: @test3( -; CHECK-NEXT: %Q = select i1 %c, i32 1, i32 2 -; CHECK-NEXT: ret i32 %Q -; rdar://8904039 -define i32 @test3(i1 %c) { - %A = alloca {i32, i32} - %B = getelementptr {i32, i32}, {i32, i32}* %A, i32 0, i32 0 - store i32 1, i32* %B - %C = getelementptr {i32, i32}, {i32, i32}* %A, i32 0, i32 1 - store i32 2, i32* %C - - %X = select i1 %c, i32* %B, i32* %C - %Q = load i32, i32* %X - ret i32 %Q -} - -;; We can't scalarize this, a use of the select is not an element access. -define i64 @test4(i1 %c) { -entry: - %A = alloca %PairTy - ; CHECK-LABEL: @test4( - ; CHECK: %A = alloca %PairTy - %B = getelementptr %PairTy, %PairTy* %A, i32 0, i32 0 - store i32 1, i32* %B - %C = getelementptr %PairTy, %PairTy* %A, i32 0, i32 1 - store i32 2, i32* %B - - %X = select i1 %c, i32* %B, i32* %C - %Y = bitcast i32* %X to i64* - %Q = load i64, i64* %Y - ret i64 %Q -} - - -;; -;; Tests for promoting allocas used by selects. -;; rdar://7339113 -;; - -define i32 @test5(i32 *%P) nounwind readnone ssp { -entry: - %b = alloca i32, align 8 - store i32 2, i32* %b, align 8 - - ;; Select on constant condition should be folded. - %p.0 = select i1 false, i32* %b, i32* %P - store i32 123, i32* %p.0 - - %r = load i32, i32* %b, align 8 - ret i32 %r - -; CHECK-LABEL: @test5( -; CHECK: store i32 123, i32* %P -; CHECK: ret i32 2 -} - -define i32 @test6(i32 %x, i1 %c) nounwind readnone ssp { - %a = alloca i32, align 8 - %b = alloca i32, align 8 - store i32 1, i32* %a, align 8 - store i32 2, i32* %b, align 8 - %p.0 = select i1 %c, i32* %b, i32* %a - %r = load i32, i32* %p.0, align 8 - ret i32 %r -; CHECK-LABEL: @test6( -; CHECK-NEXT: %r = select i1 %c, i32 2, i32 1 -; CHECK-NEXT: ret i32 %r -} - -; Verify that the loads happen where the loads are, not where the select is. -define i32 @test7(i32 %x, i1 %c) nounwind readnone ssp { - %a = alloca i32, align 8 - %b = alloca i32, align 8 - store i32 1, i32* %a - store i32 2, i32* %b - %p.0 = select i1 %c, i32* %b, i32* %a - - store i32 0, i32* %a - - %r = load i32, i32* %p.0, align 8 - ret i32 %r -; CHECK-LABEL: @test7( -; CHECK-NOT: alloca i32 -; CHECK: %r = select i1 %c, i32 2, i32 0 -; CHECK: ret i32 %r -} - -;; Promote allocs that are PHI'd together by moving the loads. -define i32 @test8(i32 %x) nounwind readnone ssp { -; CHECK-LABEL: @test8( -; CHECK-NOT: load i32 -; CHECK-NOT: store i32 -; CHECK: %p.0.ld = phi i32 [ 2, %entry ], [ 1, %T ] -; CHECK-NEXT: ret i32 %p.0.ld -entry: - %a = alloca i32, align 8 - %b = alloca i32, align 8 - store i32 1, i32* %a, align 8 - store i32 2, i32* %b, align 8 - %c = icmp eq i32 %x, 0 - br i1 %c, label %T, label %Cont -T: - br label %Cont -Cont: - %p.0 = phi i32* [%b, %entry],[%a, %T] - %r = load i32, i32* %p.0, align 8 - ret i32 %r -} diff --git a/llvm/test/Transforms/ScalarRepl/phinodepromote.ll b/llvm/test/Transforms/ScalarRepl/phinodepromote.ll deleted file mode 100644 index c3af62485db..00000000000 --- a/llvm/test/Transforms/ScalarRepl/phinodepromote.ll +++ /dev/null @@ -1,34 +0,0 @@ -; RUN: opt < %s -simplifycfg -instcombine -mem2reg -S | not grep alloca -; -; This tests to see if mem2reg can promote alloca instructions whose addresses -; are used by PHI nodes that are immediately loaded. The LLVM C++ front-end -; often generates code that looks like this (when it codegen's ?: exprs as -; lvalues), so handling this simple extension is quite useful. -; -; This testcase is what the following program looks like when it reaches -; instcombine: -; -; template<typename T> -; const T& max(const T& a1, const T& a2) { return a1 < a2 ? a1 : a2; } -; int main() { return max(0, 1); } -; -; This test checks to make sure the combination of instcombine and mem2reg -; perform the transformation. - -define i32 @main() { -entry: - %mem_tmp.0 = alloca i32 ; <i32*> [#uses=3] - %mem_tmp.1 = alloca i32 ; <i32*> [#uses=3] - store i32 0, i32* %mem_tmp.0 - store i32 1, i32* %mem_tmp.1 - %tmp.1.i = load i32, i32* %mem_tmp.1 ; <i32> [#uses=1] - %tmp.3.i = load i32, i32* %mem_tmp.0 ; <i32> [#uses=1] - %tmp.4.i = icmp sle i32 %tmp.1.i, %tmp.3.i ; <i1> [#uses=1] - br i1 %tmp.4.i, label %cond_true.i, label %cond_continue.i -cond_true.i: ; preds = %entry - br label %cond_continue.i -cond_continue.i: ; preds = %cond_true.i, %entry - %mem_tmp.i.0 = phi i32* [ %mem_tmp.1, %cond_true.i ], [ %mem_tmp.0, %entry ] ; <i32*> [#uses=1] - %tmp.3 = load i32, i32* %mem_tmp.i.0 ; <i32> [#uses=1] - ret i32 %tmp.3 -} diff --git a/llvm/test/Transforms/ScalarRepl/select_promote.ll b/llvm/test/Transforms/ScalarRepl/select_promote.ll deleted file mode 100644 index b4ef8c46fa0..00000000000 --- a/llvm/test/Transforms/ScalarRepl/select_promote.ll +++ /dev/null @@ -1,18 +0,0 @@ -; Test promotion of loads that use the result of a select instruction. This -; should be simplified by the instcombine pass. - -; RUN: opt < %s -instcombine -mem2reg -S | not grep alloca - -define i32 @main() { - %mem_tmp.0 = alloca i32 ; <i32*> [#uses=3] - %mem_tmp.1 = alloca i32 ; <i32*> [#uses=3] - store i32 0, i32* %mem_tmp.0 - store i32 1, i32* %mem_tmp.1 - %tmp.1.i = load i32, i32* %mem_tmp.1 ; <i32> [#uses=1] - %tmp.3.i = load i32, i32* %mem_tmp.0 ; <i32> [#uses=1] - %tmp.4.i = icmp sle i32 %tmp.1.i, %tmp.3.i ; <i1> [#uses=1] - %mem_tmp.i.0 = select i1 %tmp.4.i, i32* %mem_tmp.1, i32* %mem_tmp.0 ; <i32*> [#uses=1] - %tmp.3 = load i32, i32* %mem_tmp.i.0 ; <i32> [#uses=1] - ret i32 %tmp.3 -} - diff --git a/llvm/test/Transforms/ScalarRepl/sroa-fca.ll b/llvm/test/Transforms/ScalarRepl/sroa-fca.ll deleted file mode 100644 index c6e7c23ab06..00000000000 --- a/llvm/test/Transforms/ScalarRepl/sroa-fca.ll +++ /dev/null @@ -1,21 +0,0 @@ -; RUN: opt < %s -scalarrepl | llvm-dis -; Make sure that SROA "scalar conversion" can handle first class aggregates. - -define i64 @test({i32, i32} %A) { - %X = alloca i64 - %Y = bitcast i64* %X to {i32,i32}* - store {i32,i32} %A, {i32,i32}* %Y - - %Q = load i64, i64* %X - ret i64 %Q -} - -define {i32,i32} @test2(i64 %A) { - %X = alloca i64 - %Y = bitcast i64* %X to {i32,i32}* - store i64 %A, i64* %X - - %Q = load {i32,i32}, {i32,i32}* %Y - ret {i32,i32} %Q -} - diff --git a/llvm/test/Transforms/ScalarRepl/sroa_two.ll b/llvm/test/Transforms/ScalarRepl/sroa_two.ll deleted file mode 100644 index f2285ef21a4..00000000000 --- a/llvm/test/Transforms/ScalarRepl/sroa_two.ll +++ /dev/null @@ -1,13 +0,0 @@ -; RUN: opt < %s -scalarrepl | llvm-dis - -define i32 @test(i32 %X) { - %Arr = alloca [2 x i32] ; <[2 x i32]*> [#uses=3] - %tmp.0 = getelementptr [2 x i32], [2 x i32]* %Arr, i32 0, i32 0 ; <i32*> [#uses=1] - store i32 1, i32* %tmp.0 - %tmp.1 = getelementptr [2 x i32], [2 x i32]* %Arr, i32 0, i32 1 ; <i32*> [#uses=1] - store i32 2, i32* %tmp.1 - %tmp.3 = getelementptr [2 x i32], [2 x i32]* %Arr, i32 0, i32 %X ; <i32*> [#uses=1] - %tmp.4 = load i32, i32* %tmp.3 ; <i32> [#uses=1] - ret i32 %tmp.4 -} - diff --git a/llvm/test/Transforms/ScalarRepl/union-fp-int.ll b/llvm/test/Transforms/ScalarRepl/union-fp-int.ll deleted file mode 100644 index fa64b60685f..00000000000 --- a/llvm/test/Transforms/ScalarRepl/union-fp-int.ll +++ /dev/null @@ -1,14 +0,0 @@ -; RUN: opt < %s -scalarrepl -S | \ -; RUN: not grep alloca -; RUN: opt < %s -scalarrepl -S | \ -; RUN: grep "bitcast.*float.*i32" -target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64" - -define i32 @test(float %X) { - %X_addr = alloca float ; <float*> [#uses=2] - store float %X, float* %X_addr - %X_addr.upgrd.1 = bitcast float* %X_addr to i32* ; <i32*> [#uses=1] - %tmp = load i32, i32* %X_addr.upgrd.1 ; <i32> [#uses=1] - ret i32 %tmp -} - diff --git a/llvm/test/Transforms/ScalarRepl/union-packed.ll b/llvm/test/Transforms/ScalarRepl/union-packed.ll deleted file mode 100644 index 741de76d581..00000000000 --- a/llvm/test/Transforms/ScalarRepl/union-packed.ll +++ /dev/null @@ -1,14 +0,0 @@ -; RUN: opt < %s -scalarrepl -S | \ -; RUN: not grep alloca -; RUN: opt < %s -scalarrepl -S | \ -; RUN: grep bitcast -target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64" - -define <4 x i32> @test(<4 x float> %X) { - %X_addr = alloca <4 x float> ; <<4 x float>*> [#uses=2] - store <4 x float> %X, <4 x float>* %X_addr - %X_addr.upgrd.1 = bitcast <4 x float>* %X_addr to <4 x i32>* ; <<4 x i32>*> [#uses=1] - %tmp = load <4 x i32>, <4 x i32>* %X_addr.upgrd.1 ; <<4 x i32>> [#uses=1] - ret <4 x i32> %tmp -} - diff --git a/llvm/test/Transforms/ScalarRepl/union-pointer.ll b/llvm/test/Transforms/ScalarRepl/union-pointer.ll deleted file mode 100644 index 6a5db1c4d6b..00000000000 --- a/llvm/test/Transforms/ScalarRepl/union-pointer.ll +++ /dev/null @@ -1,74 +0,0 @@ -; PR892 -; RUN: opt < %s -scalarrepl -S | FileCheck %s - - -target datalayout = "e-p:32:32-p1:16:16-n8:16:32" -target triple = "i686-apple-darwin8.7.2" - -%struct.Val = type { i32*, i32 } - -define i8* @test(i16* %X) { -; CHECK-LABEL: @test( -; CHECK-NOT: alloca -; CHECK: ret i8* - %X_addr = alloca i16* ; <i16**> [#uses=2] - store i16* %X, i16** %X_addr - %X_addr.upgrd.1 = bitcast i16** %X_addr to i8** ; <i8**> [#uses=1] - %tmp = load i8*, i8** %X_addr.upgrd.1 ; <i8*> [#uses=1] - ret i8* %tmp -} - -define i8 addrspace(1)* @test_as1(i16 addrspace(1)* %x) { -; CHECK-LABEL: @test_as1( -; CHECK-NEXT: %1 = ptrtoint i16 addrspace(1)* %x to i16 -; CHECK-NEXT: %2 = inttoptr i16 %1 to i8 addrspace(1)* -; CHECK-NEXT: ret i8 addrspace(1)* %2 - %x_addr = alloca i16 addrspace(1)* - store i16 addrspace(1)* %x, i16 addrspace(1)** %x_addr - %x_addr.upgrd.1 = bitcast i16 addrspace(1)** %x_addr to i8 addrspace(1)** - %tmp = load i8 addrspace(1)*, i8 addrspace(1)** %x_addr.upgrd.1 - ret i8 addrspace(1)* %tmp -} - -define i8 addrspace(1)* @test_as1_array(i16 addrspace(1)* %x) { -; CHECK-LABEL: @test_as1_array( -; CHECK-NEXT: %1 = ptrtoint i16 addrspace(1)* %x to i16 -; CHECK-NEXT: %2 = inttoptr i16 %1 to i8 addrspace(1)* -; CHECK-NEXT: ret i8 addrspace(1)* %2 - %as_ptr_array = alloca [4 x i16 addrspace(1)*] - %elem1 = getelementptr [4 x i16 addrspace(1)*], [4 x i16 addrspace(1)*]* %as_ptr_array, i32 0, i32 1 - store i16 addrspace(1)* %x, i16 addrspace(1)** %elem1 - %elem1.cast = bitcast i16 addrspace(1)** %elem1 to i8 addrspace(1)** - %tmp = load i8 addrspace(1)*, i8 addrspace(1)** %elem1.cast - ret i8 addrspace(1)* %tmp -} - - -define void @test2(i64 %Op.0) { -; CHECK-LABEL: @test2( -; CHECK-NOT: alloca -; CHECK: ret void - - %tmp = alloca %struct.Val, align 8 ; <%struct.Val*> [#uses=3] - %tmp1 = alloca %struct.Val, align 8 ; <%struct.Val*> [#uses=3] - %tmp.upgrd.2 = call i64 @_Z3foov( ) ; <i64> [#uses=1] - %tmp1.upgrd.3 = bitcast %struct.Val* %tmp1 to i64* ; <i64*> [#uses=1] - store i64 %tmp.upgrd.2, i64* %tmp1.upgrd.3 - %tmp.upgrd.4 = getelementptr %struct.Val, %struct.Val* %tmp, i32 0, i32 0 ; <i32**> [#uses=1] - %tmp2 = getelementptr %struct.Val, %struct.Val* %tmp1, i32 0, i32 0 ; <i32**> [#uses=1] - %tmp.upgrd.5 = load i32*, i32** %tmp2 ; <i32*> [#uses=1] - store i32* %tmp.upgrd.5, i32** %tmp.upgrd.4 - %tmp3 = getelementptr %struct.Val, %struct.Val* %tmp, i32 0, i32 1 ; <i32*> [#uses=1] - %tmp4 = getelementptr %struct.Val, %struct.Val* %tmp1, i32 0, i32 1 ; <i32*> [#uses=1] - %tmp.upgrd.6 = load i32, i32* %tmp4 ; <i32> [#uses=1] - store i32 %tmp.upgrd.6, i32* %tmp3 - %tmp7 = bitcast %struct.Val* %tmp to { i64 }* ; <{ i64 }*> [#uses=1] - %tmp8 = getelementptr { i64 }, { i64 }* %tmp7, i32 0, i32 0 ; <i64*> [#uses=1] - %tmp9 = load i64, i64* %tmp8 ; <i64> [#uses=1] - call void @_Z3bar3ValS_( i64 %Op.0, i64 %tmp9 ) - ret void -} - -declare i64 @_Z3foov() - -declare void @_Z3bar3ValS_(i64, i64) diff --git a/llvm/test/Transforms/ScalarRepl/vector_memcpy.ll b/llvm/test/Transforms/ScalarRepl/vector_memcpy.ll deleted file mode 100644 index 031ad5e38ca..00000000000 --- a/llvm/test/Transforms/ScalarRepl/vector_memcpy.ll +++ /dev/null @@ -1,28 +0,0 @@ -; RUN: opt < %s -scalarrepl -S > %t -; RUN: grep "ret <16 x float> %A" %t -; RUN: grep "ret <16 x float> zeroinitializer" %t -target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64" - -define <16 x float> @foo(<16 x float> %A) nounwind { - %tmp = alloca <16 x float>, align 16 - %tmp2 = alloca <16 x float>, align 16 - store <16 x float> %A, <16 x float>* %tmp - %s = bitcast <16 x float>* %tmp to i8* - %s2 = bitcast <16 x float>* %tmp2 to i8* - call void @llvm.memcpy.p0i8.p0i8.i64(i8* %s2, i8* %s, i64 64, i32 16, i1 false) - %R = load <16 x float>, <16 x float>* %tmp2 - ret <16 x float> %R -} - -define <16 x float> @foo2(<16 x float> %A) nounwind { - %tmp2 = alloca <16 x float>, align 16 - - %s2 = bitcast <16 x float>* %tmp2 to i8* - call void @llvm.memset.p0i8.i64(i8* %s2, i8 0, i64 64, i32 16, i1 false) - - %R = load <16 x float>, <16 x float>* %tmp2 - ret <16 x float> %R -} - -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i32, i1) nounwind -declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) nounwind diff --git a/llvm/test/Transforms/ScalarRepl/vector_promote.ll b/llvm/test/Transforms/ScalarRepl/vector_promote.ll deleted file mode 100644 index 3c2377fc0f2..00000000000 --- a/llvm/test/Transforms/ScalarRepl/vector_promote.ll +++ /dev/null @@ -1,137 +0,0 @@ -; RUN: opt < %s -scalarrepl -S | FileCheck %s -target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64" -target triple = "x86_64-apple-darwin10.0.0" - -define void @test1(<4 x float>* %F, float %f) { -entry: - %G = alloca <4 x float>, align 16 ; <<4 x float>*> [#uses=3] - %tmp = load <4 x float>, <4 x float>* %F ; <<4 x float>> [#uses=2] - %tmp3 = fadd <4 x float> %tmp, %tmp ; <<4 x float>> [#uses=1] - store <4 x float> %tmp3, <4 x float>* %G - %G.upgrd.1 = getelementptr <4 x float>, <4 x float>* %G, i32 0, i32 0 ; <float*> [#uses=1] - store float %f, float* %G.upgrd.1 - %tmp4 = load <4 x float>, <4 x float>* %G ; <<4 x float>> [#uses=2] - %tmp6 = fadd <4 x float> %tmp4, %tmp4 ; <<4 x float>> [#uses=1] - store <4 x float> %tmp6, <4 x float>* %F - ret void -; CHECK-LABEL: @test1( -; CHECK-NOT: alloca -; CHECK: %tmp = load <4 x float>, <4 x float>* %F -; CHECK: fadd <4 x float> %tmp, %tmp -; CHECK-NEXT: insertelement <4 x float> %tmp3, float %f, i32 0 -} - -define void @test2(<4 x float>* %F, float %f) { -entry: - %G = alloca <4 x float>, align 16 ; <<4 x float>*> [#uses=3] - %tmp = load <4 x float>, <4 x float>* %F ; <<4 x float>> [#uses=2] - %tmp3 = fadd <4 x float> %tmp, %tmp ; <<4 x float>> [#uses=1] - store <4 x float> %tmp3, <4 x float>* %G - %tmp.upgrd.2 = getelementptr <4 x float>, <4 x float>* %G, i32 0, i32 2 ; <float*> [#uses=1] - store float %f, float* %tmp.upgrd.2 - %tmp4 = load <4 x float>, <4 x float>* %G ; <<4 x float>> [#uses=2] - %tmp6 = fadd <4 x float> %tmp4, %tmp4 ; <<4 x float>> [#uses=1] - store <4 x float> %tmp6, <4 x float>* %F - ret void -; CHECK-LABEL: @test2( -; CHECK-NOT: alloca -; CHECK: %tmp = load <4 x float>, <4 x float>* %F -; CHECK: fadd <4 x float> %tmp, %tmp -; CHECK-NEXT: insertelement <4 x float> %tmp3, float %f, i32 2 -} - -define void @test3(<4 x float>* %F, float* %f) { -entry: - %G = alloca <4 x float>, align 16 ; <<4 x float>*> [#uses=2] - %tmp = load <4 x float>, <4 x float>* %F ; <<4 x float>> [#uses=2] - %tmp3 = fadd <4 x float> %tmp, %tmp ; <<4 x float>> [#uses=1] - store <4 x float> %tmp3, <4 x float>* %G - %tmp.upgrd.3 = getelementptr <4 x float>, <4 x float>* %G, i32 0, i32 2 ; <float*> [#uses=1] - %tmp.upgrd.4 = load float, float* %tmp.upgrd.3 ; <float> [#uses=1] - store float %tmp.upgrd.4, float* %f - ret void -; CHECK-LABEL: @test3( -; CHECK-NOT: alloca -; CHECK: %tmp = load <4 x float>, <4 x float>* %F -; CHECK: fadd <4 x float> %tmp, %tmp -; CHECK-NEXT: extractelement <4 x float> %tmp3, i32 2 -} - -define void @test4(<4 x float>* %F, float* %f) { -entry: - %G = alloca <4 x float>, align 16 ; <<4 x float>*> [#uses=2] - %tmp = load <4 x float>, <4 x float>* %F ; <<4 x float>> [#uses=2] - %tmp3 = fadd <4 x float> %tmp, %tmp ; <<4 x float>> [#uses=1] - store <4 x float> %tmp3, <4 x float>* %G - %G.upgrd.5 = getelementptr <4 x float>, <4 x float>* %G, i32 0, i32 0 ; <float*> [#uses=1] - %tmp.upgrd.6 = load float, float* %G.upgrd.5 ; <float> [#uses=1] - store float %tmp.upgrd.6, float* %f - ret void -; CHECK-LABEL: @test4( -; CHECK-NOT: alloca -; CHECK: %tmp = load <4 x float>, <4 x float>* %F -; CHECK: fadd <4 x float> %tmp, %tmp -; CHECK-NEXT: extractelement <4 x float> %tmp3, i32 0 -} - -define i32 @test5(float %X) { ;; should turn into bitcast. - %X_addr = alloca [4 x float] - %X1 = getelementptr [4 x float], [4 x float]* %X_addr, i32 0, i32 2 - store float %X, float* %X1 - %a = bitcast float* %X1 to i32* - %tmp = load i32, i32* %a - ret i32 %tmp -; CHECK-LABEL: @test5( -; CHECK-NEXT: bitcast float %X to i32 -; CHECK-NEXT: ret i32 -} - -define i64 @test6(<2 x float> %X) { - %X_addr = alloca <2 x float> - store <2 x float> %X, <2 x float>* %X_addr - %P = bitcast <2 x float>* %X_addr to i64* - %tmp = load i64, i64* %P - ret i64 %tmp -; CHECK-LABEL: @test6( -; CHECK: bitcast <2 x float> %X to i64 -; CHECK: ret i64 -} - -%struct.test7 = type { [6 x i32] } - -define void @test7() { -entry: - %memtmp = alloca %struct.test7, align 16 - %0 = bitcast %struct.test7* %memtmp to <4 x i32>* - store <4 x i32> zeroinitializer, <4 x i32>* %0, align 16 - %1 = getelementptr inbounds %struct.test7, %struct.test7* %memtmp, i64 0, i32 0, i64 5 - store i32 0, i32* %1, align 4 - ret void -; CHECK-LABEL: @test7( -; CHECK-NOT: alloca -; CHECK: and i192 -} - -; When promoting an alloca to a 1-element vector type, instructions that -; produce that same vector type should not be changed to insert one element -; into a new vector. <rdar://problem/14249078> -define <1 x i64> @test8(<1 x i64> %a) { -entry: - %a.addr = alloca <1 x i64>, align 8 - %__a = alloca <1 x i64>, align 8 - %tmp = alloca <1 x i64>, align 8 - store <1 x i64> %a, <1 x i64>* %a.addr, align 8 - %0 = load <1 x i64>, <1 x i64>* %a.addr, align 8 - store <1 x i64> %0, <1 x i64>* %__a, align 8 - %1 = load <1 x i64>, <1 x i64>* %__a, align 8 - %2 = bitcast <1 x i64> %1 to <8 x i8> - %3 = bitcast <8 x i8> %2 to <1 x i64> - %vshl_n = shl <1 x i64> %3, <i64 4> - store <1 x i64> %vshl_n, <1 x i64>* %tmp - %4 = load <1 x i64>, <1 x i64>* %tmp - ret <1 x i64> %4 -; CHECK-LABEL: @test8( -; CHECK-NOT: alloca -; CHECK-NOT: insertelement -; CHECK: ret <1 x i64> -} diff --git a/llvm/test/Transforms/ScalarRepl/vectors-with-mismatched-elements.ll b/llvm/test/Transforms/ScalarRepl/vectors-with-mismatched-elements.ll deleted file mode 100644 index 154883122df..00000000000 --- a/llvm/test/Transforms/ScalarRepl/vectors-with-mismatched-elements.ll +++ /dev/null @@ -1,27 +0,0 @@ -; RUN: opt -scalarrepl -S < %s | FileCheck %s -; rdar://9786827 - -; SROA should be able to handle the mixed types and eliminate the allocas here. - -; TODO: Currently it does this by falling back to integer "bags of bits". -; With enough cleverness, it should be possible to convert between <3 x i32> -; and <2 x i64> by using a combination of a bitcast and a shuffle. - -; CHECK: { -; CHECK-NOT: alloca -; CHECK: } - -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-darwin11.0.0" - -define <2 x i64> @foo() nounwind { -entry: - %retval = alloca <3 x i32>, align 16 - %z = alloca <4 x i32>, align 16 - %tmp = load <4 x i32>, <4 x i32>* %z - %tmp1 = shufflevector <4 x i32> %tmp, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2> - store <3 x i32> %tmp1, <3 x i32>* %retval - %0 = bitcast <3 x i32>* %retval to <2 x i64>* - %1 = load <2 x i64>, <2 x i64>* %0, align 1 - ret <2 x i64> %1 -} diff --git a/llvm/test/Transforms/ScalarRepl/volatile.ll b/llvm/test/Transforms/ScalarRepl/volatile.ll deleted file mode 100644 index 2a600b3b279..00000000000 --- a/llvm/test/Transforms/ScalarRepl/volatile.ll +++ /dev/null @@ -1,13 +0,0 @@ -; RUN: opt < %s -scalarrepl -S | FileCheck %s - -define i32 @voltest(i32 %T) { - %A = alloca {i32, i32} - %B = getelementptr {i32,i32}, {i32,i32}* %A, i32 0, i32 0 - store volatile i32 %T, i32* %B -; CHECK: store volatile - - %C = getelementptr {i32,i32}, {i32,i32}* %A, i32 0, i32 1 - %X = load volatile i32, i32* %C -; CHECK: load volatile - ret i32 %X -} |