This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Remove unused arguments of bulitin_unreachable


On Thu, Dec 11, 2014 at 06:06:55PM +0100, Jan Hubicka wrote:
> 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

Shouldn't this be done when you actually change the call to
__builtin_unreachable ()?  I mean, __builtin_unreachable () has no
arguments, so leaving any arguments there is broken IL, even if you clean it
up during the next DCE.

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

	Jakub


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]