[fpc-pascal] why fpc do not use a known return function value

Jonas Maebe jonas.maebe at elis.ugent.be
Tue Feb 3 16:06:40 CET 2015

On 03 Feb 2015, at 15:58, leledumbo wrote:

>> int c ;
>> int test( int p){
>>  int i;
>>  i = p;
>>  return (i+2+c+2+c+2+c);
>> }
>> int main(){
>>  c = test(128);
>> }
> Hmm....yes, from C perspective, there's nothing can modify c before  
> it's
> used the first time (unless you inject the startup code). Therefore,  
> the
> compiler is safe to assume that c is its initial global value (0)  
> and is
> able to use constant propagation, with c assumed as constant to  
> reduce the
> function call into a simple value.

The assembler code generated for the C program does take into account  
the initial value of C:

        movl    _c, %eax
        leal    134(%eax,%eax,2), %eax
        movl    %eax, _c

It could also be modified in a C program before "main" gets executed  
by e.g. the initialisation code of a dynamic library.

In the end, it's not so much about constant propagation as it is about  
reordering expressions to be able to fold them better.


More information about the fpc-pascal mailing list