<div dir="ltr"><div>Hi, in our backend, which is unfortunately not upstreamed, we are relying on llvm.loop.parallel_accesses metadata for certain passes like software pipelining so we can re-order instructions. Ideally, we would want the loop unroller to support the notion of the loop's parallelism in its pre-unrolled version. This probably should happen by propagating !alias.scope and !alias metadata. Is there any plan or open patch for supporting this?</div><div><br></div><div>Simplified example:</div><div><br></div><div>for.body:<br></div><div>%0 = load [..]<br></div><div> store %0 [..]</div><div>br label %for.cond, !llvm.loop !2<br></div><div><br></div><div>!1 = distinct !{}<br></div><div>!2 = distinct !{!2, !3, !4, !5, !6, !7}<br>!3 = !{!"llvm.loop.parallel_accesses", !1}<br>!4 = !{!"llvm.loop.vectorize.width", i32 1}<br>!5 = !{!"llvm.loop.interleave.count", i32 1}<br>!6 = !{!"llvm.loop.vectorize.enable", i1 true}<br></div><div>!7 = !{!"llvm.loop.vectorize.followup_all", !8}<br></div><div>!8 = !{!"llvm.loop.unroll.count", i32 2}<br></div><div><br></div><div>(unroll by 2) =></div><div><br></div><div><div>for.body:<br></div><div>%0 = load [..] !alias.scope !9 !noalias !11<br></div><div>store %0 [..] !alias.scope !9 !noalias !11</div><div>%1 = load [..] !alias.scope !10 !noalias !12<br></div><div> store %1 [..] !alias.scope !10 !noalias !12</div><div></div><div>br label %for.cond, !llvm.loop !2<br></div><div><br></div><div>[..]</div><div><br></div><div>!9 = distinct !{!9, !"iteration0"}<br></div><div>!10 = distinct !{!10, !"iteration1"}<br></div><div></div><div>!11 = !{!10}<br></div><div>!12 = !{!9}<br></div><div><br></div><div>Thanks, Hendrik</div></div></div>