1b7d2b160SFlorian Hahn; REQUIRES: asserts 2b7d2b160SFlorian Hahn 3b7d2b160SFlorian Hahn; RUN: opt -loop-vectorize -enable-vplan-native-path -debug -disable-output %s 2>&1 | FileCheck %s 4b7d2b160SFlorian Hahn 5b7d2b160SFlorian Hahn@arr2 = external global [8 x i64], align 16 6b7d2b160SFlorian Hahn@arr = external global [8 x [8 x i64]], align 16 7b7d2b160SFlorian Hahn 8b7d2b160SFlorian Hahndefine void @foo(i64 %n) { 9b7d2b160SFlorian Hahn; CHECK: VPlan 'HCFGBuilder: Plain CFG 10b7d2b160SFlorian Hahn; CHECK-NEXT: { 1105776122SFlorian Hahn; CHECK-NEXT: vector.ph: 1205776122SFlorian Hahn; CHECK-NEXT: Successor(s): outer.header 13b7d2b160SFlorian Hahn; CHECK-EMPTY: 1405776122SFlorian Hahn; CHECK-NEXT: <x1> outer.header: { 15b7d2b160SFlorian Hahn; CHECK-NEXT: vector.body: 16b7d2b160SFlorian Hahn; CHECK-NEXT: WIDEN-PHI ir<%outer.iv> = phi ir<0>, ir<%outer.iv.next> 17b7d2b160SFlorian Hahn; CHECK-NEXT: EMIT ir<%gep.1> = getelementptr ir<@arr2> ir<0> ir<%outer.iv> 18b7d2b160SFlorian Hahn; CHECK-NEXT: EMIT store ir<%outer.iv> ir<%gep.1> 19b7d2b160SFlorian Hahn; CHECK-NEXT: EMIT ir<%add> = add ir<%outer.iv> ir<%n> 20b7d2b160SFlorian Hahn; CHECK-NEXT: Successor(s): inner 21b7d2b160SFlorian Hahn; CHECK-EMPTY: 2205776122SFlorian Hahn; CHECK-NEXT: <x1> inner: { 23b7d2b160SFlorian Hahn; CHECK-NEXT: inner: 24b7d2b160SFlorian Hahn; CHECK-NEXT: WIDEN-PHI ir<%inner.iv> = phi ir<0>, ir<%inner.iv.next> 25b7d2b160SFlorian Hahn; CHECK-NEXT: EMIT ir<%gep.2> = getelementptr ir<@arr> ir<0> ir<%inner.iv> ir<%outer.iv> 26b7d2b160SFlorian Hahn; CHECK-NEXT: EMIT store ir<%add> ir<%gep.2> 27b7d2b160SFlorian Hahn; CHECK-NEXT: EMIT ir<%inner.iv.next> = add ir<%inner.iv> ir<1> 28b7d2b160SFlorian Hahn; CHECK-NEXT: EMIT ir<%inner.ec> = icmp ir<%inner.iv.next> ir<8> 29*a5bb4a3bSFlorian Hahn; CHECK-NEXT: EMIT branch-on-cond ir<%inner.ec> 3005776122SFlorian Hahn; CHECK-NEXT: No successors 3105776122SFlorian Hahn; CHECK-NEXT: } 3205776122SFlorian Hahn; CHECK-NEXT: Successor(s): outer.latch 33b7d2b160SFlorian Hahn; CHECK-EMPTY: 34b7d2b160SFlorian Hahn; CHECK-NEXT: outer.latch: 35b7d2b160SFlorian Hahn; CHECK-NEXT: EMIT ir<%outer.iv.next> = add ir<%outer.iv> ir<1> 36b7d2b160SFlorian Hahn; CHECK-NEXT: EMIT ir<%outer.ec> = icmp ir<%outer.iv.next> ir<8> 37*a5bb4a3bSFlorian Hahn; CHECK-NEXT: EMIT branch-on-cond ir<%outer.ec> 3805776122SFlorian Hahn; CHECK-NEXT: No successors 3905776122SFlorian Hahn; CHECK-NEXT: } 4005776122SFlorian Hahn; CHECK-NEXT: Successor(s): exit 41b7d2b160SFlorian Hahn; CHECK-EMPTY: 42b7d2b160SFlorian Hahn; CHECK-NEXT: exit: 43b7d2b160SFlorian Hahn; CHECK-NEXT: No successors 44b7d2b160SFlorian Hahn; CHECK-NEXT: } 45b7d2b160SFlorian Hahnentry: 46b7d2b160SFlorian Hahn br label %outer.header 47b7d2b160SFlorian Hahn 48b7d2b160SFlorian Hahnouter.header: 49b7d2b160SFlorian Hahn %outer.iv = phi i64 [ 0, %entry ], [ %outer.iv.next, %outer.latch ] 50b7d2b160SFlorian Hahn %gep.1 = getelementptr inbounds [8 x i64], [8 x i64]* @arr2, i64 0, i64 %outer.iv 51b7d2b160SFlorian Hahn store i64 %outer.iv, i64* %gep.1, align 4 52b7d2b160SFlorian Hahn %add = add nsw i64 %outer.iv, %n 53b7d2b160SFlorian Hahn br label %inner 54b7d2b160SFlorian Hahn 55b7d2b160SFlorian Hahninner: 56b7d2b160SFlorian Hahn %inner.iv = phi i64 [ 0, %outer.header ], [ %inner.iv.next, %inner ] 57b7d2b160SFlorian Hahn %gep.2 = getelementptr inbounds [8 x [8 x i64]], [8 x [8 x i64]]* @arr, i64 0, i64 %inner.iv, i64 %outer.iv 58b7d2b160SFlorian Hahn store i64 %add, i64* %gep.2, align 4 59b7d2b160SFlorian Hahn %inner.iv.next = add nuw nsw i64 %inner.iv, 1 60b7d2b160SFlorian Hahn %inner.ec = icmp eq i64 %inner.iv.next, 8 61b7d2b160SFlorian Hahn br i1 %inner.ec, label %outer.latch, label %inner 62b7d2b160SFlorian Hahn 63b7d2b160SFlorian Hahnouter.latch: 64b7d2b160SFlorian Hahn %outer.iv.next = add nuw nsw i64 %outer.iv, 1 65b7d2b160SFlorian Hahn %outer.ec = icmp eq i64 %outer.iv.next, 8 66b7d2b160SFlorian Hahn br i1 %outer.ec, label %exit, label %outer.header, !llvm.loop !1 67b7d2b160SFlorian Hahn 68b7d2b160SFlorian Hahnexit: 69b7d2b160SFlorian Hahn ret void 70b7d2b160SFlorian Hahn} 71b7d2b160SFlorian Hahn 72b7d2b160SFlorian Hahn!1 = distinct !{!1, !2, !3} 73b7d2b160SFlorian Hahn!2 = !{!"llvm.loop.vectorize.width", i32 4} 74b7d2b160SFlorian Hahn!3 = !{!"llvm.loop.vectorize.enable", i1 true} 75