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:;
            }

Reply via email to