~pali/+junk/llvm-toolchain-3.7

« back to all changes in this revision

Viewing changes to test/Analysis/DependenceAnalysis/PR21585.ll

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2015-07-15 17:51:08 UTC
  • Revision ID: package-import@ubuntu.com-20150715175108-l8mynwovkx4zx697
Tags: upstream-3.7~+rc2
ImportĀ upstreamĀ versionĀ 3.7~+rc2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
; RUN: opt < %s -analyze -basicaa -globalsmodref-aa -da | FileCheck %s
 
2
define void @i32_subscript(i32* %a) {
 
3
entry:
 
4
  br label %for.body
 
5
 
 
6
for.body:
 
7
  %i = phi i32 [ 0, %entry ], [ %i.inc, %for.body ]
 
8
  %a.addr = getelementptr i32, i32* %a, i32 %i
 
9
  %a.addr.2 = getelementptr i32, i32* %a, i32 5
 
10
  %0 = load i32, i32* %a.addr, align 4
 
11
  %1 = add i32 %0, 1
 
12
  store i32 %1, i32* %a.addr.2, align 4
 
13
  %i.inc = add nsw i32 %i, 1
 
14
  %i.inc.ext = sext i32 %i to i64
 
15
  %exitcond = icmp ne i64 %i.inc.ext, 100
 
16
  br i1 %exitcond, label %for.body, label %for.end
 
17
 
 
18
for.end:
 
19
  ret void
 
20
}
 
21
; CHECK: none
 
22
; CHECK: anti
 
23
; CHECK: output
 
24
 
 
25
 
 
26
; Test for a bug, which caused an assert in ScalarEvolution because
 
27
; the Dependence Analyzer attempted to zero extend a type to a smaller
 
28
; type.
 
29
 
 
30
; void t(unsigned int *a, unsigned int n) {
 
31
;   for (unsigned int i = 0; i != n; i++) {
 
32
;     a[(unsigned short)i] = g;
 
33
;  }}
 
34
 
 
35
@g = common global i32 0, align 4
 
36
 
 
37
define void @t(i32* noalias %a, i32 %n) nounwind {
 
38
entry:
 
39
  %cmp1 = icmp eq i32 %n, 0
 
40
  br i1 %cmp1, label %for.end, label %for.body
 
41
 
 
42
for.body:
 
43
  %i.02 = phi i32 [ %inc, %for.body ], [ 0, %entry ]
 
44
  %0 = load i32, i32* @g, align 4
 
45
  %idxprom = and i32 %i.02, 65535
 
46
  %arrayidx = getelementptr inbounds i32, i32* %a, i32 %idxprom
 
47
  store i32 %0, i32* %arrayidx, align 4
 
48
  %inc = add i32 %i.02, 1
 
49
  %cmp = icmp eq i32 %inc, %n
 
50
  br i1 %cmp, label %for.end, label %for.body
 
51
 
 
52
for.end:
 
53
  ret void
 
54
}
 
55
; CHECK: input
 
56
; CHECK: none
 
57
; CHECK: output
 
58
 
 
59
define void @i16_wrap(i64* %a) {
 
60
entry:
 
61
  br label %for.body
 
62
for.body:
 
63
  %i = phi i64 [0, %entry], [%i.inc, %for.inc]
 
64
  %i.tr = trunc i64 %i to i16
 
65
  %idx = getelementptr i64, i64* %a, i16 %i.tr
 
66
  %0 = load i64, i64* %idx
 
67
  %1 = add i64 %0, 1
 
68
store i64 %1, i64* %idx
 
69
  br label %for.inc
 
70
 
 
71
for.inc:
 
72
  %i.inc = add nuw i64 %i, 1
 
73
  %cmp = icmp ult i64 %i.inc, 17179869184
 
74
  br i1 %cmp, label %for.body, label %for.end
 
75
for.end:
 
76
  ret void
 
77
}
 
78
; CHECK: input
 
79
; CHECK: anti
 
80
; CHECK: output
 
81
 
 
82
define void @i8_stride_wrap(i32* noalias %a, i32* noalias %b) {
 
83
entry:
 
84
  br label %for.body
 
85
for.body:
 
86
  %i = phi i32 [1,%entry], [%i.inc, %for.inc]
 
87
  %i.tr = trunc i32 %i to i8
 
88
  %idx = getelementptr i32, i32* %a, i8 %i.tr
 
89
  %idx.2 = getelementptr i32, i32* %b, i32 %i
 
90
  %0 = load i32, i32* %idx, align 4
 
91
  %1 = add i32 %0, 1
 
92
  store i32 %1, i32* %idx.2, align 4
 
93
  br label %for.inc
 
94
 
 
95
for.inc:
 
96
  %i.inc = add nsw i32 %i, 256
 
97
  %exitcond = icmp ult i32 %i, 65536
 
98
  br i1 %exitcond, label %for.body, label %for.end
 
99
 
 
100
for.end:
 
101
  ret void
 
102
}
 
103
; CHECK: input
 
104
; CHECK: none
 
105
; CHECK: none