Issue |
133848
|
Summary |
[x86-64 BMI2] Missed BLSR emit when AND is factored out of ternary conditional
|
Labels |
new issue
|
Assignees |
|
Reporter |
Validark
|
[Godbolt link](https://c.godbo.lt/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYTStJg1AB9U8lJL6yAngGVG6AMKpaAVxYM9DgDJ4GmADl3ACNMYhAAdlIAB1QFQlsGZzcPPVj4mwFffyCWUPCoy0xrRKECJmICZPdPLgtMK0yGMoqCbMCQsL0Fcsrq1Lqe1vbc/IkASgtUV2Jkdg4AUgAmAGY/ZDcsAGoFlcce/EEAOgRd7AWNAEELy9c/AgA2SWMCLeDaBWIXzB7jZBZUAA3TAQO6CJ4vLbEfCkLZgx7PV7EeLjHYRABCNy22Lh9whSKYqh2KwAIlD8Dslg8thBoXgtgBaLZcca7TFXHFQzAEGYMGnI%2BlgMC7MkaVG7ABiUMJWxA5LwbJuCwiJJuHEmtE4AFZeJ4OFpSKhOI4tgpprNMJSVjxSARNOrJgBrEBajT6TiSXX2w2cXgKEBuu369WkOCwGCIFCoFjROhhciUNAxuPhZAbQzAF7EVwMR18OgEML%2BiDBb3BPwVACenBt5eYxErAHlgtpikGbUm2IJGwxaNXg6QsMFXMBHGIPjXeFgWBnxAP8MQ23hgf6B5hVMVXIXJ%2BRBA1vbQ8MFiFXnFhvQRiHgWDvgcRgnFMCTMDOjIejPbJlQDMAFAA1PBMAAd0baJGB3fhBBEMR2CkGRBEUFR1AHXQln0DMQFMP59CPf1IEmVBoiaVcGUbFZGRnWZTlJAAvBg7x1Q07yvLA8IgSYihKOwIAcfpajQnw/A6PIuiidIEgEPiJDQ8SmhGToCnqRpSl6KoXBqboGiXAQWkqeSRPCQZVKkozhiE0YuhZKYZjmCZ3Q4Ri9QNI0OC2VQAA4HgZJ4tnTIwaUvHNHVRCBcEIEgrRZXggy0cZJgQTAmCwcJ2NIZ1XXsz1SBvDKnN4Fy/QDW1P1DCMICQJNY3oMgKAgSqUxQX9mGiBQEFQAh81oQtkUoUsBzrKsdwGhtm1bawd07RgCB7PtvSHEcx1oCduCnF9Z3mA0FyXFdvXXTdtxW3dC01AdD2PU8MA26KrxvQ67wfJRn1fYB31AYMvx/f9AJAsC9RtSDhFEcQ4IBxC1G9XQ6gMD8sPMM62IIojEhIsiKIqZBqJJOiGPy5i8FY%2BAOK0rjPB4hgnHUgYBPJ/SxgeGI4gkpJKf4hmMkSWmunpziml0tSUlqJTtOaVTOcMixjJZ7pRfMhS7LNGzYI1bUvQHFy3M87zJC2YA0wC7NcxCsKiGISLxmiz94sS5LKGVjgspyt08p9DhCsDS20pdN0TpWVXnN9Yr3rtpZeBvLgNCd70CsD2LJjveI7EkIA)
```c
#include <stdint.h>
uint64_t blsr_test_cmove(uint64_t rdi, uint64_t rsi) {
uint64_t rax = rdi & (rdi - 1);
return (rsi != 0) ? rax : rdi;
}
```
Emits:
```asm
blsr_test_cmove:
cmp rsi, 1
lea rcx, [rdi - 1]
sbb rax, rax
or rax, rcx
and rax, rdi
ret
```
Should be:
```asm
blsr_test_cmove:
blsr rax, rdi
test rsi, rsi
cmove rax, rdi
ret
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs