public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug c++/111517] New: Optimization -O1 removes necessary loop for initialization @ 2023-09-21 11:27 aegges at web dot de 2023-09-21 16:13 ` [Bug c++/111517] [12/13 Regression] " pinskia at gcc dot gnu.org ` (6 more replies) 0 siblings, 7 replies; 8+ messages in thread From: aegges at web dot de @ 2023-09-21 11:27 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111517 Bug ID: 111517 Summary: Optimization -O1 removes necessary loop for initialization Product: gcc Version: 12.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: aegges at web dot de Target Milestone: --- We have found a regression in gcc 12 (and later) in comparison to gcc 11 (and clang) which occurs if optimization (at least -O1) is enabled. In the following C++ code the member variables a1 and e1 are initialized in a loop in a init() method which is called in the constructor. #include <iostream> #include <array> class TestClass { public: TestClass() { for(int i=0; i<20; i++) { a1[i] = i; } init(); } void init(); unsigned int a1[20]; unsigned char e1[20][20]; }; void TestClass::init() { for (int b1 = 0; b1 < 20; b1++) { for (int b2 = 0; b2 < 20; b2++) { e1[b1][b2] = a1[b2]; } } } TestClass tmp; int main() { for(int i=0; i < 20 ; i++) std::cout << std::to_string(tmp.e1[i][i]) << " "; } expected output: (gcc <= 11 or gcc >=12 w/o optimization) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 actual output: 8gcc >=12 with optimization) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 I have used godbolt to verify the different behavior (see https://godbolt.org/z/MnoPE8Yfr ) ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug c++/111517] [12/13 Regression] Optimization -O1 removes necessary loop for initialization 2023-09-21 11:27 [Bug c++/111517] New: Optimization -O1 removes necessary loop for initialization aegges at web dot de @ 2023-09-21 16:13 ` pinskia at gcc dot gnu.org 2023-09-21 16:19 ` [Bug tree-optimization/111517] " pinskia at gcc dot gnu.org ` (5 subsequent siblings) 6 siblings, 0 replies; 8+ messages in thread From: pinskia at gcc dot gnu.org @ 2023-09-21 16:13 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111517 Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|Optimization -O1 removes |[12/13 Regression] |necessary loop for |Optimization -O1 removes |initialization |necessary loop for | |initialization Known to work|14.0 | Target Milestone|--- |11.5 --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- -fno-ivopts allows the code to pass. The difference between GCC 13 and the trunk is: trunk: _30 = &MEM[(unsigned int *)0B + -320B + ivtmp.27_37 + ivtmp.16_4 * 4]; _1 = *_30; vs: GCC 13: _1 = MEM[(unsigned int *)0B + -320B + ivtmp.27_36 + ivtmp.16_4 * 4]; And the call TestClass::init (&tmp); is still there in _GLOBAL__sub_I__ZN9TestClass4initEv ... ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug tree-optimization/111517] [12/13 Regression] Optimization -O1 removes necessary loop for initialization 2023-09-21 11:27 [Bug c++/111517] New: Optimization -O1 removes necessary loop for initialization aegges at web dot de 2023-09-21 16:13 ` [Bug c++/111517] [12/13 Regression] " pinskia at gcc dot gnu.org @ 2023-09-21 16:19 ` pinskia at gcc dot gnu.org 2023-09-21 18:34 ` theodort at inf dot ethz.ch ` (4 subsequent siblings) 6 siblings, 0 replies; 8+ messages in thread From: pinskia at gcc dot gnu.org @ 2023-09-21 16:19 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111517 Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Last reconfirmed| |2023-09-21 Status|UNCONFIRMED |NEW Ever confirmed|0 |1 --- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- On the subject of: _1 = MEM[(unsigned int *)0B + -320B + ivtmp.27_36 + ivtmp.16_4 * 4]; during the local-pure-const2 pass: Indirect ref write is not const/pure vs: NULL memory access; terminating BB But that MEM is not exactly an NULL Pointer access ... _39 = (sizetype) this_9(D); ivtmp.27_38 = _39 * 18446744073709551613; ivtmp.28_42 = _39 + 100; This is also definitely IV-OPTs messing up ... Though before GCC 12 it had that too but the local-pure-const2 pass it thought something different about it: scanning: _1 = MEM[(unsigned int *)0B + -320B + ivtmp.27_34 + ivtmp.16_3 * 4]; Indirect ref to local or readonly memory is OK ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug tree-optimization/111517] [12/13 Regression] Optimization -O1 removes necessary loop for initialization 2023-09-21 11:27 [Bug c++/111517] New: Optimization -O1 removes necessary loop for initialization aegges at web dot de 2023-09-21 16:13 ` [Bug c++/111517] [12/13 Regression] " pinskia at gcc dot gnu.org 2023-09-21 16:19 ` [Bug tree-optimization/111517] " pinskia at gcc dot gnu.org @ 2023-09-21 18:34 ` theodort at inf dot ethz.ch 2023-09-21 18:46 ` [Bug tree-optimization/111517] [12/13 Regression] Optimization -O1 removes necessary loop for initialization since r12-5915-ge93809f62363ba pinskia at gcc dot gnu.org ` (3 subsequent siblings) 6 siblings, 0 replies; 8+ messages in thread From: theodort at inf dot ethz.ch @ 2023-09-21 18:34 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111517 Theodoros Theodoridis <theodort at inf dot ethz.ch> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |theodort at inf dot ethz.ch --- Comment #3 from Theodoros Theodoridis <theodort at inf dot ethz.ch> --- It bisects to r12-5915-ge93809f6236 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug tree-optimization/111517] [12/13 Regression] Optimization -O1 removes necessary loop for initialization since r12-5915-ge93809f62363ba 2023-09-21 11:27 [Bug c++/111517] New: Optimization -O1 removes necessary loop for initialization aegges at web dot de ` (2 preceding siblings ...) 2023-09-21 18:34 ` theodort at inf dot ethz.ch @ 2023-09-21 18:46 ` pinskia at gcc dot gnu.org 2023-09-21 18:50 ` pinskia at gcc dot gnu.org ` (2 subsequent siblings) 6 siblings, 0 replies; 8+ messages in thread From: pinskia at gcc dot gnu.org @ 2023-09-21 18:46 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111517 Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Target Milestone|11.5 |12.4 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug tree-optimization/111517] [12/13 Regression] Optimization -O1 removes necessary loop for initialization since r12-5915-ge93809f62363ba 2023-09-21 11:27 [Bug c++/111517] New: Optimization -O1 removes necessary loop for initialization aegges at web dot de ` (3 preceding siblings ...) 2023-09-21 18:46 ` [Bug tree-optimization/111517] [12/13 Regression] Optimization -O1 removes necessary loop for initialization since r12-5915-ge93809f62363ba pinskia at gcc dot gnu.org @ 2023-09-21 18:50 ` pinskia at gcc dot gnu.org 2023-09-22 5:46 ` rguenth at gcc dot gnu.org 2023-09-22 8:04 ` aegges at web dot de 6 siblings, 0 replies; 8+ messages in thread From: pinskia at gcc dot gnu.org @ 2023-09-21 18:50 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111517 --- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> --- r0-126272-g8fdc414d439bc7148e079d27220e59 adds check_loadstore but IVOPTS can sometimes produce these TARGET_MEM_REF with 0 as first operand ... ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug tree-optimization/111517] [12/13 Regression] Optimization -O1 removes necessary loop for initialization since r12-5915-ge93809f62363ba 2023-09-21 11:27 [Bug c++/111517] New: Optimization -O1 removes necessary loop for initialization aegges at web dot de ` (4 preceding siblings ...) 2023-09-21 18:50 ` pinskia at gcc dot gnu.org @ 2023-09-22 5:46 ` rguenth at gcc dot gnu.org 2023-09-22 8:04 ` aegges at web dot de 6 siblings, 0 replies; 8+ messages in thread From: rguenth at gcc dot gnu.org @ 2023-09-22 5:46 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111517 Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution|--- |DUPLICATE --- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> --- duplicate *** This bug has been marked as a duplicate of bug 110702 *** ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug tree-optimization/111517] [12/13 Regression] Optimization -O1 removes necessary loop for initialization since r12-5915-ge93809f62363ba 2023-09-21 11:27 [Bug c++/111517] New: Optimization -O1 removes necessary loop for initialization aegges at web dot de ` (5 preceding siblings ...) 2023-09-22 5:46 ` rguenth at gcc dot gnu.org @ 2023-09-22 8:04 ` aegges at web dot de 6 siblings, 0 replies; 8+ messages in thread From: aegges at web dot de @ 2023-09-22 8:04 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111517 --- Comment #6 from Axel Mueller <aegges at web dot de> --- I can confirm that the code now works with trunk version on godbolt. Thanks for the quick analysis (and of course the fix). Looking forward to the 12.4 fix release. ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2023-09-22 8:04 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2023-09-21 11:27 [Bug c++/111517] New: Optimization -O1 removes necessary loop for initialization aegges at web dot de 2023-09-21 16:13 ` [Bug c++/111517] [12/13 Regression] " pinskia at gcc dot gnu.org 2023-09-21 16:19 ` [Bug tree-optimization/111517] " pinskia at gcc dot gnu.org 2023-09-21 18:34 ` theodort at inf dot ethz.ch 2023-09-21 18:46 ` [Bug tree-optimization/111517] [12/13 Regression] Optimization -O1 removes necessary loop for initialization since r12-5915-ge93809f62363ba pinskia at gcc dot gnu.org 2023-09-21 18:50 ` pinskia at gcc dot gnu.org 2023-09-22 5:46 ` rguenth at gcc dot gnu.org 2023-09-22 8:04 ` aegges at web dot de
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).