<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/110839>110839</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[AVX] Offset constants shouldn't be broadcast differently than other constants
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Validark
</td>
</tr>
</table>
<pre>
In my real code, I have some code that amounts to something like this: [Godbolt link](https://zig.godbolt.org/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYgAzKVpMGoAF55gpJfWQE8Ayo3QBhVLQCuLBiABMpJwAyeAyYAHKeAEaYxCAAnKQADqgKhPYMrh5evonJqQJBIeEsUTHx1pi2aUIETMQEGZ7efuWVAtW1BAVhkdFxVjV1DVnNA53B3cW9sQCUVqjuxMjsHGgMCgQA1DUR4hsApACsAEJ6PocAIu4AHPt65/s%2BPgiYtLSopBsA7iS06GBgG0Bz1e7y%2BPz%2BAMBe0eADoAFR7PRHPYaACCKNRmFUSTqGyoDDxqFQEHUGwAAgA1CpEYgQaQbdwANkk02m5KpthIdI%2BTJZ%2BwA7Mi0YDAcRMAQFgTVA8juSmAoIJTqVz6bzZuSFAkjARFcECAAxYioFjKAi06GM7b0VnTRFC9H884YjFYnGbfEbCK1EkgdnK2mq5msv2cgM8oMC%2B0ijZiiXEKUyuUKpWh7kMoMfMma7UQLg%2BPSSA6M/lXWIaVl252OjizWicA68bzcXioTgALQsGwU80WmAeej0vAImhrs2eTCwMQgswA1iADhoYYy9MuuLEuHorgcfFwSwdDJxJLwWBINBpSE2tKRWxxeAoQOfhxwtLM4LAYIgUMaEnRouRKGgLA/vQMSmGa7gMDOfB0AQ0T3hAEQjqQETBLUACenA8MhqHEGhADyETaNSmG8IBbCCHhDC0Bhz68FgETuMAzhiLQ97NqQWAsMYwDiLRHF4GKlQAG6YGxV5YhU7iwSR5CCC8SG0HgETEOhrhYEhZp4Ce7EicQETJJg5yYFxJiKSYI6zFQRjAAoFJ4Jgnx4QkjAyfwggiGI7BSDIgiKCo6h8boXCGNxIDmJYikRPekCzKgCR2AIbEALR4RsABKLyYPKmD6vKmxJQMwDihsqhXIyAD6zJJWZ7jSklLDIAk7iIucpgMLpR7XrpxB4Fg0XTlYmWtN4EBOEM3jBYE4xFCUEg5CkCXpG4jRzUkC1pF0M29MFLSLe0gzLVkO1DXtoybT0MQ7aM41zesHTnZMl2zN2CxLPotb1o2SE3hs4VbMQEEzhsEC4IQJD9no0xDhZY5ZZOlCziAkixDCK4rlcGhlVIJaPAeHCdSeC4Xt9nB3g%2BpBPi%2BpBvp%2BgHAX%2BFAQHTv6geBkHQbQsHEPBiF8ShzC4TJ/PoQRRG2DJZGMAQlHUUh9GMcxrxsVhnHcbxV74IJdgiWJvAScgUnLFheryXxkUqbhanLFemnaVhun6UoRkmTxwSgLRlnWbZ9mOc5TZYW5wiiOI3mB35ahIbofhGOZ4WGEp/WxfFaTJalGX0NluXrBsBW1EVmylRVVU1XVDVNS1bW6YOXXRD1fXwM9J1pI4DAuIdE3%2BK3D2zcFa15EtmQd33i3d9tg02KdHQ3cdE9VGd00Xbd13t0v90L49EjPT2b2Q3jDbE3xP1/WzQMg/gNIQ1DFMw6Q47wwNdb48e87npeLak1Y5OU6OpBzsjqPLkZBjLGkgcbR04NXN%2B14P7f1ZHjHwX1D4wJvrpFIDhJBAA%3D)
```zig
const table: [32]u8 = "hello, world! hello, world! ".*;
export fn foo(x: @Vector(4, u64)) @Vector(4, u64) {
return x + @as(@Vector(4, u64), @splat(@intFromPtr(&table)));
}
```
For Zen 5, we get this assembly:
```asm
foo:
mov eax, offset example.table
vpbroadcastq ymm1, rax
vpaddq ymm0, ymm0, ymm1
ret
example.table:
.ascii "hello, world! hello, world! "
```
This seems a little weird to me, given that if we hardcode a constant like so:
```zig
export fn bar(x: @Vector(4, u64)) @Vector(4, u64) {
return x + @as(@Vector(4, u64), @splat(1234567890));
}
```
We get the following assembly:
```asm
.LCPI1_0:
.quad 1234567890
bar:
vpaddq ymm0, ymm0, qword ptr [rip + .LCPI1_0]{1to4}
ret
```
Could we replace `1234567890` in this last example with `offset example.table`?
---
Same issue occurs on Zen 3:
```asm
foo:
mov eax, offset example.table
vmovq xmm1, rax
vpbroadcastq ymm1, xmm1
vpaddq ymm0, ymm0, ymm1
ret
.LCPI1_0:
.quad 1234567890
bar:
vpbroadcastq ymm1, qword ptr [rip + .LCPI1_0]
vpaddq ymm0, ymm0, ymm1
ret
example.table:
.ascii "hello, world! hello, world! "
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMV1uzqrqy_jWMF2qOgnD1YTyEqyCooKL4copLhCgQ5CLorz-FzjnXmLdz1tpVe9e2KANJJ_115-tOJ2pbnFUIfVCCQgnaW9R3OWk-gqjAadRc3mKS3j-sii7vdIOigk5Iiiig0hadRzdEt6REzz66y6OOjkrSV11Ld-Q50uW4yugCX6Zh3FIcpClBMUkak6KjC1xdKEGjgJx3XT2NUsCggPHA2Xv2knknTfbs5B4UB1ehk-XQUK6p4KkjDId1qLhqqfip4kCD9dQERmtdhe5jUDoXStAbjM71lDv0s9mi80Id3lscM94BqqOsKHBBlGoL4Q7O6wG6N2iEGXwsgto1CTQEIavt097TZXgnnKfkgeOpvaNgqLi1PcA7gvcQzhcI6lE4qhBWCw9q12yRr0O3yQV0I5V99WzFQnq7285HtsYg2ln61vV08yihU78PYLdnFRjkl9QYg3PAakG1hAKncMl-1nrqLrie-9E9t3Mzc9XMg6y28_m8hTVUW6jb4pok0Op5OF93okABo6WAAJR1hsPO2ZBaaaGEN4xoKpnJKA8WSfeXwOPZQFdBDIIagYYvrf35Ooygqi6WfmnsNtureSeaNl4NT5_vzAHCDLJqrYeZF3lxOsDl5cKAUljUXW6l1nPBrX18tgOUXMyEGkx8F3pGtg2gfO43JSSWvb0GDzF-HPuNAS9n6BuJrkI4hpgY5wXEjGi6UswE1dY31NlclvnwbISVGZ_0WF2w-iVLqwUor0LZ3kCSuTJx1adOBp-PGB_0xe7e7xb1PpcuLnFPbhlJO8_JXnZvNlB0KWAUh70VBQUQwOqMH3ucQFGOH8kBk20GHa81h53M7EuI0Jm5QavMmxagrTq4XtYOkMVQy0kY3mdu3zt6PydNlpyMYTOkmj3azrBXrKVSb3TQLfz9OCJIvNUpH4fOcXkHhla2cyO98knvL8zMmXh_89xNaUZS5mqrk8JAj9lyOdS989XTt4qzgyqqoOzm17lu5lC769touSlN2VJiVZ3nmsoo-UOUjUzf9i585NjxZtLy6u1h64aDhh1_bvDmovCgKYbmGAhhvpPwsPEFVVXljcnMM32rr_ImD_X8WPMqknScePrWtjPhHhqjjReb0BIfhuefISSGzdtZNfLe5QzvpyHLsGlJykazMrxQiZjLMTmo5nK0tNIO8cVfo4v6WGSqD6AV69Dxeb-FysK5h-tFqYm3RTnanjtoOG-v-cG6Q0182Pb-KJ03l8LRLHiRsNUndeY6tS8dmnpUeCNjDtsiLPfdkteVle5yZyXU-dFQd3omqBf1UJv82X_sLipbG4wLZq7hbBzEZA8nuKxY7dCRe7xlXE-KXJ59oHa-rY5uAR5LoI7OmnQxS8BG5_KWD2LX0_VH3uoqb3m2NqsIM2r5MRSOx1WhPjC84FFTF3xTJGZeBJYdrSGaq-kGqfyhm1UK96Jgrazx15db_XzJ5vDwfDGgN9_exAwpl7kXe-1cXyvYkDf5Q-W3NgWMNfF83wSafTRd6BXz3S6fmW4yNmMb5NU8icdA4i07zfDevsFNku0qx8hRcz-Ml901zqPKMVBZRUHeV-KO-JdyOw6bzPGLah8fZ-UqEbbHcC8MGK8srlQ4IcqtmJxyc3Xk96ZeU8DYjycj2tpRYR6YZdEfGqVV9qwelPfCD4Idewi0YLlh470Yrg4HX2NPh8Gd2Wxt8RrsrVTnnrYuOA08EiNiBb0rvZTjMJfOuowBi3TucUmqzwIzZZhDnLJcx9xmjMPP9PN6C2LgcWct1rlxzU5wHp47HRHZ0vJYzXAH0eOlYVimMS8jWapq5EQXNhRWO3FVK4_2fF07l6NydsxLlsQ-wy8Pyycgll9LJ_Y4P8-HA6vxg31rasPScluBkAICp1FgRjEaxcCv_yLzeh44e_UkpGo7uoviAn096ThACVov0xSn0RQAOSoKMh2eA2mKlAIsTdO_66MAeKcApDjls0I01qTp6FNFnwihgDw-lfBMgJKONBSQ-WmZXuQnoGD2pyGakr4uS9M03aCubyp6pCmgTDOilgLyHxdVJ5G2LqLuJYWrzmhIue4mSQqIL9uf6qfnO35J-8lnn-0ySEMfUUULTy8gOkPds1qgo7ZFZVzcp8Lgd46P2vLVM_njmwz99VeS27NF0TitS06nFnU0GqOyLtD7C-gPE2513JAoTaK2u07f97Jkp5lNNP4sGKXp9SnATAKfWvZHyQZ1P27gZ-U_A36P2gRj-h_y5P_w63byYYtQ2dIRXeCuKxA9INykU3VWPou4DN9Q9arc8GnyfR416bOai-gnm6Oqe5VvLfnTLnyn_1_8jKPmv4CfLOB4QZTkGfOP6Lj_xkBEn0hRkGEqYf82Fd8ddW2x_8P8ur3XPkrpT5ieo5Onfpb8E7-uA2lSuu6aKbM0uH665Ls-QaMkhe0I_926X1n4O3NV0hfptPUNqosoQTQlMp9QigyNq1c4FlH7PYDoAXf5JPrbuBIZijM-K_ny5cvnz01UIhq3bY9okiR909KkeqYA7j8U6iW5TTE-_jnEf58Lxl9C_F9OBr8S5cUQ-m9y5PcA_1-O_FPw_94U9msCe0s_uHTGzaI39MFKQJIlQQbcW_6BWIBkRkYCl4gpz_IoPc14kYkiFvGyKKA3_AEYwLMMA1iOYwB4P4mpcJKAPGOYNOJOU9ZAZYSL96K4ldPF8u1JwQ-WZWRu9lZEMSra5zUYgAoNL4JOCAXtrfmYJn2J-6yleKbAbdf-tUyHu-J5f4bBgRI0evUi4LcE2tJtPgVZRQGpo2NEf986OsWnE2pQ1RX3KQtXNOly1Pw1861vio8fL8cZ7vI-fk9IOd1iitu35kvdkDNKOgoYT-AtBYyvlt0-wP8GAAD__yL3uVU">