Commit f3734e7
committed
[VPlan] Don't convert VPWidenSelectRecipes to vp.select in EVL transform
createEVLRecipe tries to optimise recipes that use the header mask by replacing them with their VP equivalents and setting the EVL, allowing the mask to be removed.
However we currently also convert widened selects to vp.select even though they don't necessarily use the header mask.
Unlike vp.merge a vp.select only makes the "unused" lanes past EVL poison, so it's not needed for correctness.
In the same vein as #127180, this patch removes the transform for VPWidenSelectRecipes and keeps them as plain select instructions to allow for more optimisations.
RISCVVLOptimizer will still be able to optimise away any VL toggles and we end up with better code generation across llvm-test-suite and SPEC CPU 2017:
```diff
--- build.rva23u64-evl-O3.a/MultiSource/Benchmarks/DOE-ProxyApps-C++/CLAMR/CMakeFiles/CLAMR.dir/mesh.s
+++ build.rva23u64-evl-O3.b/MultiSource/Benchmarks/DOE-ProxyApps-C++/CLAMR/CMakeFiles/CLAMR.dir/mesh.s
vmsne.vi v9, v10, 0
- vand.vi v10, v16, 1
- vmsne.vi v16, v10, 0
- vmor.mm v9, v9, v16
- vmandn.mm v0, v18, v9
+ vmandn.mm v0, v16, v9
```
```diff
--- build.rva23u64-evl-O3.a/External/SPEC/CFP2017rate/510.parest_r/CMakeFiles/510.parest_r.dir/Users/luke/Developer/cpu2017/benchspec/CPU/510.parest_r/src/source/
grid/tria.s
+++ build.rva23u64-evl-O3.b/External/SPEC/CFP2017rate/510.parest_r/CMakeFiles/510.parest_r.dir/Users/luke/Developer/cpu2017/benchspec/CPU/510.parest_r/src/source/
grid/tria.s
@@ -19077,8 +19077,6 @@
vmv.v.x v8, a2
vsetvli zero, zero, e32, m1, ta, ma
vid.v v11
- vsetvli zero, zero, e64, m2, ta, ma
- vmv.v.i v18, 0
li t0, 8
ld a4, 24(sp) # 8-byte Folded Reload
.LBB37_392: # %vector.body
@@ -19112,9 +19110,8 @@
vsetvli zero, zero, e32, m1, ta, ma
vsra.vi v16, v16, 6
vwmaccus.vx v14, t0, v16
- vsetvli zero, zero, e64, m2, ta, ma
- vmerge.vim v16, v18, -8, v0
- vadd.vv v14, v14, v16
+ vsetvli zero, zero, e64, m2, ta, mu
+ vadd.vi v14, v14, -8, v0.t
vluxei64.v v14, (zero), v14
addw a5, a5, s0
vand.vx v12, v12, s9
```
```diff
--- build.rva23u64-evl-O3.a/MultiSource/Applications/sqlite3/CMakeFiles/sqlite3.dir/sqlite3.s
+++ build.rva23u64-evl-O3.b/MultiSource/Applications/sqlite3/CMakeFiles/sqlite3.dir/sqlite3.s
# Parent Loop BB494_57 Depth=1
@@ -115460,16 +115443,13 @@
sub a3, a0, a1
sh2add a4, a1, a2
vsetvli a5, a3, e32, m1, ta, ma
- vle32.v v14, (a4)
- vmv2r.v v10, v16
- vmsltu.vx v0, v14, s1
- vsetvli a4, zero, e32, m1, ta, ma
- vwsll.vv v12, v15, v14
- vsetvli zero, a3, e64, m2, ta, mu
- vnot.v v10, v12, v0.t
+ vle32.v v12, (a4)
add a1, a1, a5
- vsetvli zero, zero, e64, m2, tu, ma
- vand.vv v8, v10, v8
+ vmsltu.vx v0, v12, s1
+ vsetvli a4, zero, e32, m1, ta, ma
+ vwsll.vv v10, v13, v12
+ vsetvli zero, a3, e64, m2, tu, mu
+ vandn.vv v8, v8, v10, v0.t
```1 parent 1fe993c commit f3734e7
File tree
8 files changed
+36
-123
lines changed- llvm
- lib/Transforms/Vectorize
- test/Transforms/LoopVectorize/RISCV
8 files changed
+36
-123
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2152 | 2152 | | |
2153 | 2153 | | |
2154 | 2154 | | |
2155 | | - | |
2156 | | - | |
2157 | | - | |
2158 | | - | |
2159 | | - | |
2160 | | - | |
2161 | | - | |
2162 | 2155 | | |
2163 | 2156 | | |
2164 | 2157 | | |
| |||
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
367 | 367 | | |
368 | 368 | | |
369 | 369 | | |
370 | | - | |
| 370 | + | |
371 | 371 | | |
372 | 372 | | |
373 | 373 | | |
| |||
Lines changed: 23 additions & 26 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
138 | 138 | | |
139 | 139 | | |
140 | 140 | | |
141 | | - | |
142 | | - | |
143 | | - | |
144 | | - | |
145 | | - | |
146 | | - | |
147 | | - | |
148 | | - | |
149 | | - | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
150 | 149 | | |
151 | 150 | | |
152 | 151 | | |
153 | | - | |
154 | | - | |
| 152 | + | |
| 153 | + | |
155 | 154 | | |
156 | 155 | | |
157 | 156 | | |
| |||
364 | 363 | | |
365 | 364 | | |
366 | 365 | | |
367 | | - | |
368 | | - | |
369 | | - | |
370 | | - | |
371 | | - | |
372 | | - | |
373 | | - | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
374 | 374 | | |
375 | 375 | | |
376 | | - | |
| 376 | + | |
377 | 377 | | |
378 | 378 | | |
379 | | - | |
| 379 | + | |
380 | 380 | | |
381 | | - | |
382 | | - | |
383 | | - | |
384 | | - | |
| 381 | + | |
385 | 382 | | |
386 | 383 | | |
387 | 384 | | |
388 | | - | |
389 | | - | |
| 385 | + | |
| 386 | + | |
390 | 387 | | |
391 | 388 | | |
392 | 389 | | |
| |||
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
12 | | - | |
| 12 | + | |
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
| |||
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
44 | 44 | | |
45 | 45 | | |
46 | 46 | | |
47 | | - | |
| 47 | + | |
48 | 48 | | |
49 | 49 | | |
50 | 50 | | |
| |||
Lines changed: 4 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
47 | 47 | | |
48 | 48 | | |
49 | 49 | | |
50 | | - | |
| 50 | + | |
51 | 51 | | |
52 | 52 | | |
53 | 53 | | |
| |||
101 | 101 | | |
102 | 102 | | |
103 | 103 | | |
104 | | - | |
| 104 | + | |
105 | 105 | | |
106 | 106 | | |
107 | 107 | | |
| |||
543 | 543 | | |
544 | 544 | | |
545 | 545 | | |
546 | | - | |
| 546 | + | |
547 | 547 | | |
548 | 548 | | |
549 | 549 | | |
| |||
606 | 606 | | |
607 | 607 | | |
608 | 608 | | |
609 | | - | |
| 609 | + | |
610 | 610 | | |
611 | 611 | | |
612 | 612 | | |
| |||
0 commit comments