|
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