|
7 | 7 | define i32 @i32_initially_postidx(ptr %p, i64 %n) {
|
8 | 8 | ; CHECK-LABEL: i32_initially_postidx:
|
9 | 9 | ; CHECK: // %bb.0: // %entry
|
10 |
| -; CHECK-NEXT: cmp x1, #1 |
11 |
| -; CHECK-NEXT: b.lt .LBB0_5 |
12 |
| -; CHECK-NEXT: // %bb.1: // %for.body.preheader |
13 | 10 | ; CHECK-NEXT: mov w8, wzr
|
14 |
| -; CHECK-NEXT: .LBB0_2: // %for.body |
| 11 | +; CHECK-NEXT: subs x9, x1, #1 |
| 12 | +; CHECK-NEXT: b.lt .LBB0_2 |
| 13 | +; CHECK-NEXT: .LBB0_1: // %for.body |
15 | 14 | ; CHECK-NEXT: // =>This Inner Loop Header: Depth=1
|
16 |
| -; CHECK-NEXT: ldr w9, [x0], #4 |
17 |
| -; CHECK-NEXT: add w8, w8, w9 |
| 15 | +; CHECK-NEXT: ldr w10, [x0], #4 |
| 16 | +; CHECK-NEXT: add w8, w8, w10 |
18 | 17 | ; CHECK-NEXT: cmp w8, #0
|
19 |
| -; CHECK-NEXT: b.lo .LBB0_5 |
20 |
| -; CHECK-NEXT: // %bb.3: // %for.inc |
21 |
| -; CHECK-NEXT: // in Loop: Header=BB0_2 Depth=1 |
22 |
| -; CHECK-NEXT: subs x1, x1, #1 |
23 |
| -; CHECK-NEXT: b.ne .LBB0_2 |
24 |
| -; CHECK-NEXT: // %bb.4: // %cleanup |
25 |
| -; CHECK-NEXT: mov w0, w8 |
26 |
| -; CHECK-NEXT: ret |
27 |
| -; CHECK-NEXT: .LBB0_5: |
28 |
| -; CHECK-NEXT: mov w8, wzr |
| 18 | +; CHECK-NEXT: ccmp x9, #0, #4, hs |
| 19 | +; CHECK-NEXT: sub x9, x9, #1 |
| 20 | +; CHECK-NEXT: b.ne .LBB0_1 |
| 21 | +; CHECK-NEXT: .LBB0_2: // %cleanup |
29 | 22 | ; CHECK-NEXT: mov w0, w8
|
30 | 23 | ; CHECK-NEXT: ret
|
31 | 24 | entry:
|
@@ -55,25 +48,18 @@ cleanup:
|
55 | 48 | define i32 @i32_initially_offset(ptr %p, i64 %n) {
|
56 | 49 | ; CHECK-LABEL: i32_initially_offset:
|
57 | 50 | ; CHECK: // %bb.0: // %entry
|
58 |
| -; CHECK-NEXT: cmp x1, #1 |
59 |
| -; CHECK-NEXT: b.lt .LBB1_5 |
60 |
| -; CHECK-NEXT: // %bb.1: // %for.body.preheader |
61 | 51 | ; CHECK-NEXT: mov w8, wzr
|
62 |
| -; CHECK-NEXT: .LBB1_2: // %for.body |
| 52 | +; CHECK-NEXT: subs x9, x1, #1 |
| 53 | +; CHECK-NEXT: b.lt .LBB1_2 |
| 54 | +; CHECK-NEXT: .LBB1_1: // %for.body |
63 | 55 | ; CHECK-NEXT: // =>This Inner Loop Header: Depth=1
|
64 |
| -; CHECK-NEXT: ldr w9, [x0], #4 |
65 |
| -; CHECK-NEXT: add w8, w8, w9 |
| 56 | +; CHECK-NEXT: ldr w10, [x0], #4 |
| 57 | +; CHECK-NEXT: add w8, w8, w10 |
66 | 58 | ; CHECK-NEXT: cmp w8, #0
|
67 |
| -; CHECK-NEXT: b.lo .LBB1_5 |
68 |
| -; CHECK-NEXT: // %bb.3: // %for.cond |
69 |
| -; CHECK-NEXT: // in Loop: Header=BB1_2 Depth=1 |
70 |
| -; CHECK-NEXT: subs x1, x1, #1 |
71 |
| -; CHECK-NEXT: b.ne .LBB1_2 |
72 |
| -; CHECK-NEXT: // %bb.4: // %cleanup |
73 |
| -; CHECK-NEXT: mov w0, w8 |
74 |
| -; CHECK-NEXT: ret |
75 |
| -; CHECK-NEXT: .LBB1_5: |
76 |
| -; CHECK-NEXT: mov w8, wzr |
| 59 | +; CHECK-NEXT: ccmp x9, #0, #4, hs |
| 60 | +; CHECK-NEXT: sub x9, x9, #1 |
| 61 | +; CHECK-NEXT: b.ne .LBB1_1 |
| 62 | +; CHECK-NEXT: .LBB1_2: // %cleanup |
77 | 63 | ; CHECK-NEXT: mov w0, w8
|
78 | 64 | ; CHECK-NEXT: ret
|
79 | 65 | entry:
|
@@ -102,20 +88,21 @@ cleanup:
|
102 | 88 | define float @float_initially_postidx(ptr %p, i64 %n) {
|
103 | 89 | ; CHECK-LABEL: float_initially_postidx:
|
104 | 90 | ; CHECK: // %bb.0: // %entry
|
105 |
| -; CHECK-NEXT: movi d0, #0000000000000000 |
106 |
| -; CHECK-NEXT: cmp x1, #1 |
107 |
| -; CHECK-NEXT: b.lt .LBB2_3 |
108 |
| -; CHECK-NEXT: .LBB2_1: // %for.body |
| 91 | +; CHECK-NEXT: subs x8, x1, #1 |
| 92 | +; CHECK-NEXT: b.lt .LBB2_4 |
| 93 | +; CHECK-NEXT: // %bb.1: // %for.body.preheader |
| 94 | +; CHECK-NEXT: movi d1, #0000000000000000 |
| 95 | +; CHECK-NEXT: movi d2, #0000000000000000 |
| 96 | +; CHECK-NEXT: .LBB2_2: // %for.body |
109 | 97 | ; CHECK-NEXT: // =>This Inner Loop Header: Depth=1
|
110 |
| -; CHECK-NEXT: ldr s1, [x0], #4 |
111 |
| -; CHECK-NEXT: fadd s0, s0, s1 |
112 |
| -; CHECK-NEXT: fcmp s0, #0.0 |
113 |
| -; CHECK-NEXT: b.mi .LBB2_4 |
114 |
| -; CHECK-NEXT: // %bb.2: // %for.inc |
115 |
| -; CHECK-NEXT: // in Loop: Header=BB2_1 Depth=1 |
116 |
| -; CHECK-NEXT: subs x1, x1, #1 |
117 |
| -; CHECK-NEXT: b.ne .LBB2_1 |
118 |
| -; CHECK-NEXT: .LBB2_3: // %cleanup |
| 98 | +; CHECK-NEXT: ldr s0, [x0], #4 |
| 99 | +; CHECK-NEXT: fadd s2, s2, s0 |
| 100 | +; CHECK-NEXT: fcmp s2, #0.0 |
| 101 | +; CHECK-NEXT: fcsel s0, s1, s2, mi |
| 102 | +; CHECK-NEXT: ccmp x8, #0, #4, pl |
| 103 | +; CHECK-NEXT: sub x8, x8, #1 |
| 104 | +; CHECK-NEXT: b.ne .LBB2_2 |
| 105 | +; CHECK-NEXT: // %bb.3: // %cleanup |
119 | 106 | ; CHECK-NEXT: ret
|
120 | 107 | ; CHECK-NEXT: .LBB2_4:
|
121 | 108 | ; CHECK-NEXT: movi d0, #0000000000000000
|
@@ -147,20 +134,21 @@ cleanup:
|
147 | 134 | define float @float_initially_offset(ptr %p, i64 %n) {
|
148 | 135 | ; CHECK-LABEL: float_initially_offset:
|
149 | 136 | ; CHECK: // %bb.0: // %entry
|
150 |
| -; CHECK-NEXT: movi d0, #0000000000000000 |
151 |
| -; CHECK-NEXT: cmp x1, #1 |
152 |
| -; CHECK-NEXT: b.lt .LBB3_3 |
153 |
| -; CHECK-NEXT: .LBB3_1: // %for.body |
| 137 | +; CHECK-NEXT: subs x8, x1, #1 |
| 138 | +; CHECK-NEXT: b.lt .LBB3_4 |
| 139 | +; CHECK-NEXT: // %bb.1: // %for.body.preheader |
| 140 | +; CHECK-NEXT: movi d1, #0000000000000000 |
| 141 | +; CHECK-NEXT: movi d2, #0000000000000000 |
| 142 | +; CHECK-NEXT: .LBB3_2: // %for.body |
154 | 143 | ; CHECK-NEXT: // =>This Inner Loop Header: Depth=1
|
155 |
| -; CHECK-NEXT: ldr s1, [x0], #4 |
156 |
| -; CHECK-NEXT: fadd s0, s0, s1 |
157 |
| -; CHECK-NEXT: fcmp s0, #0.0 |
158 |
| -; CHECK-NEXT: b.mi .LBB3_4 |
159 |
| -; CHECK-NEXT: // %bb.2: // %for.cond |
160 |
| -; CHECK-NEXT: // in Loop: Header=BB3_1 Depth=1 |
161 |
| -; CHECK-NEXT: subs x1, x1, #1 |
162 |
| -; CHECK-NEXT: b.ne .LBB3_1 |
163 |
| -; CHECK-NEXT: .LBB3_3: // %cleanup |
| 144 | +; CHECK-NEXT: ldr s0, [x0], #4 |
| 145 | +; CHECK-NEXT: fadd s2, s2, s0 |
| 146 | +; CHECK-NEXT: fcmp s2, #0.0 |
| 147 | +; CHECK-NEXT: fcsel s0, s1, s2, mi |
| 148 | +; CHECK-NEXT: ccmp x8, #0, #4, pl |
| 149 | +; CHECK-NEXT: sub x8, x8, #1 |
| 150 | +; CHECK-NEXT: b.ne .LBB3_2 |
| 151 | +; CHECK-NEXT: // %bb.3: // %cleanup |
164 | 152 | ; CHECK-NEXT: ret
|
165 | 153 | ; CHECK-NEXT: .LBB3_4:
|
166 | 154 | ; CHECK-NEXT: movi d0, #0000000000000000
|
|
0 commit comments