diff options
| author | Christian Krinitsin <mail@krinitsin.com> | 2025-07-17 09:10:43 +0200 |
|---|---|---|
| committer | Christian Krinitsin <mail@krinitsin.com> | 2025-07-17 09:10:43 +0200 |
| commit | f2ec263023649e596c5076df32c2d328bc9393d2 (patch) | |
| tree | 5dd86caab46e552bd2e62bf9c4fb1a7504a44db4 /results/scraper/fex/3657 | |
| parent | 63d2e9d409831aa8582787234cae4741847504b7 (diff) | |
| download | qemu-analysis-main.tar.gz qemu-analysis-main.zip | |
Diffstat (limited to 'results/scraper/fex/3657')
| -rw-r--r-- | results/scraper/fex/3657 | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/results/scraper/fex/3657 b/results/scraper/fex/3657 new file mode 100644 index 000000000..be52587d3 --- /dev/null +++ b/results/scraper/fex/3657 @@ -0,0 +1,27 @@ +Redundant context loads when distinct pshufd's in a block +bytemark has a sequence like: + +``` + "pshufd xmm2,xmm3,0xf5", + "addpd xmm1,xmm12", + "pmuludq xmm3,xmm9", + "pshufd xmm3,xmm3,0xe8", +``` + +because the pshufd indices differ, we can't cache the constant. and we end up generating code + +``` + "ldr x0, [x28, #1760]", + "ldr q3, [x0, #3920]", + "tbl v18.16b, {v19.16b}, v3.16b", + "fadd v17.2d, v17.2d, v28.2d", + "uzp1 v4.4s, v19.4s, v19.4s", + "uzp1 v5.4s, v25.4s, v25.4s", + "umull v19.2d, v4.2s, v5.2s", + "ldr x0, [x28, #1760]", + "ldr q4, [x0, #3712]", + "tbl v19.16b, {v19.16b}, v4.16b", +``` + +Notice that we reload the base vector addresses in the same block, instead of caching it. At minimum we should probably fix that. But I'm also questioning if there's maybe a better way to do pshufd? Not sure + |