[LLVMdev] Distribution in assembler format
Samuel Crow
samuraileumas at yahoo.com
Fri Jan 29 12:40:27 PST 2010
Hi again,
My point is that your code could not be written in C++ at this time because the only complete compiler for C++ is LLVM-GCC. It will do little endian optimizations on your x86 box and make the resultant bitcode file not work on the ARM processor. It is possible to write an endian-agnostic bitcode file but I don't think all modern LLVM compilers support it. Also the FAQ also indicates other problems with preprocessor macros and
other evil things that make C inherently not suitable for exporting to
platform-independent bitcode.
I'm in the process of trying to make a compiler that generates architecture independent bitcode but C and C++ don't have that functionality and cannot be made cross-architecture compliant. At the moment my partner is writing a customized parser generator for LLVM. Since the bitcode it generates was originally written using LLVM-GCC we'll have to audit the LLVM Assembly code for endian discrepancies by hand before we release the full version 1.0 of LLVM-PEG.
The endian problem is not with LLVM's optimizer, the problem is with the LLVM-GCC toolchain and certain aspects of the C programming language itself.
--Sam
----- Original Message ----
> From: Russell Wallace <russell.wallace at gmail.com>
> To: Samuel Crow <samuraileumas at yahoo.com>
> Cc: llvmdev at cs.uiuc.edu
> Sent: Fri, January 29, 2010 2:22:31 PM
> Subject: Re: [LLVMdev] Distribution in assembler format
>
> I don't think I quite understand this... suppose for example you're
> trying to use an LLVM-based toolchain running on an x86 PC to write
> code for a device that uses an ARM processor in big endian mode, so
> you tell the LLVM code generator "generate code for ARM, big
> endian"... are you saying the optimizer will actually assume the
> target device is little endian because the development system is
> little endian (which would of course break things)?
>
> On Fri, Jan 29, 2010 at 8:09 PM, Samuel Crow wrote:
> > Hello Russell,
> >
> > Major pitfall #1:
> > LLVM-GCC does certain optimizations even if all of the optimizations are
> turned off. These include endian-specific optimizations so to use LLVM as a
> cross-architecture bitcode, you'll need to wait until Clang supports C++ fully
> or just stick to C programs for now.
> >
> > I've been looking forward to the day that LLVM can be used for
> cross-architecture development, myself.
> >
> > Thanks for asking,
> >
> > --Sam
> >
> >
> >
> > ----- Original Message ----
> >> From: Russell Wallace
> >> To: llvmdev at cs.uiuc.edu
> >> Sent: Fri, January 29, 2010 1:17:12 PM
> >> Subject: [LLVMdev] Distribution in assembler format
> >>
> >> One issue I've been looking at with regard to using LLVM as a compiler
> >> backend is distribution of programs, particularly on Linux where
> >> different distributions have different binary package formats and it
> >> is usual to ship programs as source rather than binary; specifically,
> >> I'm looking at the general case where the end user may not have (the
> >> correct version of) LLVM installed, so the compiler can't simply be
> >> run on the end user's machine.
> >>
> >> A solution that occurs to me is to compile as far as assembler on the
> >> programmer's machine, then ship the .s file (or a small number
> >> thereof, one per CPU architecture) and assemble it on the user's
> >> machine (which in most cases will have the GNU assembler installed).
> >> It seems to me that this ought to work; are there any pitfalls I
> >> should be aware of?
> >> _______________________________________________
> >> LLVM Developers mailing list
> >> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> >> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> >
> >
> >
> >
> >
More information about the llvm-dev
mailing list