[comp.compilers] Complexity of intermediate code

fransvo@uunet.uu.net (Frans van Otten) (02/06/89)

We are involved in building a compiler for Modula-2.  This compiler consists
of two parts: the front-end module, producing intermediate code, and a back-
end module, converting the intermediate code to assembly.  The basic idea is
to keep the front-end module machine independent, i.e. the intermediate code
should be easily convertible to any assembly language.  We designed an
intermediate code called the H-code.  This is a nice stack oriented code etc.
Now we are at the stage to produce intermediate code.  We stumbled on a
problem that we didn't think of earlier.  This concerns byte/word/etc boundary
requirements.  For example, the 68000 wants all its data on word-boundary.
Should such requirements be extended to the intermediate code ?

Extending such requirements to the intermediate code makes that and the front-
end machine-dependent.  But the back-end can be simpler, and if you would
execute (interpret) the intermediate code this would be faster.  On the other
hand, we would like the front-end really independent of the machine we are
compiling to.  But then the intermediate code becomes more complex.

We wonder how other people think about this issue:  How complex can one
design intermediate code ?  How far should one go keeping parts of the
compiler independent of the 'destination-language' ?

-- 
                         Frans van Otten
                         Algemene Hogeschool Amsterdam
			 Technische en Maritieme Faculteit
                         fransvo@htsa.uucp
[Intermediate code design is a major can of worms.  I have never seen a
satisfactory intermediate code design that didn't pander at least a little
to the target machine; otherwise the intermediate code ends up being little
more than a parsed version of the source program and isn't very useful for
the sorts of optimization and code generation operations that you want to do.
You could still have a machine-independent front end, but one that had flags
to tell it the alignment restrictions and such of the target.  (Once you've
done all that, then consider how it works on a word-addressed machine such
as a PDP-10.)  If anybody can prove me wrong and show a practical machine
independent intermediate language I'd be pleased to hear about it, but I'm
not holding my breath. -John]
--
Send compilers articles to ima!compilers or, in a pinch, to Levine@YALE.EDU
Plausible paths are { decvax | harvard | yale | bbn}!ima
Please send responses to the originator of the message -- I cannot forward
mail accidentally sent back to compilers.  Meta-mail to ima!compilers-request