[fpc-pascal] optimization of "inline" open array constants

Dmitry Boyarintsev skalogryz.lists at gmail.com
Wed Jul 23 18:09:12 CEST 2014


Hello,

Here's the code:

procedure dump(const a: array of string);
var
  i : integer;
begin
  for i:=0 to length(a)-1 do
    writeln(a[i]);
end;

const
  fast : array [0..2] of string = ('aa','bb','cc');

begin
  dump(['a','b','c']);
  dump(fast);
end.

The first call to dump(), where the array is passed as "inline"
declaration, consists of building of an open array with string constants:

    movl    $_$PROGRAM$_Ld4,%eax
    movl    %eax,-12(%ebp)
    movl    $_$PROGRAM$_Ld5,%eax
    movl    %eax,-8(%ebp)
    movl    $_$PROGRAM$_Ld6,%eax
    movl    %eax,-4(%ebp)
    leal    -12(%ebp),%eax
    movl    $2,%edx
    call    P$PROGRAM_DUMP$array_of_ANSISTRING

the second call, is however just passing a reference to the constant of the
open array ("fast")

    movl    $TC_P$PROGRAM_FAST,%eax
    movl    $2,%edx
    call    P$PROGRAM_DUMP$array_of_ANSISTRING

Question: would it be reasonable for the compiler to turn an inline
declaration of ['a','b','c'], into a constant implicitly?
That would save some instructions to make a call
  dump(['a','b','c']);
is there an optimization switch for that already?

thanks,
Dmitry
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20140723/25b75bf8/attachment.html>


More information about the fpc-pascal mailing list