[Bug middle-end/106075] Wrong DSE with -fnon-call-exceptions
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Jun 24 10:39:48 GMT 2022
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106075
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever confirmed|0 |1
Last reconfirmed| |2022-06-24
CC| |rguenth at gcc dot gnu.org
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
Related:
int a = 1;
int c,d;
void
test()
{
a=12345;
c/d;
a=1;
}
where the possibly throwing division (by zero) does not have virtual operands.
Likewise
void __attribute__((noreturn,const)) foo ()
{
longjmp (&buf);
}
int a = 1;
int c,d;
void
test()
{
a=12345;
foo ();
a=1;
}
but then we can simply declare 'const' invalid on 'foo'.
For the non-VOP case we'd need to assign a "context" counter to stmts
(in UID for example) and increment it when seeing a possible (implicit)
control flow terminating statement. When the DSE walk discovers a new
context it has to consider that a use. The expense is an extra whole-IL
walk over the function [with -fnon-call-exceptions]. Note there's also
the possibility to create a const externally throwing function but its
semantics are disputed (see another PR for that).
More information about the Gcc-bugs
mailing list