[Bug c/105276] New: [12 Regression] executed once loop not optimized anymore
denis.campredon at gmail dot com
gcc-bugzilla@gcc.gnu.org
Thu Apr 14 13:47:31 GMT 2022
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105276
Bug ID: 105276
Summary: [12 Regression] executed once loop not optimized
anymore
Product: gcc
Version: 12.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: denis.campredon at gmail dot com
Target Milestone: ---
bool foo(unsigned i) {
bool result = true;
while (i) {
i = i % 3;
i = i - (i==2 ? 2 : i ? 1 : 0);
result = !result;
}
return result;
}
--------------
compiled with g++ 11.2 and -O2 it produces:
-----------------
foo(unsigned int):
test edi, edi
sete al
ret
----------------
With current trunk and -02 lots of instructions are generated, the loop is
still present, about 30 instructions are produced.
Also, when compiled with -Os trunk produces loopless assembly:
------------------
foo(unsigned int):
mov dl, 1
test edi, edi
je .L1
xor edx, edx
.L1:
mov eax, edx
ret
-------------------
Whereas using -Os and g++ 11.2 it uses one less register:
------------------
foo(unsigned int):
mov al, 1
test edi, edi
je .L4
xor eax, eax
.L4:
ret
More information about the Gcc-bugs
mailing list