The Most Advanced Optimizing Compiler Technology
For over thirty years, Green Hills Software has consistently beaten every competitor on published compiler benchmarks. This has been made possible by Green Hills Software's continuous commitment to delivering the most advanced compiler optimization technology.
Basic Compiler Optimizations
Green Hills optimizing compilers perform all standard compiler optimizations:
- Collapse constant expressions
- Reduce constant multiplies to shifts and adds
- Short circuit boolean evaluation
- Dead code elimination
- Peephole optimizations
And they also perform all of the more advanced compiler optimizations implemented by competing compilers:
- Register allocation by coloring
- Pipeline optimizations
- Put small structs and unions in registers
- Common subexpression elimination
- Pass arguments in registers
- Global constant & value propagation
- Allocate data by size to minimize wasted space
- Align data to maximize performance
- Alpha & omega motion
Advanced Compiler Optimizations
Green Hills optimizing compilers also perform advanced global optimizations rarely found in competing compilers, including:
- Allocate global variable and values in registers
- Remove tail recursion
- Reduce constant divides to constant multiplies
- Delete unused functions
- Remove common code across functions
- Reorder functions to optimize cache hits
- Optimize the use of conditional instructions
- Use of base registers to minimize offsets
Loop Optimizations
Green Hills optimizing compilers have the most advanced loop optimization technology:
- Subscript strength reduction
- Loop invariant removal
- Register caching over loops
- Loop unroller
- Loop rotation
- Use of hardware loop counter
Vectorizer
Green Hills optimizing compilers include the most advanced supercomputer vectorization techniques:
- Loop interchange
- Strip mining
- Loop blocking
- Automatic utilization of prefetch instructions
- Common loops recognition: vector dot product, vector times matrix, matrix time matrix, Real and complex FFT, Real and complex convolution, vector reduction: sum, product, min, max, minabs, maxabs
DSP Optimizations
Green Hills optimizing compilers implement all of the optimizations required for digital signal processors:
- Zero overhead loops
- Modulo array addressing
- Use of multiply and add instructions
- Saturated signed and unsigned instructions
- Multiple operations per instruction
- Chained operations and streaming memory access
- Simultaneous loads/stores to different memory banks
- Reverse bit indexing for fast fourier transform
- FFT butterfly instruction
- Signed and unsigned fractional datatypes
- Recognize common loops
Function Inlining
Green Hills optimizing compilers implement the most advanced function inlining:
- Manual inlining
- Automatic inlining
- Inline across programming languages
- Automatic inlining across source files
Peephole Optimizations
Green Hills optimizing compilers perform many machine dependent peephole optimizations:
- Expression tree reshaper
- Inline builtin functions
- Renumber registers to delete moves
- Automatically generate multiply and add instructions
- Eliminate redundant loads and stores
- Use bit field extract/insert
- Merge bitfield loads and stores
- Branch to branch optimizations
- Tail merging
- Code hoisting
- Optimize function entry and exit
- Use of autoincrement/decrement addressing modes
Multiple Issue Instruction Pipeline Scheduling
The Green Hills instruction scheduler can model many different pipelined multiple instruction issue multiple data stream architectures:
- Multiple instruction assembly for parallel execution
- Multiple instruction issue (superscalar)
- Pipeline functional units (superpipelined)
- Multiple functional units (parallel execution)
- Very long instruction words (VLIW)
For twenty-eight years, Green Hills Software has been the leader in optimizing compiler technology, making Green Hills optimizing compilers the world's most popular embedded compilers.