|
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