<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/55618>55618</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missing transformation X * Y to (0-X) & Y iff X can be only 0 or 1
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:X86,
llvm:codegen,
missed-optimization
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
davidbolvansky
</td>
</tr>
</table>
<pre>
```
unsigned long long src(long long a, unsigned long long b)
{
unsigned long long t = a & 1; // known 0 or 1
return t * b;
}
unsigned long long tgt(long long a, unsigned long long b)
{
unsigned long long t = a & 1; // known 0 or 1
return (0-t) & b;
}
```
```
----------------------------------------
define i64 @src(i64 %0, i64 %1) {
%2:
%3 = and i64 %0, 1
%4 = mul i64 %3, %1
ret i64 %4
}
=>
define i64 @tgt(i64 %0, i64 %1) {
%2:
%3 = and i64 %0, 1
%4 = sub i64 0, %3
%5 = and i64 %4, %1
ret i64 %5
}
Transformation seems to be correct!
```
```
src(long long, unsigned long long): # @src(long long, unsigned long long)
mov rax, rdi
and eax, 1
imul rax, rsi
ret
tgt(long long, unsigned long long): # @tgt(long long, unsigned long long)
mov rax, rdi
and eax, 1
neg rax
and rax, rsi
ret
```
https://godbolt.org/z/fqYcPMfvE
So the backend needs to decide if this is profitable or not.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzFVEuP2yAQ_jX4ghI5YDvJwYek2b2tVKk97B7B4ISuDVvAaXd_fQfsNInlbiO1VZEfwLy-bxiGG_FaoiIdnnSH0k2nndprKXBj9L7_OFshsjqvGSIf8IQeR2TdO0HLbT_BU3oeI7rDDCNS4AWiW5jcw4OftfmmcYqNhe3B3ErfWR1MyAYC0O0pwG6Y_Aq03_v_DRripzNAsY5GU-CvUz-5Obtx9NpC1kpLrIoMoyztDy4uSJ6GBAzzRQR14gsbBNHNCT0saU9WC3xpvLjQyKJG2zUnDRo0outzEk6ybMyb7hC9m0Lcn9o_ROw6HjXSAS690MjHPrJ3OOUjTp8t0642tmVeGY2dlK3D3mAucWWslRUQW9x-7KM7N128oXQpwHp3IELPtXCDw4FqP1pzjH_LvgcLK9S1PCQrDNnLF9dSFerjwtqNrCGd_cbosv4525sd_kW2Wu5_Wk-a_TYNk4Vx8P7FhWKP_WZvBDeNnxsL8O_f4K2_PlUfH-rj3aXRJ4P9QWLOqmcJ0bWUIlajkJUScNtqECuH4Xmxplae8UaGFqaNnyeipGJN1yzxyjeyfFDOqdABryv8Mbbkp-A1NrrHU6N7Avc1iCumQ_Ub3bwO_THpbFOO-Ch_6Pi8Mi0smuZ4-s0A15d4ae4hfCcdTPK8WKySQ0lJsVzmq1W2XBeiSnkmCpJSSWix5EIImjSMy8aVKN8iQoYcQMTHVQHr_k6TGItuKiPkXurzfgvhpJiZF69a9RapBmG-S1RJUkLSPHzJkqTzrM6zquIFl3leM55D3cmWqWYefIcTSmwZufBu70DYKOfdWchcLEgZcYJ_1vmDsaVgRxXO-AjZfn5NIvsyUv8BLw4S1g">