[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [Axiom-developer] RE: algebra Makefiles with explicit depende ncies,

From: Page, Bill
Subject: RE: [Axiom-developer] RE: algebra Makefiles with explicit depende ncies, bootstrap, fixed-points etc.
Date: Tue, 18 Jan 2005 13:46:08 -0500

On Tuesday, January 18, 2005 7:28 AM Tim Daly wrote:
> ... 
> Suppose VECTOR.spad used something from SINT.spad. When the
> VECTOR.lsp BOOTSTRAP file is compiled by depsys it contains
> (+ ... ...) and generates untyped and unoptimized code.
> Later when VECTOR.spad is compiled and SINT.o is available 
> then the spad compiler will use the optimization information
> to generate (QSADD1 ... ...)

So you are saying that the type information derived from the
object files `A_i' files on which some code X depends can affect
the actual code generated library file X because the compiler
attempts optimizations based on this information. The bootstrap
lisp files do not currently have any type information, therefore
any library file that depends on a bootstrap file (quite a large
number) might not be optimized during the initial build. The
bootstrap files themselves are re-compiled from the spad sources
but of course by then it is too late for any other library file
that has already been compiled.

After the first iteration of fixedPoint all of the library files
have been re-compiled using object files that do have type
information, so now everything is optimized as expected.

Your argument is that the missing optimizations are not that
critical because the "mathematics" is still correct. It is just
that the generated code is less than optimal.


But on Monday, January 17, 2005 9:38 PM Stephen Wilson wrote
> On Mon, Jan 17, 2005 at 09:09:12PM -0500, Page, Bill wrote:
> > I wonder if both are necessary or is it only the change in
> > interpsys?
> The bootstrap code does influence the generated code for RECLOS
> and ROIRC (SINT's missing `one?' is showing up here).
> We know the bootstrap code is out of sync, so it would probably
> be a good idea to refresh it. Note that when I built a system
> with fresh bootstrap code, even though the generated lisp code
> was the same save for RECLOS and ROIRC, I did notice differences
> in how domains vectors were being instantiated at runtime (the
> vectors had the same layout, just that the runtime lookup of
> certain functions was proceeding differently).

Steve says that the code for `one?' was missing for SINT.lsp
Is this because it was coded as "onep$lisp" in the original
spad sources? I guess the actual symbols occurring in the
bootstrap lisp code would contain "hard coded" domain vector
`;offsets' as part of their names, corresponding to the old
coding of onep$lisp. But after SINT is recompiled from the
new spad code, the previous hardcoded offsets of any function
appearing after `one?' would become incorrect in any bootstrap
function that depends on SINT but was re-compiled before SINT.

Presumably this could lead to subtle (or not so subtle) run-
time errors. In other words, we have to be very careful of the
order in which we re-compile the bootstrap from the spad code.
If there are cyclic dependencies among the bootstrap files
(I think there are) then we are in trouble.

Of have I still got this wrong? My understanding of how
the compiler assigns and uses domain table offsets remains
very unclear to me.

Bill Page.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]