xref: /llvm-project/llvm/test/Analysis/LoopAccessAnalysis/safe-with-dep-distance.ll (revision 87ddd3a191321c41045b1b9d737583e27a3f6c2a)
1; RUN: opt -passes='print<access-info>' -disable-output  < %s 2>&1 | FileCheck %s
2
3; Analyze this loop:
4;   for (i = 0; i < n; i++)
5;    A[i + 4] = A[i] * 2;
6
7; CHECK: Memory dependences are safe with a maximum safe vector width of 64 bits
8
9target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
10target triple = "x86_64-apple-macosx10.10.0"
11
12@A = common global ptr null, align 8
13
14define void @f() {
15entry:
16  %a = load ptr, ptr @A, align 8
17  br label %for.body
18
19for.body:                                         ; preds = %for.body, %entry
20  %ind = phi i64 [ 0, %entry ], [ %add, %for.body ]
21
22  %arrayidxA = getelementptr inbounds i16, ptr %a, i64 %ind
23  %loadA = load i16, ptr %arrayidxA, align 2
24
25  %mul = mul i16 %loadA, 2
26
27  %next = add nuw nsw i64 %ind, 4
28  %arrayidxA_next = getelementptr inbounds i16, ptr %a, i64 %next
29  store i16 %mul, ptr %arrayidxA_next, align 2
30
31  %add = add nuw nsw i64 %ind, 1
32  %exitcond = icmp eq i64 %add, 20
33  br i1 %exitcond, label %for.end, label %for.body
34
35for.end:                                          ; preds = %for.body
36  ret void
37}
38