Re: [PATCH 08/11] extract add_return() from linearize_return()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 05/09/18 23:38, Luc Van Oostenryck wrote:
> This will allow to reuse this code to generate valid IR
> in the case of a missing return statement.
> 
> Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@xxxxxxxxx>
> ---
>  linearize.c | 27 ++++++++++++++++-----------
>  1 file changed, 16 insertions(+), 11 deletions(-)
> 
> diff --git a/linearize.c b/linearize.c
> index d6647e443..53d66ffa0 100644
> --- a/linearize.c
> +++ b/linearize.c
> @@ -1980,6 +1980,21 @@ static pseudo_t linearize_compound_statement(struct entrypoint *ep, struct state
>  	return pseudo;
>  }
>  
> +static void add_return(struct entrypoint *ep, struct basic_block *bb, struct symbol *ctype, pseudo_t src)
> +{
> +	struct instruction *phi_node = first_instruction(bb->insns);
> +	pseudo_t phi;
> +	if (!phi_node) {
> +		phi_node = alloc_typed_instruction(OP_PHI, ctype);
> +		phi_node->target = alloc_pseudo(phi_node);
> +		phi_node->bb = bb;
> +		add_instruction(&bb->insns, phi_node);
> +	}
> +	phi = alloc_phi(ep->active, src, ctype);
> +	phi->ident = &return_ident;
> +	use_pseudo(phi_node, phi, add_pseudo(&phi_node->phi_list, phi));
> +}
> +
>  static pseudo_t linearize_fn_statement(struct entrypoint *ep, struct statement *stmt)
>  {
>  	struct instruction *phi_node;
> @@ -2157,17 +2172,7 @@ static pseudo_t linearize_return(struct entrypoint *ep, struct statement *stmt)
>  	pseudo_t src = linearize_expression(ep, expr);
>  	active = ep->active;
>  	if (active && src != VOID) {
> -		struct instruction *phi_node = first_instruction(bb_return->insns);
> -		pseudo_t phi;
> -		if (!phi_node) {
> -			phi_node = alloc_typed_instruction(OP_PHI, expr->ctype);
> -			phi_node->target = alloc_pseudo(phi_node);
> -			phi_node->bb = bb_return;
> -			add_instruction(&bb_return->insns, phi_node);
> -		}
> -		phi = alloc_phi(active, src, expr->ctype);
> -		phi->ident = &return_ident;
> -		use_pseudo(phi_node, phi, add_pseudo(&phi_node->phi_list, phi));
> +		add_return(ep, bb_return, expr->ctype, src);

It does not matter here, but as a matter of interest, why pass
the entrypoint here, rather than the active bb?

Future plans?

ATB,
Ramsay Jones

>  	}
>  	add_goto(ep, bb_return);
>  	return VOID;
> 



[Index of Archives]     [Newbies FAQ]     [LKML]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Trinity Fuzzer Tool]

  Powered by Linux