Hi, in firefox .optimized dumps one can see few places where __builtin_unreachable is called (as a result of devirtualization code proving the code path to be undefined). There is usually some argument setup for the parameters of __builtin_unreachable that are dead. This patch makes it somewhat better so now we get: <bb 30>: # prephitmp_222 = PHI <_52(27), pretmp_245(29)> _57 = prephitmp_222 + 2; pool_40(D)->ptr = _57; __builtin_unreachable ();
Why DSE does not eliminate the stores prior noreturn const function? Bootstrapped/regtested x86_64-linux, OK? Honza * tree-ssa-dce.c (mark_stmt_if_obviously_necessary): Remove dead parameters of BUILT_IN_UNREACHABLE Index: tree-ssa-dce.c =================================================================== --- tree-ssa-dce.c (revision 218610) +++ tree-ssa-dce.c (working copy) @@ -250,6 +250,15 @@ mark_stmt_if_obviously_necessary (gimple case BUILT_IN_ALLOCA: case BUILT_IN_ALLOCA_WITH_ALIGN: return; + case BUILT_IN_UNREACHABLE: + /* All parameters of BUILT_IN_UNREACHABLE are dead. Remove them + from the stmt, so we can remove their definitions. */ + if (gimple_call_num_args (stmt)) + { + gimple_set_num_ops (stmt, 3); + update_stmt (stmt); + } + break; default:; }