|
2 | 2 |
|
3 | 3 | target triple = "aarch64-unknown-linux-gnu" |
4 | 4 |
|
| 5 | +; CHECK-NOT: Computed dependence info, invoking the transform. |
| 6 | + |
5 | 7 | ; For the below test, backedge count cannot be computed. |
6 | 8 | ; Computing backedge count requires only SCEV and should |
7 | 9 | ; not require dependence info. |
8 | 10 | ; |
9 | | -; void foo(int *a, int *neg, int *pos) { |
10 | | -; int p = 0, q = 0; |
11 | | -; for (unsigned int i = 0; i < 32; ++i) { |
12 | | -; for (unsigned int j = 0; j < 32; ++j) { |
13 | | -; if (a[i] < 0){ |
14 | | -; neg[p++] = a[i]; |
15 | | -; } |
16 | | -; else { |
17 | | -; pos[q++] = a[i]; |
18 | | -; } |
| 11 | +; void bar(int m, int n) { |
| 12 | +; for (unsigned int i = 0; i < m; ++i) { |
| 13 | +; for (unsigned int j = 0; j < m; ++j) { |
| 14 | +; // dummy code |
19 | 15 | ; } |
20 | 16 | ; } |
21 | 17 | ;} |
22 | 18 |
|
23 | | -; CHECK-NOT: Computed dependence info, invoking the transform. |
24 | | - |
25 | | -define dso_local void @_foo(ptr noundef %a, ptr noundef %neg, ptr noundef %pos) { |
| 19 | +define void @bar(i32 %m, i32 %n) |
| 20 | +{ |
26 | 21 | entry: |
27 | | - %a.addr = alloca ptr, align 8 |
28 | | - %neg.addr = alloca ptr, align 8 |
29 | | - %pos.addr = alloca ptr, align 8 |
30 | | - %p = alloca i32, align 4 |
31 | | - %q = alloca i32, align 4 |
32 | | - %i = alloca i32, align 4 |
33 | | - %cleanup.dest.slot = alloca i32, align 4 |
34 | | - %j = alloca i32, align 4 |
35 | | - store ptr %a, ptr %a.addr, align 8 |
36 | | - store ptr %neg, ptr %neg.addr, align 8 |
37 | | - store ptr %pos, ptr %pos.addr, align 8 |
38 | | - store i32 0, ptr %p, align 4 |
39 | | - store i32 0, ptr %q, align 4 |
40 | | - store i32 0, ptr %i, align 4 |
41 | | - br label %for.cond |
42 | | - |
43 | | -for.cond: ; preds = %for.inc16, %entry |
44 | | - %0 = load i32, ptr %i, align 4 |
45 | | - %cmp = icmp slt i32 %0, 32 |
46 | | - br i1 %cmp, label %for.body, label %for.cond.cleanup |
47 | | - |
48 | | -for.cond.cleanup: ; preds = %for.cond |
49 | | - store i32 2, ptr %cleanup.dest.slot, align 4 |
50 | | - br label %for.end18 |
51 | | - |
52 | | -for.body: ; preds = %for.cond |
53 | | - store i32 0, ptr %j, align 4 |
54 | | - br label %for.cond1 |
55 | | - |
56 | | -for.cond1: ; preds = %for.inc, %for.body |
57 | | - %1 = load i32, ptr %j, align 4 |
58 | | - %cmp2 = icmp slt i32 %1, 32 |
59 | | - br i1 %cmp2, label %for.body4, label %for.cond.cleanup3 |
| 22 | + br label %outer.header |
60 | 23 |
|
61 | | -for.cond.cleanup3: ; preds = %for.cond1 |
62 | | - store i32 5, ptr %cleanup.dest.slot, align 4 |
63 | | - br label %for.end |
| 24 | +outer.header: |
| 25 | + %m_temp1 = phi i32 [%m, %entry], [%m_temp, %outer.latch] |
| 26 | + br label %inner.header |
64 | 27 |
|
65 | | -for.body4: ; preds = %for.cond1 |
66 | | - %2 = load ptr, ptr %a.addr, align 8 |
67 | | - %3 = load i32, ptr %i, align 4 |
68 | | - %idxprom = sext i32 %3 to i64 |
69 | | - %arrayidx = getelementptr inbounds i32, ptr %2, i64 %idxprom |
70 | | - %4 = load i32, ptr %arrayidx, align 4 |
71 | | - %cmp5 = icmp slt i32 %4, 0 |
72 | | - br i1 %cmp5, label %if.then, label %if.else |
73 | 28 |
|
74 | | -if.then: ; preds = %for.body4 |
75 | | - %5 = load ptr, ptr %a.addr, align 8 |
76 | | - %6 = load i32, ptr %i, align 4 |
77 | | - %idxprom6 = sext i32 %6 to i64 |
78 | | - %arrayidx7 = getelementptr inbounds i32, ptr %5, i64 %idxprom6 |
79 | | - %7 = load i32, ptr %arrayidx7, align 4 |
80 | | - %8 = load ptr, ptr %neg.addr, align 8 |
81 | | - %9 = load i32, ptr %p, align 4 |
82 | | - %inc = add nsw i32 %9, 1 |
83 | | - store i32 %inc, ptr %p, align 4 |
84 | | - %idxprom8 = sext i32 %9 to i64 |
85 | | - %arrayidx9 = getelementptr inbounds i32, ptr %8, i64 %idxprom8 |
86 | | - store i32 %7, ptr %arrayidx9, align 4 |
87 | | - br label %if.end |
| 29 | +inner.header: |
| 30 | + %n_temp1 = phi i32 [%n, %outer.header], [%n_temp, %inner.latch] |
88 | 31 |
|
89 | | -if.else: ; preds = %for.body4 |
90 | | - %10 = load ptr, ptr %a.addr, align 8 |
91 | | - %11 = load i32, ptr %i, align 4 |
92 | | - %idxprom10 = sext i32 %11 to i64 |
93 | | - %arrayidx11 = getelementptr inbounds i32, ptr %10, i64 %idxprom10 |
94 | | - %12 = load i32, ptr %arrayidx11, align 4 |
95 | | - %13 = load ptr, ptr %pos.addr, align 8 |
96 | | - %14 = load i32, ptr %q, align 4 |
97 | | - %inc12 = add nsw i32 %14, 1 |
98 | | - store i32 %inc12, ptr %q, align 4 |
99 | | - %idxprom13 = sext i32 %14 to i64 |
100 | | - %arrayidx14 = getelementptr inbounds i32, ptr %13, i64 %idxprom13 |
101 | | - store i32 %12, ptr %arrayidx14, align 4 |
102 | | - br label %if.end |
| 32 | + br label %body |
103 | 33 |
|
104 | | -if.end: ; preds = %if.else, %if.then |
105 | | - br label %for.inc |
| 34 | +body: |
| 35 | + ; dummy code |
106 | 36 |
|
107 | | -for.inc: ; preds = %if.end |
108 | | - %15 = load i32, ptr %j, align 4 |
109 | | - %inc15 = add nsw i32 %15, 1 |
110 | | - store i32 %inc15, ptr %j, align 4 |
111 | | - br label %for.cond1 |
| 37 | +br label %inner.latch |
112 | 38 |
|
113 | | -for.end: ; preds = %for.cond.cleanup3 |
114 | | - br label %for.inc16 |
| 39 | +inner.latch: |
| 40 | +%n_temp = add i32 %n_temp1, 1 |
| 41 | +%cmp2 = icmp eq i32 %n_temp, 1 |
| 42 | +br i1 %cmp2, label %outer.latch, label %inner.header |
115 | 43 |
|
116 | | -for.inc16: ; preds = %for.end |
117 | | - %16 = load i32, ptr %i, align 4 |
118 | | - %inc17 = add nsw i32 %16, 1 |
119 | | - store i32 %inc17, ptr %i, align 4 |
120 | | - br label %for.cond |
| 44 | +outer.latch: |
| 45 | +%m_temp = add i32 %n, 1 |
| 46 | +%cmp3 = icmp eq i32 %m_temp, 1 |
| 47 | +br i1 %cmp3, label %exit, label %outer.header |
121 | 48 |
|
122 | | -for.end18: ; preds = %for.cond.cleanup |
123 | | - ret void |
| 49 | +exit: |
| 50 | +ret void |
124 | 51 | } |
125 | 52 |
|
0 commit comments