public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug tree-optimization/107066] New: Field initialized before ctor is mis-optimized away by DSE
@ 2022-09-28 10:55 fxue at os dot amperecomputing.com
2022-09-28 12:56 ` [Bug tree-optimization/107066] " pinskia at gcc dot gnu.org
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: fxue at os dot amperecomputing.com @ 2022-09-28 10:55 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107066
Bug ID: 107066
Summary: Field initialized before ctor is mis-optimized away by
DSE
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: fxue at os dot amperecomputing.com
Target Milestone: ---
By means of user-defined new operator, it is possible that a field is
initialized before constructor.
#include <stddef.h>
class A {
public:
int f1;
int f2;
A() : f2(2) { }
void *operator new(size_t size)
{
void *mem = ::operator new(size);
A *obj = static_cast<A *>(mem);
obj->f1 = 1;
return obj;
}
};
A* foo ()
{
return new A();
}
The original gimple code of foo() is:
struct A * foo ()
{
void * D.2444;
void * _9;
<bb 2> :
_9 = operator new (8);
MEM[(struct A *)_9].f1 = 1;
MEM[(struct A *)_9] ={v} {CLOBBER};
MEM[(struct A *)_9].f2 = 2;
return _9;
}
In gimple, there exists a pseudo clobber statement marking beginning of
constructor code. Although the statement is of no side effect, it is regarded
as normal store by DSE when determining store redundancy. Consequently, DSE
thought that "MEM[(struct A *)_9].f1 = 1" was killed by "MEM[(struct A *)_9]
={v} {CLOBBER}", and removed it. After DSE pass,the foo becomes:
struct A * foo ()
{
void * D.2444;
void * _9;
<bb 2> :
_9 = operator new (8);
MEM[(struct A *)_9] ={v} {CLOBBER};
MEM[(struct A *)_9].f2 = 2;
return _9;
}
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug tree-optimization/107066] Field initialized before ctor is mis-optimized away by DSE
2022-09-28 10:55 [Bug tree-optimization/107066] New: Field initialized before ctor is mis-optimized away by DSE fxue at os dot amperecomputing.com
@ 2022-09-28 12:56 ` pinskia at gcc dot gnu.org
2022-09-28 16:56 ` pinskia at gcc dot gnu.org
2022-09-29 0:45 ` fxue at os dot amperecomputing.com
2 siblings, 0 replies; 4+ messages in thread
From: pinskia at gcc dot gnu.org @ 2022-09-28 12:56 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107066
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Resolution|--- |INVALID
Status|UNCONFIRMED |RESOLVED
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
You need -fno-lifetime-dse as documented
https://gcc.gnu.org/onlinedocs/gcc-12.2.0/gcc/Optimize-Options.html#index-flifetime-dse
C++ is defined this way otherwise.
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug tree-optimization/107066] Field initialized before ctor is mis-optimized away by DSE
2022-09-28 10:55 [Bug tree-optimization/107066] New: Field initialized before ctor is mis-optimized away by DSE fxue at os dot amperecomputing.com
2022-09-28 12:56 ` [Bug tree-optimization/107066] " pinskia at gcc dot gnu.org
@ 2022-09-28 16:56 ` pinskia at gcc dot gnu.org
2022-09-29 0:45 ` fxue at os dot amperecomputing.com
2 siblings, 0 replies; 4+ messages in thread
From: pinskia at gcc dot gnu.org @ 2022-09-28 16:56 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107066
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
See https://gcc.gnu.org/gcc-6/porting_to.html#flifetime-dse also. Which
documented when the change happened back in GCC 6.
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug tree-optimization/107066] Field initialized before ctor is mis-optimized away by DSE
2022-09-28 10:55 [Bug tree-optimization/107066] New: Field initialized before ctor is mis-optimized away by DSE fxue at os dot amperecomputing.com
2022-09-28 12:56 ` [Bug tree-optimization/107066] " pinskia at gcc dot gnu.org
2022-09-28 16:56 ` pinskia at gcc dot gnu.org
@ 2022-09-29 0:45 ` fxue at os dot amperecomputing.com
2 siblings, 0 replies; 4+ messages in thread
From: fxue at os dot amperecomputing.com @ 2022-09-29 0:45 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107066
--- Comment #3 from Feng Xue <fxue at os dot amperecomputing.com> ---
Got it. Thanks for that.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2022-09-29 0:45 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-28 10:55 [Bug tree-optimization/107066] New: Field initialized before ctor is mis-optimized away by DSE fxue at os dot amperecomputing.com
2022-09-28 12:56 ` [Bug tree-optimization/107066] " pinskia at gcc dot gnu.org
2022-09-28 16:56 ` pinskia at gcc dot gnu.org
2022-09-29 0:45 ` fxue at os dot amperecomputing.com
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).