1; RUN: opt -passes=loop-vectorize -S < %s 2>&1 | FileCheck %s 2 3target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128-ni:1" 4target triple = "x86_64-unknown-linux-gnu" 5 6; Make sure that we can compile the test without crash. 7define void @barney(ptr %dst, i1 %arg) { 8 9; CHECK-LABEL: @barney( 10; CHECK: middle.block: 11 12bb: 13 br label %bb2 14 15bb2: ; preds = %bb2, %bb 16 %tmp4 = icmp slt i32 undef, 0 17 br i1 %tmp4, label %bb2, label %bb5 18 19bb5: ; preds = %bb2 20 br label %bb19 21 22bb18: ; preds = %bb33 23 ret void 24 25bb19: ; preds = %bb36, %bb5 26 %tmp21 = phi i64 [ undef, %bb36 ], [ 2, %bb5 ] 27 %tmp22 = phi i32 [ %tmp65, %bb36 ], [ undef, %bb5 ] 28 br label %bb50 29 30bb33: ; preds = %bb62 31 br i1 %arg, label %bb18, label %bb36 32 33bb36: ; preds = %bb33 34 br label %bb19 35 36bb46: ; preds = %bb50 37 br i1 %arg, label %bb48, label %bb59 38 39bb48: ; preds = %bb46 40 %tmp49 = add i32 %tmp52, 14 41 ret void 42 43bb50: ; preds = %bb50, %bb19 44 %tmp52 = phi i32 [ %tmp55, %bb50 ], [ %tmp22, %bb19 ] 45 %tmp53 = phi i64 [ %tmp56, %bb50 ], [ 1, %bb19 ] 46 %gep = getelementptr inbounds i8, ptr %dst, i64 %tmp53 47 store i8 1, ptr %gep 48 %tmp54 = add i32 %tmp52, 12 49 %tmp55 = add i32 %tmp52, 13 50 %tmp56 = add nuw nsw i64 %tmp53, 1 51 %tmp58 = icmp ult i64 %tmp53, undef 52 br i1 %tmp58, label %bb50, label %bb46 53 54bb59: ; preds = %bb46 55 br label %bb62 56 57bb62: ; preds = %bb68, %bb59 58 %tmp63 = phi i32 [ %tmp65, %bb68 ], [ %tmp55, %bb59 ] 59 %tmp64 = phi i64 [ %tmp66, %bb68 ], [ %tmp56, %bb59 ] 60 %tmp65 = add i32 %tmp63, 13 61 %tmp66 = add nuw nsw i64 %tmp64, 1 62 %tmp67 = icmp ult i64 %tmp66, %tmp21 63 br i1 %tmp67, label %bb68, label %bb33 64 65bb68: ; preds = %bb62 66 br label %bb62 67} 68 69define i32 @foo(ptr addrspace(1) %p) { 70 71; CHECK-LABEL: foo 72; CHECK: middle.block: 73 74entry: 75 br label %outer 76 77outer: ; preds = %outer_latch, %entry 78 %iv = phi i64 [ 2, %entry ], [ %iv.next, %outer_latch ] 79 br label %inner 80 81inner: ; preds = %inner, %outer 82 %0 = phi i32 [ %2, %inner ], [ 0, %outer ] 83 %a = phi i32 [ %3, %inner ], [ 1, %outer ] 84 %b = phi i32 [ %1, %inner ], [ 6, %outer ] 85 %1 = add i32 %b, 2 86 %2 = or i32 %0, %b 87 %3 = add nuw nsw i32 %a, 1 88 %4 = zext i32 %3 to i64 89 %5 = icmp ugt i64 %iv, %4 90 br i1 %5, label %inner, label %outer_latch 91 92outer_latch: ; preds = %inner 93 store atomic i32 %2, ptr addrspace(1) %p unordered, align 4 94 %iv.next = add nuw nsw i64 %iv, 1 95 %6 = icmp ugt i64 %iv, 63 96 br i1 %6, label %exit, label %outer 97 98exit: ; preds = %outer_latch 99 ret i32 0 100} 101