Compiler Reference Guide
armclang Command-line Options
Support level definitions
Summary of armclang command-line options
-fstack-protector, -fstack-protector-all, -fstack-
-g, -gdwarf-2, -gdwarf-3, -gdwarf-4
Compiler-specific Keywords and Operators
Compiler-specific Function, Variable, and Type Att
Other Compiler-specific Features
Standard C Implementation Definition
Standard C++ Implementation Definition
armclang Integrated Assembler
armclang Inline Assembler
Specifies the level of optimization to use when compiling source files.
The default is
-O0. Arm recommends
-O1 rather than
-O0 for the best trade-off between debug view, code size, and
is one of the following:
Minimum optimization for the performance of the compiled binary. Turns off most
optimizations. When debugging is enabled, this option generates code
that directly corresponds to the source code. Therefore, this
optimization might result in a significantly larger image.
Restricted optimization. When debugging is enabled, this option selects a
good compromise between image size, performance, and quality of debug
-O0 for the best trade-off
between debug view, code size, and performance.
- High optimization. When debugging is enabled, the debug view
might be less satisfactory because the mapping of object code to source code
is not always clear. The compiler
might perform optimizations that the debug information cannot describe.
- Very high optimization. When debugging is enabled, this
option typically gives a poor debug view. Arm recommends
debugging at lower optimization levels.
- Enables all the optimizations from level
3 including those optimizations that are
performed with the
armclang option. This level also performs
other aggressive optimizations that might violate strict compliance with
- Maximum optimization. Specifically targets performance
optimization. Enables all the optimizations from level
fast, together with other aggressive
Caution: This option is not
guaranteed to be fully standards-compliant for all code
-Omax automatically enables the
-flto option and the generated object
files are not suitable for creating static libraries. When
-flto is enabled, you cannot build ROPI or
- Code-size, build-time, and the debug view can
each be adversely affected.
cannot guarantee that the best performance optimization is
achieved in all code cases.
- It is not possible to output meaningful
disassembly when the
option is enabled. The reason is because the
-flto option is turned on by
-Omax, and that
option generates files containing bitcode.
- If you are trying to compile at
-Omax and have separate compile and
link steps, then also include
-Omax on your armlink command line.
Note: Link Time Optimization does not honor the
armclang -mexecute-only option. If you use the
armclang -flto or
-Omax options, then the compiler cannot generate execute-only code and produces a warning.
- Performs optimizations to reduce code size, balancing code
size against code speed.
- Performs optimizations to minimize image size.
Related Knowledgebase Articles