Skip to content
Switch branches/tags
This branch is 185 commits ahead of Hoernchen:master.

Latest commit


Git stats


Failed to load latest commit information.


The Epiphany E16 (Parallella board) backend, originally based on the AArch64 backend.

Current version is based on []


  • You will need some compiler. It might be a good idea to install stock llvm/clang from your distro's repo, as you will still need it later.
  • You will need clang to generate IR code. You can use any clang version available (e.g. from your distro's repo), but it should be able to generate 32-bit code.
  • You will need cmake
  • It'd be good idea to have ccmake also


  • Download LLVM 4.0.0 source (version matters heavily) and unpack it somewhere: wget
  • Clone repo into ./lib/Target dir of the LLVM source dir: git clone
  • Choose branch you're interested in. master is completely outdated, current 'stable' version can be found in from-scratch branch which should be downloaded by default. Remember that 'stable' doesn't mean 'latest', it means 'at least you can build and run it'. You can check the latest unstable branch online by the latest commit date.
  • Apply LLVM_Epiphany.patch to your source dir: cd to LLVM src dir and run patch -p1 < PATH_TO_LLVM_Epiphany.patch
  • Create dir llvm-build somewhere outside of the current dir, cd into it and run ccmake /path/to/llvm-source (if you have ccmake)
  • Adjust cmake config, e.g. by using ccmake, you will need to specify/add the Epiphany target in LLVM_TARGETS_TO_BUILD. Or, you can just leave all, but then the build might take quite a long time.
  • Build by running cmake --build . from llvm-build dir


  • Compile C code into LLVM IR using Clang, use 32-bit target. Example: clang ${EINCS} -I ${ESDK}/tools/e-gnu.x86_64/epiphany-elf/include -S -c FILE.c -emit-llvm -m32 -o FILE.ll
  • Run llc -march epiphany -mcpu E16 -O2 -filetype obj FILE.ll -o FILE.o to get the relocatable object file
  • Link it with e-gcc, e-gcc -g -le-lib -T ${ELDF} FILE.o -o FILE.elf
  • Use the ELF file as an Epiphany kernel in your code
  • If build fails, pls add -debug -print-after-all -print-before-all &> debug.log to the llc command and check the debug output file

What works

  • Asm and binary generation for most of the simple integer operations
  • Branch optimization
  • Register allocation optimization (-O2)
  • Strings (don't forget to use -m32 switch as strings frequently rely on size_t)
  • External library calls
  • 64-bit types (partially)
  • Floating point arithmetics (partially, in simple cases)
  • Load/store optimization (partially)

What doesn't work or was not tested

  • 64-bit types (partially)
  • Floating point arithmetics (partially)
  • Load/store optimization (partially)
  • Hardware loops
  • Not all functions are implemented yet


LLVM backend for Epiphany E16 used in Parallella board (made by Adapteva)



No packages published