[M3devel] How to integrate llvm into cm3

Rodney M. Bates rodney_bates at lcwb.coop
Fri May 22 19:20:17 CEST 2015



On 05/22/2015 03:48 AM, dirk muysers wrote:
> Personally I have a strong dislike towards LLVM.
> 1. You first have to compile the whole tool chain.
> 2. It is a monstrous blob of code, mainly on Windows.
> 3. Contrary to a widespread belief, It is definitely NOT platform independent.
> 4. It changes at every release.
> 5. Having built your objects, you still have to run them through a platform assembler-linker.

Having grubbed around in it a bit, I can't say I'm exactly ecstatic about llvm.
However, its developers have at least adopted the intention of providing clear
documentation.  While the documentation has trapped/misled me in some areas, this
is dramatically better than gcc, where, as I understand, there is intentional
avoidance of documenting internal formats and data structures, as a way to make it
difficult to work on for any but programmers who are both very skilled and have
a lot of time to spend on it.  Further, it appears gcc changes about as fast as
llvm.


> If I still had the energy of my younger years I would try to pack the platform
> dependent part of the libraries into a dynamic load library together with a JIT
> translator (e.g. libjit) for the portable application code and have a single byte-code
> producing compiler backend.

I don't think things like this are at all unrealistic, if we get a basic llvm
backend developed.

> *From:* Jay K <mailto:jay.krell at cornell.edu>
> *Sent:* Friday, May 22, 2015 2:57 AM
> *To:* Elmar Stellnberger <mailto:estellnb at elstel.org> ; rodney.m.bates at acm.org <mailto:rodney.m.bates at acm.org> ; m3devel <mailto:m3devel at elegosoft.com>
> *Subject:* Re: [M3devel] How to integrate llvm into cm3
> Imho "all" options should be implemented, for purposes of convenient debugging/development of the backends.
>
> "external" is good for developing backends. You can "snapshot" the state of things
> slightly into the pipeline and then just iterate on later parts.
>
> At the cost of having all the serialization code.
>
> "integrated" is usually preferable for performance, for users.
>
> E.g. NTx86 backend has been sitting in there for decades unused by half the users.
>
> Having extra backends sitting in there unused is ok.
> Ideally, agreed, they'd be .dll/.sos if we can construct it that way, but ok either way imho.
> Ideally also cm3 would dynamically link to libm3/m3core, but it doesn't.
>
> Everything is demand paged so there is cost to distribute over the network
> and copy around, but at runtime, the pages just sit mostly cold on disk.
>
> One difficulty though is the need to have and build the LLVM code.
> For that reason, delayload-dynamically-linked might be preferable.
> It depends on how small/easy-to-build LLVM is.
>
> I guess LLVM provides more choices than before.
> In order of efficiency and inverse order of debuggability:
>    1 We could construct LLVM IR in memory and run LLVM in-proc and write .o.
>    2 We could write out LLVM bytes and run an executable.
>    3 We could write out LLVM text and run an executable.
>
>  > My personal preference would be to only have one default target statically compiled in
> It has never worked that away. Granted, we didn't really have backends before, just writing mainly IR.
> And I don't think LLVM works that way, does it?
> I like one compiler to have all targets and just select with a command line switch.
> I don't like how hard it is to acquire various cross-toolschains.
> Granted, we cheat and are incomplete -- you still need the next piece of the pipeline,
> be it LLVM or m3cc (which has one target), or a C compiler or assembler or linker or "libc.a".
>
> binutils at least has this "all" notion reasonably well working now I believe.
> There are tradeoffs though. If only one backend has a bug, and they are all statically linked together, you have to update them all.
> And the largely wasted bloat.
> Ultimately really, I'd like the C backend to output portable C and then just one C backend, one distribution .tar.gz for all targets.
> There is work to do there..not easy..and no progress lately.
> Things like INTEGER preserving flexibility in the output, and using sizeof(INTEGER) in expressions instead of using 4 or 8 and folding...
>
> - Jay
>
>
>
>
>  > Date: Thu, 21 May 2015 20:13:18 +0200
>  > From: estellnb at elstel.org
>  > To: rodney.m.bates at acm.org; m3devel at elegosoft.com
>  > Subject: Re: [M3devel] How to integrate llvm into cm3
>  >
>  > Am 21.05.15 um 19:24 schrieb Rodney M. Bates:
>  > >
>  > > There are pros and cons. Integrating Peter's cm3-to-llvm conversion into
>  > > the cm3 executable would be faster compiling--one fewer time per
>  > > interface
>  > > or module for the OS to create a process and run an executable. But it
>  > > would also entail linking in this code, along with some of llvm's
>  > > infrastructure,
>  > > into cm3, making its executable bigger, with code that might not be
>  > > executed
>  > > at all, when a different backend is used. We already have the x86
>  > > integrated
>  > > backend and the C backend linked in to cm3, whether used or not.
>  > >
>  > > Anybody have thoughts on this? I suppose it could be set up to be fairly
>  > > easily changed either way too.
>  > >
>  >
>  > Why not put each backend into a shared library and load it dynamically?
>  > Are there still problems with shared libraries for some build targets?
>  > On the other hand having cm3-IR handy and being able to translate
>  > cm3-IR by an executable like m3cc into any desired target has proven
>  > to be very handy for debugging as well as chocking the Modula-3
>  > compiler on a new platform.
>  > My personal preference would be to only have one default target
>  > statically compiled in namely that on for cm3-IR and load all other
>  > targets by a shared libarary dynamically. If that should fail for some
>  > reason one can still use m3cc or one of its counterparts to
>  > accomplish the translation process.
>  >
>  > Elmar
>  >
>  >
>  >
>  >
>  >
>  >

-- 
Rodney Bates
rodney.m.bates at acm.org



More information about the M3devel mailing list