public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug tree-optimization/101822] New: Codegen bug for popcount
@ 2021-08-08 22:59 llvm at rifkin dot dev
2021-08-08 23:10 ` [Bug tree-optimization/101822] " llvm at rifkin dot dev
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: llvm at rifkin dot dev @ 2021-08-08 22:59 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101822
Bug ID: 101822
Summary: Codegen bug for popcount
Product: gcc
Version: 12.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: llvm at rifkin dot dev
Target Milestone: ---
GCC cleverly optimizes the following loop into a popcount intrinsic:
uint32_t foo(uint32_t n) {
uint32_t count = 0;
while(n) {
n &= n - 1;
count++;
}
return count;
}
But the generated assembly is highly redundant https://godbolt.org/z/nbGb13G5W:
foo(unsigned int):
xor eax, eax
xor edx, edx
popcnt eax, edi
test edi, edi
cmove eax, edx
ret
if(n == 0) __builtin_unreachable(); does seem to help the compiler's analysis.
It seems here the compiler is not realizing both the loop and popcnt intrinsic
are well-defined for n == 0. This is closely related to another bug:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101821.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug tree-optimization/101822] Codegen bug for popcount
2021-08-08 22:59 [Bug tree-optimization/101822] New: Codegen bug for popcount llvm at rifkin dot dev
@ 2021-08-08 23:10 ` llvm at rifkin dot dev
2021-08-08 23:17 ` pinskia at gcc dot gnu.org
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: llvm at rifkin dot dev @ 2021-08-08 23:10 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101822
--- Comment #1 from Jeremy R. <llvm at rifkin dot dev> ---
Never mind, 101821 was invalid and the initial xor eax eax is by design (still
wondering whether this applies to new CPUs though). There is still a
discrepancy between this code and the __builtin_popcount code though.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug tree-optimization/101822] Codegen bug for popcount
2021-08-08 22:59 [Bug tree-optimization/101822] New: Codegen bug for popcount llvm at rifkin dot dev
2021-08-08 23:10 ` [Bug tree-optimization/101822] " llvm at rifkin dot dev
@ 2021-08-08 23:17 ` pinskia at gcc dot gnu.org
2021-08-09 11:55 ` llvm at rifkin dot dev
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-08-08 23:17 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101822
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |missed-optimization
Last reconfirmed| |2021-08-08
Ever confirmed|0 |1
Status|UNCONFIRMED |ASSIGNED
Severity|normal |enhancement
CC| |pinskia at gcc dot gnu.org
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
MIne, phiopt is not working for this case:
if (n_4(D) != 0)
goto <bb 3>; [89.00%]
else
goto <bb 4>; [11.00%]
<bb 3> [local count: 105119324]:
_9 = __builtin_popcount (n_4(D));
count_13 = (uint32_t) _9;
<bb 4> [local count: 118111600]:
# count_12 = PHI <count_13(3), 0(2)>
The code in phiopt for handling casts is not done correctly.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug tree-optimization/101822] Codegen bug for popcount
2021-08-08 22:59 [Bug tree-optimization/101822] New: Codegen bug for popcount llvm at rifkin dot dev
2021-08-08 23:10 ` [Bug tree-optimization/101822] " llvm at rifkin dot dev
2021-08-08 23:17 ` pinskia at gcc dot gnu.org
@ 2021-08-09 11:55 ` llvm at rifkin dot dev
2022-02-02 5:02 ` pinskia at gcc dot gnu.org
2023-10-24 11:20 ` pinskia at gcc dot gnu.org
4 siblings, 0 replies; 6+ messages in thread
From: llvm at rifkin dot dev @ 2021-08-09 11:55 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101822
--- Comment #3 from Jeremy R. <llvm at rifkin dot dev> ---
Interestingly it's optimized correctly on -Os
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug tree-optimization/101822] Codegen bug for popcount
2021-08-08 22:59 [Bug tree-optimization/101822] New: Codegen bug for popcount llvm at rifkin dot dev
` (2 preceding siblings ...)
2021-08-09 11:55 ` llvm at rifkin dot dev
@ 2022-02-02 5:02 ` pinskia at gcc dot gnu.org
2023-10-24 11:20 ` pinskia at gcc dot gnu.org
4 siblings, 0 replies; 6+ messages in thread
From: pinskia at gcc dot gnu.org @ 2022-02-02 5:02 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101822
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
See Also| |https://gcc.gnu.org/bugzill
| |a/show_bug.cgi?id=71016
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
The code that was added to fix PR 71016 is causing this. Looks like there needs
to be a better way of doing this.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug tree-optimization/101822] Codegen bug for popcount
2021-08-08 22:59 [Bug tree-optimization/101822] New: Codegen bug for popcount llvm at rifkin dot dev
` (3 preceding siblings ...)
2022-02-02 5:02 ` pinskia at gcc dot gnu.org
@ 2023-10-24 11:20 ` pinskia at gcc dot gnu.org
4 siblings, 0 replies; 6+ messages in thread
From: pinskia at gcc dot gnu.org @ 2023-10-24 11:20 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101822
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Resolution|--- |FIXED
Target Milestone|--- |14.0
Status|ASSIGNED |RESOLVED
--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Fixed fully by r14-4889-g0fc13e8c0e39c51e82de .
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2023-10-24 11:20 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-08 22:59 [Bug tree-optimization/101822] New: Codegen bug for popcount llvm at rifkin dot dev
2021-08-08 23:10 ` [Bug tree-optimization/101822] " llvm at rifkin dot dev
2021-08-08 23:17 ` pinskia at gcc dot gnu.org
2021-08-09 11:55 ` llvm at rifkin dot dev
2022-02-02 5:02 ` pinskia at gcc dot gnu.org
2023-10-24 11:20 ` pinskia at gcc dot gnu.org
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).