<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/90000>90000</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
`@min(@ctz(x), y)` can become `@ctz(x | (1 << y))`
</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>
[Godbolt link](https://zig.godbolt.org/z/fzMo9jYPK)
```zig
export fn bounded_tzcnt(x: u16) u8 {
return @min(@ctz(x), y);
}
export fn bounded_tzcnt_better(x: u16) u8 {
return @ctz(x | (1 << y));
}
export fn bounded_lzcnt(x: u16) u8 {
return @min(@clz(x), y);
}
export fn bounded_lzcnt_better(x: u16) u8 {
return @clz(x | (1 << 16 >> y));
}
```
```asm
bounded_tzcnt:
or edi, 65536
mov eax, 6
tzcnt ecx, edi
cmp cl, 6
cmovb eax, ecx
ret
bounded_tzcnt_better:
or edi, 64
tzcnt eax, edi
ret
bounded_lzcnt:
lzcnt cx, di
mov eax, 6
cmp cl, 6
cmovb eax, ecx
ret
bounded_lzcnt_better:
or edi, 1024
lzcnt ax, di
ret
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVEtvoz4Q_zTDxWpkxkDgwCFtmv_hr5X2tNKeKr8gbg2OwHTbfPqVgbRlN31qoygjeR6_R0bD-97UrdYlpJeQbiM--L3ryh_cGsW7u0g49Rhy_zklnPXEmvYO0i1gvvf-0APbAO4Ad0dTr-qpZuW6OrwA7qrjN1fc_vz-P2ABdAt0M_9mdPoeTT296IeD6zypWiLc0CqtbvxRth4wfwC2IUOcARZkyAmsL6cOQgjptB-6lkBCG9MC5pBQ6Y9jExaAV-QxRDZ3wHr7ksQrkDdCe6-7DyPPgATWVwQwjwmwK2Az9GfQ7RcF268Lth8U_EKtPa82zgiwa2DXb-g-_emLTVimeN9ML8stYJtnC8LHdVPUygTRWZqybFnRuPupgj-MFcvsODVk5ZgNYxZ52RyItGcaZePuxfPY0P_k0EtBZzfqPRXJOZInpD8pvgJoz_plZ72T3KdRb5sUTBjjvzDCfsKImOLJihNxviT-lwen_YlUyVTBCh7pMl7HrChyFhfRvtRKUkWVlJwlCWKeIxZaVkxka54KEUemRIoJTTBBZDkrVhVPUyYrVQme5HxdQUJ1w41dWXvfhBsXmb4fdFlQSmlkudC2H68oYqt_kTEJiOGodmXouRBD3UNCrel9_zzFG291Gei_fcUySiRvidDSNZpM9e_dnoxGQ2fL5amujd8PYiVdA7gLNOZwcejcrZYecDeS7wF3o7jfAQAA__8WJ6rg">