<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/72626>72626</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missed loop simplifications may be due to failing to identify loop invariants
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ZY546
</td>
</tr>
</table>
<pre>
Hello, we notice in the code below that `size_` is a loop invariant (if size_==0 then it won't go into the loop).
https://godbolt.org/z/Wxo38e4jG
```cpp
int x,y;
void func(int size_){
for(int i=1;i<size_+1;i++){
if(size_){
size_++;
x++;
}
size_--;
y++;
}
}
```
But Clang -O3 -fwrapv:
```asm
func(int): # @func(int)
lea eax, [rdi + 1]
cmp eax, 2
jl .LBB0_5
mov eax, dword ptr [rip + y]
xor ecx, ecx
mov edx, dword ptr [rip + x]
jmp .LBB0_2
.LBB0_6: # %if.then
inc edx
mov dword ptr [rip + x], edx
inc ecx
cmp ecx, edi
jge .LBB0_4
.LBB0_2: # %for.body
test edi, edi
jne .LBB0_6
mov edi, -1
inc ecx
cmp ecx, edi
jl .LBB0_2
.LBB0_4: # %for.cond.for.cond.cleanup_crit_edge
add eax, ecx
mov dword ptr [rip + y], eax
.LBB0_5: # %for.cond.cleanup
ret
x:
.long 0 # 0x0
y:
.long 0 # 0x0
```
GCC -O3 -fwrapv:
```asm
func(int):
lea eax, [rdi+1]
cmp eax, 1
jle .L1
add DWORD PTR x[rip], edi
add DWORD PTR y[rip], edi
.L1:
ret
y:
.zero 4
x:
.zero 4
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVk2PozgQ_TXOpRRkDOTjwGFIlNnDrmY1Wmm0e2kZbEhFjo2w89W_fmUgH9CJujUIBbDrld97tivm1mKlpUxJkpFkPeEHtzVN-t-_STyb5EZc0j-kUoawFZwkaOOwkIAa3FZCYYSEXCpzArflDsiMWnyXb2RGAS1wUMbUgPrIG-TaAWELLKELidYkWlOfRgM6OBlN2NxBZQC1M216jyZsGRC6JvRb97t1rrYk-kbYhrBNZURulAtMUxG2eSds8-tsooWMd9970Ix2d1HXXQtqB2fCVhcSZV3L0aCA8qALT0-7nh9bknkfAABQmqbvRhKtQxJlSKJVH5p13yxr7yHQX1gStviY9or2dzSC-Ov8oo_M18OGNtF0eg-8PEHeUPeXqzmPBmcHByvFdQXTHxFMy1PD66M3fAjhdt-13I3z2qKBgCcXYRGQmA5RAzFK8vYpuZ8mIEnWCATCMghJMhJe7OvHWNb37lTXHfyZZfQtGWL25viIESfTCKhd046EdTvS5T7S2TRdeNGG-8fzdOJ1uvMH4rt93bPrOXcfs88N7BxkCZaB3zt9WtTFjcVTeq95eVFjlE_3QenN7N4JgSNNlXxwPX7UxbyunnhpmsDXlSHYSes6AThMvtOPWWevzG9R0_CjjCvjruNTDYOVM5ibeKShMFoEt5dCSa4P9VvRoHuTopLDvFyIx0X3chW9Xo0exc-PhJJnhHoew-yNdF3D-baRr12BMroCANpmoudBLbh8OfxZJfm-Wv1mDflCQWiL7m1XjepAOJ7U6xIKn8_K-tePn2v4-5-ffkd422_7Aj8DXJ4D_FBjHbdZeLA1eJeNAYD45fwMA27eTUQaiWW05BOZhnNKWcgWyXKyTctQSi6TghYxp0lJS8kWcVksozyKwrCMJpgyyqIwDOd0yWiyDJK5ECJPRE7lcl7whMRU7jmqQKnj3v-1TtDag0znbMZmE8Vzqez1tNCkPmiaHypLYqrQOnuHOXRKpn-htVJ0RwGL-1phiQV3aLSFPb9ALkEcJDgDJUeFuvKvKKR2WF5GJwg7OTQqHZ0B0G0PeVCYPWEbP3b_mNaN2cnCEbZp-VvCNq2E_wMAAP__uMFV3Q">