public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/115520] New: Loop vectorization depends on variable names
@ 2024-06-17 11:24 max.sagebaum at scicomp dot uni-kl.de
2024-06-17 15:25 ` [Bug tree-optimization/115520] Loop vectorization fails when bool variable instead of unsigned char pinskia at gcc dot gnu.org
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: max.sagebaum at scicomp dot uni-kl.de @ 2024-06-17 11:24 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115520
Bug ID: 115520
Summary: Loop vectorization depends on variable names
Product: gcc
Version: 14.1.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: max.sagebaum at scicomp dot uni-kl.de
Target Milestone: ---
Created attachment 58447
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=58447&action=edit
Reproducer
I asked this question on gcc-help and got the reply that this is probably a
bug.
(https://gcc.gnu.org/pipermail/gcc-help/2024-June/143496.html)
Compiler options: -O3 -std=c++20 -fopt-info-vec-missed
Version: 14.1 (Compiler Explorer)
Reproducer on Compiler Explorer: https://godbolt.org/z/YEPzfx3eT
With the above options this loop vectorizes:
```
struct match_return {
char* pos;
bool matched;
};
bool func_is_vectorized (char*& cur, context& ctx) {
match_return r {cur, true};
constexpr char str1[] =
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
if (!(std::distance(r.pos, ctx.end) < 50)) {return false;}
for(int i = 0; i < 50; i += 1) {
if (str1[i] != r.pos[i]) { r.matched = false; }
}
if (r.matched) {
r.pos += 50;
}
return r.matched;
}
```
If I remove the match_return structure, then the loop no longer vectorizes. The
message is:
not vectorized: relevant phi not supported: matched_21 = PHI <_20(6),
1(5)>
The "new" code is:
```
bool func_is_also_not_vectorized (char*& cur, context& ctx) {
bool matched = true;
constexpr char str1[] =
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
if (!(std::distance(cur, ctx.end) < 50)) {return false;}
for(int i = 0; i < 50; i += 1) {
if (str1[i] != cur[i]) { matched = false; }
}
if (matched) {
cur += 50;
}
return matched;
}
```
The interesting part is. If I only replace `r.matched` with `matched`
and introduce the proper variable. The vectorizer is already failing.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug tree-optimization/115520] Loop vectorization fails when bool variable instead of unsigned char
2024-06-17 11:24 [Bug c++/115520] New: Loop vectorization depends on variable names max.sagebaum at scicomp dot uni-kl.de
@ 2024-06-17 15:25 ` pinskia at gcc dot gnu.org
2024-06-17 15:26 ` pinskia at gcc dot gnu.org
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: pinskia at gcc dot gnu.org @ 2024-06-17 15:25 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115520
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Summary|Loop vectorization fails |Loop vectorization fails
|when not using a struct |when bool variable instead
|sometimes |of unsigned char
CC| |pinskia at gcc dot gnu.org
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
I have seen this one recorded too.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug tree-optimization/115520] Loop vectorization fails when bool variable instead of unsigned char
2024-06-17 11:24 [Bug c++/115520] New: Loop vectorization depends on variable names max.sagebaum at scicomp dot uni-kl.de
2024-06-17 15:25 ` [Bug tree-optimization/115520] Loop vectorization fails when bool variable instead of unsigned char pinskia at gcc dot gnu.org
@ 2024-06-17 15:26 ` pinskia at gcc dot gnu.org
2024-06-17 18:19 ` max.sagebaum at scicomp dot uni-kl.de
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: pinskia at gcc dot gnu.org @ 2024-06-17 15:26 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115520
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Last reconfirmed| |2024-06-17
Severity|normal |enhancement
Status|UNCONFIRMED |NEW
Ever confirmed|0 |1
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Note the reason why the struct case works is due to SRA "changing" bool type to
unsigned char.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug tree-optimization/115520] Loop vectorization fails when bool variable instead of unsigned char
2024-06-17 11:24 [Bug c++/115520] New: Loop vectorization depends on variable names max.sagebaum at scicomp dot uni-kl.de
2024-06-17 15:25 ` [Bug tree-optimization/115520] Loop vectorization fails when bool variable instead of unsigned char pinskia at gcc dot gnu.org
2024-06-17 15:26 ` pinskia at gcc dot gnu.org
@ 2024-06-17 18:19 ` max.sagebaum at scicomp dot uni-kl.de
2024-06-17 18:26 ` pinskia at gcc dot gnu.org
2024-06-18 6:25 ` rguenth at gcc dot gnu.org
4 siblings, 0 replies; 6+ messages in thread
From: max.sagebaum at scicomp dot uni-kl.de @ 2024-06-17 18:19 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115520
--- Comment #3 from Max S. <max.sagebaum at scicomp dot uni-kl.de> ---
Ok, thanks for the hint with SRA. Know I know how to actually program it.
I think the main problem is the warning/error message:
> not vectorized: relevant phi not supported: matched_21 = PHI <_20(6), 1(5)>
Is there some way to improve this?
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug tree-optimization/115520] Loop vectorization fails when bool variable instead of unsigned char
2024-06-17 11:24 [Bug c++/115520] New: Loop vectorization depends on variable names max.sagebaum at scicomp dot uni-kl.de
` (2 preceding siblings ...)
2024-06-17 18:19 ` max.sagebaum at scicomp dot uni-kl.de
@ 2024-06-17 18:26 ` pinskia at gcc dot gnu.org
2024-06-18 6:25 ` rguenth at gcc dot gnu.org
4 siblings, 0 replies; 6+ messages in thread
From: pinskia at gcc dot gnu.org @ 2024-06-17 18:26 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115520
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Max S. from comment #3)
> Ok, thanks for the hint with SRA. Know I know how to actually program it.
>
> I think the main problem is the warning/error message:
> > not vectorized: relevant phi not supported: matched_21 = PHI <_20(6), 1(5)>
>
> Is there some way to improve this?
See PR 101639 which I think this is basically a dup of really.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug tree-optimization/115520] Loop vectorization fails when bool variable instead of unsigned char
2024-06-17 11:24 [Bug c++/115520] New: Loop vectorization depends on variable names max.sagebaum at scicomp dot uni-kl.de
` (3 preceding siblings ...)
2024-06-17 18:26 ` pinskia at gcc dot gnu.org
@ 2024-06-18 6:25 ` rguenth at gcc dot gnu.org
4 siblings, 0 replies; 6+ messages in thread
From: rguenth at gcc dot gnu.org @ 2024-06-18 6:25 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115520
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Resolution|--- |DUPLICATE
Status|NEW |RESOLVED
--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> ---
It's a dup.
*** This bug has been marked as a duplicate of bug 101639 ***
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-06-18 6:25 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-06-17 11:24 [Bug c++/115520] New: Loop vectorization depends on variable names max.sagebaum at scicomp dot uni-kl.de
2024-06-17 15:25 ` [Bug tree-optimization/115520] Loop vectorization fails when bool variable instead of unsigned char pinskia at gcc dot gnu.org
2024-06-17 15:26 ` pinskia at gcc dot gnu.org
2024-06-17 18:19 ` max.sagebaum at scicomp dot uni-kl.de
2024-06-17 18:26 ` pinskia at gcc dot gnu.org
2024-06-18 6:25 ` rguenth 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).