|
2 | 2 | ; RUN: llc -mtriple=riscv32 -mattr=+experimental-p -verify-machineinstrs < %s | FileCheck %s |
3 | 3 |
|
4 | 4 | ; Test basic add/sub operations for v2i16 |
5 | | -define <2 x i16> @test_padd_h(<2 x i16> %a, <2 x i16> %b) { |
6 | | -; CHECK-LABEL: test_padd_h: |
7 | | -; CHECK: # %bb.0: |
8 | | -; CHECK-NEXT: padd.h a0, a0, a1 |
9 | | -; CHECK-NEXT: ret |
| 5 | +define void @test_padd_h(ptr %ret_ptr, ptr %a_ptr, ptr %b_ptr) { |
| 6 | + %a = load <2 x i16>, ptr %a_ptr |
| 7 | + %b = load <2 x i16>, ptr %b_ptr |
10 | 8 | %res = add <2 x i16> %a, %b |
11 | | - ret <2 x i16> %res |
| 9 | + store <2 x i16> %res, ptr %ret_ptr |
| 10 | + ret void |
12 | 11 | } |
13 | 12 |
|
14 | | -define <2 x i16> @test_psub_h(<2 x i16> %a, <2 x i16> %b) { |
15 | | -; CHECK-LABEL: test_psub_h: |
16 | | -; CHECK: # %bb.0: |
17 | | -; CHECK-NEXT: psub.h a0, a0, a1 |
18 | | -; CHECK-NEXT: ret |
| 13 | +define void @test_psub_h(ptr %ret_ptr, ptr %a_ptr, ptr %b_ptr) { |
| 14 | + %a = load <2 x i16>, ptr %a_ptr |
| 15 | + %b = load <2 x i16>, ptr %b_ptr |
19 | 16 | %res = sub <2 x i16> %a, %b |
20 | | - ret <2 x i16> %res |
| 17 | + store <2 x i16> %res, ptr %ret_ptr |
| 18 | + ret void |
21 | 19 | } |
22 | 20 |
|
23 | 21 | ; Test basic add/sub operations for v4i8 |
24 | | -define <4 x i8> @test_padd_b(<4 x i8> %a, <4 x i8> %b) { |
25 | | -; CHECK-LABEL: test_padd_b: |
26 | | -; CHECK: # %bb.0: |
27 | | -; CHECK-NEXT: padd.b a0, a0, a1 |
28 | | -; CHECK-NEXT: ret |
| 22 | +define void @test_padd_b(ptr %ret_ptr, ptr %a_ptr, ptr %b_ptr) { |
| 23 | + %a = load <4 x i8>, ptr %a_ptr |
| 24 | + %b = load <4 x i8>, ptr %b_ptr |
29 | 25 | %res = add <4 x i8> %a, %b |
30 | | - ret <4 x i8> %res |
| 26 | + store <4 x i8> %res, ptr %ret_ptr |
| 27 | + ret void |
31 | 28 | } |
32 | 29 |
|
33 | | -define <4 x i8> @test_psub_b(<4 x i8> %a, <4 x i8> %b) { |
34 | | -; CHECK-LABEL: test_psub_b: |
35 | | -; CHECK: # %bb.0: |
36 | | -; CHECK-NEXT: psub.b a0, a0, a1 |
37 | | -; CHECK-NEXT: ret |
| 30 | +define void @test_psub_b(ptr %ret_ptr, ptr %a_ptr, ptr %b_ptr) { |
| 31 | + %a = load <4 x i8>, ptr %a_ptr |
| 32 | + %b = load <4 x i8>, ptr %b_ptr |
38 | 33 | %res = sub <4 x i8> %a, %b |
39 | | - ret <4 x i8> %res |
| 34 | + store <4 x i8> %res, ptr %ret_ptr |
| 35 | + ret void |
40 | 36 | } |
41 | 37 |
|
42 | 38 | ; Test saturating add operations for v2i16 |
43 | | -define <2 x i16> @test_psadd_h(<2 x i16> %a, <2 x i16> %b) { |
44 | | -; CHECK-LABEL: test_psadd_h: |
45 | | -; CHECK: # %bb.0: |
46 | | -; CHECK-NEXT: psadd.h a0, a0, a1 |
47 | | -; CHECK-NEXT: ret |
| 39 | +define void @test_psadd_h(ptr %ret_ptr, ptr %a_ptr, ptr %b_ptr) { |
| 40 | + %a = load <2 x i16>, ptr %a_ptr |
| 41 | + %b = load <2 x i16>, ptr %b_ptr |
48 | 42 | %res = call <2 x i16> @llvm.sadd.sat.v2i16(<2 x i16> %a, <2 x i16> %b) |
49 | | - ret <2 x i16> %res |
| 43 | + store <2 x i16> %res, ptr %ret_ptr |
| 44 | + ret void |
50 | 45 | } |
51 | 46 |
|
52 | | -define <2 x i16> @test_psaddu_h(<2 x i16> %a, <2 x i16> %b) { |
53 | | -; CHECK-LABEL: test_psaddu_h: |
54 | | -; CHECK: # %bb.0: |
55 | | -; CHECK-NEXT: psaddu.h a0, a0, a1 |
56 | | -; CHECK-NEXT: ret |
| 47 | +define void @test_psaddu_h(ptr %ret_ptr, ptr %a_ptr, ptr %b_ptr) { |
| 48 | + %a = load <2 x i16>, ptr %a_ptr |
| 49 | + %b = load <2 x i16>, ptr %b_ptr |
57 | 50 | %res = call <2 x i16> @llvm.uadd.sat.v2i16(<2 x i16> %a, <2 x i16> %b) |
58 | | - ret <2 x i16> %res |
| 51 | + store <2 x i16> %res, ptr %ret_ptr |
| 52 | + ret void |
59 | 53 | } |
60 | 54 |
|
61 | 55 | ; Test saturating sub operations for v2i16 |
62 | | -define <2 x i16> @test_pssub_h(<2 x i16> %a, <2 x i16> %b) { |
63 | | -; CHECK-LABEL: test_pssub_h: |
64 | | -; CHECK: # %bb.0: |
65 | | -; CHECK-NEXT: pssub.h a0, a0, a1 |
66 | | -; CHECK-NEXT: ret |
| 56 | +define void @test_pssub_h(ptr %ret_ptr, ptr %a_ptr, ptr %b_ptr) { |
| 57 | + %a = load <2 x i16>, ptr %a_ptr |
| 58 | + %b = load <2 x i16>, ptr %b_ptr |
67 | 59 | %res = call <2 x i16> @llvm.ssub.sat.v2i16(<2 x i16> %a, <2 x i16> %b) |
68 | | - ret <2 x i16> %res |
| 60 | + store <2 x i16> %res, ptr %ret_ptr |
| 61 | + ret void |
69 | 62 | } |
70 | 63 |
|
71 | | -define <2 x i16> @test_pssubu_h(<2 x i16> %a, <2 x i16> %b) { |
72 | | -; CHECK-LABEL: test_pssubu_h: |
73 | | -; CHECK: # %bb.0: |
74 | | -; CHECK-NEXT: pssubu.h a0, a0, a1 |
75 | | -; CHECK-NEXT: ret |
| 64 | +define void @test_pssubu_h(ptr %ret_ptr, ptr %a_ptr, ptr %b_ptr) { |
| 65 | + %a = load <2 x i16>, ptr %a_ptr |
| 66 | + %b = load <2 x i16>, ptr %b_ptr |
76 | 67 | %res = call <2 x i16> @llvm.usub.sat.v2i16(<2 x i16> %a, <2 x i16> %b) |
77 | | - ret <2 x i16> %res |
| 68 | + store <2 x i16> %res, ptr %ret_ptr |
| 69 | + ret void |
78 | 70 | } |
79 | 71 |
|
80 | 72 | ; Test saturating add operations for v4i8 |
81 | | -define <4 x i8> @test_psadd_b(<4 x i8> %a, <4 x i8> %b) { |
82 | | -; CHECK-LABEL: test_psadd_b: |
83 | | -; CHECK: # %bb.0: |
84 | | -; CHECK-NEXT: psadd.b a0, a0, a1 |
85 | | -; CHECK-NEXT: ret |
| 73 | +define void @test_psadd_b(ptr %ret_ptr, ptr %a_ptr, ptr %b_ptr) { |
| 74 | + %a = load <4 x i8>, ptr %a_ptr |
| 75 | + %b = load <4 x i8>, ptr %b_ptr |
86 | 76 | %res = call <4 x i8> @llvm.sadd.sat.v4i8(<4 x i8> %a, <4 x i8> %b) |
87 | | - ret <4 x i8> %res |
| 77 | + store <4 x i8> %res, ptr %ret_ptr |
| 78 | + ret void |
88 | 79 | } |
89 | 80 |
|
90 | | -define <4 x i8> @test_psaddu_b(<4 x i8> %a, <4 x i8> %b) { |
91 | | -; CHECK-LABEL: test_psaddu_b: |
92 | | -; CHECK: # %bb.0: |
93 | | -; CHECK-NEXT: psaddu.b a0, a0, a1 |
94 | | -; CHECK-NEXT: ret |
| 81 | +define void @test_psaddu_b(ptr %ret_ptr, ptr %a_ptr, ptr %b_ptr) { |
| 82 | + %a = load <4 x i8>, ptr %a_ptr |
| 83 | + %b = load <4 x i8>, ptr %b_ptr |
95 | 84 | %res = call <4 x i8> @llvm.uadd.sat.v4i8(<4 x i8> %a, <4 x i8> %b) |
96 | | - ret <4 x i8> %res |
| 85 | + store <4 x i8> %res, ptr %ret_ptr |
| 86 | + ret void |
97 | 87 | } |
98 | 88 |
|
99 | 89 | ; Test saturating sub operations for v4i8 |
100 | | -define <4 x i8> @test_pssub_b(<4 x i8> %a, <4 x i8> %b) { |
101 | | -; CHECK-LABEL: test_pssub_b: |
102 | | -; CHECK: # %bb.0: |
103 | | -; CHECK-NEXT: pssub.b a0, a0, a1 |
104 | | -; CHECK-NEXT: ret |
| 90 | +define void @test_pssub_b(ptr %ret_ptr, ptr %a_ptr, ptr %b_ptr) { |
| 91 | + %a = load <4 x i8>, ptr %a_ptr |
| 92 | + %b = load <4 x i8>, ptr %b_ptr |
105 | 93 | %res = call <4 x i8> @llvm.ssub.sat.v4i8(<4 x i8> %a, <4 x i8> %b) |
106 | | - ret <4 x i8> %res |
| 94 | + store <4 x i8> %res, ptr %ret_ptr |
| 95 | + ret void |
107 | 96 | } |
108 | 97 |
|
109 | | -define <4 x i8> @test_pssubu_b(<4 x i8> %a, <4 x i8> %b) { |
110 | | -; CHECK-LABEL: test_pssubu_b: |
111 | | -; CHECK: # %bb.0: |
112 | | -; CHECK-NEXT: pssubu.b a0, a0, a1 |
113 | | -; CHECK-NEXT: ret |
| 98 | +define void @test_pssubu_b(ptr %ret_ptr, ptr %a_ptr, ptr %b_ptr) { |
| 99 | + %a = load <4 x i8>, ptr %a_ptr |
| 100 | + %b = load <4 x i8>, ptr %b_ptr |
114 | 101 | %res = call <4 x i8> @llvm.usub.sat.v4i8(<4 x i8> %a, <4 x i8> %b) |
115 | | - ret <4 x i8> %res |
| 102 | + store <4 x i8> %res, ptr %ret_ptr |
| 103 | + ret void |
116 | 104 | } |
117 | 105 |
|
118 | 106 | ; Test averaging floor signed operations for v2i16 |
119 | | -define <2 x i16> @test_paadd_h(<2 x i16> %a, <2 x i16> %b) { |
120 | | -; CHECK-LABEL: test_paadd_h: |
121 | | -; CHECK: # %bb.0: |
122 | | -; CHECK-NEXT: paadd.h a0, a0, a1 |
123 | | -; CHECK-NEXT: ret |
| 107 | +define void @test_paadd_h(ptr %ret_ptr, ptr %a_ptr, ptr %b_ptr) { |
| 108 | + %a = load <2 x i16>, ptr %a_ptr |
| 109 | + %b = load <2 x i16>, ptr %b_ptr |
124 | 110 | %ext.a = sext <2 x i16> %a to <2 x i32> |
125 | 111 | %ext.b = sext <2 x i16> %b to <2 x i32> |
126 | 112 | %add = add nsw <2 x i32> %ext.a, %ext.b |
127 | 113 | %shift = ashr <2 x i32> %add, <i32 1, i32 1> |
128 | 114 | %res = trunc <2 x i32> %shift to <2 x i16> |
129 | | - ret <2 x i16> %res |
| 115 | + store <2 x i16> %res, ptr %ret_ptr |
| 116 | + ret void |
130 | 117 | } |
131 | 118 |
|
132 | 119 | ; Test averaging floor unsigned operations for v2i16 |
133 | | -define <2 x i16> @test_paaddu_h(<2 x i16> %a, <2 x i16> %b) { |
134 | | -; CHECK-LABEL: test_paaddu_h: |
135 | | -; CHECK: # %bb.0: |
136 | | -; CHECK-NEXT: paaddu.h a0, a0, a1 |
137 | | -; CHECK-NEXT: ret |
| 120 | +define void @test_paaddu_h(ptr %ret_ptr, ptr %a_ptr, ptr %b_ptr) { |
| 121 | + %a = load <2 x i16>, ptr %a_ptr |
| 122 | + %b = load <2 x i16>, ptr %b_ptr |
138 | 123 | %and = and <2 x i16> %a, %b |
139 | 124 | %xor = xor <2 x i16> %a, %b |
140 | 125 | %shift = lshr <2 x i16> %xor, <i16 1, i16 1> |
141 | 126 | %res = add <2 x i16> %and, %shift |
142 | | - ret <2 x i16> %res |
| 127 | + store <2 x i16> %res, ptr %ret_ptr |
| 128 | + ret void |
143 | 129 | } |
144 | 130 |
|
145 | 131 | ; Test averaging floor signed operations for v4i8 |
146 | | -define <4 x i8> @test_paadd_b(<4 x i8> %a, <4 x i8> %b) { |
147 | | -; CHECK-LABEL: test_paadd_b: |
148 | | -; CHECK: # %bb.0: |
149 | | -; CHECK-NEXT: paadd.b a0, a0, a1 |
150 | | -; CHECK-NEXT: ret |
| 132 | +define void @test_paadd_b(ptr %ret_ptr, ptr %a_ptr, ptr %b_ptr) { |
| 133 | + %a = load <4 x i8>, ptr %a_ptr |
| 134 | + %b = load <4 x i8>, ptr %b_ptr |
151 | 135 | %ext.a = sext <4 x i8> %a to <4 x i16> |
152 | 136 | %ext.b = sext <4 x i8> %b to <4 x i16> |
153 | 137 | %add = add nsw <4 x i16> %ext.a, %ext.b |
154 | 138 | %shift = ashr <4 x i16> %add, <i16 1, i16 1, i16 1, i16 1> |
155 | 139 | %res = trunc <4 x i16> %shift to <4 x i8> |
156 | | - ret <4 x i8> %res |
| 140 | + store <4 x i8> %res, ptr %ret_ptr |
| 141 | + ret void |
157 | 142 | } |
158 | 143 |
|
159 | 144 | ; Test averaging floor unsigned operations for v4i8 |
160 | | -define <4 x i8> @test_paaddu_b(<4 x i8> %a, <4 x i8> %b) { |
161 | | -; CHECK-LABEL: test_paaddu_b: |
162 | | -; CHECK: # %bb.0: |
163 | | -; CHECK-NEXT: paaddu.b a0, a0, a1 |
164 | | -; CHECK-NEXT: ret |
| 145 | +define void @test_paaddu_b(ptr %ret_ptr, ptr %a_ptr, ptr %b_ptr) { |
| 146 | + %a = load <4 x i8>, ptr %a_ptr |
| 147 | + %b = load <4 x i8>, ptr %b_ptr |
165 | 148 | %and = and <4 x i8> %a, %b |
166 | 149 | %xor = xor <4 x i8> %a, %b |
167 | 150 | %shift = lshr <4 x i8> %xor, <i8 1, i8 1, i8 1, i8 1> |
168 | 151 | %res = add <4 x i8> %and, %shift |
169 | | - ret <4 x i8> %res |
| 152 | + store <4 x i8> %res, ptr %ret_ptr |
| 153 | + ret void |
170 | 154 | } |
171 | 155 |
|
172 | 156 | ; Test absolute difference signed for v2i16 |
173 | | -define <2 x i16> @test_pdif_h(<2 x i16> %a, <2 x i16> %b) { |
174 | | -; CHECK-LABEL: test_pdif_h: |
175 | | -; CHECK: # %bb.0: |
176 | | -; CHECK-NEXT: pdif.h a0, a0, a1 |
177 | | -; CHECK-NEXT: ret |
| 157 | +define void @test_pdif_h(ptr %ret_ptr, ptr %a_ptr, ptr %b_ptr) { |
| 158 | + %a = load <2 x i16>, ptr %a_ptr |
| 159 | + %b = load <2 x i16>, ptr %b_ptr |
178 | 160 | %min = call <2 x i16> @llvm.smin.v2i16(<2 x i16> %a, <2 x i16> %b) |
179 | 161 | %max = call <2 x i16> @llvm.smax.v2i16(<2 x i16> %a, <2 x i16> %b) |
180 | 162 | %res = sub <2 x i16> %max, %min |
181 | | - ret <2 x i16> %res |
| 163 | + store <2 x i16> %res, ptr %ret_ptr |
| 164 | + ret void |
182 | 165 | } |
183 | 166 |
|
184 | 167 | ; Test absolute difference unsigned for v2i16 |
185 | | -define <2 x i16> @test_pdifu_h(<2 x i16> %a, <2 x i16> %b) { |
186 | | -; CHECK-LABEL: test_pdifu_h: |
187 | | -; CHECK: # %bb.0: |
188 | | -; CHECK-NEXT: pdifu.h a0, a0, a1 |
189 | | -; CHECK-NEXT: ret |
| 168 | +define void @test_pdifu_h(ptr %ret_ptr, ptr %a_ptr, ptr %b_ptr) { |
| 169 | + %a = load <2 x i16>, ptr %a_ptr |
| 170 | + %b = load <2 x i16>, ptr %b_ptr |
190 | 171 | %min = call <2 x i16> @llvm.umin.v2i16(<2 x i16> %a, <2 x i16> %b) |
191 | 172 | %max = call <2 x i16> @llvm.umax.v2i16(<2 x i16> %a, <2 x i16> %b) |
192 | 173 | %res = sub <2 x i16> %max, %min |
193 | | - ret <2 x i16> %res |
| 174 | + store <2 x i16> %res, ptr %ret_ptr |
| 175 | + ret void |
194 | 176 | } |
195 | 177 |
|
196 | 178 | ; Test absolute difference signed for v4i8 |
197 | | -define <4 x i8> @test_pdif_b(<4 x i8> %a, <4 x i8> %b) { |
198 | | -; CHECK-LABEL: test_pdif_b: |
199 | | -; CHECK: # %bb.0: |
200 | | -; CHECK-NEXT: pdif.b a0, a0, a1 |
201 | | -; CHECK-NEXT: ret |
| 179 | +define void @test_pdif_b(ptr %ret_ptr, ptr %a_ptr, ptr %b_ptr) { |
| 180 | + %a = load <4 x i8>, ptr %a_ptr |
| 181 | + %b = load <4 x i8>, ptr %b_ptr |
202 | 182 | %min = call <4 x i8> @llvm.smin.v4i8(<4 x i8> %a, <4 x i8> %b) |
203 | 183 | %max = call <4 x i8> @llvm.smax.v4i8(<4 x i8> %a, <4 x i8> %b) |
204 | 184 | %res = sub <4 x i8> %max, %min |
205 | | - ret <4 x i8> %res |
| 185 | + store <4 x i8> %res, ptr %ret_ptr |
| 186 | + ret void |
206 | 187 | } |
207 | 188 |
|
208 | 189 | ; Test absolute difference unsigned for v4i8 |
209 | | -define <4 x i8> @test_pdifu_b(<4 x i8> %a, <4 x i8> %b) { |
210 | | -; CHECK-LABEL: test_pdifu_b: |
211 | | -; CHECK: # %bb.0: |
212 | | -; CHECK-NEXT: pdifu.b a0, a0, a1 |
213 | | -; CHECK-NEXT: ret |
| 190 | +define void @test_pdifu_b(ptr %ret_ptr, ptr %a_ptr, ptr %b_ptr) { |
| 191 | + %a = load <4 x i8>, ptr %a_ptr |
| 192 | + %b = load <4 x i8>, ptr %b_ptr |
214 | 193 | %min = call <4 x i8> @llvm.umin.v4i8(<4 x i8> %a, <4 x i8> %b) |
215 | 194 | %max = call <4 x i8> @llvm.umax.v4i8(<4 x i8> %a, <4 x i8> %b) |
216 | 195 | %res = sub <4 x i8> %max, %min |
217 | | - ret <4 x i8> %res |
| 196 | + store <4 x i8> %res, ptr %ret_ptr |
| 197 | + ret void |
218 | 198 | } |
219 | 199 |
|
220 | 200 | ; Test averaging floor subtraction signed for v2i16 |
221 | 201 | ; pasub pattern: (a - b) arithmetic shift right 1 |
222 | | -define <2 x i16> @test_pasub_h(<2 x i16> %a, <2 x i16> %b) { |
223 | | -; CHECK-LABEL: test_pasub_h: |
224 | | -; CHECK: # %bb.0: |
225 | | -; CHECK-NEXT: pasub.h a0, a0, a1 |
226 | | -; CHECK-NEXT: ret |
| 202 | +define void @test_pasub_h(ptr %ret_ptr, ptr %a_ptr, ptr %b_ptr) { |
| 203 | + %a = load <2 x i16>, ptr %a_ptr |
| 204 | + %b = load <2 x i16>, ptr %b_ptr |
227 | 205 | %sub = sub <2 x i16> %a, %b |
228 | 206 | %res = ashr <2 x i16> %sub, <i16 1, i16 1> |
229 | | - ret <2 x i16> %res |
| 207 | + store <2 x i16> %res, ptr %ret_ptr |
| 208 | + ret void |
230 | 209 | } |
231 | 210 |
|
232 | 211 | ; Test averaging floor subtraction unsigned for v2i16 |
233 | 212 | ; pasubu pattern: (a - b) logical shift right 1 |
234 | | -define <2 x i16> @test_pasubu_h(<2 x i16> %a, <2 x i16> %b) { |
235 | | -; CHECK-LABEL: test_pasubu_h: |
236 | | -; CHECK: # %bb.0: |
237 | | -; CHECK-NEXT: pasubu.h a0, a0, a1 |
238 | | -; CHECK-NEXT: ret |
| 213 | +define void @test_pasubu_h(ptr %ret_ptr, ptr %a_ptr, ptr %b_ptr) { |
| 214 | + %a = load <2 x i16>, ptr %a_ptr |
| 215 | + %b = load <2 x i16>, ptr %b_ptr |
239 | 216 | %sub = sub <2 x i16> %a, %b |
240 | 217 | %res = lshr <2 x i16> %sub, <i16 1, i16 1> |
241 | | - ret <2 x i16> %res |
| 218 | + store <2 x i16> %res, ptr %ret_ptr |
| 219 | + ret void |
242 | 220 | } |
243 | 221 |
|
244 | 222 | ; Test averaging floor subtraction signed for v4i8 |
245 | | -define <4 x i8> @test_pasub_b(<4 x i8> %a, <4 x i8> %b) { |
246 | | -; CHECK-LABEL: test_pasub_b: |
247 | | -; CHECK: # %bb.0: |
248 | | -; CHECK-NEXT: pasub.b a0, a0, a1 |
249 | | -; CHECK-NEXT: ret |
| 223 | +define void @test_pasub_b(ptr %ret_ptr, ptr %a_ptr, ptr %b_ptr) { |
| 224 | + %a = load <4 x i8>, ptr %a_ptr |
| 225 | + %b = load <4 x i8>, ptr %b_ptr |
250 | 226 | %sub = sub <4 x i8> %a, %b |
251 | 227 | %res = ashr <4 x i8> %sub, <i8 1, i8 1, i8 1, i8 1> |
252 | | - ret <4 x i8> %res |
| 228 | + store <4 x i8> %res, ptr %ret_ptr |
| 229 | + ret void |
253 | 230 | } |
254 | 231 |
|
255 | 232 | ; Test averaging floor subtraction unsigned for v4i8 |
256 | | -define <4 x i8> @test_pasubu_b(<4 x i8> %a, <4 x i8> %b) { |
257 | | -; CHECK-LABEL: test_pasubu_b: |
258 | | -; CHECK: # %bb.0: |
259 | | -; CHECK-NEXT: pasubu.b a0, a0, a1 |
260 | | -; CHECK-NEXT: ret |
| 233 | +define void @test_pasubu_b(ptr %ret_ptr, ptr %a_ptr, ptr %b_ptr) { |
| 234 | + %a = load <4 x i8>, ptr %a_ptr |
| 235 | + %b = load <4 x i8>, ptr %b_ptr |
261 | 236 | %sub = sub <4 x i8> %a, %b |
262 | 237 | %res = lshr <4 x i8> %sub, <i8 1, i8 1, i8 1, i8 1> |
263 | | - ret <4 x i8> %res |
| 238 | + store <4 x i8> %res, ptr %ret_ptr |
| 239 | + ret void |
264 | 240 | } |
265 | 241 |
|
266 | 242 | ; Intrinsic declarations |
|
0 commit comments