[flang] Fix length handling in character kind implicit conversion (#74586)
[llvm-project.git] / polly / test / ScopInfo / run-time-check-many-piecewise-aliasing.ll
blob487c803bba98f39d490c6d6d8e9197e1628dc1bb
1 ; RUN: opt %loadPolly -polly-print-detect -disable-output < %s \
2 ; RUN: | FileCheck %s -check-prefix=DETECT
3 ; RUN: opt %loadPolly -polly-print-scops -disable-output < %s | FileCheck %s
5 ; DETECT: Valid Region for Scop: for => return
7 ; Check that this SCoP is allowed, even though the number of disjunct memory accesses of A
8 ; is 11, greater than RunTimeChecksMaxAccessDisjuncts.
10 ; CHECK: Function: func
11 ; CHECK-NEXT: Region: %for---%return
13 define void @func(i64 %n, ptr nonnull %A, ptr nonnull %B, i64 %d) {
14 entry:
15           br label %for
16 for:
17   %j = phi i64 [0, %entry], [%j.inc, %inc]
18   %j.cmp = icmp slt i64 %j, %n
19   br i1 %j.cmp, label %body, label %exit
21 body:
22       %add.i.i = add nsw i64 1, %j
23       %sub.i.i = sub nsw i64 %add.i.i, 1
24       %cmp.i.i.i = icmp sgt i64 %sub.i.i, 0
25       %cond.i.i.i = select i1 %cmp.i.i.i, i64 %sub.i.i, i64 0
26       %mul.i.i = mul nsw i64 %cond.i.i.i, 7
27       %sub1.i.i = sub nsw i64 1, %j
28       %add2.i.i = add nsw i64 %sub1.i.i, 1
29       %cmp.i8.i.i = icmp sgt i64 %add2.i.i, 0
30       %cond.i11.i.i = select i1 %cmp.i8.i.i, i64 %add2.i.i, i64 0
31       %mul4.i.i = mul nsw i64 %cond.i11.i.i, 7
32       %add5.i.i = add nsw i64 %mul.i.i, %mul4.i.i
33       %add.i113.i = add nsw i64 1, %j
34       %sub.i114.i = sub nsw i64 %add.i113.i, 3
35       %cmp.i.i115.i = icmp sgt i64 %sub.i114.i, 0
36       %cond.i.i118.i = select i1 %cmp.i.i115.i, i64 %sub.i114.i, i64 0
37       %mul.i119.i = mul nsw i64 %cond.i.i118.i, 9
38       %sub1.i120.i = sub nsw i64 1, %j
39       %add2.i121.i = add nsw i64 %sub1.i120.i, 3
40       %cmp.i8.i122.i = icmp sgt i64 %add2.i121.i, 0
41       %cond.i11.i126.i = select i1 %cmp.i8.i122.i, i64 %add2.i121.i, i64 0
42       %mul4.i127.i = mul nsw i64 %cond.i11.i126.i, 9
43       %add5.i128.i = add nsw i64 %mul.i119.i, %mul4.i127.i
44       %add.i = add nsw i64 %add5.i.i, %add5.i128.i
45       %add.i89.i = add nsw i64 1, %j
46       %sub.i90.i = sub nsw i64 %add.i89.i, 4
47       %cmp.i.i91.i = icmp sgt i64 %sub.i90.i, 0
48       %cond.i.i94.i = select i1 %cmp.i.i91.i, i64 %sub.i90.i, i64 0
49       %mul.i95.i = mul nsw i64 %cond.i.i94.i, 11
50       %sub1.i96.i = sub nsw i64 1, %j
51       %add2.i97.i = add nsw i64 %sub1.i96.i, 4
52       %cmp.i8.i98.i = icmp sgt i64 %add2.i97.i, 0
53       %cond.i11.i102.i = select i1 %cmp.i8.i98.i, i64 %add2.i97.i, i64 0
54       %mul4.i103.i = mul nsw i64 %cond.i11.i102.i, 11
55       %add5.i104.i = add nsw i64 %mul.i95.i, %mul4.i103.i
56       %add3.i = add nsw i64 %add.i, %add5.i104.i
57       %add.i65.i = add nsw i64 1, %j
58       %sub.i66.i = sub nsw i64 %add.i65.i, 6
59       %cmp.i.i67.i = icmp sgt i64 %sub.i66.i, 0
60       %cond.i.i70.i = select i1 %cmp.i.i67.i, i64 %sub.i66.i, i64 0
61       %mul.i71.i = mul nsw i64 %cond.i.i70.i, 13
62       %sub1.i72.i = sub nsw i64 1, %j
63       %add2.i73.i = add nsw i64 %sub1.i72.i, 6
64       %cmp.i8.i74.i = icmp sgt i64 %add2.i73.i, 0
65       %cond.i11.i78.i = select i1 %cmp.i8.i74.i, i64 %add2.i73.i, i64 0
66       %mul4.i79.i = mul nsw i64 %cond.i11.i78.i, 13
67       %add5.i80.i = add nsw i64 %mul.i71.i, %mul4.i79.i
68       %add5.i = add nsw i64 %add3.i, %add5.i80.i
69       %add.i41.i = add nsw i64 1, %j
70       %sub.i42.i = sub nsw i64 %add.i41.i, 8
71       %cmp.i.i43.i = icmp sgt i64 %sub.i42.i, 0
72       %cond.i.i46.i = select i1 %cmp.i.i43.i, i64 %sub.i42.i, i64 0
73       %mul.i47.i = mul nsw i64 %cond.i.i46.i, 17
74       %sub1.i48.i = sub nsw i64 1, %j
75       %add2.i49.i = add nsw i64 %sub1.i48.i, 8
76       %cmp.i8.i50.i = icmp sgt i64 %add2.i49.i, 0
77       %cond.i11.i54.i = select i1 %cmp.i8.i50.i, i64 %add2.i49.i, i64 0
78       %mul4.i55.i = mul nsw i64 %cond.i11.i54.i, 17
79       %add5.i56.i = add nsw i64 %mul.i47.i, %mul4.i55.i
80       %add7.i = add nsw i64 %add5.i, %add5.i56.i
81       %add.i17.i = add nsw i64 1, %j
82       %sub.i18.i = sub nsw i64 %add.i17.i, 10
83       %cmp.i.i19.i = icmp sgt i64 %sub.i18.i, 0
84       %cond.i.i22.i = select i1 %cmp.i.i19.i, i64 %sub.i18.i, i64 0
85       %mul.i23.i = mul nsw i64 %cond.i.i22.i, 19
86       %sub1.i24.i = sub nsw i64 1, %j
87       %add2.i25.i = add nsw i64 %sub1.i24.i, 10
88       %cmp.i8.i26.i = icmp sgt i64 %add2.i25.i, 0
89       %cond.i11.i30.i = select i1 %cmp.i8.i26.i, i64 %add2.i25.i, i64 0
90       %mul4.i31.i = mul nsw i64 %cond.i11.i30.i, 19
91       %add5.i32.i = add nsw i64 %mul.i23.i, %mul4.i31.i
92       %idxprom = add nsw i64 %add7.i, %add5.i32.i
94       %A_idx = getelementptr inbounds double, ptr %A, i64 %idxprom
95       %val = load double, ptr %A_idx
96       %B_idx = getelementptr inbounds double, ptr %B, i64 %j
97       store double %val, ptr %B_idx
98       br label %inc
100 inc:
101         %j.inc = add nuw nsw i64 %j, 1
102         br label %for
104 exit:
105         br label %return
106 return:
107         ret void