1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt -passes='default<O2>' -enable-matrix -S %s | FileCheck %s
3
4target datalayout = "E-m:e-i1:8:16-i8:8:16-i64:64-f128:64-a:8:16-n32:64"
5target triple = "systemz"
6
7@ARR = internal global [100 x i32] zeroinitializer, align 4
8
9define dso_local zeroext i32 @foo(ptr noundef %a) #0 {
10; CHECK-LABEL: @foo(
11; CHECK-NEXT:  entry:
12; CHECK-NEXT:    tail call void @populate(ptr noundef nonnull @ARR) #[[ATTR2:[0-9]+]]
13; CHECK-NEXT:    br label [[FOR_BODY4:%.*]]
14; CHECK:       for.body4:
15; CHECK-NEXT:    [[INDVARS_IV:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDVARS_IV_NEXT_7:%.*]], [[FOR_BODY4]] ]
16; CHECK-NEXT:    [[SUM_11:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[ADD_7:%.*]], [[FOR_BODY4]] ]
17; CHECK-NEXT:    [[IDX_NEG:%.*]] = sub nsw i64 0, [[INDVARS_IV]]
18; CHECK-NEXT:    [[ADD_PTR:%.*]] = getelementptr inbounds i32, ptr getelementptr inbounds ([100 x i32], ptr @ARR, i64 0, i64 99), i64 [[IDX_NEG]]
19; CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr [[ADD_PTR]], align 4, !tbaa [[TBAA3:![0-9]+]]
20; CHECK-NEXT:    [[ADD:%.*]] = add i32 [[TMP0]], [[SUM_11]]
21; CHECK-NEXT:    [[IDX_NEG_19:%.*]] = xor i64 [[INDVARS_IV]], -1
22; CHECK-NEXT:    [[ADD_PTR_110:%.*]] = getelementptr inbounds i32, ptr getelementptr inbounds ([100 x i32], ptr @ARR, i64 0, i64 99), i64 [[IDX_NEG_19]]
23; CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr [[ADD_PTR_110]], align 4, !tbaa [[TBAA3]]
24; CHECK-NEXT:    [[ADD_111:%.*]] = add i32 [[TMP1]], [[ADD]]
25; CHECK-NEXT:    [[IDX_NEG_216:%.*]] = xor i64 [[INDVARS_IV]], -2
26; CHECK-NEXT:    [[ADD_PTR_217:%.*]] = getelementptr inbounds i32, ptr getelementptr inbounds ([100 x i32], ptr @ARR, i64 0, i64 99), i64 [[IDX_NEG_216]]
27; CHECK-NEXT:    [[TMP2:%.*]] = load i32, ptr [[ADD_PTR_217]], align 4, !tbaa [[TBAA3]]
28; CHECK-NEXT:    [[ADD_218:%.*]] = add i32 [[TMP2]], [[ADD_111]]
29; CHECK-NEXT:    [[IDX_NEG_3:%.*]] = xor i64 [[INDVARS_IV]], -3
30; CHECK-NEXT:    [[ADD_PTR_3:%.*]] = getelementptr inbounds i32, ptr getelementptr inbounds ([100 x i32], ptr @ARR, i64 0, i64 99), i64 [[IDX_NEG_3]]
31; CHECK-NEXT:    [[TMP3:%.*]] = load i32, ptr [[ADD_PTR_3]], align 4, !tbaa [[TBAA3]]
32; CHECK-NEXT:    [[ADD_3:%.*]] = add i32 [[TMP3]], [[ADD_218]]
33; CHECK-NEXT:    [[IDX_NEG_4:%.*]] = xor i64 [[INDVARS_IV]], -4
34; CHECK-NEXT:    [[ADD_PTR_4:%.*]] = getelementptr inbounds i32, ptr getelementptr inbounds ([100 x i32], ptr @ARR, i64 0, i64 99), i64 [[IDX_NEG_4]]
35; CHECK-NEXT:    [[TMP4:%.*]] = load i32, ptr [[ADD_PTR_4]], align 4, !tbaa [[TBAA3]]
36; CHECK-NEXT:    [[ADD_4:%.*]] = add i32 [[TMP4]], [[ADD_3]]
37; CHECK-NEXT:    [[IDX_NEG_5:%.*]] = xor i64 [[INDVARS_IV]], -5
38; CHECK-NEXT:    [[ADD_PTR_5:%.*]] = getelementptr inbounds i32, ptr getelementptr inbounds ([100 x i32], ptr @ARR, i64 0, i64 99), i64 [[IDX_NEG_5]]
39; CHECK-NEXT:    [[TMP5:%.*]] = load i32, ptr [[ADD_PTR_5]], align 4, !tbaa [[TBAA3]]
40; CHECK-NEXT:    [[ADD_5:%.*]] = add i32 [[TMP5]], [[ADD_4]]
41; CHECK-NEXT:    [[IDX_NEG_6:%.*]] = xor i64 [[INDVARS_IV]], -6
42; CHECK-NEXT:    [[ADD_PTR_6:%.*]] = getelementptr inbounds i32, ptr getelementptr inbounds ([100 x i32], ptr @ARR, i64 0, i64 99), i64 [[IDX_NEG_6]]
43; CHECK-NEXT:    [[TMP6:%.*]] = load i32, ptr [[ADD_PTR_6]], align 4, !tbaa [[TBAA3]]
44; CHECK-NEXT:    [[ADD_6:%.*]] = add i32 [[TMP6]], [[ADD_5]]
45; CHECK-NEXT:    [[IDX_NEG_7:%.*]] = xor i64 [[INDVARS_IV]], -7
46; CHECK-NEXT:    [[ADD_PTR_7:%.*]] = getelementptr inbounds i32, ptr getelementptr inbounds ([100 x i32], ptr @ARR, i64 0, i64 99), i64 [[IDX_NEG_7]]
47; CHECK-NEXT:    [[TMP7:%.*]] = load i32, ptr [[ADD_PTR_7]], align 4, !tbaa [[TBAA3]]
48; CHECK-NEXT:    [[ADD_7]] = add i32 [[TMP7]], [[ADD_6]]
49; CHECK-NEXT:    [[INDVARS_IV_NEXT_7]] = add nuw nsw i64 [[INDVARS_IV]], 8
50; CHECK-NEXT:    [[EXITCOND_NOT_7:%.*]] = icmp eq i64 [[INDVARS_IV_NEXT_7]], 32
51; CHECK-NEXT:    br i1 [[EXITCOND_NOT_7]], label [[FOR_BODY4_1:%.*]], label [[FOR_BODY4]], !llvm.loop [[LOOP7:![0-9]+]]
52; CHECK:       for.body4.1:
53; CHECK-NEXT:    [[INDVARS_IV_1:%.*]] = phi i64 [ [[INDVARS_IV_NEXT_1_7:%.*]], [[FOR_BODY4_1]] ], [ 0, [[FOR_BODY4]] ]
54; CHECK-NEXT:    [[SUM_11_1:%.*]] = phi i32 [ [[ADD_1_7:%.*]], [[FOR_BODY4_1]] ], [ [[ADD_7]], [[FOR_BODY4]] ]
55; CHECK-NEXT:    [[IDX_NEG_1:%.*]] = sub nsw i64 0, [[INDVARS_IV_1]]
56; CHECK-NEXT:    [[ADD_PTR_1:%.*]] = getelementptr inbounds i32, ptr getelementptr inbounds ([100 x i32], ptr @ARR, i64 0, i64 99), i64 [[IDX_NEG_1]]
57; CHECK-NEXT:    [[TMP8:%.*]] = load i32, ptr [[ADD_PTR_1]], align 4, !tbaa [[TBAA3]]
58; CHECK-NEXT:    [[MUL_1:%.*]] = shl i32 [[TMP8]], 1
59; CHECK-NEXT:    [[ADD_1:%.*]] = add i32 [[MUL_1]], [[SUM_11_1]]
60; CHECK-NEXT:    [[IDX_NEG_1_1:%.*]] = xor i64 [[INDVARS_IV_1]], -1
61; CHECK-NEXT:    [[ADD_PTR_1_1:%.*]] = getelementptr inbounds i32, ptr getelementptr inbounds ([100 x i32], ptr @ARR, i64 0, i64 99), i64 [[IDX_NEG_1_1]]
62; CHECK-NEXT:    [[TMP9:%.*]] = load i32, ptr [[ADD_PTR_1_1]], align 4, !tbaa [[TBAA3]]
63; CHECK-NEXT:    [[MUL_1_1:%.*]] = shl i32 [[TMP9]], 1
64; CHECK-NEXT:    [[ADD_1_1:%.*]] = add i32 [[MUL_1_1]], [[ADD_1]]
65; CHECK-NEXT:    [[IDX_NEG_1_2:%.*]] = xor i64 [[INDVARS_IV_1]], -2
66; CHECK-NEXT:    [[ADD_PTR_1_2:%.*]] = getelementptr inbounds i32, ptr getelementptr inbounds ([100 x i32], ptr @ARR, i64 0, i64 99), i64 [[IDX_NEG_1_2]]
67; CHECK-NEXT:    [[TMP10:%.*]] = load i32, ptr [[ADD_PTR_1_2]], align 4, !tbaa [[TBAA3]]
68; CHECK-NEXT:    [[MUL_1_2:%.*]] = shl i32 [[TMP10]], 1
69; CHECK-NEXT:    [[ADD_1_2:%.*]] = add i32 [[MUL_1_2]], [[ADD_1_1]]
70; CHECK-NEXT:    [[IDX_NEG_1_3:%.*]] = xor i64 [[INDVARS_IV_1]], -3
71; CHECK-NEXT:    [[ADD_PTR_1_3:%.*]] = getelementptr inbounds i32, ptr getelementptr inbounds ([100 x i32], ptr @ARR, i64 0, i64 99), i64 [[IDX_NEG_1_3]]
72; CHECK-NEXT:    [[TMP11:%.*]] = load i32, ptr [[ADD_PTR_1_3]], align 4, !tbaa [[TBAA3]]
73; CHECK-NEXT:    [[MUL_1_3:%.*]] = shl i32 [[TMP11]], 1
74; CHECK-NEXT:    [[ADD_1_3:%.*]] = add i32 [[MUL_1_3]], [[ADD_1_2]]
75; CHECK-NEXT:    [[IDX_NEG_1_4:%.*]] = xor i64 [[INDVARS_IV_1]], -4
76; CHECK-NEXT:    [[ADD_PTR_1_4:%.*]] = getelementptr inbounds i32, ptr getelementptr inbounds ([100 x i32], ptr @ARR, i64 0, i64 99), i64 [[IDX_NEG_1_4]]
77; CHECK-NEXT:    [[TMP12:%.*]] = load i32, ptr [[ADD_PTR_1_4]], align 4, !tbaa [[TBAA3]]
78; CHECK-NEXT:    [[MUL_1_4:%.*]] = shl i32 [[TMP12]], 1
79; CHECK-NEXT:    [[ADD_1_4:%.*]] = add i32 [[MUL_1_4]], [[ADD_1_3]]
80; CHECK-NEXT:    [[IDX_NEG_1_5:%.*]] = xor i64 [[INDVARS_IV_1]], -5
81; CHECK-NEXT:    [[ADD_PTR_1_5:%.*]] = getelementptr inbounds i32, ptr getelementptr inbounds ([100 x i32], ptr @ARR, i64 0, i64 99), i64 [[IDX_NEG_1_5]]
82; CHECK-NEXT:    [[TMP13:%.*]] = load i32, ptr [[ADD_PTR_1_5]], align 4, !tbaa [[TBAA3]]
83; CHECK-NEXT:    [[MUL_1_5:%.*]] = shl i32 [[TMP13]], 1
84; CHECK-NEXT:    [[ADD_1_5:%.*]] = add i32 [[MUL_1_5]], [[ADD_1_4]]
85; CHECK-NEXT:    [[IDX_NEG_1_6:%.*]] = xor i64 [[INDVARS_IV_1]], -6
86; CHECK-NEXT:    [[ADD_PTR_1_6:%.*]] = getelementptr inbounds i32, ptr getelementptr inbounds ([100 x i32], ptr @ARR, i64 0, i64 99), i64 [[IDX_NEG_1_6]]
87; CHECK-NEXT:    [[TMP14:%.*]] = load i32, ptr [[ADD_PTR_1_6]], align 4, !tbaa [[TBAA3]]
88; CHECK-NEXT:    [[MUL_1_6:%.*]] = shl i32 [[TMP14]], 1
89; CHECK-NEXT:    [[ADD_1_6:%.*]] = add i32 [[MUL_1_6]], [[ADD_1_5]]
90; CHECK-NEXT:    [[IDX_NEG_1_7:%.*]] = xor i64 [[INDVARS_IV_1]], -7
91; CHECK-NEXT:    [[ADD_PTR_1_7:%.*]] = getelementptr inbounds i32, ptr getelementptr inbounds ([100 x i32], ptr @ARR, i64 0, i64 99), i64 [[IDX_NEG_1_7]]
92; CHECK-NEXT:    [[TMP15:%.*]] = load i32, ptr [[ADD_PTR_1_7]], align 4, !tbaa [[TBAA3]]
93; CHECK-NEXT:    [[MUL_1_7:%.*]] = shl i32 [[TMP15]], 1
94; CHECK-NEXT:    [[ADD_1_7]] = add i32 [[MUL_1_7]], [[ADD_1_6]]
95; CHECK-NEXT:    [[INDVARS_IV_NEXT_1_7]] = add nuw nsw i64 [[INDVARS_IV_1]], 8
96; CHECK-NEXT:    [[EXITCOND_1_NOT_7:%.*]] = icmp eq i64 [[INDVARS_IV_NEXT_1_7]], 32
97; CHECK-NEXT:    br i1 [[EXITCOND_1_NOT_7]], label [[FOR_BODY4_2:%.*]], label [[FOR_BODY4_1]], !llvm.loop [[LOOP7]]
98; CHECK:       for.body4.2:
99; CHECK-NEXT:    [[INDVARS_IV_2:%.*]] = phi i64 [ [[INDVARS_IV_NEXT_2_7:%.*]], [[FOR_BODY4_2]] ], [ 0, [[FOR_BODY4_1]] ]
100; CHECK-NEXT:    [[SUM_11_2:%.*]] = phi i32 [ [[ADD_2_7:%.*]], [[FOR_BODY4_2]] ], [ [[ADD_1_7]], [[FOR_BODY4_1]] ]
101; CHECK-NEXT:    [[IDX_NEG_2:%.*]] = sub nsw i64 0, [[INDVARS_IV_2]]
102; CHECK-NEXT:    [[ADD_PTR_2:%.*]] = getelementptr inbounds i32, ptr getelementptr inbounds ([100 x i32], ptr @ARR, i64 0, i64 99), i64 [[IDX_NEG_2]]
103; CHECK-NEXT:    [[TMP16:%.*]] = load i32, ptr [[ADD_PTR_2]], align 4, !tbaa [[TBAA3]]
104; CHECK-NEXT:    [[MUL_2:%.*]] = mul i32 [[TMP16]], 3
105; CHECK-NEXT:    [[ADD_2:%.*]] = add i32 [[MUL_2]], [[SUM_11_2]]
106; CHECK-NEXT:    [[IDX_NEG_2_1:%.*]] = xor i64 [[INDVARS_IV_2]], -1
107; CHECK-NEXT:    [[ADD_PTR_2_1:%.*]] = getelementptr inbounds i32, ptr getelementptr inbounds ([100 x i32], ptr @ARR, i64 0, i64 99), i64 [[IDX_NEG_2_1]]
108; CHECK-NEXT:    [[TMP17:%.*]] = load i32, ptr [[ADD_PTR_2_1]], align 4, !tbaa [[TBAA3]]
109; CHECK-NEXT:    [[MUL_2_1:%.*]] = mul i32 [[TMP17]], 3
110; CHECK-NEXT:    [[ADD_2_1:%.*]] = add i32 [[MUL_2_1]], [[ADD_2]]
111; CHECK-NEXT:    [[IDX_NEG_2_2:%.*]] = xor i64 [[INDVARS_IV_2]], -2
112; CHECK-NEXT:    [[ADD_PTR_2_2:%.*]] = getelementptr inbounds i32, ptr getelementptr inbounds ([100 x i32], ptr @ARR, i64 0, i64 99), i64 [[IDX_NEG_2_2]]
113; CHECK-NEXT:    [[TMP18:%.*]] = load i32, ptr [[ADD_PTR_2_2]], align 4, !tbaa [[TBAA3]]
114; CHECK-NEXT:    [[MUL_2_2:%.*]] = mul i32 [[TMP18]], 3
115; CHECK-NEXT:    [[ADD_2_2:%.*]] = add i32 [[MUL_2_2]], [[ADD_2_1]]
116; CHECK-NEXT:    [[IDX_NEG_2_3:%.*]] = xor i64 [[INDVARS_IV_2]], -3
117; CHECK-NEXT:    [[ADD_PTR_2_3:%.*]] = getelementptr inbounds i32, ptr getelementptr inbounds ([100 x i32], ptr @ARR, i64 0, i64 99), i64 [[IDX_NEG_2_3]]
118; CHECK-NEXT:    [[TMP19:%.*]] = load i32, ptr [[ADD_PTR_2_3]], align 4, !tbaa [[TBAA3]]
119; CHECK-NEXT:    [[MUL_2_3:%.*]] = mul i32 [[TMP19]], 3
120; CHECK-NEXT:    [[ADD_2_3:%.*]] = add i32 [[MUL_2_3]], [[ADD_2_2]]
121; CHECK-NEXT:    [[IDX_NEG_2_4:%.*]] = xor i64 [[INDVARS_IV_2]], -4
122; CHECK-NEXT:    [[ADD_PTR_2_4:%.*]] = getelementptr inbounds i32, ptr getelementptr inbounds ([100 x i32], ptr @ARR, i64 0, i64 99), i64 [[IDX_NEG_2_4]]
123; CHECK-NEXT:    [[TMP20:%.*]] = load i32, ptr [[ADD_PTR_2_4]], align 4, !tbaa [[TBAA3]]
124; CHECK-NEXT:    [[MUL_2_4:%.*]] = mul i32 [[TMP20]], 3
125; CHECK-NEXT:    [[ADD_2_4:%.*]] = add i32 [[MUL_2_4]], [[ADD_2_3]]
126; CHECK-NEXT:    [[IDX_NEG_2_5:%.*]] = xor i64 [[INDVARS_IV_2]], -5
127; CHECK-NEXT:    [[ADD_PTR_2_5:%.*]] = getelementptr inbounds i32, ptr getelementptr inbounds ([100 x i32], ptr @ARR, i64 0, i64 99), i64 [[IDX_NEG_2_5]]
128; CHECK-NEXT:    [[TMP21:%.*]] = load i32, ptr [[ADD_PTR_2_5]], align 4, !tbaa [[TBAA3]]
129; CHECK-NEXT:    [[MUL_2_5:%.*]] = mul i32 [[TMP21]], 3
130; CHECK-NEXT:    [[ADD_2_5:%.*]] = add i32 [[MUL_2_5]], [[ADD_2_4]]
131; CHECK-NEXT:    [[IDX_NEG_2_6:%.*]] = xor i64 [[INDVARS_IV_2]], -6
132; CHECK-NEXT:    [[ADD_PTR_2_6:%.*]] = getelementptr inbounds i32, ptr getelementptr inbounds ([100 x i32], ptr @ARR, i64 0, i64 99), i64 [[IDX_NEG_2_6]]
133; CHECK-NEXT:    [[TMP22:%.*]] = load i32, ptr [[ADD_PTR_2_6]], align 4, !tbaa [[TBAA3]]
134; CHECK-NEXT:    [[MUL_2_6:%.*]] = mul i32 [[TMP22]], 3
135; CHECK-NEXT:    [[ADD_2_6:%.*]] = add i32 [[MUL_2_6]], [[ADD_2_5]]
136; CHECK-NEXT:    [[IDX_NEG_2_7:%.*]] = xor i64 [[INDVARS_IV_2]], -7
137; CHECK-NEXT:    [[ADD_PTR_2_7:%.*]] = getelementptr inbounds i32, ptr getelementptr inbounds ([100 x i32], ptr @ARR, i64 0, i64 99), i64 [[IDX_NEG_2_7]]
138; CHECK-NEXT:    [[TMP23:%.*]] = load i32, ptr [[ADD_PTR_2_7]], align 4, !tbaa [[TBAA3]]
139; CHECK-NEXT:    [[MUL_2_7:%.*]] = mul i32 [[TMP23]], 3
140; CHECK-NEXT:    [[ADD_2_7]] = add i32 [[MUL_2_7]], [[ADD_2_6]]
141; CHECK-NEXT:    [[INDVARS_IV_NEXT_2_7]] = add nuw nsw i64 [[INDVARS_IV_2]], 8
142; CHECK-NEXT:    [[EXITCOND_2_NOT_7:%.*]] = icmp eq i64 [[INDVARS_IV_NEXT_2_7]], 32
143; CHECK-NEXT:    br i1 [[EXITCOND_2_NOT_7]], label [[FOR_INC5_2:%.*]], label [[FOR_BODY4_2]], !llvm.loop [[LOOP7]]
144; CHECK:       for.inc5.2:
145; CHECK-NEXT:    ret i32 [[ADD_2_7]]
146;
147entry:
148  call void @populate(ptr noundef @ARR)
149  br label %for.cond
150
151for.cond:                                         ; preds = %for.inc5, %entry
152  %j.0 = phi i32 [ 1, %entry ], [ %inc6, %for.inc5 ]
153  %sum.0 = phi i32 [ 0, %entry ], [ %sum.1, %for.inc5 ]
154  %cmp = icmp slt i32 %j.0, 4
155  br i1 %cmp, label %for.body, label %for.cond.cleanup
156
157for.cond.cleanup:                                 ; preds = %for.cond
158  br label %for.end7
159
160for.body:                                         ; preds = %for.cond
161  br label %for.cond1
162
163for.cond1:                                        ; preds = %for.inc, %for.body
164  %sum.1 = phi i32 [ %sum.0, %for.body ], [ %add, %for.inc ]
165  %i.0 = phi i32 [ 0, %for.body ], [ %inc, %for.inc ]
166  %cmp2 = icmp slt i32 %i.0, 32
167  br i1 %cmp2, label %for.body4, label %for.cond.cleanup3
168
169for.cond.cleanup3:                                ; preds = %for.cond1
170  br label %for.end
171
172for.body4:                                        ; preds = %for.cond1
173  %idx.ext = sext i32 %i.0 to i64
174  %idx.neg = sub i64 0, %idx.ext
175  %add.ptr = getelementptr inbounds i32, ptr getelementptr inbounds ([100 x i32], ptr @ARR, i64 0, i64 99), i64 %idx.neg
176  %0 = load i32, ptr %add.ptr, align 4, !tbaa !3
177  %mul = mul i32 %j.0, %0
178  %add = add i32 %sum.1, %mul
179  br label %for.inc
180
181for.inc:                                          ; preds = %for.body4
182  %inc = add nsw i32 %i.0, 1
183  br label %for.cond1, !llvm.loop !7
184
185for.end:                                          ; preds = %for.cond.cleanup3
186  br label %for.inc5
187
188for.inc5:                                         ; preds = %for.end
189  %inc6 = add nsw i32 %j.0, 1
190  br label %for.cond, !llvm.loop !9
191
192for.end7:                                         ; preds = %for.cond.cleanup
193  ret i32 %sum.0
194}
195
196declare dso_local void @populate(ptr noundef) #1
197
198attributes #0 = { nounwind "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="z10" }
199attributes #1 = { "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="z10" }
200attributes #2 = { argmemonly nocallback nofree nosync nounwind willreturn }
201
202!llvm.module.flags = !{!0, !1}
203!llvm.ident = !{!2}
204
205!0 = !{i32 1, !"wchar_size", i32 4}
206!1 = !{i32 7, !"frame-pointer", i32 2}
207!2 = !{!"clang version 15.0.0 (https://github.com/llvm/llvm-project.git 0bfef0669075f229fd325d8c8521c9adfb453f83)"}
208!3 = !{!4, !4, i64 0}
209!4 = !{!"int", !5, i64 0}
210!5 = !{!"omnipotent char", !6, i64 0}
211!6 = !{!"Simple C/C++ TBAA"}
212!7 = distinct !{!7, !8}
213!8 = !{!"llvm.loop.mustprogress"}
214!9 = distinct !{!9, !8}
215