Skip to content

Commit 36736a6

Browse files
author
chenqian
committed
[Test] add LoopVectorizeExtractor testcase
1 parent b8a3972 commit 36736a6

File tree

6 files changed

+944
-0
lines changed

6 files changed

+944
-0
lines changed
Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt -S -mtriple=riscv32-esp-unknown-elf < %s | FileCheck %s
3+
4+
5+
; Function Attrs: nofree norecurse nosync nounwind memory(argmem: readwrite)
6+
define dso_local range(i32 0, 458756) i32 @dsps_add_s16_ansi(ptr noundef readonly %input1, ptr noundef readonly %input2, ptr noundef writeonly %output, i32 noundef %len, i32 noundef %step1, i32 noundef %step2, i32 noundef %step_out, i32 noundef %shift) local_unnamed_addr #0 {
7+
; CHECK-LABEL: define dso_local range(i32 0, 458756) i32 @dsps_add_s16_ansi(
8+
; CHECK-SAME: ptr noundef readonly [[INPUT1:%.*]], ptr noundef readonly [[INPUT2:%.*]], ptr noundef writeonly [[OUTPUT:%.*]], i32 noundef [[LEN:%.*]], i32 noundef [[STEP1:%.*]], i32 noundef [[STEP2:%.*]], i32 noundef [[STEP_OUT:%.*]], i32 noundef [[SHIFT:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
9+
; CHECK-NEXT: [[ENTRY:.*]]:
10+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[INPUT1]], null
11+
; CHECK-NEXT: [[CMP1:%.*]] = icmp eq ptr [[INPUT2]], null
12+
; CHECK-NEXT: [[OR_COND:%.*]] = or i1 [[CMP]], [[CMP1]]
13+
; CHECK-NEXT: [[CMP4:%.*]] = icmp eq ptr [[OUTPUT]], null
14+
; CHECK-NEXT: [[OR_COND21:%.*]] = or i1 [[OR_COND]], [[CMP4]]
15+
; CHECK-NEXT: br i1 [[OR_COND21]], label %[[RETURN:.*]], label %[[FOR_COND_PREHEADER:.*]]
16+
; CHECK: [[FOR_COND_PREHEADER]]:
17+
; CHECK-NEXT: [[CMP722:%.*]] = icmp sgt i32 [[LEN]], 0
18+
; CHECK-NEXT: br i1 [[CMP722]], label %[[FOR_BODY_PREHEADER:.*]], label %[[RETURN]]
19+
; CHECK: [[FOR_BODY_PREHEADER]]:
20+
; CHECK-NEXT: [[STRIDE_IS_ONE:%.*]] = icmp eq i32 [[STEP_OUT]], 1
21+
; CHECK-NEXT: [[STRIDE_IS_ONE1:%.*]] = icmp eq i32 [[STEP2]], 1
22+
; CHECK-NEXT: [[TMP0:%.*]] = and i1 [[STRIDE_IS_ONE]], [[STRIDE_IS_ONE1]]
23+
; CHECK-NEXT: [[STRIDE_IS_ONE2:%.*]] = icmp eq i32 [[STEP1]], 1
24+
; CHECK-NEXT: [[TMP1:%.*]] = and i1 [[TMP0]], [[STRIDE_IS_ONE2]]
25+
; CHECK-NEXT: br i1 [[TMP1]], label %[[FAST_PATH_PREHEADER:.*]], label %[[FOR_BODY:.*]]
26+
; CHECK: [[FAST_PATH_PREHEADER]]:
27+
; CHECK-NEXT: br label %[[FOR_BODY_FAST:.*]]
28+
; CHECK: [[FOR_BODY_FAST]]:
29+
; CHECK-NEXT: [[I_023_FAST:%.*]] = phi i32 [ [[INC_FAST:%.*]], %[[FOR_BODY_FAST]] ], [ 0, %[[FAST_PATH_PREHEADER]] ]
30+
; CHECK-NEXT: [[ARRAYIDX_FAST:%.*]] = getelementptr inbounds i16, ptr [[INPUT1]], i32 [[I_023_FAST]]
31+
; CHECK-NEXT: [[TMP32:%.*]] = load i16, ptr [[ARRAYIDX_FAST]], align 2, !tbaa [[TBAA6:![0-9]+]]
32+
; CHECK-NEXT: [[CONV_FAST:%.*]] = sext i16 [[TMP32]] to i32
33+
; CHECK-NEXT: [[ARRAYIDX9_FAST:%.*]] = getelementptr inbounds i16, ptr [[INPUT2]], i32 [[I_023_FAST]]
34+
; CHECK-NEXT: [[TMP33:%.*]] = load i16, ptr [[ARRAYIDX9_FAST]], align 2, !tbaa [[TBAA6]]
35+
; CHECK-NEXT: [[CONV10_FAST:%.*]] = sext i16 [[TMP33]] to i32
36+
; CHECK-NEXT: [[ADD_FAST:%.*]] = add nsw i32 [[CONV10_FAST]], [[CONV_FAST]]
37+
; CHECK-NEXT: [[SHR_FAST:%.*]] = ashr i32 [[ADD_FAST]], [[SHIFT]]
38+
; CHECK-NEXT: [[CONV11_FAST:%.*]] = trunc i32 [[SHR_FAST]] to i16
39+
; CHECK-NEXT: [[ARRAYIDX13_FAST:%.*]] = getelementptr inbounds i16, ptr [[OUTPUT]], i32 [[I_023_FAST]]
40+
; CHECK-NEXT: store i16 [[CONV11_FAST]], ptr [[ARRAYIDX13_FAST]], align 2, !tbaa [[TBAA6]]
41+
; CHECK-NEXT: [[INC_FAST]] = add nuw nsw i32 [[I_023_FAST]], 1
42+
; CHECK-NEXT: [[EXITCOND_NOT_FAST:%.*]] = icmp eq i32 [[INC_FAST]], [[LEN]]
43+
; CHECK-NEXT: br i1 [[EXITCOND_NOT_FAST]], label %[[RETURN_LOOPEXIT:.*]], label %[[FOR_BODY_FAST]], !llvm.loop [[LOOP10:![0-9]+]]
44+
; CHECK: [[FOR_BODY]]:
45+
; CHECK-NEXT: [[I_023:%.*]] = phi i32 [ [[INC:%.*]], %[[FOR_BODY]] ], [ 0, %[[FOR_BODY_PREHEADER]] ]
46+
; CHECK-NEXT: [[MUL:%.*]] = mul nsw i32 [[I_023]], [[STEP1]]
47+
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i16, ptr [[INPUT1]], i32 [[MUL]]
48+
; CHECK-NEXT: [[TMP34:%.*]] = load i16, ptr [[ARRAYIDX]], align 2, !tbaa [[TBAA6]]
49+
; CHECK-NEXT: [[CONV:%.*]] = sext i16 [[TMP34]] to i32
50+
; CHECK-NEXT: [[MUL8:%.*]] = mul nsw i32 [[I_023]], [[STEP2]]
51+
; CHECK-NEXT: [[ARRAYIDX9:%.*]] = getelementptr inbounds i16, ptr [[INPUT2]], i32 [[MUL8]]
52+
; CHECK-NEXT: [[TMP35:%.*]] = load i16, ptr [[ARRAYIDX9]], align 2, !tbaa [[TBAA6]]
53+
; CHECK-NEXT: [[CONV10:%.*]] = sext i16 [[TMP35]] to i32
54+
; CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[CONV10]], [[CONV]]
55+
; CHECK-NEXT: [[SHR:%.*]] = ashr i32 [[ADD]], [[SHIFT]]
56+
; CHECK-NEXT: [[CONV11:%.*]] = trunc i32 [[SHR]] to i16
57+
; CHECK-NEXT: [[MUL12:%.*]] = mul nsw i32 [[I_023]], [[STEP_OUT]]
58+
; CHECK-NEXT: [[ARRAYIDX13:%.*]] = getelementptr inbounds i16, ptr [[OUTPUT]], i32 [[MUL12]]
59+
; CHECK-NEXT: store i16 [[CONV11]], ptr [[ARRAYIDX13]], align 2, !tbaa [[TBAA6]]
60+
; CHECK-NEXT: [[INC]] = add nuw nsw i32 [[I_023]], 1
61+
; CHECK-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC]], [[LEN]]
62+
; CHECK-NEXT: br i1 [[EXITCOND_NOT]], label %[[RETURN_LOOPEXIT]], label %[[FOR_BODY]], !llvm.loop [[LOOP10]]
63+
; CHECK: [[RETURN_LOOPEXIT]]:
64+
; CHECK-NEXT: br label %[[RETURN]]
65+
; CHECK: [[RETURN]]:
66+
; CHECK-NEXT: [[RETVAL_0:%.*]] = phi i32 [ 458755, %[[ENTRY]] ], [ 0, %[[FOR_COND_PREHEADER]] ], [ 0, %[[RETURN_LOOPEXIT]] ]
67+
; CHECK-NEXT: ret i32 [[RETVAL_0]]
68+
;
69+
entry:
70+
%cmp = icmp eq ptr %input1, null
71+
%cmp1 = icmp eq ptr %input2, null
72+
%or.cond = or i1 %cmp, %cmp1
73+
%cmp4 = icmp eq ptr %output, null
74+
%or.cond21 = or i1 %or.cond, %cmp4
75+
br i1 %or.cond21, label %return, label %for.cond.preheader
76+
77+
for.cond.preheader: ; preds = %entry
78+
%cmp722 = icmp sgt i32 %len, 0
79+
br i1 %cmp722, label %for.body.preheader, label %return
80+
81+
for.body.preheader: ; preds = %for.cond.preheader
82+
%stride.is.one = icmp eq i32 %step_out, 1
83+
%stride.is.one1 = icmp eq i32 %step2, 1
84+
%0 = and i1 %stride.is.one, %stride.is.one1
85+
%stride.is.one2 = icmp eq i32 %step1, 1
86+
%1 = and i1 %0, %stride.is.one2
87+
br i1 %1, label %fast.path.preheader, label %for.body
88+
89+
fast.path.preheader: ; preds = %for.body.preheader
90+
br label %for.body.fast
91+
92+
for.body.fast: ; preds = %for.body.fast, %fast.path.preheader
93+
%i.023.fast = phi i32 [ %inc.fast, %for.body.fast ], [ 0, %fast.path.preheader ]
94+
%arrayidx.fast = getelementptr inbounds i16, ptr %input1, i32 %i.023.fast
95+
%2 = load i16, ptr %arrayidx.fast, align 2, !tbaa !6
96+
%conv.fast = sext i16 %2 to i32
97+
%arrayidx9.fast = getelementptr inbounds i16, ptr %input2, i32 %i.023.fast
98+
%3 = load i16, ptr %arrayidx9.fast, align 2, !tbaa !6
99+
%conv10.fast = sext i16 %3 to i32
100+
%add.fast = add nsw i32 %conv10.fast, %conv.fast
101+
%shr.fast = ashr i32 %add.fast, %shift
102+
%conv11.fast = trunc i32 %shr.fast to i16
103+
%arrayidx13.fast = getelementptr inbounds i16, ptr %output, i32 %i.023.fast
104+
store i16 %conv11.fast, ptr %arrayidx13.fast, align 2, !tbaa !6
105+
%inc.fast = add nuw nsw i32 %i.023.fast, 1
106+
%exitcond.not.fast = icmp eq i32 %inc.fast, %len
107+
br i1 %exitcond.not.fast, label %return.loopexit, label %for.body.fast, !llvm.loop !10
108+
109+
for.body: ; preds = %for.body, %for.body.preheader
110+
%i.023 = phi i32 [ %inc, %for.body ], [ 0, %for.body.preheader ]
111+
%mul = mul nsw i32 %i.023, %step1
112+
%arrayidx = getelementptr inbounds i16, ptr %input1, i32 %mul
113+
%4 = load i16, ptr %arrayidx, align 2, !tbaa !6
114+
%conv = sext i16 %4 to i32
115+
%mul8 = mul nsw i32 %i.023, %step2
116+
%arrayidx9 = getelementptr inbounds i16, ptr %input2, i32 %mul8
117+
%5 = load i16, ptr %arrayidx9, align 2, !tbaa !6
118+
%conv10 = sext i16 %5 to i32
119+
%add = add nsw i32 %conv10, %conv
120+
%shr = ashr i32 %add, %shift
121+
%conv11 = trunc i32 %shr to i16
122+
%mul12 = mul nsw i32 %i.023, %step_out
123+
%arrayidx13 = getelementptr inbounds i16, ptr %output, i32 %mul12
124+
store i16 %conv11, ptr %arrayidx13, align 2, !tbaa !6
125+
%inc = add nuw nsw i32 %i.023, 1
126+
%exitcond.not = icmp eq i32 %inc, %len
127+
br i1 %exitcond.not, label %return.loopexit, label %for.body, !llvm.loop !10
128+
129+
return.loopexit: ; preds = %for.body, %for.body.fast
130+
br label %return
131+
132+
return: ; preds = %return.loopexit, %for.cond.preheader, %entry
133+
%retval.0 = phi i32 [ 458755, %entry ], [ 0, %for.cond.preheader ], [ 0, %return.loopexit ]
134+
ret i32 %retval.0
135+
}
136+
137+
attributes #0 = { nofree norecurse nosync nounwind memory(argmem: readwrite) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic-rv32" "target-features"="+32bit,+a,+c,+f,+m,+relax,+xesppie,+zca,+zcmp,+zicsr,+zifencei,+zmmul,-b,-d,-e,-experimental-smmpm,-experimental-smnpm,-experimental-ssnpm,-experimental-sspm,-experimental-ssqosid,-experimental-supm,-experimental-zacas,-experimental-zalasr,-experimental-zicfilp,-experimental-zicfiss,-h,-shcounterenw,-shgatpa,-shtvala,-shvsatpa,-shvstvala,-shvstvecd,-smaia,-smcdeleg,-smcsrind,-smepmp,-smstateen,-ssaia,-ssccfg,-ssccptr,-sscofpmf,-sscounterenw,-sscsrind,-ssstateen,-ssstrict,-sstc,-sstvala,-sstvecd,-ssu64xl,-svade,-svadu,-svbare,-svinval,-svnapot,-svpbmt,-v,-xcvalu,-xcvbi,-xcvbitmanip,-xcvelw,-xcvmac,-xcvmem,-xcvsimd,-xsfcease,-xsfvcp,-xsfvfnrclipxfqf,-xsfvfwmaccqqq,-xsfvqmaccdod,-xsfvqmaccqoq,-xsifivecdiscarddlone,-xsifivecflushdlone,-xtheadba,-xtheadbb,-xtheadbs,-xtheadcmo,-xtheadcondmov,-xtheadfmemidx,-xtheadmac,-xtheadmemidx,-xtheadmempair,-xtheadsync,-xtheadvdot,-xventanacondops,-xwchc,-za128rs,-za64rs,-zaamo,-zabha,-zalrsc,-zama16b,-zawrs,-zba,-zbb,-zbc,-zbkb,-zbkc,-zbkx,-zbs,-zcb,-zcd,-zce,-zcf,-zcmop,-zcmt,-zdinx,-zfa,-zfbfmin,-zfh,-zfhmin,-zfinx,-zhinx,-zhinxmin,-zic64b,-zicbom,-zicbop,-zicboz,-ziccamoa,-ziccif,-zicclsm,-ziccrse,-zicntr,-zicond,-zihintntl,-zihintpause,-zihpm,-zimop,-zk,-zkn,-zknd,-zkne,-zknh,-zkr,-zks,-zksed,-zksh,-zkt,-ztso,-zvbb,-zvbc,-zve32f,-zve32x,-zve64d,-zve64f,-zve64x,-zvfbfmin,-zvfbfwma,-zvfh,-zvfhmin,-zvkb,-zvkg,-zvkn,-zvknc,-zvkned,-zvkng,-zvknha,-zvknhb,-zvks,-zvksc,-zvksed,-zvksg,-zvksh,-zvkt,-zvl1024b,-zvl128b,-zvl16384b,-zvl2048b,-zvl256b,-zvl32768b,-zvl32b,-zvl4096b,-zvl512b,-zvl64b,-zvl65536b,-zvl8192b" }
138+
139+
!llvm.module.flags = !{!0, !1, !2, !4}
140+
!llvm.ident = !{!5}
141+
142+
!0 = !{i32 1, !"wchar_size", i32 4}
143+
!1 = !{i32 1, !"target-abi", !"ilp32f"}
144+
!2 = !{i32 6, !"riscv-isa", !3}
145+
!3 = !{!"rv32i2p1_m2p0_a2p1_f2p2_c2p0_zicsr2p0_zifencei2p0_zmmul1p0_zca1p0_zcmp1p0_xesppie1p0"}
146+
!4 = !{i32 8, !"SmallDataLimit", i32 8}
147+
!5 = !{!"Espressif clang version 17.0.1 (https://gitlab.espressif.cn:6688/idf/llvm-project.git llvmorg-19.1.2-277-gbe3198f esp-18.1.2_20240912-657-ge1dc1cc esp-18.1.2_20240912-657-ge1dc1cc esp-18.1.2_20240912-685-g8c39bf5 llvmorg-19.1.2-280-g353ae76 llvmorg-19.1.2-280-g353ae76 llvmorg-19.1.2-280-g353ae76 llvmorg-19.1.2-280-g353ae76 llvmorg-19.1.2-280-g353ae76 llvmorg-19.1.2-280-g353ae76 esp-18.1.2_20240912-694-g4a14fa0 esp-18.1.2_20240912-694-g4a14fa0 llvmorg-19.1.2-280-g353ae76 llvmorg-19.1.2-280-g353ae76 llvmorg-19.1.2-282-gf0df22b llvmorg-19.1.2-282-g61f783f llvmorg-19.1.2-280-g353ae76 llvmorg-19.1.2-280-g353ae76 llvmorg-19.1.2-280-g353ae76 llvmorg-19.1.2-289-g6ab7981 llvmorg-19.1.2-294-ga687ee8 llvmorg-19.1.2-282-gded6180 llvmorg-19.1.2-295-gd6b9c67 llvmorg-19.1.2-296-g2bb38d3 llvmorg-19.1.2-302-gb46e43e llvmorg-19.1.2-282-g92c3b79 llvmorg-19.1.2-282-g92c3b79 llvmorg-19.1.2-282-g92c3b79 llvmorg-19.1.2-282-g92c3b79 llvmorg-19.1.2-282-g92c3b79 llvmorg-19.1.2-282-g92c3b79 llvmorg-19.1.2-282-ga193982 llvmorg-19.1.2-310-g012c995 llvmorg-19.1.2-373-g483ac18 llvmorg-19.1.2-373-g483ac18 llvmorg-19.1.2-373-g483ac18 esp-19.1.2_20250225-2-g2444a40 esp-19.1.2_20250225-2-g77f93cb esp-19.1.2_20250225-2-g77f93cb esp-19.1.2_20250225-2-g77f93cb esp-19.1.2_20250225-2-g77f93cb esp-19.1.2_20250225-2-g77f93cb esp-19.1.2_20250225-2-g77f93cb esp-19.1.2_20250225-2-g77f93cb esp-19.1.2_20250225-2-g77f93cb esp-19.1.2_20250225-2-g77f93cb esp-19.1.2_20250225-2-g5a99af4 esp-19.1.2_20250225-2-g5a99af4 esp-19.1.2_20250225-4-g6ad288c esp-19.1.2_20250225-2-g78646ff esp-19.1.2_20250312 esp-19.1.2_20250312 esp-19.1.2_20250312-1-gbfbef3f esp-19.1.2_20250225-3-g153f4c7 esp-19.1.2_20250312-2-gf1328c0 esp-19.1.2_20250312-1-ga44194f esp-19.1.2_20250312-2-g6ad288c esp-19.1.2_20250225-5-gabba736 esp-19.1.2_20250312-6-gea26128 esp-19.1.2_20250312-6-gea26128 esp-19.1.2_20250312-6-gea26128 esp-19.1.2_20250312-6-gea26128 esp-19.1.2_20250312-1-ge8e26d4 esp-19.1.2_20250225-6-g1102ab9 esp-19.1.2_20250312-1-ga44194f esp-19.1.2_20250312-1-gfaf5f34 esp-19.1.2_20250312-2-g912da7e esp-19.1.2_20250312-12-g40fcb86 esp-19.1.2_20250312-22-g150517d esp-19.1.2_20250312-36-g3725281 esp-19.1.2_20250312-36-g3725281 esp-19.1.2_20250312-37-gd7ad151 esp-19.1.2_20250312-43-g1fdfc46 esp-19.1.2_20250225-9-gbdf8145 esp-19.1.2_20250225-9-gbdf8145 esp-19.1.2_20250225-9-gbdf8145 esp-19.1.2_20250312-67-g1b9c1af esp-19.1.2_20250312-67-g1b9c1af esp-19.1.2_20250312-2-g590a30f esp-19.1.2_20250312-2-g590a30f esp-19.1.2_20250312-68-g65bae88 esp-19.1.2_20250312-68-g65bae88 llvmorg-19.1.2-286-g58c0b0a esp-19.1.2_20250312-75-gc8e87f2 esp-19.1.2_20250312-75-gc8e87f2 esp-19.1.2_20250312-75-gc8e87f2 esp-19.1.2_20250312-2-gaccea5b esp-19.1.2_20250312-79-g85b8bac esp-19.1.2_20250312-1-g5bd87a5 esp-19.1.2_20250312-2-g398f0e9 esp-19.1.2_20250312-2-gfa1159a esp-19.1.2_20250312 esp-19.1.2_20250312-1-g190f2f0 esp-19.1.2_20250312 esp-19.1.2_20250312 esp-19.1.2_20250312 esp-19.1.2_20250312 esp-19.1.2_20250312-1-gdb3618a esp-19.1.2_20250312-5-g53503ec esp-19.1.2_20250312-14-gbd1030c esp-19.1.2_20250312-14-gbd1030c esp-19.1.2_20250312-94-ga50fb83 esp-19.1.2_20250312-21-g2d4e527 esp-19.1.2_20250312-22-gd828f8c esp-19.1.2_20250312-25-ga0db53c esp-19.1.2_20250312-30-g872c496e esp-19.1.2_20250312-30-g872c496e esp-19.1.2_20250312-30-g872c496e esp-19.1.2_20250312-50-g36efec3 esp-19.1.2_20250312-49-g66c7bd3 esp-19.1.2_20250312-68-gef601b8 esp-19.1.2_20250312-84-g3338f1a esp-19.1.2_20250225-105-gfa4c43d esp-19.1.2_20250312-99-gcad4d17 esp-19.1.2_20250312-2-g7c53768 esp-19.1.2_20250312-2-g7c53768 esp-19.1.2_20250312-3-g77450217 esp-19.1.2_20250312-1-g0b10ac7 esp-19.1.2_20250312-1-g0b10ac7 esp-19.1.2_20250312-7-ge58b5b9 esp-19.1.2_20250312-7-ge58b5b9 esp-19.1.2_20250312-9-gf8d929c esp-19.1.2_20250312-9-gf8d929c esp-19.1.2_20250312-1-g0b10ac7 esp-19.1.2_20250312-14-gcc23a57 esp-19.1.2_20250312-15-gb030eec esp-19.1.2_20250312-16-g5e690f7 esp-19.1.2_20250312-18-g64518b8 esp-19.1.2_20250312-19-gf837620 esp-19.1.2_20250312-30-gce11723 esp-19.1.2_20250312-36-gc4a4385 esp-19.1.2_20250312-45-gb1f78a1 esp-19.1.2_20250312-45-gb1f78a1)"}
148+
!6 = !{!7, !7, i64 0}
149+
!7 = !{!"short", !8, i64 0}
150+
!8 = !{!"omnipotent char", !9, i64 0}
151+
!9 = !{!"Simple C/C++ TBAA"}
152+
!10 = distinct !{!10, !11}
153+
!11 = !{!"llvm.loop.mustprogress"}
154+
;.
155+
; CHECK: [[TBAA6]] = !{[[META7:![0-9]+]], [[META7]], i64 0}
156+
; CHECK: [[META7]] = !{!"short", [[META8:![0-9]+]], i64 0}
157+
; CHECK: [[META8]] = !{!"omnipotent char", [[META9:![0-9]+]], i64 0}
158+
; CHECK: [[META9]] = !{!"Simple C/C++ TBAA"}
159+
; CHECK: [[LOOP10]] = distinct !{[[LOOP10]], [[META11:![0-9]+]]}
160+
; CHECK: [[META11]] = !{!"llvm.loop.mustprogress"}
161+
;.

0 commit comments

Comments
 (0)