[Bug tree-optimization/85859] [6/7/8/9 Regression] wrong code with -fno-isolate-erroneous-paths-dereference
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue May 22 13:46:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85859
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Priority|P3 |P2
CC| |rguenth at gcc dot gnu.org,
| |vries at gcc dot gnu.org
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #1)
> Confirmed. foo is discovered as 'const', it is nothrow anyways
> (-fno-exceptions)
> and thus overall it is considered not having side-effects (in particular not
> trap). Quoting tree-ssa-ifcombine.c:
>
> /* Verify if the basic block BB does not have side-effects. Return
> true in this case, else false. */
>
> static bool
> bb_no_side_effects_p (basic_block bb)
> {
> gimple_stmt_iterator gsi;
>
> for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
> {
> gimple *stmt = gsi_stmt (gsi);
>
> if (is_gimple_debug (stmt))
> continue;
>
> if (gimple_has_side_effects (stmt)
> || gimple_uses_undefined_value_p (stmt)
> || gimple_could_trap_p (stmt)
> || gimple_vuse (stmt)
> /* const calls don't match any of the above, yet they could
> still have some side-effects - they could contain
> gimple_could_trap_p statements, like floating point
> exceptions or integer division by zero. See PR70586.
> FIXME: perhaps gimple_has_side_effects or gimple_could_trap_p
> should handle this. */
> || is_gimple_call (stmt))
>
> and it is ifcombine pulling the call out of conditional context.
^^^ err, tail merging. -fno-tree-tail-merge fixes the bug.
+find_duplicates: <bb 3> duplicate of <bb 4>
+Removing basic block 4
...
- <bb 3> [local count: 536870912]:
_6 = foo (0);
iftmp.2_10 = (long int) _6;
- goto <bb 5>; [100.00%]
-
- <bb 4> [local count: 536870912]:
- iftmp.2_11 = (long int) &c;
-
More information about the Gcc-bugs
mailing list