109 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 52; RUN: opt < %s -disable-output "-passes=print<da>" -aa-pipeline=basic-aa 2>&1 \3; RUN: | FileCheck %s4 5target 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"6target triple = "x86_64-apple-macosx10.6.0"7 8; for (int i = 0; i < 100; ++i) {9; int t0 = a[i][i];10; int t1 = t0 + 1;11; a[i][5] = t1;12; }13; The subscript 5 in a[i][5] is deliberately an i32, mismatching the types of14; other subscript. DependenceAnalysis before the fix crashed due to this15; mismatch.16define void @i32_subscript(ptr %a, ptr %b) {17; CHECK-LABEL: 'i32_subscript'18; CHECK-NEXT: Src: %0 = load i32, ptr %a.addr, align 4 --> Dst: %0 = load i32, ptr %a.addr, align 419; CHECK-NEXT: da analyze - none!20; CHECK-NEXT: Src: %0 = load i32, ptr %a.addr, align 4 --> Dst: store i32 %1, ptr %a.addr.2, align 421; CHECK-NEXT: da analyze - anti [0|<]!22; CHECK-NEXT: Src: store i32 %1, ptr %a.addr.2, align 4 --> Dst: store i32 %1, ptr %a.addr.2, align 423; CHECK-NEXT: da analyze - none!24;25entry:26 br label %for.body27 28for.body:29 %i = phi i64 [ 0, %entry ], [ %i.inc, %for.body ]30 %a.addr = getelementptr [100 x [100 x i32]], ptr %a, i64 0, i64 %i, i64 %i31 %a.addr.2 = getelementptr [100 x [100 x i32]], ptr %a, i64 0, i64 %i, i32 532 %0 = load i32, ptr %a.addr, align 433 %1 = add i32 %0, 134 store i32 %1, ptr %a.addr.2, align 435 %i.inc = add nsw i64 %i, 136 %exitcond = icmp ne i64 %i.inc, 10037 br i1 %exitcond, label %for.body, label %for.end38 39for.end:40 ret void41}42 43; unsigned i, j;44; for (i = 1; i < SIZE; i++) {45; for (j = i; j < SIZE; j++) {46; a[i][j] = a[i+1][j-1] + 2;47; }48; }49; Extends the previous example to coupled MIV subscripts.50;51; FIXME: Currently delinearization does not work as expected.52 53 54@a = global [10004 x [10004 x i32]] zeroinitializer, align 1655 56; Function Attrs: nounwind uwtable57define void @coupled_miv_type_mismatch(i32 %n) {58; CHECK-LABEL: 'coupled_miv_type_mismatch'59; CHECK-NEXT: Src: %2 = load i32, ptr %arrayidx5, align 4 --> Dst: %2 = load i32, ptr %arrayidx5, align 460; CHECK-NEXT: da analyze - none!61; CHECK-NEXT: Src: %2 = load i32, ptr %arrayidx5, align 4 --> Dst: store i32 %add6, ptr %arrayidx10, align 462; CHECK-NEXT: da analyze - anti [< >]!63; CHECK-NEXT: Src: store i32 %add6, ptr %arrayidx10, align 4 --> Dst: store i32 %add6, ptr %arrayidx10, align 464; CHECK-NEXT: da analyze - none!65;66entry:67 br label %for.cond68 69for.cond: ; preds = %for.inc11, %entry70 %indvars.iv11 = phi i64 [ %indvars.iv.next12, %for.inc11 ], [ 1, %entry ]71 %exitcond14 = icmp ne i64 %indvars.iv11, 1000072 br i1 %exitcond14, label %for.cond1.preheader, label %for.end1373 74for.cond1.preheader: ; preds = %for.cond75 %0 = trunc i64 %indvars.iv11 to i3276 br label %for.cond177 78for.cond1: ; preds = %for.cond1.preheader, %for.body379 %indvars.iv8 = phi i64 [ %indvars.iv11, %for.cond1.preheader ], [ %indvars.iv.next9, %for.body3 ]80 %j.0 = phi i32 [ %inc, %for.body3 ], [ %0, %for.cond1.preheader ]81 %lftr.wideiv = trunc i64 %indvars.iv8 to i3282 %exitcond = icmp ne i32 %lftr.wideiv, 1000083 br i1 %exitcond, label %for.body3, label %for.inc1184 85for.body3: ; preds = %for.cond186 %sub = add nsw i32 %j.0, -187 %idxprom = zext i32 %sub to i6488 %1 = add nuw nsw i64 %indvars.iv11, 189 %arrayidx5 = getelementptr inbounds [10004 x [10004 x i32]], ptr @a, i64 0, i64 %1, i64 %idxprom90 %2 = load i32, ptr %arrayidx5, align 491 %add6 = add nsw i32 %2, 292 %arrayidx10 = getelementptr inbounds [10004 x [10004 x i32]], ptr @a, i64 0, i64 %indvars.iv11, i64 %indvars.iv893 store i32 %add6, ptr %arrayidx10, align 494 %indvars.iv.next9 = add nuw nsw i64 %indvars.iv8, 195 %inc = add nuw nsw i32 %j.0, 196 br label %for.cond197 98for.inc11: ; preds = %for.cond199 %indvars.iv.next12 = add nuw nsw i64 %indvars.iv11, 1100 br label %for.cond101 102for.end13: ; preds = %for.cond103 ret void104}105 106!llvm.ident = !{!0}107 108!0 = !{!"clang version 3.7.0"}109