1; RUN: opt < %s -disable-output -passes="print<da>" \ 2; RUN: -da-disable-delinearization-checks 2>&1 | FileCheck %s 3; RUN: opt < %s -da -analyze -da-disable-delinearization-checks | FileCheck %s 4 5; CHECK-LABEL: t1 6; CHECK: da analyze - none! 7; CHECK: da analyze - consistent anti [1 -2]! 8; CHECK: da analyze - none! 9 10;; #define N 1024 11;; #define M 2048 12;; void t1(int a[N][M]) { 13;; for (int i = 0; i < N-1; ++i) 14;; for (int j = 2; j < M; ++j) 15;; a[i][j] = a[i+1][j-2]; 16;; } 17 18define void @t1([2048 x i32]* %a) { 19entry: 20 br label %for.body 21 22for.body: ; preds = %entry, %for.inc11 23 %indvars.iv4 = phi i64 [ 0, %entry ], [ %indvars.iv.next5, %for.inc11 ] 24 br label %for.body4 25 26for.body4: ; preds = %for.body, %for.body4 27 %indvars.iv = phi i64 [ 2, %for.body ], [ %indvars.iv.next, %for.body4 ] 28 %0 = add nuw nsw i64 %indvars.iv4, 1 29 %1 = add nsw i64 %indvars.iv, -2 30 %arrayidx6 = getelementptr inbounds [2048 x i32], [2048 x i32]* %a, i64 %0, i64 %1 31 %2 = load i32, i32* %arrayidx6, align 4 32 %arrayidx10 = getelementptr inbounds [2048 x i32], [2048 x i32]* %a, i64 %indvars.iv4, i64 %indvars.iv 33 store i32 %2, i32* %arrayidx10, align 4 34 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 35 %exitcond = icmp ne i64 %indvars.iv.next, 2048 36 br i1 %exitcond, label %for.body4, label %for.inc11 37 38for.inc11: ; preds = %for.body4 39 %indvars.iv.next5 = add nuw nsw i64 %indvars.iv4, 1 40 %exitcond7 = icmp ne i64 %indvars.iv.next5, 1023 41 br i1 %exitcond7, label %for.body, label %for.end13 42 43for.end13: ; preds = %for.inc11 44 ret void 45} 46 47 48; CHECK-LABEL: t2 49; CHECK: da analyze - none! 50; CHECK: da analyze - consistent anti [1 -2 0 -3 2]! 51; CHECK: da analyze - none! 52 53;; #define N 1024 54;; #define M 2048 55;; void t2(int a[][N][N][N][M]) { 56;; for (int i1 = 0; i1 < N-1; ++i1) 57;; for (int i2 = 2; i2 < N; ++i2) 58;; for (int i3 = 0; i3 < N; ++i3) 59;; for (int i4 = 3; i4 < N; ++i4) 60;; for (int i5 = 0; i5 < M-2; ++i5) 61;; a[i1][i2][i3][i4][i5] = a[i1+1][i2-2][i3][i4-3][i5+2]; 62;; } 63 64define void @t2([1024 x [1024 x [1024 x [2048 x i32]]]]* %a) { 65entry: 66 br label %for.body 67 68for.body: ; preds = %entry, %for.inc46 69 %indvars.iv18 = phi i64 [ 0, %entry ], [ %indvars.iv.next19, %for.inc46 ] 70 br label %for.body4 71 72for.body4: ; preds = %for.body, %for.inc43 73 %indvars.iv14 = phi i64 [ 2, %for.body ], [ %indvars.iv.next15, %for.inc43 ] 74 br label %for.body8 75 76for.body8: ; preds = %for.body4, %for.inc40 77 %indvars.iv11 = phi i64 [ 0, %for.body4 ], [ %indvars.iv.next12, %for.inc40 ] 78 br label %for.body12 79 80for.body12: ; preds = %for.body8, %for.inc37 81 %indvars.iv7 = phi i64 [ 3, %for.body8 ], [ %indvars.iv.next8, %for.inc37 ] 82 br label %for.body16 83 84for.body16: ; preds = %for.body12, %for.body16 85 %indvars.iv = phi i64 [ 0, %for.body12 ], [ %indvars.iv.next, %for.body16 ] 86 %0 = add nuw nsw i64 %indvars.iv18, 1 87 %1 = add nsw i64 %indvars.iv14, -2 88 %2 = add nsw i64 %indvars.iv7, -3 89 %3 = add nuw nsw i64 %indvars.iv, 2 90 %arrayidx26 = getelementptr inbounds [1024 x [1024 x [1024 x [2048 x i32]]]], [1024 x [1024 x [1024 x [2048 x i32]]]]* %a, i64 %0, i64 %1, i64 %indvars.iv11, i64 %2, i64 %3 91 %4 = load i32, i32* %arrayidx26, align 4 92 %arrayidx36 = getelementptr inbounds [1024 x [1024 x [1024 x [2048 x i32]]]], [1024 x [1024 x [1024 x [2048 x i32]]]]* %a, i64 %indvars.iv18, i64 %indvars.iv14, i64 %indvars.iv11, i64 %indvars.iv7, i64 %indvars.iv 93 store i32 %4, i32* %arrayidx36, align 4 94 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 95 %exitcond = icmp ne i64 %indvars.iv.next, 2046 96 br i1 %exitcond, label %for.body16, label %for.inc37 97 98for.inc37: ; preds = %for.body16 99 %indvars.iv.next8 = add nuw nsw i64 %indvars.iv7, 1 100 %exitcond10 = icmp ne i64 %indvars.iv.next8, 1024 101 br i1 %exitcond10, label %for.body12, label %for.inc40 102 103for.inc40: ; preds = %for.inc37 104 %indvars.iv.next12 = add nuw nsw i64 %indvars.iv11, 1 105 %exitcond13 = icmp ne i64 %indvars.iv.next12, 1024 106 br i1 %exitcond13, label %for.body8, label %for.inc43 107 108for.inc43: ; preds = %for.inc40 109 %indvars.iv.next15 = add nuw nsw i64 %indvars.iv14, 1 110 %exitcond17 = icmp ne i64 %indvars.iv.next15, 1024 111 br i1 %exitcond17, label %for.body4, label %for.inc46 112 113for.inc46: ; preds = %for.inc43 114 %indvars.iv.next19 = add nuw nsw i64 %indvars.iv18, 1 115 %exitcond21 = icmp ne i64 %indvars.iv.next19, 1023 116 br i1 %exitcond21, label %for.body, label %for.end48 117 118for.end48: ; preds = %for.inc46 119 ret void 120} 121