>>>>> "Oliver" == Oliver Kellogg <oliver.kell...@t-online.de> writes:
Oliver> First tests look very promising. I'm getting noticeable speedups Oliver> of when supplying N interrelated bodies in a single call as opposed Oliver> to N individual calls to gnat1. Precise measurements will follow. This sounds like it has a lot of overlap with the incremental compiler project I was working on. I think you could probably rearrange things to use the compile server infrastructure from the branch without trouble. There are some differences in invocation. I designed the incremental compiler so that no changes to user Makefiles would be needed; I don't know whether that is a consideration with Ada. I think the compile server infrastructure is in decent shape, though I haven't worked on it in a while, so it is a bit hard to remember exactly. The difficult bit is converting a front end to be server-ready; but from your note it sounds like you have already done that. Oliver> It's not totally functioning yet: Oliver> 1) invocation of "as" (assembler) is only done for the first file This is solved on the branch. There, the server starts the assembler from compile_file. Oliver> 2) gcc is passing too many switches to the compiler, for example Oliver> "-o" (output file) should be suppressed when in multi-source mode. With the compile server you don't have to worry about this kind of thing. I changed the options processing code to be re-initializable; each compiler job in the server runs with its own set of options. Oliver> * toplev.c: Oliver> 1) Had to make realloc_for_line_map() global because when repeatedly Oliver> calling linemap_init(), the member "reallocator" is NULL and I Oliver> couldn't find a way of setting it to the proper value again. I suggest a new public function in toplev.c that creates a line table. I did something similar to this on the incremental branch; except there I did not have to make it public, since server re-initialization is done in toplev.c. I am curious how you handle locations on shared bits of the AST. I needed some disturbing hacks to make this work well for C. Oliver> * cgraph.{h,c}, cgraphunit.c: Oliver> Added many missing reinitializations that are necessary when calling Oliver> compile_file() repeatedly. I did this on the branch too. I needed similar changes in dwarf2out that you might be interested in. I also changed things so that debug output starts "late", but offhand I don't recall whether that is only relevant to the server case. Tom