diff --git a/llvm/test/Analysis/DependenceAnalysis/GCD.ll b/llvm/test/Analysis/DependenceAnalysis/GCD.ll index cb14d189afe4c..a605801f4b998 100644 --- a/llvm/test/Analysis/DependenceAnalysis/GCD.ll +++ b/llvm/test/Analysis/DependenceAnalysis/GCD.ll @@ -721,3 +721,62 @@ for.end15.loopexit: ; preds = %for.inc13 for.end15: ; preds = %for.end15.loopexit, %entry ret void } + +;; for (long int i = 0; i < 100; i++) +;; for (long int j = 0; j < n; j++) { +;; A[2*i - 4*j] = i; +;; *B++ = A[6*i + 8*j + 1]; + +define void @gcd10(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp { +; CHECK-LABEL: 'gcd10' +; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4 +; CHECK-NEXT: da analyze - output [* *]! +; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx8, align 4 +; CHECK-NEXT: da analyze - none! +; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4 +; CHECK-NEXT: da analyze - confused! +; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx8, align 4 --> Dst: %0 = load i32, ptr %arrayidx8, align 4 +; CHECK-NEXT: da analyze - input [* *]! +; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx8, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4 +; CHECK-NEXT: da analyze - confused! +; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.11, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4 +; CHECK-NEXT: da analyze - output [* *]! +; +entry: + br label %for.cond1.preheader + +for.cond1.preheader: ; preds = %entry, %for.inc9 + %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc9 ] + %i.03 = phi i64 [ 0, %entry ], [ %inc10, %for.inc9 ] + br label %for.body3 + +for.body3: ; preds = %for.cond1.preheader, %for.body3 + %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ] + %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ] + %conv = trunc i64 %i.03 to i32 + %mul = shl nsw i64 %i.03, 1 + %mul4 = shl nsw i64 %j.02, 2 + %sub = sub nsw i64 %mul, %mul4 + %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub + store i32 %conv, ptr %arrayidx, align 4 + %mul5 = mul nsw i64 %i.03, 6 + %mul6 = shl i64 %j.02, 3 + %add = add nsw i64 %mul5, %mul6 + %add7 = or disjoint i64 %add, 1 + %arrayidx8 = getelementptr inbounds i32, ptr %A, i64 %add7 + %0 = load i32, ptr %arrayidx8, align 4 + %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1 + store i32 %0, ptr %B.addr.11, align 4 + %inc = add nsw i64 %j.02, 1 + %exitcond = icmp ne i64 %inc, %n + br i1 %exitcond, label %for.body3, label %for.inc9 + +for.inc9: ; preds = %for.body3 + %scevgep = getelementptr i32, ptr %B.addr.04, i64 100 + %inc10 = add nsw i64 %i.03, 1 + %exitcond5 = icmp ne i64 %inc10, 100 + br i1 %exitcond5, label %for.cond1.preheader, label %for.end11 + +for.end11: ; preds = %for.inc9 + ret void +}