xref: /llvm-project/mlir/test/Target/LLVMIR/Import/metadata-loop.ll (revision f0b0c02504899c1bc00c6e6428e7aebe9ea5beb1)
1af3a5ef1STobias Gysi; RUN: mlir-translate -import-llvm -split-input-file %s | FileCheck %s
2af3a5ef1STobias Gysi
39170fa58SMarkus Böck; CHECK-DAG: #[[$GROUP0:.*]] = #llvm.access_group<id = {{.*}}>
49170fa58SMarkus Böck; CHECK-DAG: #[[$GROUP1:.*]] = #llvm.access_group<id = {{.*}}>
59170fa58SMarkus Böck; CHECK-DAG: #[[$GROUP2:.*]] = #llvm.access_group<id = {{.*}}>
69170fa58SMarkus Böck; CHECK-DAG: #[[$GROUP3:.*]] = #llvm.access_group<id = {{.*}}>
7af3a5ef1STobias Gysi
8af3a5ef1STobias Gysi; CHECK-LABEL: llvm.func @access_group
9af3a5ef1STobias Gysidefine void @access_group(ptr %arg1) {
109170fa58SMarkus Böck  ; CHECK:  access_groups = [#[[$GROUP0]], #[[$GROUP1]]]
11af3a5ef1STobias Gysi  %1 = load i32, ptr %arg1, !llvm.access.group !0
129170fa58SMarkus Böck  ; CHECK:  access_groups = [#[[$GROUP2]], #[[$GROUP0]]]
13af3a5ef1STobias Gysi  %2 = load i32, ptr %arg1, !llvm.access.group !1
149170fa58SMarkus Böck  ; CHECK:  access_groups = [#[[$GROUP3]]]
15af3a5ef1STobias Gysi  %3 = load i32, ptr %arg1, !llvm.access.group !2
16af3a5ef1STobias Gysi  ret void
17af3a5ef1STobias Gysi}
18af3a5ef1STobias Gysi
19af3a5ef1STobias Gysi!0 = !{!3, !4}
20af3a5ef1STobias Gysi!1 = !{!5, !3}
21af3a5ef1STobias Gysi!2 = distinct !{}
22af3a5ef1STobias Gysi!3 = distinct !{}
23af3a5ef1STobias Gysi!4 = distinct !{}
24af3a5ef1STobias Gysi!5 = distinct !{}
25b83caa32SChristian Ulmann
26b83caa32SChristian Ulmann; // -----
27b83caa32SChristian Ulmann
28edfefd7fSTobias Gysi; CHECK-LABEL: llvm.func @supported_ops
29edfefd7fSTobias Gysidefine void @supported_ops(ptr %arg1, float %arg2, i32 %arg3, i32 %arg4) {
30edfefd7fSTobias Gysi  ; CHECK: llvm.load {{.*}}access_groups =
31edfefd7fSTobias Gysi  %1 = load i32, ptr %arg1, !llvm.access.group !0
32edfefd7fSTobias Gysi  ; CHECK: llvm.store {{.*}}access_groups =
33edfefd7fSTobias Gysi  store i32 %1, ptr %arg1, !llvm.access.group !0
34edfefd7fSTobias Gysi  ; CHECK: llvm.atomicrmw {{.*}}access_groups =
35edfefd7fSTobias Gysi  %2 = atomicrmw fmax ptr %arg1, float %arg2 acquire, !llvm.access.group !0
36edfefd7fSTobias Gysi  ; CHECK: llvm.cmpxchg {{.*}}access_groups =
37edfefd7fSTobias Gysi  %3 = cmpxchg ptr %arg1, i32 %arg3, i32 %arg4 monotonic seq_cst, !llvm.access.group !0
38b30422eaSTobias Gysi  ; CHECK: "llvm.intr.memcpy"{{.*}}access_groups =
39b30422eaSTobias Gysi  call void @llvm.memcpy.p0.p0.i32(ptr %arg1, ptr %arg1, i32 4, i1 false), !llvm.access.group !0
40b30422eaSTobias Gysi  ; CHECK: "llvm.intr.memset"{{.*}}access_groups =
41b30422eaSTobias Gysi  call void @llvm.memset.p0.i32(ptr %arg1, i8 42, i32 4, i1 false), !llvm.access.group !0
428e9baa96STobias Gysi  ; CHECK: llvm.call{{.*}}access_groups =
438e9baa96STobias Gysi  call void @foo(ptr %arg1), !llvm.access.group !0
44edfefd7fSTobias Gysi  ret void
45edfefd7fSTobias Gysi}
46edfefd7fSTobias Gysi
47b30422eaSTobias Gysideclare void @llvm.memcpy.p0.p0.i32(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i32, i1 immarg)
48b30422eaSTobias Gysideclare void @llvm.memset.p0.i32(ptr nocapture writeonly, i8, i32, i1 immarg)
498e9baa96STobias Gysideclare void @foo(ptr %arg1)
50b30422eaSTobias Gysi
51edfefd7fSTobias Gysi!0 = !{!1, !2}
52edfefd7fSTobias Gysi!1 = distinct !{}
53edfefd7fSTobias Gysi!2 = distinct !{}
54edfefd7fSTobias Gysi
55edfefd7fSTobias Gysi; // -----
56edfefd7fSTobias Gysi
574d7c879dSChristian Ulmann; CHECK: #[[$ANNOT_ATTR:.*]] = #llvm.loop_annotation<disableNonforced = true, mustProgress = true, isVectorized = true>
58b83caa32SChristian Ulmann
59b83caa32SChristian Ulmann; CHECK-LABEL: @simple
60b83caa32SChristian Ulmanndefine void @simple(i64 %n, ptr %A) {
61b83caa32SChristian Ulmannentry:
62d94399c6SChristian Ulmann; CHECK: llvm.br ^{{.*}} {loop_annotation = #[[$ANNOT_ATTR]]}
63b83caa32SChristian Ulmann  br label %end, !llvm.loop !1
64b83caa32SChristian Ulmannend:
65b83caa32SChristian Ulmann  ret void
66b83caa32SChristian Ulmann}
67b83caa32SChristian Ulmann
684d7c879dSChristian Ulmann!1 = distinct !{!1, !2, !3, !4}
69b83caa32SChristian Ulmann!2 = !{!"llvm.loop.disable_nonforced"}
70b83caa32SChristian Ulmann!3 = !{!"llvm.loop.mustprogress"}
714d7c879dSChristian Ulmann!4 = !{!"llvm.loop.isvectorized", i32 1}
72b83caa32SChristian Ulmann
73b83caa32SChristian Ulmann; // -----
74b83caa32SChristian Ulmann
75b83caa32SChristian Ulmann; CHECK-DAG: #[[FOLLOWUP:.*]] = #llvm.loop_annotation<disableNonforced = true>
76b83caa32SChristian Ulmann; CHECK-DAG: #[[VECTORIZE_ATTR:.*]] = #llvm.loop_vectorize<disable = false, predicateEnable = true, scalableEnable = false, width = 16 : i32, followupVectorized = #[[FOLLOWUP]], followupEpilogue = #[[FOLLOWUP]], followupAll = #[[FOLLOWUP]]>
77b83caa32SChristian Ulmann; CHECK-DAG: #[[$ANNOT_ATTR:.*]] = #llvm.loop_annotation<vectorize = #[[VECTORIZE_ATTR]]>
78b83caa32SChristian Ulmann
79b83caa32SChristian Ulmann; CHECK-LABEL: @vectorize
80b83caa32SChristian Ulmanndefine void @vectorize(i64 %n, ptr %A) {
81b83caa32SChristian Ulmannentry:
82d94399c6SChristian Ulmann; CHECK: llvm.br ^{{.*}} {loop_annotation = #[[$ANNOT_ATTR]]}
83b83caa32SChristian Ulmann  br label %end, !llvm.loop !1
84b83caa32SChristian Ulmannend:
85b83caa32SChristian Ulmann  ret void
86b83caa32SChristian Ulmann}
87b83caa32SChristian Ulmann
88b83caa32SChristian Ulmann!1 = distinct !{!1, !2, !3, !4, !5, !6, !7, !8}
89b83caa32SChristian Ulmann!2 = !{!"llvm.loop.vectorize.enable", i1 1}
90b83caa32SChristian Ulmann!3 = !{!"llvm.loop.vectorize.predicate.enable", i1 1}
91b83caa32SChristian Ulmann!4 = !{!"llvm.loop.vectorize.scalable.enable", i1 0}
92b83caa32SChristian Ulmann!5 = !{!"llvm.loop.vectorize.width", i32 16}
93b83caa32SChristian Ulmann!6 = !{!"llvm.loop.vectorize.followup_vectorized", !9}
94b83caa32SChristian Ulmann!7 = !{!"llvm.loop.vectorize.followup_epilogue", !9}
95b83caa32SChristian Ulmann!8 = !{!"llvm.loop.vectorize.followup_all", !9}
96b83caa32SChristian Ulmann
97b83caa32SChristian Ulmann!9 = distinct !{!9, !10}
98b83caa32SChristian Ulmann!10 = !{!"llvm.loop.disable_nonforced"}
99b83caa32SChristian Ulmann
100b83caa32SChristian Ulmann; // -----
101b83caa32SChristian Ulmann
102b83caa32SChristian Ulmann; CHECK-DAG: #[[INTERLEAVE_ATTR:.*]] = #llvm.loop_interleave<count = 8 : i32>
103b83caa32SChristian Ulmann; CHECK-DAG: #[[$ANNOT_ATTR:.*]] = #llvm.loop_annotation<interleave = #[[INTERLEAVE_ATTR]]>
104b83caa32SChristian Ulmann
105b83caa32SChristian Ulmann; CHECK-LABEL: @interleave
106b83caa32SChristian Ulmanndefine void @interleave(i64 %n, ptr %A) {
107b83caa32SChristian Ulmannentry:
108d94399c6SChristian Ulmann; CHECK: llvm.br ^{{.*}} {loop_annotation = #[[$ANNOT_ATTR]]}
109b83caa32SChristian Ulmann  br label %end, !llvm.loop !1
110b83caa32SChristian Ulmannend:
111b83caa32SChristian Ulmann  ret void
112b83caa32SChristian Ulmann}
113b83caa32SChristian Ulmann
114b83caa32SChristian Ulmann!1 = distinct !{!1, !2}
115b83caa32SChristian Ulmann!2 = !{!"llvm.loop.interleave.count", i32 8}
116b83caa32SChristian Ulmann
117b83caa32SChristian Ulmann; // -----
118b83caa32SChristian Ulmann
119b83caa32SChristian Ulmann; CHECK-DAG: #[[FOLLOWUP:.*]] = #llvm.loop_annotation<disableNonforced = true>
1204d7c879dSChristian Ulmann; CHECK-DAG: #[[UNROLL_ATTR:.*]] = #llvm.loop_unroll<disable = false, count = 16 : i32, runtimeDisable = true, full = true, followupUnrolled = #[[FOLLOWUP]], followupRemainder = #[[FOLLOWUP]], followupAll = #[[FOLLOWUP]]>
121b83caa32SChristian Ulmann; CHECK-DAG: #[[$ANNOT_ATTR:.*]] = #llvm.loop_annotation<unroll = #[[UNROLL_ATTR]]>
122b83caa32SChristian Ulmann
123b83caa32SChristian Ulmann; CHECK-LABEL: @unroll
124b83caa32SChristian Ulmanndefine void @unroll(i64 %n, ptr %A) {
125b83caa32SChristian Ulmannentry:
126d94399c6SChristian Ulmann; CHECK: llvm.br ^{{.*}} {loop_annotation = #[[$ANNOT_ATTR]]}
127b83caa32SChristian Ulmann  br label %end, !llvm.loop !1
128b83caa32SChristian Ulmannend:
129b83caa32SChristian Ulmann  ret void
130b83caa32SChristian Ulmann}
131b83caa32SChristian Ulmann
1324d7c879dSChristian Ulmann!1 = distinct !{!1, !2, !3, !4, !5, !6, !7, !8}
133b83caa32SChristian Ulmann!2 = !{!"llvm.loop.unroll.enable"}
134b83caa32SChristian Ulmann!3 = !{!"llvm.loop.unroll.count", i32 16}
135b83caa32SChristian Ulmann!4 = !{!"llvm.loop.unroll.runtime.disable"}
136b83caa32SChristian Ulmann!5 = !{!"llvm.loop.unroll.full"}
1374d7c879dSChristian Ulmann!6 = !{!"llvm.loop.unroll.followup_unrolled", !9}
1384d7c879dSChristian Ulmann!7 = !{!"llvm.loop.unroll.followup_remainder", !9}
1394d7c879dSChristian Ulmann!8 = !{!"llvm.loop.unroll.followup_all", !9}
140b83caa32SChristian Ulmann
1414d7c879dSChristian Ulmann!9 = distinct !{!9, !10}
1424d7c879dSChristian Ulmann!10 = !{!"llvm.loop.disable_nonforced"}
143b83caa32SChristian Ulmann
144b83caa32SChristian Ulmann; // -----
145b83caa32SChristian Ulmann
146b83caa32SChristian Ulmann; CHECK-DAG: #[[UNROLL_ATTR:.*]] = #llvm.loop_unroll<disable = true>
147b83caa32SChristian Ulmann; CHECK-DAG: #[[$ANNOT_ATTR:.*]] = #llvm.loop_annotation<unroll = #[[UNROLL_ATTR]]>
148b83caa32SChristian Ulmann
149b83caa32SChristian Ulmann; CHECK-LABEL: @unroll_disable
150b83caa32SChristian Ulmanndefine void @unroll_disable(i64 %n, ptr %A) {
151b83caa32SChristian Ulmannentry:
152d94399c6SChristian Ulmann; CHECK: llvm.br ^{{.*}} {loop_annotation = #[[$ANNOT_ATTR]]}
153b83caa32SChristian Ulmann  br label %end, !llvm.loop !1
154b83caa32SChristian Ulmannend:
155b83caa32SChristian Ulmann  ret void
156b83caa32SChristian Ulmann}
157b83caa32SChristian Ulmann
158b83caa32SChristian Ulmann!1 = distinct !{!1, !2}
159b83caa32SChristian Ulmann!2 = !{!"llvm.loop.unroll.disable"}
160b83caa32SChristian Ulmann
161b83caa32SChristian Ulmann; // -----
162b83caa32SChristian Ulmann
163b83caa32SChristian Ulmann; CHECK-DAG: #[[FOLLOWUP:.*]] = #llvm.loop_annotation<disableNonforced = true>
164b83caa32SChristian Ulmann; CHECK-DAG: #[[UNROLL_AND_JAM_ATTR:.*]] = #llvm.loop_unroll_and_jam<disable = false, count = 32 : i32, followupOuter = #[[FOLLOWUP]], followupInner = #[[FOLLOWUP]], followupRemainderOuter = #[[FOLLOWUP]], followupRemainderInner = #[[FOLLOWUP]], followupAll = #[[FOLLOWUP]]>
165b83caa32SChristian Ulmann; CHECK-DAG: #[[$ANNOT_ATTR:.*]] = #llvm.loop_annotation<unrollAndJam = #[[UNROLL_AND_JAM_ATTR]]>
166b83caa32SChristian Ulmann
167b83caa32SChristian Ulmann; CHECK-LABEL: @unroll_and_jam
168b83caa32SChristian Ulmanndefine void @unroll_and_jam(i64 %n, ptr %A) {
169b83caa32SChristian Ulmannentry:
170d94399c6SChristian Ulmann; CHECK: llvm.br ^{{.*}} {loop_annotation = #[[$ANNOT_ATTR]]}
171b83caa32SChristian Ulmann  br label %end, !llvm.loop !1
172b83caa32SChristian Ulmannend:
173b83caa32SChristian Ulmann  ret void
174b83caa32SChristian Ulmann}
175b83caa32SChristian Ulmann
176b83caa32SChristian Ulmann!1 = distinct !{!1, !2, !3, !4, !5, !6, !7, !8}
177b83caa32SChristian Ulmann!2 = !{!"llvm.loop.unroll_and_jam.enable"}
178b83caa32SChristian Ulmann!3 = !{!"llvm.loop.unroll_and_jam.count", i32 32}
179b83caa32SChristian Ulmann!4 = !{!"llvm.loop.unroll_and_jam.followup_outer", !9}
180b83caa32SChristian Ulmann!5 = !{!"llvm.loop.unroll_and_jam.followup_inner", !9}
181b83caa32SChristian Ulmann!6 = !{!"llvm.loop.unroll_and_jam.followup_remainder_outer", !9}
182b83caa32SChristian Ulmann!7 = !{!"llvm.loop.unroll_and_jam.followup_remainder_inner", !9}
183b83caa32SChristian Ulmann!8 = !{!"llvm.loop.unroll_and_jam.followup_all", !9}
184b83caa32SChristian Ulmann
185b83caa32SChristian Ulmann!9 = distinct !{!9, !10}
186b83caa32SChristian Ulmann!10 = !{!"llvm.loop.disable_nonforced"}
187b83caa32SChristian Ulmann
188b83caa32SChristian Ulmann; // -----
189b83caa32SChristian Ulmann
190b83caa32SChristian Ulmann; CHECK-DAG: #[[LICM_ATTR:.*]] = #llvm.loop_licm<disable = true, versioningDisable = true>
191b83caa32SChristian Ulmann; CHECK-DAG: #[[$ANNOT_ATTR:.*]] = #llvm.loop_annotation<licm = #[[LICM_ATTR]]>
192b83caa32SChristian Ulmann
193b83caa32SChristian Ulmann; CHECK-LABEL: @licm
194b83caa32SChristian Ulmanndefine void @licm(i64 %n, ptr %A) {
195b83caa32SChristian Ulmannentry:
196d94399c6SChristian Ulmann; CHECK: llvm.br ^{{.*}} {loop_annotation = #[[$ANNOT_ATTR]]}
197b83caa32SChristian Ulmann  br label %end, !llvm.loop !1
198b83caa32SChristian Ulmannend:
199b83caa32SChristian Ulmann  ret void
200b83caa32SChristian Ulmann}
201b83caa32SChristian Ulmann
202b83caa32SChristian Ulmann!1 = distinct !{!1, !2, !3}
203b83caa32SChristian Ulmann!2 = !{!"llvm.licm.disable"}
204b83caa32SChristian Ulmann!3 = !{!"llvm.loop.licm_versioning.disable"}
205b83caa32SChristian Ulmann
206b83caa32SChristian Ulmann; // -----
207b83caa32SChristian Ulmann
208b83caa32SChristian Ulmann; CHECK-DAG: #[[FOLLOWUP:.*]] = #llvm.loop_annotation<disableNonforced = true>
209b83caa32SChristian Ulmann; CHECK-DAG: #[[DISTRIBUTE_ATTR:.*]] = #llvm.loop_distribute<disable = true, followupCoincident = #[[FOLLOWUP]], followupSequential = #[[FOLLOWUP]], followupFallback = #[[FOLLOWUP]], followupAll = #[[FOLLOWUP]]>
210b83caa32SChristian Ulmann; CHECK-DAG: #[[$ANNOT_ATTR:.*]] = #llvm.loop_annotation<distribute = #[[DISTRIBUTE_ATTR]]>
211b83caa32SChristian Ulmann
212b83caa32SChristian Ulmann; CHECK-LABEL: @distribute
213b83caa32SChristian Ulmanndefine void @distribute(i64 %n, ptr %A) {
214b83caa32SChristian Ulmannentry:
215d94399c6SChristian Ulmann; CHECK: llvm.br ^{{.*}} {loop_annotation = #[[$ANNOT_ATTR]]}
216b83caa32SChristian Ulmann  br label %end, !llvm.loop !1
217b83caa32SChristian Ulmannend:
218b83caa32SChristian Ulmann  ret void
219b83caa32SChristian Ulmann}
220b83caa32SChristian Ulmann
221b83caa32SChristian Ulmann!1 = distinct !{!1, !2, !3, !4, !5, !6}
222b83caa32SChristian Ulmann!2 = !{!"llvm.loop.distribute.enable", i1 0}
223b83caa32SChristian Ulmann!3 = !{!"llvm.loop.distribute.followup_coincident", !9}
224b83caa32SChristian Ulmann!4 = !{!"llvm.loop.distribute.followup_sequential", !9}
225b83caa32SChristian Ulmann!5 = !{!"llvm.loop.distribute.followup_fallback", !9}
226b83caa32SChristian Ulmann!6 = !{!"llvm.loop.distribute.followup_all", !9}
227b83caa32SChristian Ulmann
228b83caa32SChristian Ulmann!9 = distinct !{!9, !10}
229b83caa32SChristian Ulmann!10 = !{!"llvm.loop.disable_nonforced"}
230b83caa32SChristian Ulmann
231b83caa32SChristian Ulmann; // -----
232b83caa32SChristian Ulmann
233b83caa32SChristian Ulmann; CHECK-DAG: #[[PIPELINE_ATTR:.*]] = #llvm.loop_pipeline<disable = false, initiationinterval = 2 : i32>
234b83caa32SChristian Ulmann; CHECK-DAG: #[[$ANNOT_ATTR:.*]] = #llvm.loop_annotation<pipeline = #[[PIPELINE_ATTR]]>
235b83caa32SChristian Ulmann
236b83caa32SChristian Ulmann; CHECK-LABEL: @pipeline
237b83caa32SChristian Ulmanndefine void @pipeline(i64 %n, ptr %A) {
238b83caa32SChristian Ulmannentry:
239d94399c6SChristian Ulmann; CHECK: llvm.br ^{{.*}} {loop_annotation = #[[$ANNOT_ATTR]]}
240b83caa32SChristian Ulmann  br label %end, !llvm.loop !1
241b83caa32SChristian Ulmannend:
242b83caa32SChristian Ulmann  ret void
243b83caa32SChristian Ulmann}
244b83caa32SChristian Ulmann
245b83caa32SChristian Ulmann!1 = distinct !{!1, !2, !3}
246b83caa32SChristian Ulmann!2 = !{!"llvm.loop.pipeline.disable", i1 0}
247b83caa32SChristian Ulmann!3 = !{!"llvm.loop.pipeline.initiationinterval", i32 2}
248b83caa32SChristian Ulmann
249b83caa32SChristian Ulmann; // -----
250b83caa32SChristian Ulmann
2517f249e45SChristian Ulmann; CHECK-DAG: #[[PEELED_ATTR:.*]] = #llvm.loop_peeled<count = 5 : i32>
2527f249e45SChristian Ulmann; CHECK-DAG: #[[$ANNOT_ATTR:.*]] = #llvm.loop_annotation<peeled = #[[PEELED_ATTR]]>
2537f249e45SChristian Ulmann
2547f249e45SChristian Ulmann; CHECK-LABEL: @peeled
2557f249e45SChristian Ulmanndefine void @peeled(i64 %n, ptr %A) {
2567f249e45SChristian Ulmannentry:
257d94399c6SChristian Ulmann; CHECK: llvm.br ^{{.*}} {loop_annotation = #[[$ANNOT_ATTR]]}
2587f249e45SChristian Ulmann  br label %end, !llvm.loop !1
2597f249e45SChristian Ulmannend:
2607f249e45SChristian Ulmann  ret void
2617f249e45SChristian Ulmann}
2627f249e45SChristian Ulmann
2637f249e45SChristian Ulmann!1 = distinct !{!1, !2}
2647f249e45SChristian Ulmann!2 = !{!"llvm.loop.peeled.count", i32 5}
2657f249e45SChristian Ulmann
2667f249e45SChristian Ulmann; // -----
2677f249e45SChristian Ulmann
2687f249e45SChristian Ulmann; CHECK-DAG: #[[UNSWITCH_ATTR:.*]] = #llvm.loop_unswitch<partialDisable = true>
2697f249e45SChristian Ulmann; CHECK-DAG: #[[$ANNOT_ATTR:.*]] = #llvm.loop_annotation<unswitch = #[[UNSWITCH_ATTR]]>
2707f249e45SChristian Ulmann
2717f249e45SChristian Ulmann; CHECK-LABEL: @unswitched
2727f249e45SChristian Ulmanndefine void @unswitched(i64 %n, ptr %A) {
2737f249e45SChristian Ulmannentry:
274d94399c6SChristian Ulmann; CHECK: llvm.br ^{{.*}} {loop_annotation = #[[$ANNOT_ATTR]]}
2757f249e45SChristian Ulmann  br label %end, !llvm.loop !1
2767f249e45SChristian Ulmannend:
2777f249e45SChristian Ulmann  ret void
2787f249e45SChristian Ulmann}
2797f249e45SChristian Ulmann
2807f249e45SChristian Ulmann!1 = distinct !{!1, !2}
2817f249e45SChristian Ulmann!2 = !{!"llvm.loop.unswitch.partial.disable"}
2827f249e45SChristian Ulmann
2837f249e45SChristian Ulmann; // -----
2847f249e45SChristian Ulmann
2859170fa58SMarkus Böck; CHECK: #[[GROUP0:.*]] = #llvm.access_group<id = {{.*}}>
2869170fa58SMarkus Böck; CHECK: #[[$ANNOT_ATTR:.*]] = #llvm.loop_annotation<parallelAccesses = #[[GROUP0]]>
287b83caa32SChristian Ulmann
288b83caa32SChristian Ulmann; CHECK-LABEL: @parallel_accesses
289b83caa32SChristian Ulmanndefine void @parallel_accesses(ptr %arg) {
290b83caa32SChristian Ulmannentry:
291b83caa32SChristian Ulmann  %0 = load i32, ptr %arg, !llvm.access.group !0
292d94399c6SChristian Ulmann; CHECK: llvm.br ^{{.*}} {loop_annotation = #[[$ANNOT_ATTR]]}
293b83caa32SChristian Ulmann  br label %end, !llvm.loop !1
294b83caa32SChristian Ulmannend:
295b83caa32SChristian Ulmann  ret void
296b83caa32SChristian Ulmann}
297b83caa32SChristian Ulmann
298b83caa32SChristian Ulmann!0 = distinct !{}
299b83caa32SChristian Ulmann!1 = distinct !{!1, !2}
300b83caa32SChristian Ulmann!2 = !{!"llvm.loop.parallel_accesses", !0}
301b83caa32SChristian Ulmann
302b83caa32SChristian Ulmann; // -----
303b83caa32SChristian Ulmann
3049170fa58SMarkus Böck; CHECK: #[[GROUP0:.*]] = #llvm.access_group<id = {{.*}}>
3059170fa58SMarkus Böck; CHECK: #[[GROUP1:.*]] = #llvm.access_group<id = {{.*}}>
3069170fa58SMarkus Böck; CHECK: #[[$ANNOT_ATTR:.*]] = #llvm.loop_annotation<parallelAccesses = #[[GROUP0]], #[[GROUP1]]>
307b83caa32SChristian Ulmann
308b83caa32SChristian Ulmann; CHECK-LABEL: @multiple_parallel_accesses
309b83caa32SChristian Ulmanndefine void @multiple_parallel_accesses(ptr %arg) {
310b83caa32SChristian Ulmannentry:
311b83caa32SChristian Ulmann  %0 = load i32, ptr %arg, !llvm.access.group !0
312b83caa32SChristian Ulmann  %1 = load i32, ptr %arg, !llvm.access.group !3
313d94399c6SChristian Ulmann; CHECK: llvm.br ^{{.*}} {loop_annotation = #[[$ANNOT_ATTR]]}
314b83caa32SChristian Ulmann  br label %end, !llvm.loop !1
315b83caa32SChristian Ulmannend:
316b83caa32SChristian Ulmann  ret void
317b83caa32SChristian Ulmann}
318b83caa32SChristian Ulmann
319b83caa32SChristian Ulmann!0 = distinct !{}
320b83caa32SChristian Ulmann!1 = distinct !{!1, !2}
321b83caa32SChristian Ulmann!2 = !{!"llvm.loop.parallel_accesses", !0, !3}
322b83caa32SChristian Ulmann!3 = distinct !{}
3236600301cSTobias Gysi
3246600301cSTobias Gysi; // -----
3256600301cSTobias Gysi
3266600301cSTobias Gysi; Verify the unused access group is not imported.
327*f0b0c025Sklensy; CHECK-COUNT-1: #llvm.access_group
3286600301cSTobias Gysi
3296600301cSTobias Gysi; CHECK-LABEL: @unused_parallel_access
3306600301cSTobias Gysidefine void @unused_parallel_access(ptr %arg) {
3316600301cSTobias Gysientry:
3326600301cSTobias Gysi  %0 = load i32, ptr %arg, !llvm.access.group !0
3336600301cSTobias Gysi  br label %end, !llvm.loop !1
3346600301cSTobias Gysiend:
3356600301cSTobias Gysi  ret void
3366600301cSTobias Gysi}
3376600301cSTobias Gysi
3386600301cSTobias Gysi!0 = distinct !{}
3396600301cSTobias Gysi!1 = distinct !{!1, !2}
3406600301cSTobias Gysi!2 = !{!"llvm.loop.parallel_accesses", !0, !3}
3416600301cSTobias Gysi!3 = distinct !{}
34262d7d94cSChristian Ulmann
34362d7d94cSChristian Ulmann; // -----
34462d7d94cSChristian Ulmann
34562d7d94cSChristian Ulmann; CHECK: #[[start_loc:.*]] = loc("metadata-loop.ll":1:2)
34662d7d94cSChristian Ulmann; CHECK: #[[end_loc:.*]] = loc("metadata-loop.ll":2:2)
34762d7d94cSChristian Ulmann; CHECK: #[[SUBPROGRAM:.*]] = #llvm.di_subprogram<
34862d7d94cSChristian Ulmann; CHECK: #[[start_loc_fused:.*]] = loc(fused<#[[SUBPROGRAM]]>[#[[start_loc]]])
34962d7d94cSChristian Ulmann; CHECK: #[[end_loc_fused:.*]] = loc(fused<#[[SUBPROGRAM]]>[#[[end_loc]]])
35062d7d94cSChristian Ulmann; CHECK: #[[$ANNOT_ATTR:.*]] = #llvm.loop_annotation<
35162d7d94cSChristian Ulmann; CHECK-SAME: mustProgress = true
35262d7d94cSChristian Ulmann; CHECK-SAME: startLoc = #[[start_loc_fused]]
35362d7d94cSChristian Ulmann; CHECK-SAME: endLoc = #[[end_loc_fused]]
35462d7d94cSChristian Ulmann
35562d7d94cSChristian Ulmann; CHECK-LABEL: @loop_locs
35662d7d94cSChristian Ulmanndefine void @loop_locs(i64 %n, ptr %A) {
35762d7d94cSChristian Ulmannentry:
35862d7d94cSChristian Ulmann; CHECK: llvm.br ^{{.*}} {loop_annotation = #[[$ANNOT_ATTR]]}
35962d7d94cSChristian Ulmann  br label %end, !llvm.loop !6
36062d7d94cSChristian Ulmannend:
36162d7d94cSChristian Ulmann  ret void
36262d7d94cSChristian Ulmann}
36362d7d94cSChristian Ulmann
36462d7d94cSChristian Ulmann!llvm.dbg.cu = !{!1}
36562d7d94cSChristian Ulmann!llvm.module.flags = !{!0}
36662d7d94cSChristian Ulmann!0 = !{i32 2, !"Debug Info Version", i32 3}
36762d7d94cSChristian Ulmann!1 = distinct !DICompileUnit(language: DW_LANG_C, file: !2)
36862d7d94cSChristian Ulmann!2 = !DIFile(filename: "metadata-loop.ll", directory: "/")
36962d7d94cSChristian Ulmann!3 = distinct !DISubprogram(name: "loop_locs", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1)
37062d7d94cSChristian Ulmann!4 = !DILocation(line: 1, column: 2, scope: !3)
37162d7d94cSChristian Ulmann!5 = !DILocation(line: 2, column: 2, scope: !3)
37262d7d94cSChristian Ulmann
37362d7d94cSChristian Ulmann!6 = distinct !{!6, !4, !5, !7}
37462d7d94cSChristian Ulmann!7 = !{!"llvm.loop.mustprogress"}
375