<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/64729>64729</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Negative effects of subtraction on optimization
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ZY546
</td>
</tr>
</table>
<pre>
Hello, I've noticed that there are often missed optimizations that occur when there is a subtraction or a minus sign in an expression. For example, in the following example, `var_4 + var_1` should ideally be computed only once:
https://godbolt.org/z/dPa75Enaq
```c
extern int var_23;
extern int var_24;
void test(int var_1, int var_3, int var_4) {
var_23 = var_4 + var_1;
var_24 = -var_3 + var_4 + var_1;
}
```
clang16 -O3:
```asm
test(int, int, int): # @test(int, int, int)
lea eax, [rdx + rdi]
mov rcx, qword ptr [rip + var_23@GOTPCREL]
mov dword ptr [rcx], eax
sub edi, esi
add edi, edx
mov rax, qword ptr [rip + var_24@GOTPCREL]
mov dword ptr [rax], edi
ret
```
```
define dso_local void @test(int, int, int)(i32 noundef %var_1, i32 noundef %var_3, i32 noundef %var_4) local_unnamed_addr {
entry:
%add = add nsw i32 %var_4, %var_1
store i32 %add, ptr @var_23, align 4
%add1 = sub i32 %var_1, %var_3
%add2 = add i32 %add1, %var_4
store i32 %add2, ptr @var_24, align 4
ret void
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUld-P4yYQx_8a8jLalQ3YiR_8cJtc2kpV71T1pX1ZTcwkocKQA5xk76-vwLn8ararRhEE5jszH2ACGILeWKKWVS-sWkxwiFvn27_-rGQ9WTn11v5MxjjG5_AL49M9gXVRd6QgbjFC3JInQE_g1pEs9DoEUuB2Uff6O0btbBiVrusGD4ct2ZOTDoAQhlX02CUdOA8IvbZDgMQE2gJaoOPOUwja2WdYOg90xH5nKAHpHArWzhh30HZzbWN1sUf_KoHxF0i_SlYXELZuMAq0IjTmDVYEnet3Q0zI1ryBsx0x8YkVC1ac2m2Mu5Dm-JLx5caplTPx2fkN48vvjC_VV5xWny1-OznVxfjtxjEdI_m0lpgpuGDi5bFFni1ju3daQaQQGZ_9EJXjsseBuB5Ixhtg01MEADilAyYWcL8T4l4ms-wpRz3rHnmw6eJuneOwM2g3ZQ1PX8Rl_35IMPTjzGU1J_Rz1zDxCVjClcV_qc7Y6WMIc094zEdevXh1zNBeaVYtbtW92-fed1n97eC8gl302U_vzovlgsnipy9_fJ3__vnXh1HUjWt3TCI-zxg32jCsRj6lsz3oWzsqdWNXx3eI8QNi-f-I8Uys7og8xYfHezdUtNaWQAX3alyHBnKtfnB0fKYFB-sGq2gNjFeXgv73vHhnPpd5zvk6WIs9qVdUyl8qn2z0b-cShOSXtjmVd-ptOOSwl3DzC8rJJUSXrqdRhUolTd46WZzqg88BTbqi5G2aMudJx36Vo7zKIW71_Mx1yXYtl-8h8Xsm-YDJU8wH894_d6JaoRrR4ITasm54OZNSysm25Wra1E2N3bRpmorKaVVSLURZdgorQd1Et7zgopiVdVmWspDPBfKZUthJiVSiKJgsqEdtno3Z9-mynOgQBmprOeXNxOCKTMgvDueWDpCNjPP0APk2-Tythk1gsjA6xHCJEnU01P5GG4x6T0DrNXUxgFvfPiT25gGaDN60d9e4jtth9dy5nvFlin7qnnbe_U1dZHyZmQLjy8z8TwAAAP__VngTig">