Static versus multiphase compilation
One of the major issues is that GCC started from the position of an
all-in static C compiler to which other language support has been bolted
on. In contrast LLVM is a three-phase compiler with in intermediate
representation of code. This allows different front-ends to be written
to broaden language support and different back-ends to be written to
ease porting to different hardware architectures. The back-end maps the
code into the target instruction set. This enables LLVM to support both
static and runtime compilation of a number of the newer languages
including Java, .NET, Python, Ruby, Scheme, Haskell, D and so on.
addition LLVM has also been used to create support for the OpenCL
programming language and runtime which runs on graphics processing units
(GPUs). Earlier this year Nvidia Corp announced that it had worked with
developers to enable LLVM compilation to support Cuda and other
language programming of its GPUs. This is a hot topic in computing
although not yet in microcontroller deployment.
Generally it would seem that GCC is looking a little jaded compared with LLVM.
understand that Apple, has some philosophical issues with the nature of
the General Public License, but whatever the motivation Apple has been
moving away from the use of GCC for some time.
And with the rise
and rise of Apple there is a now also business and development momentum
behind LLVM and a growing band of open-source users who will help
eradicate bugs and drive the infrastructure forward. The push for LLVM
from Apple around apps development for the iOS operating system (from
2005) has raised the significance of LLVM and Apple excluded GCC from
XCode for Mac OS X (codenamed Lion).
Given the performance
improvements reported by XMOS and the ease of support for multiple
languages it looks like LLVM is the coming thing.
Related links and articles:
XMOS repositions itself as MCU company
Nvidia contributes Cuda compiler to open source
Adapteva ships OpenCL compiler for Epiphany