Ex Bibliotheca

The life and times of Zack Weinberg.

Wednesday, 28 May 2003

# 6 AM

The first talk this morning was Naveen Sharma describing his stack frame optimizer. This delays committing to a precise layout of the stack frame until after register allocation; previously stack slots were assigned as necessary during RTL generation, and never changed again later. A lot of really nice optimizations fall out of this patch. Naveen did it in order to improve code generation on architectures like the SH that have limited base+offset addressing modes. In addition, it gives more accurate aliasing information between stack slots, which lets the generic optimizers do a better job. We will no longer allocate space for stack slots whose use has been optimized away. There is hope of being able to share stack space among variables with disjoint lifetimes, which the kernel people like. All in all, a nifty optimization and well presented.

Again, Mark and I skipped the rest of the morning's talks to tour Ottawa. We went to the National Gallery of Canada which was a short walk from the hotel. They have a modest, but growing, collection of contemporary and historical Inuit art; the primary medium is small sculptures carved into stone or whalebone. Their imagery comes from their strong shamanic tradition, so for instance animal/human hybrid forms are common. One gets a vivid sense of the harsh polar environment and their determination to survive in it.

We also walked through their exhibit of paintings by Canadian artists. The strong point of this collection is the landscapes, which capture the wildness and variety of this part of the continent. The portraiture and modern art selections are not unlike other such things that one may see elsewhere. There is also an entire Catholic chapel interior which was transplanted from a convent that had to be demolished; a good representative of the modified French style that developed in the Quebecois territories.

In the afternoon there was some informal discussion about the best way to make C++ exception handling interoperate with POSIX threads. Everyone agrees that the pthread_cleanup_push mechanism needs to talk to the exception handling runtime, but that requires an extension to the C and C++ languages. The exact semantics of this extension are in debate. The simplest and most general thing unfortunately risks conflict with future revisions to the standard; it might also be seen as confusing in the context of C++. Furthermore, the natural semantics permit a cleanup block to abort thread cancellation, but the pthreads library maintainer (who did not attend this conference) insists that this cannot be permitted. We all disagree, but there may be no hope of convincing him to change his mind. The next talk started in the middle of this discussion so I didn't hear what conclusion, if any, was reached.

That next talk was Per Bothner's "compile server" concept. This is an alternative to precompiled headers, where the bulk of the compiler runs as a persistent semi-detached process, accepting compile requests from the driver program. It remembers the parse trees it constructed from header files on each invocation, and can reuse them for subsequent invocations. He's seeing speedups from 30% to 300% depending on the input. However, at present the design does not handle all the nasty corner cases, and it's not clear that he can augment it to get everything right without losing all the benefits. There are some secondary improvements to the compiler that we can use even if the main idea doesn't pan out; for instance, disentangling the initialization process, which is a prerequisite, would be great all by itself.

Paul Brook of the G95 project presented a report on the present state of that effort, which will give GCC a front end for modern versions of the Fortran language. The current Fortran front end is limited to the 1977 language revision plus a number of extensions; also, its internal design is incomprehensible to anyone other than its original author, who is no longer working on GCC at all. G95 will, when complete, replace it entirely; they hope this can be achieved in time to be incorporated into the 3.5 release along with the tree-ssa optimizers. Paul's talk focused on the "scalarization" process. Fortran 95 includes "array expressions" that specify a mathematical operation to be carried out on all the elements of an array; these have to be converted to loops in the front end. It is desirable to make use of vector arithmetic operations if the hardware provides them, but presumably that's best dealt with later, in a language-independent loop optimizer.

Mark gave a closing keynote in which he proposed a somewhat more formalized development process for GCC, rather like Python with its PEP procedure. That went over well. He also proposed the formation of a non-profit consortium to pool resources for long-term development. That didn't go over as well; Jon Hall pointed out that such things have not historically worked. On the other hand, perhaps we can learn from their mistakes.

Then there was the PGP keysigning party. As I suspected, there were rather a lot of keys to get through; we all stood around in a circle and read off our key signatures (which are lengthy hexadecimal numbers) and then frantically ran around the room looking at each others' passports. Several people who originally had wanted to participate had already left, alas.

And finally, as is the custom with such conferences, we all went to a bar and got drunk. Someone dared Stephanie (one of the organizers) to ask Jeff Law for his autograph, whereupon he turned bright red and there was much snickering.