Hi,

  I was looking into PR54218 and had some doubts about SSA partition type and 
how parameters are handled by it.

The issue happened because the stack variables were expanded in 2 places one is 
in assign_params_setup_stack and the other when
the expansion of SA partitions are done.

The following is the description of the function assign_params_setup_stack in 
gcc/function.c
/* A subroutine of assign_parms.  Allocate stack space to hold the current
   parameter.  Get it there.  Perform all ABI specified conversions.  */


Also the comment in expand_used_vars in gcc/cfgexpand (where one of the 
expansions take place) says :

/* This is a PARM_DECL or RESULT_DECL.  For those partitions that
             contain the default def (representing the parm or result itself)
             we don't do anything here.  But those which don't contain the
             default def (representing a temporary based on the parm/result)
             we need to allocate space just like for normal VAR_DECLs.  */

My questions are :
1. Why should be expansion of PARM_DECL take place in expand_used_vars when it 
have already been done previously.

2. Would this have to be corrected while producing the SSA information making 
parameters as a default of any uses of the variables in partitions or 
should it by excluding PARM_DECL in expand_used_vars as it is already expanded.

The solution would be the stack getting allocated only once.

A link to some discussion that has gone on on this already with details about 
the bug.

Discussion : http://gcc.gnu.org/ml/gcc/2012-08/msg00050.html
Bug : http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54218

Thanks,
George 
   

Reply via email to