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