1*46f9cddfSSebastian Pop; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 5 21b811ff8SBardia Mahjour; RUN: opt < %s -disable-output "-passes=print<da>" -aa-pipeline=basic-aa 2>&1 \ 31b811ff8SBardia Mahjour; RUN: -da-disable-delinearization-checks | FileCheck %s 47086025dSAndy Kaylor; RUN: opt < %s -disable-output "-passes=print<da>" -aa-pipeline=basic-aa 2>&1 \ 57086025dSAndy Kaylor; RUN: | FileCheck --check-prefix=LIN %s 61b811ff8SBardia Mahjour 71b811ff8SBardia Mahjourtarget datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" 81b811ff8SBardia Mahjourtarget triple = "x86_64-apple-macosx10.6.0" 91b811ff8SBardia Mahjour 101b811ff8SBardia Mahjour;; for (long int i = 0; i < n; i++) { 111b811ff8SBardia Mahjour;; for (long int j = 0; j < n; j++) { 121b811ff8SBardia Mahjour;; for (long int k = 0; k < n; k++) { 131b811ff8SBardia Mahjour;; A[i][j][k] = i; 141b811ff8SBardia Mahjour;; } 151b811ff8SBardia Mahjour;; for (long int k = 0; k < n; k++) { 161b811ff8SBardia Mahjour;; *B++ = A[i + 3][j + 2][k + 1]; 171b811ff8SBardia Mahjour 1825640966SNikita Popovdefine void @p2(i64 %n, ptr %A, ptr %B) nounwind uwtable ssp { 19*46f9cddfSSebastian Pop; CHECK-LABEL: 'p2' 20*46f9cddfSSebastian Pop; CHECK-NEXT: Src: store i64 %i.011, ptr %arrayidx8, align 8 --> Dst: store i64 %i.011, ptr %arrayidx8, align 8 21*46f9cddfSSebastian Pop; CHECK-NEXT: da analyze - none! 22*46f9cddfSSebastian Pop; CHECK-NEXT: Src: store i64 %i.011, ptr %arrayidx8, align 8 --> Dst: %0 = load i64, ptr %arrayidx17, align 8 23*46f9cddfSSebastian Pop; CHECK-NEXT: da analyze - flow [-3 -2]! 24*46f9cddfSSebastian Pop; CHECK-NEXT: Src: store i64 %i.011, ptr %arrayidx8, align 8 --> Dst: store i64 %0, ptr %B.addr.24, align 8 25*46f9cddfSSebastian Pop; CHECK-NEXT: da analyze - confused! 26*46f9cddfSSebastian Pop; CHECK-NEXT: Src: %0 = load i64, ptr %arrayidx17, align 8 --> Dst: %0 = load i64, ptr %arrayidx17, align 8 27*46f9cddfSSebastian Pop; CHECK-NEXT: da analyze - none! 28*46f9cddfSSebastian Pop; CHECK-NEXT: Src: %0 = load i64, ptr %arrayidx17, align 8 --> Dst: store i64 %0, ptr %B.addr.24, align 8 29*46f9cddfSSebastian Pop; CHECK-NEXT: da analyze - confused! 30*46f9cddfSSebastian Pop; CHECK-NEXT: Src: store i64 %0, ptr %B.addr.24, align 8 --> Dst: store i64 %0, ptr %B.addr.24, align 8 31*46f9cddfSSebastian Pop; CHECK-NEXT: da analyze - output [* * *]! 32*46f9cddfSSebastian Pop; 33*46f9cddfSSebastian Pop; LIN-LABEL: 'p2' 34*46f9cddfSSebastian Pop; LIN-NEXT: Src: store i64 %i.011, ptr %arrayidx8, align 8 --> Dst: store i64 %i.011, ptr %arrayidx8, align 8 35*46f9cddfSSebastian Pop; LIN-NEXT: da analyze - output [* * *]! 36*46f9cddfSSebastian Pop; LIN-NEXT: Src: store i64 %i.011, ptr %arrayidx8, align 8 --> Dst: %0 = load i64, ptr %arrayidx17, align 8 37*46f9cddfSSebastian Pop; LIN-NEXT: da analyze - flow [* *|<]! 38*46f9cddfSSebastian Pop; LIN-NEXT: Src: store i64 %i.011, ptr %arrayidx8, align 8 --> Dst: store i64 %0, ptr %B.addr.24, align 8 39*46f9cddfSSebastian Pop; LIN-NEXT: da analyze - confused! 40*46f9cddfSSebastian Pop; LIN-NEXT: Src: %0 = load i64, ptr %arrayidx17, align 8 --> Dst: %0 = load i64, ptr %arrayidx17, align 8 41*46f9cddfSSebastian Pop; LIN-NEXT: da analyze - input [* * *]! 42*46f9cddfSSebastian Pop; LIN-NEXT: Src: %0 = load i64, ptr %arrayidx17, align 8 --> Dst: store i64 %0, ptr %B.addr.24, align 8 43*46f9cddfSSebastian Pop; LIN-NEXT: da analyze - confused! 44*46f9cddfSSebastian Pop; LIN-NEXT: Src: store i64 %0, ptr %B.addr.24, align 8 --> Dst: store i64 %0, ptr %B.addr.24, align 8 45*46f9cddfSSebastian Pop; LIN-NEXT: da analyze - output [* * *]! 46*46f9cddfSSebastian Pop; 471b811ff8SBardia Mahjourentry: 481b811ff8SBardia Mahjour %cmp10 = icmp sgt i64 %n, 0 491b811ff8SBardia Mahjour br i1 %cmp10, label %for.cond1.preheader.preheader, label %for.end26 501b811ff8SBardia Mahjour 511b811ff8SBardia Mahjourfor.cond1.preheader.preheader: ; preds = %entry 521b811ff8SBardia Mahjour br label %for.cond1.preheader 531b811ff8SBardia Mahjour 541b811ff8SBardia Mahjourfor.cond1.preheader: ; preds = %for.cond1.preheader.preheader, %for.inc24 5525640966SNikita Popov %B.addr.012 = phi ptr [ %B.addr.1.lcssa, %for.inc24 ], [ %B, %for.cond1.preheader.preheader ] 561b811ff8SBardia Mahjour %i.011 = phi i64 [ %inc25, %for.inc24 ], [ 0, %for.cond1.preheader.preheader ] 571b811ff8SBardia Mahjour %cmp26 = icmp sgt i64 %n, 0 581b811ff8SBardia Mahjour br i1 %cmp26, label %for.cond4.preheader.preheader, label %for.inc24 591b811ff8SBardia Mahjour 601b811ff8SBardia Mahjourfor.cond4.preheader.preheader: ; preds = %for.cond1.preheader 611b811ff8SBardia Mahjour br label %for.cond4.preheader 621b811ff8SBardia Mahjour 631b811ff8SBardia Mahjourfor.cond4.preheader: ; preds = %for.cond4.preheader.preheader, %for.inc21 6425640966SNikita Popov %B.addr.18 = phi ptr [ %B.addr.2.lcssa, %for.inc21 ], [ %B.addr.012, %for.cond4.preheader.preheader ] 651b811ff8SBardia Mahjour %j.07 = phi i64 [ %inc22, %for.inc21 ], [ 0, %for.cond4.preheader.preheader ] 661b811ff8SBardia Mahjour %cmp51 = icmp sgt i64 %n, 0 671b811ff8SBardia Mahjour br i1 %cmp51, label %for.body6.preheader, label %for.cond10.loopexit 681b811ff8SBardia Mahjour 691b811ff8SBardia Mahjourfor.body6.preheader: ; preds = %for.cond4.preheader 701b811ff8SBardia Mahjour br label %for.body6 711b811ff8SBardia Mahjour 721b811ff8SBardia Mahjourfor.body6: ; preds = %for.body6.preheader, %for.body6 731b811ff8SBardia Mahjour %k.02 = phi i64 [ %inc, %for.body6 ], [ 0, %for.body6.preheader ] 7425640966SNikita Popov %arrayidx8 = getelementptr inbounds [100 x [100 x i64]], ptr %A, i64 %i.011, i64 %j.07, i64 %k.02 7525640966SNikita Popov store i64 %i.011, ptr %arrayidx8, align 8 761b811ff8SBardia Mahjour %inc = add nsw i64 %k.02, 1 771b811ff8SBardia Mahjour %exitcond13 = icmp ne i64 %inc, %n 781b811ff8SBardia Mahjour br i1 %exitcond13, label %for.body6, label %for.cond10.loopexit.loopexit 791b811ff8SBardia Mahjour 801b811ff8SBardia Mahjourfor.cond10.loopexit.loopexit: ; preds = %for.body6 811b811ff8SBardia Mahjour br label %for.cond10.loopexit 821b811ff8SBardia Mahjour 831b811ff8SBardia Mahjourfor.cond10.loopexit: ; preds = %for.cond10.loopexit.loopexit, %for.cond4.preheader 841b811ff8SBardia Mahjour %cmp113 = icmp sgt i64 %n, 0 851b811ff8SBardia Mahjour br i1 %cmp113, label %for.body12.preheader, label %for.inc21 861b811ff8SBardia Mahjour 871b811ff8SBardia Mahjourfor.body12.preheader: ; preds = %for.cond10.loopexit 881b811ff8SBardia Mahjour br label %for.body12 891b811ff8SBardia Mahjour 901b811ff8SBardia Mahjourfor.body12: ; preds = %for.body12.preheader, %for.body12 911b811ff8SBardia Mahjour %k9.05 = phi i64 [ %inc19, %for.body12 ], [ 0, %for.body12.preheader ] 9225640966SNikita Popov %B.addr.24 = phi ptr [ %incdec.ptr, %for.body12 ], [ %B.addr.18, %for.body12.preheader ] 931b811ff8SBardia Mahjour %add = add nsw i64 %k9.05, 1 941b811ff8SBardia Mahjour %add13 = add nsw i64 %j.07, 2 951b811ff8SBardia Mahjour %add14 = add nsw i64 %i.011, 3 9625640966SNikita Popov %arrayidx17 = getelementptr inbounds [100 x [100 x i64]], ptr %A, i64 %add14, i64 %add13, i64 %add 9725640966SNikita Popov %0 = load i64, ptr %arrayidx17, align 8 9825640966SNikita Popov %incdec.ptr = getelementptr inbounds i64, ptr %B.addr.24, i64 1 9925640966SNikita Popov store i64 %0, ptr %B.addr.24, align 8 1001b811ff8SBardia Mahjour %inc19 = add nsw i64 %k9.05, 1 1011b811ff8SBardia Mahjour %exitcond = icmp ne i64 %inc19, %n 1021b811ff8SBardia Mahjour br i1 %exitcond, label %for.body12, label %for.inc21.loopexit 1031b811ff8SBardia Mahjour 1041b811ff8SBardia Mahjourfor.inc21.loopexit: ; preds = %for.body12 10525640966SNikita Popov %scevgep = getelementptr i64, ptr %B.addr.18, i64 %n 1061b811ff8SBardia Mahjour br label %for.inc21 1071b811ff8SBardia Mahjour 1081b811ff8SBardia Mahjourfor.inc21: ; preds = %for.inc21.loopexit, %for.cond10.loopexit 10925640966SNikita Popov %B.addr.2.lcssa = phi ptr [ %B.addr.18, %for.cond10.loopexit ], [ %scevgep, %for.inc21.loopexit ] 1101b811ff8SBardia Mahjour %inc22 = add nsw i64 %j.07, 1 1111b811ff8SBardia Mahjour %exitcond14 = icmp ne i64 %inc22, %n 1121b811ff8SBardia Mahjour br i1 %exitcond14, label %for.cond4.preheader, label %for.inc24.loopexit 1131b811ff8SBardia Mahjour 1141b811ff8SBardia Mahjourfor.inc24.loopexit: ; preds = %for.inc21 11525640966SNikita Popov %B.addr.2.lcssa.lcssa = phi ptr [ %B.addr.2.lcssa, %for.inc21 ] 1161b811ff8SBardia Mahjour br label %for.inc24 1171b811ff8SBardia Mahjour 1181b811ff8SBardia Mahjourfor.inc24: ; preds = %for.inc24.loopexit, %for.cond1.preheader 11925640966SNikita Popov %B.addr.1.lcssa = phi ptr [ %B.addr.012, %for.cond1.preheader ], [ %B.addr.2.lcssa.lcssa, %for.inc24.loopexit ] 1201b811ff8SBardia Mahjour %inc25 = add nsw i64 %i.011, 1 1211b811ff8SBardia Mahjour %exitcond15 = icmp ne i64 %inc25, %n 1221b811ff8SBardia Mahjour br i1 %exitcond15, label %for.cond1.preheader, label %for.end26.loopexit 1231b811ff8SBardia Mahjour 1241b811ff8SBardia Mahjourfor.end26.loopexit: ; preds = %for.inc24 1251b811ff8SBardia Mahjour br label %for.end26 1261b811ff8SBardia Mahjour 1271b811ff8SBardia Mahjourfor.end26: ; preds = %for.end26.loopexit, %entry 1281b811ff8SBardia Mahjour ret void 1291b811ff8SBardia Mahjour} 130