Change tests from "opt %s" to "opt < %s" so that opt doesn't see the
[oota-llvm.git] / test / Transforms / MemCpyOpt / form-memset2.ll
1 ; RUN: opt < %s -memcpyopt -S | not grep store
2 ; RUN: opt < %s -memcpyopt -S | grep {call.*llvm.memset} | count 3
3
4 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"
5 target triple = "i386-apple-darwin8"
6         %struct.MV = type { i16, i16 }
7
8 define i32 @t() nounwind  {
9 entry:
10         %ref_idx = alloca [8 x i8]              ; <[8 x i8]*> [#uses=8]
11         %left_mvd = alloca [8 x %struct.MV]             ; <[8 x %struct.MV]*> [#uses=17]
12         %up_mvd = alloca [8 x %struct.MV]               ; <[8 x %struct.MV]*> [#uses=17]
13         %tmp20 = getelementptr [8 x i8]* %ref_idx, i32 0, i32 7         ; <i8*> [#uses=1]
14         store i8 -1, i8* %tmp20, align 1
15         %tmp23 = getelementptr [8 x i8]* %ref_idx, i32 0, i32 6         ; <i8*> [#uses=1]
16         store i8 -1, i8* %tmp23, align 1
17         %tmp26 = getelementptr [8 x i8]* %ref_idx, i32 0, i32 5         ; <i8*> [#uses=1]
18         store i8 -1, i8* %tmp26, align 1
19         %tmp29 = getelementptr [8 x i8]* %ref_idx, i32 0, i32 4         ; <i8*> [#uses=1]
20         store i8 -1, i8* %tmp29, align 1
21         %tmp32 = getelementptr [8 x i8]* %ref_idx, i32 0, i32 3         ; <i8*> [#uses=1]
22         store i8 -1, i8* %tmp32, align 1
23         %tmp35 = getelementptr [8 x i8]* %ref_idx, i32 0, i32 2         ; <i8*> [#uses=1]
24         store i8 -1, i8* %tmp35, align 1
25         %tmp38 = getelementptr [8 x i8]* %ref_idx, i32 0, i32 1         ; <i8*> [#uses=1]
26         store i8 -1, i8* %tmp38, align 1
27         %tmp41 = getelementptr [8 x i8]* %ref_idx, i32 0, i32 0         ; <i8*> [#uses=2]
28         store i8 -1, i8* %tmp41, align 1
29         %tmp43 = getelementptr [8 x %struct.MV]* %up_mvd, i32 0, i32 7, i32 0           ; <i16*> [#uses=1]
30         store i16 0, i16* %tmp43, align 2
31         %tmp46 = getelementptr [8 x %struct.MV]* %up_mvd, i32 0, i32 7, i32 1           ; <i16*> [#uses=1]
32         store i16 0, i16* %tmp46, align 2
33         %tmp57 = getelementptr [8 x %struct.MV]* %up_mvd, i32 0, i32 6, i32 0           ; <i16*> [#uses=1]
34         store i16 0, i16* %tmp57, align 2
35         %tmp60 = getelementptr [8 x %struct.MV]* %up_mvd, i32 0, i32 6, i32 1           ; <i16*> [#uses=1]
36         store i16 0, i16* %tmp60, align 2
37         %tmp71 = getelementptr [8 x %struct.MV]* %up_mvd, i32 0, i32 5, i32 0           ; <i16*> [#uses=1]
38         store i16 0, i16* %tmp71, align 2
39         %tmp74 = getelementptr [8 x %struct.MV]* %up_mvd, i32 0, i32 5, i32 1           ; <i16*> [#uses=1]
40         store i16 0, i16* %tmp74, align 2
41         %tmp85 = getelementptr [8 x %struct.MV]* %up_mvd, i32 0, i32 4, i32 0           ; <i16*> [#uses=1]
42         store i16 0, i16* %tmp85, align 2
43         %tmp88 = getelementptr [8 x %struct.MV]* %up_mvd, i32 0, i32 4, i32 1           ; <i16*> [#uses=1]
44         store i16 0, i16* %tmp88, align 2
45         %tmp99 = getelementptr [8 x %struct.MV]* %up_mvd, i32 0, i32 3, i32 0           ; <i16*> [#uses=1]
46         store i16 0, i16* %tmp99, align 2
47         %tmp102 = getelementptr [8 x %struct.MV]* %up_mvd, i32 0, i32 3, i32 1          ; <i16*> [#uses=1]
48         store i16 0, i16* %tmp102, align 2
49         %tmp113 = getelementptr [8 x %struct.MV]* %up_mvd, i32 0, i32 2, i32 0          ; <i16*> [#uses=1]
50         store i16 0, i16* %tmp113, align 2
51         %tmp116 = getelementptr [8 x %struct.MV]* %up_mvd, i32 0, i32 2, i32 1          ; <i16*> [#uses=1]
52         store i16 0, i16* %tmp116, align 2
53         %tmp127 = getelementptr [8 x %struct.MV]* %up_mvd, i32 0, i32 1, i32 0          ; <i16*> [#uses=1]
54         store i16 0, i16* %tmp127, align 2
55         %tmp130 = getelementptr [8 x %struct.MV]* %up_mvd, i32 0, i32 1, i32 1          ; <i16*> [#uses=1]
56         store i16 0, i16* %tmp130, align 2
57         %tmp141 = getelementptr [8 x %struct.MV]* %up_mvd, i32 0, i32 0, i32 0          ; <i16*> [#uses=1]
58         store i16 0, i16* %tmp141, align 8
59         %tmp144 = getelementptr [8 x %struct.MV]* %up_mvd, i32 0, i32 0, i32 1          ; <i16*> [#uses=1]
60         store i16 0, i16* %tmp144, align 2
61         %tmp148 = getelementptr [8 x %struct.MV]* %left_mvd, i32 0, i32 7, i32 0                ; <i16*> [#uses=1]
62         store i16 0, i16* %tmp148, align 2
63         %tmp151 = getelementptr [8 x %struct.MV]* %left_mvd, i32 0, i32 7, i32 1                ; <i16*> [#uses=1]
64         store i16 0, i16* %tmp151, align 2
65         %tmp162 = getelementptr [8 x %struct.MV]* %left_mvd, i32 0, i32 6, i32 0                ; <i16*> [#uses=1]
66         store i16 0, i16* %tmp162, align 2
67         %tmp165 = getelementptr [8 x %struct.MV]* %left_mvd, i32 0, i32 6, i32 1                ; <i16*> [#uses=1]
68         store i16 0, i16* %tmp165, align 2
69         %tmp176 = getelementptr [8 x %struct.MV]* %left_mvd, i32 0, i32 5, i32 0                ; <i16*> [#uses=1]
70         store i16 0, i16* %tmp176, align 2
71         %tmp179 = getelementptr [8 x %struct.MV]* %left_mvd, i32 0, i32 5, i32 1                ; <i16*> [#uses=1]
72         store i16 0, i16* %tmp179, align 2
73         %tmp190 = getelementptr [8 x %struct.MV]* %left_mvd, i32 0, i32 4, i32 0                ; <i16*> [#uses=1]
74         store i16 0, i16* %tmp190, align 2
75         %tmp193 = getelementptr [8 x %struct.MV]* %left_mvd, i32 0, i32 4, i32 1                ; <i16*> [#uses=1]
76         store i16 0, i16* %tmp193, align 2
77         %tmp204 = getelementptr [8 x %struct.MV]* %left_mvd, i32 0, i32 3, i32 0                ; <i16*> [#uses=1]
78         store i16 0, i16* %tmp204, align 2
79         %tmp207 = getelementptr [8 x %struct.MV]* %left_mvd, i32 0, i32 3, i32 1                ; <i16*> [#uses=1]
80         store i16 0, i16* %tmp207, align 2
81         %tmp218 = getelementptr [8 x %struct.MV]* %left_mvd, i32 0, i32 2, i32 0                ; <i16*> [#uses=1]
82         store i16 0, i16* %tmp218, align 2
83         %tmp221 = getelementptr [8 x %struct.MV]* %left_mvd, i32 0, i32 2, i32 1                ; <i16*> [#uses=1]
84         store i16 0, i16* %tmp221, align 2
85         %tmp232 = getelementptr [8 x %struct.MV]* %left_mvd, i32 0, i32 1, i32 0                ; <i16*> [#uses=1]
86         store i16 0, i16* %tmp232, align 2
87         %tmp235 = getelementptr [8 x %struct.MV]* %left_mvd, i32 0, i32 1, i32 1                ; <i16*> [#uses=1]
88         store i16 0, i16* %tmp235, align 2
89         %tmp246 = getelementptr [8 x %struct.MV]* %left_mvd, i32 0, i32 0, i32 0                ; <i16*> [#uses=1]
90         store i16 0, i16* %tmp246, align 8
91         %tmp249 = getelementptr [8 x %struct.MV]* %left_mvd, i32 0, i32 0, i32 1                ; <i16*> [#uses=1]
92         store i16 0, i16* %tmp249, align 2
93         %up_mvd252 = getelementptr [8 x %struct.MV]* %up_mvd, i32 0, i32 0              ; <%struct.MV*> [#uses=1]
94         %left_mvd253 = getelementptr [8 x %struct.MV]* %left_mvd, i32 0, i32 0          ; <%struct.MV*> [#uses=1]
95         call void @foo( %struct.MV* %up_mvd252, %struct.MV* %left_mvd253, i8* %tmp41 ) nounwind 
96         ret i32 undef
97 }
98
99 declare void @foo(%struct.MV*, %struct.MV*, i8*)