brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.4 KiB · ed7f087 Raw
188 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 | FileCheck %s3 4;; void test1(long n, double *A) {5;;     long  i;6;;     for (i = 0; i*n <= n*n; ++i) {7;;         A[i] = i;8;;     }9;;     A[i] = i;10;; }11 12define void @test1(i64 noundef %n, ptr nocapture noundef writeonly %A) {13; CHECK-LABEL: 'test1'14; CHECK-NEXT:  Src: store double %conv, ptr %arrayidx, align 8 --> Dst: store double %conv, ptr %arrayidx, align 815; CHECK-NEXT:    da analyze - none!16; CHECK-NEXT:  Src: store double %conv, ptr %arrayidx, align 8 --> Dst: store double %conv2, ptr %arrayidx3, align 817; CHECK-NEXT:    da analyze - output [|<]!18; CHECK-NEXT:  Src: store double %conv2, ptr %arrayidx3, align 8 --> Dst: store double %conv2, ptr %arrayidx3, align 819; CHECK-NEXT:    da analyze - none!20;21entry:22  %mul1 = mul nsw i64 %n, %n23  br label %for.body24 25for.body:                                         ; preds = %entry, %for.body26  %i.012 = phi i64 [ 0, %entry ], [ %inc, %for.body ]27  %conv = sitofp i64 %i.012 to double28  %arrayidx = getelementptr inbounds double, ptr %A, i64 %i.01229  store double %conv, ptr %arrayidx, align 830  %inc = add nuw nsw i64 %i.012, 131  %mul = mul nsw i64 %inc, %n32  %cmp.not = icmp sgt i64 %mul, %mul133  br i1 %cmp.not, label %for.end, label %for.body34 35for.end:                                          ; preds = %for.body36  %conv2 = sitofp i64 %inc to double37  %arrayidx3 = getelementptr inbounds double, ptr %A, i64 %inc38  store double %conv2, ptr %arrayidx3, align 839  ret void40}41 42 43;; int test2(unsigned n, float A[][n+1], float B[n+1]) {44;;  for (int i = 0; i <= n; i++) {45;;    long j = 0;46;;    for (; j <= n; ++j) {47;;      B[j] = j;48;;    }49;;    A[i][j] = 123;50;;    for (int k = 0; k <= n; k++) {51;;      A[i][k] = k;52;;    }53;;  }54;;55;; Make sure we can detect depnendence between A[i][j] and A[i][k] conservatively and without crashing.56 57define dso_local void @test2(i32 noundef zeroext %n, ptr noundef %A, ptr noalias noundef %B) #0 {58; CHECK-LABEL: 'test2'59; CHECK-NEXT:  Src: store i32 %conv5, ptr %arrayidx, align 4 --> Dst: store i32 %conv5, ptr %arrayidx, align 460; CHECK-NEXT:    da analyze - consistent output [S 0]!61; CHECK-NEXT:  Src: store i32 %conv5, ptr %arrayidx, align 4 --> Dst: store float 1.230000e+02, ptr %arrayidx7, align 462; CHECK-NEXT:    da analyze - none!63; CHECK-NEXT:  Src: store i32 %conv5, ptr %arrayidx, align 4 --> Dst: store float %conv13, ptr %arrayidx17, align 464; CHECK-NEXT:    da analyze - none!65; CHECK-NEXT:  Src: store float 1.230000e+02, ptr %arrayidx7, align 4 --> Dst: store float 1.230000e+02, ptr %arrayidx7, align 466; CHECK-NEXT:    da analyze - output [*]!67; CHECK-NEXT:  Src: store float 1.230000e+02, ptr %arrayidx7, align 4 --> Dst: store float %conv13, ptr %arrayidx17, align 468; CHECK-NEXT:    da analyze - output [*|<]!69; CHECK-NEXT:  Src: store float %conv13, ptr %arrayidx17, align 4 --> Dst: store float %conv13, ptr %arrayidx17, align 470; CHECK-NEXT:    da analyze - none!71;72entry:73  %add = add i32 %n, 174  %0 = zext i32 %add to i6475  %1 = zext i32 %n to i6476  %2 = add nuw nsw i64 %1, 177  %wide.trip.count9 = zext i32 %add to i6478  br label %for.i79 80for.i:                                         ; preds = %entry, %for.inc2181  %indvars.iv6 = phi i64 [ 0, %entry ], [ %indvars.iv.next7, %for.inc21 ]82  br label %for.j83 84for.j:                                        ; preds = %for.i, %for.j85  %j.01 = phi i64 [ 0, %for.i ], [ %inc, %for.j ]86  %conv5 = trunc i64 %j.01 to i3287  %arrayidx = getelementptr inbounds i32, ptr %B, i64 %j.0188  store i32 %conv5, ptr %arrayidx, align 489  %inc = add nuw nsw i64 %j.01, 190  %exitcond = icmp ne i64 %inc, %291  br i1 %exitcond, label %for.j, label %for.end92 93for.end:                                          ; preds = %for.j94  %inc.lcssa = phi i64 [ %inc, %for.j ]95  %3 = mul nuw nsw i64 %indvars.iv6, %096  %arrayidx6 = getelementptr inbounds float, ptr %A, i64 %397  %arrayidx7 = getelementptr inbounds float, ptr %arrayidx6, i64 %inc.lcssa98  store float 1.230000e+02, ptr %arrayidx7, align 499  %wide.trip.count = zext i32 %add to i64100  br label %for.k101 102for.k:                                       ; preds = %for.end, %for.k103  %indvars.iv = phi i64 [ 0, %for.end ], [ %indvars.iv.next, %for.k ]104  %4 = trunc i64 %indvars.iv to i32105  %conv13 = sitofp i32 %4 to float106  %5 = mul nuw nsw i64 %indvars.iv6, %0107  %arrayidx15 = getelementptr inbounds float, ptr %A, i64 %5108  %arrayidx17 = getelementptr inbounds float, ptr %arrayidx15, i64 %indvars.iv109  store float %conv13, ptr %arrayidx17, align 4110  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1111  %exitcond5 = icmp ne i64 %indvars.iv.next, %wide.trip.count112  br i1 %exitcond5, label %for.k, label %for.inc21113 114for.inc21:                                        ; preds = %for.k115  %indvars.iv.next7 = add nuw nsw i64 %indvars.iv6, 1116  %exitcond10 = icmp ne i64 %indvars.iv.next7, %wide.trip.count9117  br i1 %exitcond10, label %for.i, label %for.end23118 119for.end23:                                        ; preds = %for.inc21120  ret void121}122 123 124;; void test3(int n, double *restrict A, double *restrict B) {125;;   for (int i = 0; i < n; ++i) {126;;     int s = 0;127;;     for (; s * s < n * n; ++s) {128;;     }129;;     for (int k = 0; k < n; ++k)130;;       A[s] = 0; // Invariant in innermost loop131;;132;;     A[i] = 1;133;;   }134;; }135;;136;; Make sure we can detect depnendence between A[i] and A[s] conservatively and without crashing.137 138define void @test3(i32 noundef %n, ptr noalias noundef %A, ptr noalias noundef %B) {139; CHECK-LABEL: 'test3'140; CHECK-NEXT:  Src: store double 0.000000e+00, ptr %arrayidx, align 8 --> Dst: store double 0.000000e+00, ptr %arrayidx, align 8141; CHECK-NEXT:    da analyze - output [* S]!142; CHECK-NEXT:  Src: store double 0.000000e+00, ptr %arrayidx, align 8 --> Dst: store double 1.000000e+00, ptr %arrayidx21, align 8143; CHECK-NEXT:    da analyze - output [*|<]!144; CHECK-NEXT:  Src: store double 1.000000e+00, ptr %arrayidx21, align 8 --> Dst: store double 1.000000e+00, ptr %arrayidx21, align 8145; CHECK-NEXT:    da analyze - none!146;147entry:148  br label %for.i149 150for.i:                                         ; preds = %for.end19, %entry151  %i.0 = phi i32 [ 0, %entry ], [ %inc23, %for.end19 ]152  %cmp = icmp slt i32 %i.0, %n153  br i1 %cmp, label %for.s, label %for.end24154 155for.s:                                        ; preds = %for.i, %for.inc156  %s.0 = phi i32 [ %inc, %for.inc ], [ 0, %for.i ]157  %mul = mul nsw i32 %s.0, %s.0158  %mul2 = mul nsw i32 %n, %n159  %cmp3 = icmp slt i32 %mul, %mul2160  br i1 %cmp3, label %for.inc, label %for.k161 162for.inc:                                          ; preds = %for.s163  %inc = add nsw i32 %s.0, 1164  br label %for.s165 166for.k:                                        ; preds = %for.s, %for.body.k167  %k.0 = phi i32 [ %inc10, %for.body.k ], [ 0, %for.s ]168  %cmp6 = icmp slt i32 %k.0, %n169  br i1 %cmp6, label %for.body.k, label %for.end19170 171for.body.k:                                        ; preds = %for.k172  %idxprom = sext i32 %s.0 to i64173  %arrayidx = getelementptr inbounds double, ptr %A, i64 %idxprom174  store double 0.000000e+00, ptr %arrayidx, align 8175  %inc10 = add nsw i32 %k.0, 1176  br label %for.k177 178for.end19:                                        ; preds = %for.k179  %idxprom20 = sext i32 %i.0 to i64180  %arrayidx21 = getelementptr inbounds double, ptr %A, i64 %idxprom20181  store double 1.000000e+00, ptr %arrayidx21, align 8182  %inc23 = add nsw i32 %i.0, 1183  br label %for.i184 185for.end24:                                        ; preds = %for.i186  ret void187}188