[fpc-devel] (patch) Rework of string literals codegeneration

Sergei Gorelkin sergei_gorelkin at mail.ru
Sun Aug 24 23:44:31 CEST 2008


The attached patch contains three improvements of code generation for 
string literals:

1) Replaces linear search through assembler list by the hash lookup. 
This considerably improves performance on large projects (one example is 
winunits-jedi package, in which tcgstringconstnode.pass_generate_code 
was top #1 in calltree, consuming about 12% IRefs).

2) Enables reusing memory locations for widestring constants (and in 
general, the same approach may be used for any other type of constants).

3) Saves a sizeof(pointer) bytes per constant, by removing a location 
which points to the string. This location is necessary for the typed 
consts which may be modified, but redundant for string literals because 
the language does not allow to modify string literals in any way.

The patch may break Darwin targets - I am not sure how the assembler 
reference directives generated for Darwin should be handled, and 
unfortunately I'm unable to test it. Hope it wouldn't be much trouble to 
fix if necessary.

TFPHashList wasn't suitable for the task because of its ShortString 
limitation, therefore I introduced another container named THashSet. It 
has no indexed access, but uses arbitrary data (which it may own or 
reference, depending on the flag passed to constructor) for keys.

The patch also contains a speed improvement fix to TCmdStrList.Find.

Best regards,
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ncon_strings.zip
Type: application/x-zip-compressed
Size: 5160 bytes
Desc: not available
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20080825/a3477cd3/attachment.bin>

More information about the fpc-devel mailing list