Commit a758232
committed
[LV] Add support for partial reductions without a binary op
Consider IR such as this:
for.body:
%iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
%accum = phi i32 [ 0, %entry ], [ %add, %for.body ]
%gep.a = getelementptr i8, ptr %a, i64 %iv
%load.a = load i8, ptr %gep.a, align 1
%ext.a = zext i8 %load.a to i32
%add = add i32 %ext.a, %accum
%iv.next = add i64 %iv, 1
%exitcond.not = icmp eq i64 %iv.next, 1025
br i1 %exitcond.not, label %for.exit, label %for.body
Conceptually we can vectorise this using partial reductions too,
although the current loop vectoriser implementation requires the
accumulation of a multiply. For AArch64 this is easily done with
a udot or sdot with an identity operand, i.e. a vector of (i16 1).
In order to do this I had to teach getScaledReductions that the
accumulated value may come from a unary op, hence there is only
one extension to consider. Similarly, I updated the vplan and
AArch64 TTI cost model to understand the possible unary op.1 parent 84f6dd3 commit a758232
File tree
8 files changed
+256
-200
lines changed- llvm
- include/llvm/Analysis
- lib
- Target/AArch64
- Transforms/Vectorize
- test/Transforms/LoopVectorize/AArch64
8 files changed
+256
-200
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1299 | 1299 | | |
1300 | 1300 | | |
1301 | 1301 | | |
1302 | | - | |
1303 | | - | |
1304 | | - | |
| 1302 | + | |
| 1303 | + | |
| 1304 | + | |
| 1305 | + | |
| 1306 | + | |
| 1307 | + | |
| 1308 | + | |
| 1309 | + | |
| 1310 | + | |
| 1311 | + | |
| 1312 | + | |
| 1313 | + | |
| 1314 | + | |
| 1315 | + | |
| 1316 | + | |
1305 | 1317 | | |
1306 | 1318 | | |
1307 | 1319 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5177 | 5177 | | |
5178 | 5178 | | |
5179 | 5179 | | |
5180 | | - | |
| 5180 | + | |
| 5181 | + | |
5181 | 5182 | | |
5182 | 5183 | | |
5183 | | - | |
| 5184 | + | |
| 5185 | + | |
| 5186 | + | |
| 5187 | + | |
| 5188 | + | |
| 5189 | + | |
| 5190 | + | |
| 5191 | + | |
5184 | 5192 | | |
| 5193 | + | |
| 5194 | + | |
5185 | 5195 | | |
5186 | 5196 | | |
5187 | 5197 | | |
| |||
5228 | 5238 | | |
5229 | 5239 | | |
5230 | 5240 | | |
5231 | | - | |
5232 | | - | |
5233 | | - | |
5234 | | - | |
5235 | | - | |
5236 | | - | |
5237 | | - | |
5238 | | - | |
5239 | | - | |
5240 | | - | |
5241 | 5241 | | |
5242 | 5242 | | |
5243 | 5243 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8765 | 8765 | | |
8766 | 8766 | | |
8767 | 8767 | | |
8768 | | - | |
8769 | | - | |
| 8768 | + | |
| 8769 | + | |
8770 | 8770 | | |
8771 | | - | |
| 8771 | + | |
8772 | 8772 | | |
8773 | 8773 | | |
8774 | | - | |
| 8774 | + | |
8775 | 8775 | | |
8776 | | - | |
| 8776 | + | |
8777 | 8777 | | |
8778 | 8778 | | |
8779 | 8779 | | |
| |||
8782 | 8782 | | |
8783 | 8783 | | |
8784 | 8784 | | |
8785 | | - | |
| 8785 | + | |
8786 | 8786 | | |
8787 | 8787 | | |
8788 | 8788 | | |
8789 | 8789 | | |
8790 | 8790 | | |
8791 | 8791 | | |
8792 | 8792 | | |
8793 | | - | |
8794 | 8793 | | |
8795 | 8794 | | |
8796 | 8795 | | |
| |||
8819 | 8818 | | |
8820 | 8819 | | |
8821 | 8820 | | |
8822 | | - | |
8823 | | - | |
8824 | | - | |
8825 | | - | |
8826 | 8821 | | |
8827 | | - | |
8828 | | - | |
8829 | | - | |
8830 | 8822 | | |
8831 | | - | |
8832 | | - | |
8833 | | - | |
8834 | | - | |
| 8823 | + | |
| 8824 | + | |
| 8825 | + | |
| 8826 | + | |
| 8827 | + | |
| 8828 | + | |
| 8829 | + | |
| 8830 | + | |
| 8831 | + | |
| 8832 | + | |
| 8833 | + | |
| 8834 | + | |
| 8835 | + | |
| 8836 | + | |
| 8837 | + | |
| 8838 | + | |
| 8839 | + | |
| 8840 | + | |
| 8841 | + | |
| 8842 | + | |
| 8843 | + | |
| 8844 | + | |
| 8845 | + | |
| 8846 | + | |
| 8847 | + | |
| 8848 | + | |
| 8849 | + | |
| 8850 | + | |
| 8851 | + | |
8835 | 8852 | | |
8836 | | - | |
8837 | | - | |
| 8853 | + | |
| 8854 | + | |
| 8855 | + | |
| 8856 | + | |
| 8857 | + | |
| 8858 | + | |
| 8859 | + | |
| 8860 | + | |
| 8861 | + | |
| 8862 | + | |
| 8863 | + | |
| 8864 | + | |
| 8865 | + | |
| 8866 | + | |
| 8867 | + | |
8838 | 8868 | | |
8839 | 8869 | | |
8840 | | - | |
| 8870 | + | |
8841 | 8871 | | |
8842 | | - | |
8843 | | - | |
8844 | | - | |
| 8872 | + | |
| 8873 | + | |
| 8874 | + | |
8845 | 8875 | | |
8846 | 8876 | | |
8847 | 8877 | | |
8848 | | - | |
| 8878 | + | |
8849 | 8879 | | |
8850 | 8880 | | |
8851 | 8881 | | |
8852 | 8882 | | |
8853 | | - | |
8854 | | - | |
8855 | | - | |
| 8883 | + | |
| 8884 | + | |
8856 | 8885 | | |
8857 | 8886 | | |
8858 | 8887 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
29 | | - | |
30 | | - | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
31 | 32 | | |
32 | 33 | | |
33 | | - | |
34 | | - | |
35 | | - | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
36 | 37 | | |
37 | 38 | | |
38 | 39 | | |
39 | 40 | | |
40 | 41 | | |
41 | 42 | | |
42 | 43 | | |
43 | | - | |
44 | | - | |
| 44 | + | |
| 45 | + | |
45 | 46 | | |
46 | 47 | | |
47 | 48 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
281 | 281 | | |
282 | 282 | | |
283 | 283 | | |
284 | | - | |
285 | | - | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
286 | 288 | | |
287 | 289 | | |
288 | | - | |
| 290 | + | |
289 | 291 | | |
290 | | - | |
291 | | - | |
292 | | - | |
293 | | - | |
294 | | - | |
295 | | - | |
296 | | - | |
297 | | - | |
298 | | - | |
299 | | - | |
300 | | - | |
301 | | - | |
302 | | - | |
303 | | - | |
304 | | - | |
305 | | - | |
306 | | - | |
307 | | - | |
308 | | - | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
309 | 296 | | |
310 | 297 | | |
311 | 298 | | |
| |||
321 | 308 | | |
322 | 309 | | |
323 | 310 | | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
324 | 340 | | |
325 | | - | |
326 | | - | |
| 341 | + | |
| 342 | + | |
327 | 343 | | |
328 | 344 | | |
329 | 345 | | |
| |||
0 commit comments