Embecosm offers services in three core areas.
- Compiler tool chain development and porting. We develop open source tool chains (principally GCC and LLVM). This may be creation of a new tool chain from scratch or upgrading and development of an existing tool chain. A particular speciality is development of tool chains for new processors pre-silicon using models of the processor. Embecosm develops tool chains for processors of all types, but has acquired a reputation for expertise with smaller embedded processors and digital signal processors (DSP), where minimizing code size and energy consumption can be as important as maximizing code speed.
- Hardware modeling. We focus on processor modeling, although where appropriate we develop models of peripheral IP. This includes development of instruction set simulators using tools such as CGEN and TableGen and creation of cycle accurate models using Verilator. These models are very often used as test targets when porting compiler tool chains.
- Open source tool support. Beyond development of open source tool chains, we are able to provide support for other open source EDA tools. This involves keeping the tool up to date, fixing bugs and extending the tool. We have strong relationships with many tool development teams, and most of our maintenance work is contributed upstream to official distributions. This ensures any new functionality continues to be maintained long term.
Within these core areas we offer several technology specialities.
- Machine learning optimization. GCC offers over 200 optimization passes, each individually configurable and LLVM is not far behind. Selecting the correct optimization options for any particular program is immensely challenging, particularly when different parts of the program may have different optimization needs. Too often users rely on a generic set of performance optimization settings, “-O3” for speed or “-Os/-Oz” for code size, even though it can be possible to double performance by using the correct settings. Embecosm is a pioneer in extending GCC and LLVM to learn which optimizations are the best for an individual program, or even source file, leading to much improved performance.
- Superoptimization. While machine learning can greatly improve optimization, it does not necessarily lead to the very best possible code. Superoptimization is the technique of generating the theoretical best compiled code sequence. The basic technique has been known since the 1980s, but demands huge compute resources, so has only been used for the very smallest programs. New algorithms and much faster computers are starting to make the approach feasible in a commercial context. With support from Innovate UK and in partnership with STFC Daresbury, Embecosm is developing the technologies needed. We can offer superoptimization of key code sequences and can build superoptimized peephole generators.
- Optimization for energy efficiency. Both machine learning optimization and superoptimization are generic optimization techniques, which means they can be used to optimized for criteria other than code size and code speed. Working with Bristol University, Embecosm has demonstrated how the approach can be used with existing compilers such as GCC and LLVM to optimize code for energy efficiency. For deeply embedded systems this can be a critical advantage.
- Compilation for security. Security is a system-wide problem, and increasingly important in a highly connected world. All too often secure hardware is compromised by poorly implemented software. The compiler is ideally placed to help the secure software professional detect problems and write secure code. Embecosm is developing standard extensions to GCC and LLVM, which detect common security flaws in code and provide features to make writing secure code easier.