blob: b3a82ff1be4adff20f136b37c0af4b3855101ec2 [file] [log] [blame]
Adam Nemetc62e5542016-05-13 22:49:13 +00001; RUN: opt -loop-accesses -analyze < %s | 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 dependence distance of 8 bytes
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 i16* null, align 8
13
14define void @f() {
15entry:
16 %a = load i16*, i16** @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, i16* %a, i64 %ind
23 %loadA = load i16, i16* %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, i16* %a, i64 %next
29 store i16 %mul, i16* %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}