1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt < %s -basicaa -slp-vectorizer -dce -S -mtriple=x86_64-apple-macosx10.8.0 -mcpu=corei7 | FileCheck %s
3
4target 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"
5target triple = "x86_64-apple-macosx10.8.0"
6
7%struct._exon_t.12.103.220.363.480.649.740.857.1039.1065.1078.1091.1117.1130.1156.1169.1195.1221.1234.1286.1299.1312.1338.1429.1455.1468.1494.1520.1884.1897.1975.2066.2105.2170.2171 = type { i32, i32, i32, i32, i32, i32, [8 x i8] }
8
9define void @SIM4() {
10; CHECK-LABEL: @SIM4(
11; CHECK-NEXT:  entry:
12; CHECK-NEXT:    br i1 undef, label [[RETURN:%.*]], label [[LOR_LHS_FALSE:%.*]]
13; CHECK:       lor.lhs.false:
14; CHECK-NEXT:    br i1 undef, label [[RETURN]], label [[IF_END:%.*]]
15; CHECK:       if.end:
16; CHECK-NEXT:    br i1 undef, label [[FOR_END605:%.*]], label [[FOR_BODY_LR_PH:%.*]]
17; CHECK:       for.body.lr.ph:
18; CHECK-NEXT:    br label [[FOR_BODY:%.*]]
19; CHECK:       for.body:
20; CHECK-NEXT:    br i1 undef, label [[FOR_INC603:%.*]], label [[IF_END12:%.*]]
21; CHECK:       if.end12:
22; CHECK-NEXT:    br i1 undef, label [[LAND_LHS_TRUE:%.*]], label [[LAND_LHS_TRUE167:%.*]]
23; CHECK:       land.lhs.true:
24; CHECK-NEXT:    br i1 undef, label [[IF_THEN17:%.*]], label [[LAND_LHS_TRUE167]]
25; CHECK:       if.then17:
26; CHECK-NEXT:    br i1 undef, label [[IF_END98:%.*]], label [[LAND_RHS_LR_PH:%.*]]
27; CHECK:       land.rhs.lr.ph:
28; CHECK-NEXT:    unreachable
29; CHECK:       if.end98:
30; CHECK-NEXT:    [[FROM299:%.*]] = getelementptr inbounds [[STRUCT__EXON_T_12_103_220_363_480_649_740_857_1039_1065_1078_1091_1117_1130_1156_1169_1195_1221_1234_1286_1299_1312_1338_1429_1455_1468_1494_1520_1884_1897_1975_2066_2105_2170_2171:%.*]], %struct._exon_t.12.103.220.363.480.649.740.857.1039.1065.1078.1091.1117.1130.1156.1169.1195.1221.1234.1286.1299.1312.1338.1429.1455.1468.1494.1520.1884.1897.1975.2066.2105.2170.2171* undef, i64 0, i32 1
31; CHECK-NEXT:    br i1 undef, label [[LAND_LHS_TRUE167]], label [[IF_THEN103:%.*]]
32; CHECK:       if.then103:
33; CHECK-NEXT:    [[DOTSUB100:%.*]] = select i1 undef, i32 250, i32 undef
34; CHECK-NEXT:    [[MUL114:%.*]] = shl nsw i32 [[DOTSUB100]], 2
35; CHECK-NEXT:    [[FROM1115:%.*]] = getelementptr inbounds [[STRUCT__EXON_T_12_103_220_363_480_649_740_857_1039_1065_1078_1091_1117_1130_1156_1169_1195_1221_1234_1286_1299_1312_1338_1429_1455_1468_1494_1520_1884_1897_1975_2066_2105_2170_2171]], %struct._exon_t.12.103.220.363.480.649.740.857.1039.1065.1078.1091.1117.1130.1156.1169.1195.1221.1234.1286.1299.1312.1338.1429.1455.1468.1494.1520.1884.1897.1975.2066.2105.2170.2171* undef, i64 0, i32 0
36; CHECK-NEXT:    [[COND125:%.*]] = select i1 undef, i32 undef, i32 [[MUL114]]
37; CHECK-NEXT:    br label [[FOR_COND_I:%.*]]
38; CHECK:       for.cond.i:
39; CHECK-NEXT:    [[ROW_0_I:%.*]] = phi i32 [ undef, [[LAND_RHS_I874:%.*]] ], [ [[DOTSUB100]], [[IF_THEN103]] ]
40; CHECK-NEXT:    [[COL_0_I:%.*]] = phi i32 [ undef, [[LAND_RHS_I874]] ], [ [[COND125]], [[IF_THEN103]] ]
41; CHECK-NEXT:    br i1 undef, label [[LAND_RHS_I874]], label [[FOR_END_I:%.*]]
42; CHECK:       land.rhs.i874:
43; CHECK-NEXT:    br i1 undef, label [[FOR_COND_I]], label [[FOR_END_I]]
44; CHECK:       for.end.i:
45; CHECK-NEXT:    br i1 undef, label [[IF_THEN_I:%.*]], label [[IF_END_I:%.*]]
46; CHECK:       if.then.i:
47; CHECK-NEXT:    [[ADD14_I:%.*]] = add nsw i32 [[ROW_0_I]], undef
48; CHECK-NEXT:    [[ADD15_I:%.*]] = add nsw i32 [[COL_0_I]], undef
49; CHECK-NEXT:    br label [[EXTEND_BW_EXIT:%.*]]
50; CHECK:       if.end.i:
51; CHECK-NEXT:    [[ADD16_I:%.*]] = add i32 [[COND125]], [[DOTSUB100]]
52; CHECK-NEXT:    [[CMP26514_I:%.*]] = icmp slt i32 [[ADD16_I]], 0
53; CHECK-NEXT:    br i1 [[CMP26514_I]], label [[FOR_END33_I:%.*]], label [[FOR_BODY28_LR_PH_I:%.*]]
54; CHECK:       for.body28.lr.ph.i:
55; CHECK-NEXT:    br label [[FOR_END33_I]]
56; CHECK:       for.end33.i:
57; CHECK-NEXT:    br i1 undef, label [[FOR_END58_I:%.*]], label [[FOR_BODY52_LR_PH_I:%.*]]
58; CHECK:       for.body52.lr.ph.i:
59; CHECK-NEXT:    br label [[FOR_END58_I]]
60; CHECK:       for.end58.i:
61; CHECK-NEXT:    br label [[WHILE_COND260_I:%.*]]
62; CHECK:       while.cond260.i:
63; CHECK-NEXT:    br i1 undef, label [[LAND_RHS263_I:%.*]], label [[WHILE_END275_I:%.*]]
64; CHECK:       land.rhs263.i:
65; CHECK-NEXT:    br i1 undef, label [[WHILE_COND260_I]], label [[WHILE_END275_I]]
66; CHECK:       while.end275.i:
67; CHECK-NEXT:    br label [[EXTEND_BW_EXIT]]
68; CHECK:       extend_bw.exit:
69; CHECK-NEXT:    [[ADD14_I1262:%.*]] = phi i32 [ [[ADD14_I]], [[IF_THEN_I]] ], [ undef, [[WHILE_END275_I]] ]
70; CHECK-NEXT:    [[ADD15_I1261:%.*]] = phi i32 [ [[ADD15_I]], [[IF_THEN_I]] ], [ undef, [[WHILE_END275_I]] ]
71; CHECK-NEXT:    br i1 false, label [[IF_THEN157:%.*]], label [[LAND_LHS_TRUE167]]
72; CHECK:       if.then157:
73; CHECK-NEXT:    [[ADD158:%.*]] = add nsw i32 [[ADD14_I1262]], 1
74; CHECK-NEXT:    store i32 [[ADD158]], i32* [[FROM299]], align 4
75; CHECK-NEXT:    [[ADD160:%.*]] = add nsw i32 [[ADD15_I1261]], 1
76; CHECK-NEXT:    store i32 [[ADD160]], i32* [[FROM1115]], align 4
77; CHECK-NEXT:    br label [[LAND_LHS_TRUE167]]
78; CHECK:       land.lhs.true167:
79; CHECK-NEXT:    unreachable
80; CHECK:       for.inc603:
81; CHECK-NEXT:    br i1 undef, label [[FOR_BODY]], label [[FOR_END605]]
82; CHECK:       for.end605:
83; CHECK-NEXT:    unreachable
84; CHECK:       return:
85; CHECK-NEXT:    ret void
86;
87entry:
88  br i1 undef, label %return, label %lor.lhs.false
89
90lor.lhs.false:                                    ; preds = %entry
91  br i1 undef, label %return, label %if.end
92
93if.end:                                           ; preds = %lor.lhs.false
94  br i1 undef, label %for.end605, label %for.body.lr.ph
95
96for.body.lr.ph:                                   ; preds = %if.end
97  br label %for.body
98
99for.body:                                         ; preds = %for.inc603, %for.body.lr.ph
100  br i1 undef, label %for.inc603, label %if.end12
101
102if.end12:                                         ; preds = %for.body
103  br i1 undef, label %land.lhs.true, label %land.lhs.true167
104
105land.lhs.true:                                    ; preds = %if.end12
106  br i1 undef, label %if.then17, label %land.lhs.true167
107
108if.then17:                                        ; preds = %land.lhs.true
109  br i1 undef, label %if.end98, label %land.rhs.lr.ph
110
111land.rhs.lr.ph:                                   ; preds = %if.then17
112  unreachable
113
114if.end98:                                         ; preds = %if.then17
115  %from299 = getelementptr inbounds %struct._exon_t.12.103.220.363.480.649.740.857.1039.1065.1078.1091.1117.1130.1156.1169.1195.1221.1234.1286.1299.1312.1338.1429.1455.1468.1494.1520.1884.1897.1975.2066.2105.2170.2171, %struct._exon_t.12.103.220.363.480.649.740.857.1039.1065.1078.1091.1117.1130.1156.1169.1195.1221.1234.1286.1299.1312.1338.1429.1455.1468.1494.1520.1884.1897.1975.2066.2105.2170.2171* undef, i64 0, i32 1
116  br i1 undef, label %land.lhs.true167, label %if.then103
117
118if.then103:                                       ; preds = %if.end98
119  %.sub100 = select i1 undef, i32 250, i32 undef
120  %mul114 = shl nsw i32 %.sub100, 2
121  %from1115 = getelementptr inbounds %struct._exon_t.12.103.220.363.480.649.740.857.1039.1065.1078.1091.1117.1130.1156.1169.1195.1221.1234.1286.1299.1312.1338.1429.1455.1468.1494.1520.1884.1897.1975.2066.2105.2170.2171, %struct._exon_t.12.103.220.363.480.649.740.857.1039.1065.1078.1091.1117.1130.1156.1169.1195.1221.1234.1286.1299.1312.1338.1429.1455.1468.1494.1520.1884.1897.1975.2066.2105.2170.2171* undef, i64 0, i32 0
122  %cond125 = select i1 undef, i32 undef, i32 %mul114
123  br label %for.cond.i
124
125for.cond.i:                                       ; preds = %land.rhs.i874, %if.then103
126  %row.0.i = phi i32 [ undef, %land.rhs.i874 ], [ %.sub100, %if.then103 ]
127  %col.0.i = phi i32 [ undef, %land.rhs.i874 ], [ %cond125, %if.then103 ]
128  br i1 undef, label %land.rhs.i874, label %for.end.i
129
130land.rhs.i874:                                    ; preds = %for.cond.i
131  br i1 undef, label %for.cond.i, label %for.end.i
132
133for.end.i:                                        ; preds = %land.rhs.i874, %for.cond.i
134  br i1 undef, label %if.then.i, label %if.end.i
135
136if.then.i:                                        ; preds = %for.end.i
137  %add14.i = add nsw i32 %row.0.i, undef
138  %add15.i = add nsw i32 %col.0.i, undef
139  br label %extend_bw.exit
140
141if.end.i:                                         ; preds = %for.end.i
142  %add16.i = add i32 %cond125, %.sub100
143  %cmp26514.i = icmp slt i32 %add16.i, 0
144  br i1 %cmp26514.i, label %for.end33.i, label %for.body28.lr.ph.i
145
146for.body28.lr.ph.i:                               ; preds = %if.end.i
147  br label %for.end33.i
148
149for.end33.i:                                      ; preds = %for.body28.lr.ph.i, %if.end.i
150  br i1 undef, label %for.end58.i, label %for.body52.lr.ph.i
151
152for.body52.lr.ph.i:                               ; preds = %for.end33.i
153  br label %for.end58.i
154
155for.end58.i:                                      ; preds = %for.body52.lr.ph.i, %for.end33.i
156  br label %while.cond260.i
157
158while.cond260.i:                                  ; preds = %land.rhs263.i, %for.end58.i
159  br i1 undef, label %land.rhs263.i, label %while.end275.i
160
161land.rhs263.i:                                    ; preds = %while.cond260.i
162  br i1 undef, label %while.cond260.i, label %while.end275.i
163
164while.end275.i:                                   ; preds = %land.rhs263.i, %while.cond260.i
165  br label %extend_bw.exit
166
167extend_bw.exit:                                   ; preds = %while.end275.i, %if.then.i
168  %add14.i1262 = phi i32 [ %add14.i, %if.then.i ], [ undef, %while.end275.i ]
169  %add15.i1261 = phi i32 [ %add15.i, %if.then.i ], [ undef, %while.end275.i ]
170  br i1 false, label %if.then157, label %land.lhs.true167
171
172if.then157:                                       ; preds = %extend_bw.exit
173  %add158 = add nsw i32 %add14.i1262, 1
174  store i32 %add158, i32* %from299, align 4
175  %add160 = add nsw i32 %add15.i1261, 1
176  store i32 %add160, i32* %from1115, align 4
177  br label %land.lhs.true167
178
179land.lhs.true167:                                 ; preds = %if.then157, %extend_bw.exit, %if.end98, %land.lhs.true, %if.end12
180  unreachable
181
182for.inc603:                                       ; preds = %for.body
183  br i1 undef, label %for.body, label %for.end605
184
185for.end605:                                       ; preds = %for.inc603, %if.end
186  unreachable
187
188return:                                           ; preds = %lor.lhs.false, %entry
189  ret void
190}
191
192