Note: The GNU Compiler Collection provides a wide array of compiler options, described in detail and readily available at https://gcc.gnu.org/onlinedocs/gcc/Option-Index.html#Option-Index and https://gcc.gnu.org/onlinedocs/gfortran/. This SPEC CPU flags file contains excerpts from and brief summaries of portions of that documentation.
SPEC's modifications are:
Copyright (C) 2006-2020 Standard Performance Evaluation Corporation
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the Invariant Sections being "Funding Free Software", the Front-Cover Texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is included in your SPEC CPU kit at $SPEC/Docs/licenses/FDL.v1.3.txt and on the web at https://www.spec.org/cpu2017/Docs/licenses/FDL.v1.3.txt. A copy of "Funding Free Software" is on your SPEC CPU kit at $SPEC/Docs/licenses/FundingFreeSW.txt and on the web at https://www.spec.org/cpu2017/Docs/licenses/FundingFreeSW.txt.
(a) The FSF's Front-Cover Text is:
A GNU Manual
(b) The FSF's Back-Cover Text is:
You have freedom to copy and modify this GNU Manual, like GNU software. Copies published by the Free Software Foundation raise funds for GNU development.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Invokes the GNU C compiler.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Invokes the GNU Fortran compiler.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Invokes the GNU C compiler.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Invokes the GNU Fortran compiler.
![[suite]](https://www.spec.org/auto/cpu2017/images/suite.png)
This option is used to indicate that the host system's integers are 32-bits wide, and longs and pointers are 64-bits wide. Not all benchmarks recognize this macro, but the preferred practice for data model selection applies the flags to all benchmarks; this flag description is a placeholder for those benchmarks that do not recognize this macro.
![[suite]](https://www.spec.org/auto/cpu2017/images/suite.png)
This option is used to indicate that the host system's integers are 32-bits wide, and longs and pointers are 64-bits wide. Not all benchmarks recognize this macro, but the preferred practice for data model selection applies the flags to all benchmarks; this flag description is a placeholder for those benchmarks that do not recognize this macro.
![[suite]](https://www.spec.org/auto/cpu2017/images/suite.png)
This option is used to indicate that the host system's integers are 32-bits wide, and longs and pointers are 64-bits wide. Not all benchmarks recognize this macro, but the preferred practice for data model selection applies the flags to all benchmarks; this flag description is a placeholder for those benchmarks that do not recognize this macro.
![[benchmark]](https://www.spec.org/auto/cpu2017/images/benchmark.png)
This macro indicates that Fortran functions called from C should have their names lower-cased.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Use big-endian representation for unformatted files. This is important when reading 521.wrf_r, 621.wrf_s, and 628.pop2_s data files that were originally generated in big-endian format.
![[suite]](https://www.spec.org/auto/cpu2017/images/suite.png)
This option is used to indicate that the host system's integers are 32-bits wide, and longs and pointers are 64-bits wide. Not all benchmarks recognize this macro, but the preferred practice for data model selection applies the flags to all benchmarks; this flag description is a placeholder for those benchmarks that do not recognize this macro.
![[benchmark]](https://www.spec.org/auto/cpu2017/images/benchmark.png)
Fortran to C symbol naming. C symbol names are lower case with one underscore. _symbol
![[suite]](https://www.spec.org/auto/cpu2017/images/suite.png)
This option is used to indicate that the host system's integers are 32-bits wide, and longs and pointers are 64-bits wide. Not all benchmarks recognize this macro, but the preferred practice for data model selection applies the flags to all benchmarks; this flag description is a placeholder for those benchmarks that do not recognize this macro.
![[benchmark]](https://www.spec.org/auto/cpu2017/images/benchmark.png)
For netcdf, if defined uses Fortran symbol names ABC as abc_
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Use big-endian representation for unformatted files. This is important when reading 521.wrf_r, 621.wrf_s, and 628.pop2_s data files that were originally generated in big-endian format.
![[suite]](https://www.spec.org/auto/cpu2017/images/suite.png)
This option is used to indicate that the host system's integers are 32-bits wide, and longs and pointers are 64-bits wide. Not all benchmarks recognize this macro, but the preferred practice for data model selection applies the flags to all benchmarks; this flag description is a placeholder for those benchmarks that do not recognize this macro.
![[suite]](https://www.spec.org/auto/cpu2017/images/suite.png)
This option is used to indicate that the host system's integers are 32-bits wide, and longs and pointers are 64-bits wide. Not all benchmarks recognize this macro, but the preferred practice for data model selection applies the flags to all benchmarks; this flag description is a placeholder for those benchmarks that do not recognize this macro.
![[suite]](https://www.spec.org/auto/cpu2017/images/suite.png)
This option is used to indicate that the host system's integers are 32-bits wide, and longs and pointers are 64-bits wide. Not all benchmarks recognize this macro, but the preferred practice for data model selection applies the flags to all benchmarks; this flag description is a placeholder for those benchmarks that do not recognize this macro.
![[suite]](https://www.spec.org/auto/cpu2017/images/suite.png)
This option is used to indicate that the host system's integers are 32-bits wide, and longs and pointers are 64-bits wide. Not all benchmarks recognize this macro, but the preferred practice for data model selection applies the flags to all benchmarks; this flag description is a placeholder for those benchmarks that do not recognize this macro.
![[suite]](https://www.spec.org/auto/cpu2017/images/suite.png)
This option is used to indicate that the host system's integers are 32-bits wide, and longs and pointers are 64-bits wide. Not all benchmarks recognize this macro, but the preferred practice for data model selection applies the flags to all benchmarks; this flag description is a placeholder for those benchmarks that do not recognize this macro.
![[suite]](https://www.spec.org/auto/cpu2017/images/suite.png)
This option is used to indicate that the host system's integers are 32-bits wide, and longs and pointers are 64-bits wide. Not all benchmarks recognize this macro, but the preferred practice for data model selection applies the flags to all benchmarks; this flag description is a placeholder for those benchmarks that do not recognize this macro.
![[suite]](https://www.spec.org/auto/cpu2017/images/suite.png)
This option is used to indicate that the host system's integers are 32-bits wide, and longs and pointers are 64-bits wide. Not all benchmarks recognize this macro, but the preferred practice for data model selection applies the flags to all benchmarks; this flag description is a placeholder for those benchmarks that do not recognize this macro.
![[suite]](https://www.spec.org/auto/cpu2017/images/suite.png)
This option is used to indicate that the host system's integers are 32-bits wide, and longs and pointers are 64-bits wide. Not all benchmarks recognize this macro, but the preferred practice for data model selection applies the flags to all benchmarks; this flag description is a placeholder for those benchmarks that do not recognize this macro.
![[benchmark]](https://www.spec.org/auto/cpu2017/images/benchmark.png)
This macro indicates that Fortran functions called from C should have their names lower-cased.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Use big-endian representation for unformatted files. This is important when reading 521.wrf_r, 621.wrf_s, and 628.pop2_s data files that were originally generated in big-endian format.
![[suite]](https://www.spec.org/auto/cpu2017/images/suite.png)
This option is used to indicate that the host system's integers are 32-bits wide, and longs and pointers are 64-bits wide. Not all benchmarks recognize this macro, but the preferred practice for data model selection applies the flags to all benchmarks; this flag description is a placeholder for those benchmarks that do not recognize this macro.
![[benchmark]](https://www.spec.org/auto/cpu2017/images/benchmark.png)
Fortran to C symbol naming. C symbol names are lower case with one underscore. _symbol
![[suite]](https://www.spec.org/auto/cpu2017/images/suite.png)
This option is used to indicate that the host system's integers are 32-bits wide, and longs and pointers are 64-bits wide. Not all benchmarks recognize this macro, but the preferred practice for data model selection applies the flags to all benchmarks; this flag description is a placeholder for those benchmarks that do not recognize this macro.
![[benchmark]](https://www.spec.org/auto/cpu2017/images/benchmark.png)
For netcdf, if defined uses Fortran symbol names ABC as abc_
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Use big-endian representation for unformatted files. This is important when reading 521.wrf_r, 621.wrf_s, and 628.pop2_s data files that were originally generated in big-endian format.
![[suite]](https://www.spec.org/auto/cpu2017/images/suite.png)
This option is used to indicate that the host system's integers are 32-bits wide, and longs and pointers are 64-bits wide. Not all benchmarks recognize this macro, but the preferred practice for data model selection applies the flags to all benchmarks; this flag description is a placeholder for those benchmarks that do not recognize this macro.
![[suite]](https://www.spec.org/auto/cpu2017/images/suite.png)
This option is used to indicate that the host system's integers are 32-bits wide, and longs and pointers are 64-bits wide. Not all benchmarks recognize this macro, but the preferred practice for data model selection applies the flags to all benchmarks; this flag description is a placeholder for those benchmarks that do not recognize this macro.
![[suite]](https://www.spec.org/auto/cpu2017/images/suite.png)
This option is used to indicate that the host system's integers are 32-bits wide, and longs and pointers are 64-bits wide. Not all benchmarks recognize this macro, but the preferred practice for data model selection applies the flags to all benchmarks; this flag description is a placeholder for those benchmarks that do not recognize this macro.
![[suite]](https://www.spec.org/auto/cpu2017/images/suite.png)
This option is used to indicate that the host system's integers are 32-bits wide, and longs and pointers are 64-bits wide. Not all benchmarks recognize this macro, but the preferred practice for data model selection applies the flags to all benchmarks; this flag description is a placeholder for those benchmarks that do not recognize this macro.
![[suite]](https://www.spec.org/auto/cpu2017/images/suite.png)
This option is used to indicate that the host system's integers are 32-bits wide, and longs and pointers are 64-bits wide. Not all benchmarks recognize this macro, but the preferred practice for data model selection applies the flags to all benchmarks; this flag description is a placeholder for those benchmarks that do not recognize this macro.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Generate code for lp64. With ilp32, int, long int and pointer are 32-bit; with lp64, int is 32-bit, but long int and pointer are 64-bit.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Sets the language dialect to include syntax from the C99 standard, such as bool and other features used in CPU 2017 benchmarks.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Produce debugging information.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Increases optimization levels: the higher the number, the more optimization is done. Higher levels of optimization may
require additional compilation time, in the hopes of reducing execution time. At -O, basic optimizations are performed,
such as constant merging and elimination of dead code. At -O2, additional optimizations are added, such as common
subexpression elimination and strict aliasing. At -O3, even more optimizations are performed, such as function inlining and
vectorization.
Many more details are available.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
On aarch64 systems, mcpu sets the what kind of instructions can be used (as if by -march) and how to
tune for performance (as if by -mtune).
On x86 systems, mcpu is a deprecated synonym for mtune.
On SPARC systems, mcpu sets the available instruction set.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Enable Link Time Optimization When invoked with source code, it generates GIMPLE (one of GCC's internal representations) and writes it to special ELF sections in the object file. When the object files are linked together, all the function bodies are read from these ELF sections and instantiated as if they had been part of the same translation unit.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
The language standards set aliasing requirements: programmers are expected to follow conventions so that the compiler can keep track of memory. If a program violates the requirements (for example, using pointer arithmetic), programs may crash, or (worse) wrong answers may be silently produced.
Unfortunately, the aliasing requirements from the standards are not always well understood.
Sometimes, the aliasing requirements are understood and nevertheless intentionally violated by smart programmers who know what they are doing, such as the programmer responsible for the inner workings of Perl storage allocation and variable handling.
The -fno-strict-aliasing switch instructs the optimizer that it must not assume that the aliasing requirements from the standard are met by the current program. You will probably need it for 500.perlbench_r and 600.perlbench_s. Note that this is an optimization switch, not a portability switch. When running SPECint2017_rate_base or SPECint2017_speed_base, you must use the same optimization switches for all the C modules in base; see https://www.spec.org/cpu2017/Docs/runrules.html#BaseFlags and https://www.spec.org/cpu2017/Docs/runrules.html#MustValidate.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Enable handling of OpenMP directives and generate parallel code.
![[suite]](https://www.spec.org/auto/cpu2017/images/suite.png)
Definition of this macro indicates that compilation for parallel operation is enabled, and that any OpenMP directives or pragmas will be visible to the compiler. The behavior of this macro is overridden if -DSPEC_SUPPRESS_OPENMP also appears in the list of compilation flags.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Add the specified path to the list of paths that the linker will search for archive libraries and control scripts.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Link with libjemalloc, a fast, arena-based memory allocator.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Generate code for lp64. With ilp32, int, long int and pointer are 32-bit; with lp64, int is 32-bit, but long int and pointer are 64-bit.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Produce debugging information.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Increases optimization levels: the higher the number, the more optimization is done. Higher levels of optimization may
require additional compilation time, in the hopes of reducing execution time. At -O, basic optimizations are performed,
such as constant merging and elimination of dead code. At -O2, additional optimizations are added, such as common
subexpression elimination and strict aliasing. At -O3, even more optimizations are performed, such as function inlining and
vectorization.
Many more details are available.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
On aarch64 systems, mcpu sets the what kind of instructions can be used (as if by -march) and how to
tune for performance (as if by -mtune).
On x86 systems, mcpu is a deprecated synonym for mtune.
On SPARC systems, mcpu sets the available instruction set.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Enable Link Time Optimization When invoked with source code, it generates GIMPLE (one of GCC's internal representations) and writes it to special ELF sections in the object file. When the object files are linked together, all the function bodies are read from these ELF sections and instantiated as if they had been part of the same translation unit.
![[suite]](https://www.spec.org/auto/cpu2017/images/suite.png)
Definition of this macro indicates that compilation for parallel operation is enabled, and that any OpenMP directives or pragmas will be visible to the compiler. The behavior of this macro is overridden if -DSPEC_SUPPRESS_OPENMP also appears in the list of compilation flags.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Enable handling of OpenMP directives and generate parallel code.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Add the specified path to the list of paths that the linker will search for archive libraries and control scripts.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Link with libjemalloc, a fast, arena-based memory allocator.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Generate code for lp64. With ilp32, int, long int and pointer are 32-bit; with lp64, int is 32-bit, but long int and pointer are 64-bit.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Sets the language dialect to include syntax from the C99 standard, such as bool and other features used in CPU 2017 benchmarks.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Produce debugging information.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Increases optimization levels: the higher the number, the more optimization is done. Higher levels of optimization may
require additional compilation time, in the hopes of reducing execution time. At -O, basic optimizations are performed,
such as constant merging and elimination of dead code. At -O2, additional optimizations are added, such as common
subexpression elimination and strict aliasing. At -O3, even more optimizations are performed, such as function inlining and
vectorization.
Many more details are available.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
On aarch64 systems, mcpu sets the what kind of instructions can be used (as if by -march) and how to
tune for performance (as if by -mtune).
On x86 systems, mcpu is a deprecated synonym for mtune.
On SPARC systems, mcpu sets the available instruction set.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Enable Link Time Optimization When invoked with source code, it generates GIMPLE (one of GCC's internal representations) and writes it to special ELF sections in the object file. When the object files are linked together, all the function bodies are read from these ELF sections and instantiated as if they had been part of the same translation unit.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
The language standards set aliasing requirements: programmers are expected to follow conventions so that the compiler can keep track of memory. If a program violates the requirements (for example, using pointer arithmetic), programs may crash, or (worse) wrong answers may be silently produced.
Unfortunately, the aliasing requirements from the standards are not always well understood.
Sometimes, the aliasing requirements are understood and nevertheless intentionally violated by smart programmers who know what they are doing, such as the programmer responsible for the inner workings of Perl storage allocation and variable handling.
The -fno-strict-aliasing switch instructs the optimizer that it must not assume that the aliasing requirements from the standard are met by the current program. You will probably need it for 500.perlbench_r and 600.perlbench_s. Note that this is an optimization switch, not a portability switch. When running SPECint2017_rate_base or SPECint2017_speed_base, you must use the same optimization switches for all the C modules in base; see https://www.spec.org/cpu2017/Docs/runrules.html#BaseFlags and https://www.spec.org/cpu2017/Docs/runrules.html#MustValidate.
![[suite]](https://www.spec.org/auto/cpu2017/images/suite.png)
Definition of this macro indicates that compilation for parallel operation is enabled, and that any OpenMP directives or pragmas will be visible to the compiler. The behavior of this macro is overridden if -DSPEC_SUPPRESS_OPENMP also appears in the list of compilation flags.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Enable handling of OpenMP directives and generate parallel code.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Add the specified path to the list of paths that the linker will search for archive libraries and control scripts.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Link with libjemalloc, a fast, arena-based memory allocator.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Generate code for lp64. With ilp32, int, long int and pointer are 32-bit; with lp64, int is 32-bit, but long int and pointer are 64-bit.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Sets the language dialect to include syntax from the 1998 ISO C++ standard plus the 2003 technical corrigendum.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Sets the language dialect to include syntax from the C99 standard, such as bool and other features used in CPU 2017 benchmarks.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Produce debugging information.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Increases optimization levels: the higher the number, the more optimization is done. Higher levels of optimization may
require additional compilation time, in the hopes of reducing execution time. At -O, basic optimizations are performed,
such as constant merging and elimination of dead code. At -O2, additional optimizations are added, such as common
subexpression elimination and strict aliasing. At -O3, even more optimizations are performed, such as function inlining and
vectorization.
Many more details are available.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
On aarch64 systems, mcpu sets the what kind of instructions can be used (as if by -march) and how to
tune for performance (as if by -mtune).
On x86 systems, mcpu is a deprecated synonym for mtune.
On SPARC systems, mcpu sets the available instruction set.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Enable Link Time Optimization When invoked with source code, it generates GIMPLE (one of GCC's internal representations) and writes it to special ELF sections in the object file. When the object files are linked together, all the function bodies are read from these ELF sections and instantiated as if they had been part of the same translation unit.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
The language standards set aliasing requirements: programmers are expected to follow conventions so that the compiler can keep track of memory. If a program violates the requirements (for example, using pointer arithmetic), programs may crash, or (worse) wrong answers may be silently produced.
Unfortunately, the aliasing requirements from the standards are not always well understood.
Sometimes, the aliasing requirements are understood and nevertheless intentionally violated by smart programmers who know what they are doing, such as the programmer responsible for the inner workings of Perl storage allocation and variable handling.
The -fno-strict-aliasing switch instructs the optimizer that it must not assume that the aliasing requirements from the standard are met by the current program. You will probably need it for 500.perlbench_r and 600.perlbench_s. Note that this is an optimization switch, not a portability switch. When running SPECint2017_rate_base or SPECint2017_speed_base, you must use the same optimization switches for all the C modules in base; see https://www.spec.org/cpu2017/Docs/runrules.html#BaseFlags and https://www.spec.org/cpu2017/Docs/runrules.html#MustValidate.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Enable handling of OpenMP directives and generate parallel code.
![[suite]](https://www.spec.org/auto/cpu2017/images/suite.png)
Definition of this macro indicates that compilation for parallel operation is enabled, and that any OpenMP directives or pragmas will be visible to the compiler. The behavior of this macro is overridden if -DSPEC_SUPPRESS_OPENMP also appears in the list of compilation flags.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Add the specified path to the list of paths that the linker will search for archive libraries and control scripts.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Link with libjemalloc, a fast, arena-based memory allocator.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Generate code for lp64. With ilp32, int, long int and pointer are 32-bit; with lp64, int is 32-bit, but long int and pointer are 64-bit.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Sets the language dialect to include syntax from the C99 standard, such as bool and other features used in CPU 2017 benchmarks.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Instruments code to collect information for profile-driven feedback. Information is collected regarding both code paths and data values.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Applies information from a profile run in order to improve optimization. Several optimizations are improved when profile data is available, including branch probabilities, loop peeling, and loop unrolling.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Produce debugging information.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Disregard strict standards compliance. -Ofast enables all -O3 optimizations. It also enables optimizations that are not valid for all standard-compliant programs. It turns on -ffast-math, -fallow-store-data-races (as of GCC 10), and the Fortran-specific -fstack-arrays unless -fmax-stack-var-size is specified, and -fno-protect-parens.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
On aarch64 systems, mcpu sets the what kind of instructions can be used (as if by -march) and how to
tune for performance (as if by -mtune).
On x86 systems, mcpu is a deprecated synonym for mtune.
On SPARC systems, mcpu sets the available instruction set.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Enable Link Time Optimization When invoked with source code, it generates GIMPLE (one of GCC's internal representations) and writes it to special ELF sections in the object file. When the object files are linked together, all the function bodies are read from these ELF sections and instantiated as if they had been part of the same translation unit.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Enable handling of OpenMP directives and generate parallel code.
![[suite]](https://www.spec.org/auto/cpu2017/images/suite.png)
Definition of this macro indicates that compilation for parallel operation is enabled, and that any OpenMP directives or pragmas will be visible to the compiler. The behavior of this macro is overridden if -DSPEC_SUPPRESS_OPENMP also appears in the list of compilation flags.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Add the specified path to the list of paths that the linker will search for archive libraries and control scripts.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Link with libjemalloc, a fast, arena-based memory allocator.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Generate code for lp64. With ilp32, int, long int and pointer are 32-bit; with lp64, int is 32-bit, but long int and pointer are 64-bit.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Instruments code to collect information for profile-driven feedback. Information is collected regarding both code paths and data values.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Applies information from a profile run in order to improve optimization. Several optimizations are improved when profile data is available, including branch probabilities, loop peeling, and loop unrolling.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Produce debugging information.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Disregard strict standards compliance. -Ofast enables all -O3 optimizations. It also enables optimizations that are not valid for all standard-compliant programs. It turns on -ffast-math, -fallow-store-data-races (as of GCC 10), and the Fortran-specific -fstack-arrays unless -fmax-stack-var-size is specified, and -fno-protect-parens.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
On aarch64 systems, mcpu sets the what kind of instructions can be used (as if by -march) and how to
tune for performance (as if by -mtune).
On x86 systems, mcpu is a deprecated synonym for mtune.
On SPARC systems, mcpu sets the available instruction set.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Enable Link Time Optimization When invoked with source code, it generates GIMPLE (one of GCC's internal representations) and writes it to special ELF sections in the object file. When the object files are linked together, all the function bodies are read from these ELF sections and instantiated as if they had been part of the same translation unit.
![[suite]](https://www.spec.org/auto/cpu2017/images/suite.png)
Definition of this macro indicates that compilation for parallel operation is enabled, and that any OpenMP directives or pragmas will be visible to the compiler. The behavior of this macro is overridden if -DSPEC_SUPPRESS_OPENMP also appears in the list of compilation flags.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Enable handling of OpenMP directives and generate parallel code.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Add the specified path to the list of paths that the linker will search for archive libraries and control scripts.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Link with libjemalloc, a fast, arena-based memory allocator.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Generate code for lp64. With ilp32, int, long int and pointer are 32-bit; with lp64, int is 32-bit, but long int and pointer are 64-bit.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Sets the language dialect to include syntax from the C99 standard, such as bool and other features used in CPU 2017 benchmarks.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Instruments code to collect information for profile-driven feedback. Information is collected regarding both code paths and data values.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Applies information from a profile run in order to improve optimization. Several optimizations are improved when profile data is available, including branch probabilities, loop peeling, and loop unrolling.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Produce debugging information.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Disregard strict standards compliance. -Ofast enables all -O3 optimizations. It also enables optimizations that are not valid for all standard-compliant programs. It turns on -ffast-math, -fallow-store-data-races (as of GCC 10), and the Fortran-specific -fstack-arrays unless -fmax-stack-var-size is specified, and -fno-protect-parens.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
On aarch64 systems, mcpu sets the what kind of instructions can be used (as if by -march) and how to
tune for performance (as if by -mtune).
On x86 systems, mcpu is a deprecated synonym for mtune.
On SPARC systems, mcpu sets the available instruction set.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Enable Link Time Optimization When invoked with source code, it generates GIMPLE (one of GCC's internal representations) and writes it to special ELF sections in the object file. When the object files are linked together, all the function bodies are read from these ELF sections and instantiated as if they had been part of the same translation unit.
![[suite]](https://www.spec.org/auto/cpu2017/images/suite.png)
Definition of this macro indicates that compilation for parallel operation is enabled, and that any OpenMP directives or pragmas will be visible to the compiler. The behavior of this macro is overridden if -DSPEC_SUPPRESS_OPENMP also appears in the list of compilation flags.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Enable handling of OpenMP directives and generate parallel code.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Add the specified path to the list of paths that the linker will search for archive libraries and control scripts.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Link with libjemalloc, a fast, arena-based memory allocator.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Generate code for lp64. With ilp32, int, long int and pointer are 32-bit; with lp64, int is 32-bit, but long int and pointer are 64-bit.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Sets the language dialect to include syntax from the C99 standard, such as bool and other features used in CPU 2017 benchmarks.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Instruments code to collect information for profile-driven feedback. Information is collected regarding both code paths and data values.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Applies information from a profile run in order to improve optimization. Several optimizations are improved when profile data is available, including branch probabilities, loop peeling, and loop unrolling.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Produce debugging information.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Disregard strict standards compliance. -Ofast enables all -O3 optimizations. It also enables optimizations that are not valid for all standard-compliant programs. It turns on -ffast-math, -fallow-store-data-races (as of GCC 10), and the Fortran-specific -fstack-arrays unless -fmax-stack-var-size is specified, and -fno-protect-parens.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
On aarch64 systems, mcpu sets the what kind of instructions can be used (as if by -march) and how to
tune for performance (as if by -mtune).
On x86 systems, mcpu is a deprecated synonym for mtune.
On SPARC systems, mcpu sets the available instruction set.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Enable Link Time Optimization When invoked with source code, it generates GIMPLE (one of GCC's internal representations) and writes it to special ELF sections in the object file. When the object files are linked together, all the function bodies are read from these ELF sections and instantiated as if they had been part of the same translation unit.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
The language standards set aliasing requirements: programmers are expected to follow conventions so that the compiler can keep track of memory. If a program violates the requirements (for example, using pointer arithmetic), programs may crash, or (worse) wrong answers may be silently produced.
Unfortunately, the aliasing requirements from the standards are not always well understood.
Sometimes, the aliasing requirements are understood and nevertheless intentionally violated by smart programmers who know what they are doing, such as the programmer responsible for the inner workings of Perl storage allocation and variable handling.
The -fno-strict-aliasing switch instructs the optimizer that it must not assume that the aliasing requirements from the standard are met by the current program. You will probably need it for 500.perlbench_r and 600.perlbench_s. Note that this is an optimization switch, not a portability switch. When running SPECint2017_rate_base or SPECint2017_speed_base, you must use the same optimization switches for all the C modules in base; see https://www.spec.org/cpu2017/Docs/runrules.html#BaseFlags and https://www.spec.org/cpu2017/Docs/runrules.html#MustValidate.
![[suite]](https://www.spec.org/auto/cpu2017/images/suite.png)
Definition of this macro indicates that compilation for parallel operation is enabled, and that any OpenMP directives or pragmas will be visible to the compiler. The behavior of this macro is overridden if -DSPEC_SUPPRESS_OPENMP also appears in the list of compilation flags.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Enable handling of OpenMP directives and generate parallel code.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Add the specified path to the list of paths that the linker will search for archive libraries and control scripts.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Link with libjemalloc, a fast, arena-based memory allocator.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Generate code for lp64. With ilp32, int, long int and pointer are 32-bit; with lp64, int is 32-bit, but long int and pointer are 64-bit.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Sets the language dialect to include syntax from the 1998 ISO C++ standard plus the 2003 technical corrigendum.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Sets the language dialect to include syntax from the C99 standard, such as bool and other features used in CPU 2017 benchmarks.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Instruments code to collect information for profile-driven feedback. Information is collected regarding both code paths and data values.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Applies information from a profile run in order to improve optimization. Several optimizations are improved when profile data is available, including branch probabilities, loop peeling, and loop unrolling.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Produce debugging information.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Disregard strict standards compliance. -Ofast enables all -O3 optimizations. It also enables optimizations that are not valid for all standard-compliant programs. It turns on -ffast-math, -fallow-store-data-races (as of GCC 10), and the Fortran-specific -fstack-arrays unless -fmax-stack-var-size is specified, and -fno-protect-parens.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
On aarch64 systems, mcpu sets the what kind of instructions can be used (as if by -march) and how to
tune for performance (as if by -mtune).
On x86 systems, mcpu is a deprecated synonym for mtune.
On SPARC systems, mcpu sets the available instruction set.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Enable Link Time Optimization When invoked with source code, it generates GIMPLE (one of GCC's internal representations) and writes it to special ELF sections in the object file. When the object files are linked together, all the function bodies are read from these ELF sections and instantiated as if they had been part of the same translation unit.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Enable handling of OpenMP directives and generate parallel code.
![[suite]](https://www.spec.org/auto/cpu2017/images/suite.png)
Definition of this macro indicates that compilation for parallel operation is enabled, and that any OpenMP directives or pragmas will be visible to the compiler. The behavior of this macro is overridden if -DSPEC_SUPPRESS_OPENMP also appears in the list of compilation flags.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Add the specified path to the list of paths that the linker will search for archive libraries and control scripts.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Link with libjemalloc, a fast, arena-based memory allocator.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
This option controls warnings when a declaration does not specify a type, as per the official FAQ.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Warn, rather than generating a fatal error, when calls to external procedures have mismatches vs. the procedure definition. See also https://gcc.gnu.org/gcc-10/porting_to.html.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
This option controls warnings when a declaration does not specify a type, as per the official FAQ.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Warn, rather than generating a fatal error, when calls to external procedures have mismatches vs. the procedure definition. See also https://gcc.gnu.org/gcc-10/porting_to.html.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
This option controls warnings when a declaration does not specify a type, as per the official FAQ.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Warn, rather than generating a fatal error, when calls to external procedures have mismatches vs. the procedure definition. See also https://gcc.gnu.org/gcc-10/porting_to.html.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
This option controls warnings when a declaration does not specify a type, as per the official FAQ.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Warn, rather than generating a fatal error, when calls to external procedures have mismatches vs. the procedure definition. See also https://gcc.gnu.org/gcc-10/porting_to.html.
![[user]](https://www.spec.org/auto/cpu2017/images/user.png)
Warn, rather than generating a fatal error, when calls to external procedures have mismatches vs. the procedure definition. See also https://gcc.gnu.org/gcc-10/porting_to.html.
SPECrate runs might use one of these methods to bind processes to specific processors, depending on the config file.
Linux systems: the numactl command is commonly used. Here is a brief guide to understanding the specific command which will be found in the config file:
Solaris systems: The pbind command is commonly used, via
submit=echo 'pbind -b...' > dobmk; sh dobmk
The specific command may be found in the config file; here is a brief guide to understanding that command:
pbind -b causes this copy's processes to be bound to the CPU specified by the expression that follows it. See the config file used in the run for the exact syntax, which tends to be cumbersome because of the need to carefully quote parts of the expression. When all expressions are evaluated, the jobs are typically distributed evenly across the system, with each chip running the same number of jobs as all other chips, and each core running the same number of jobs as all other cores.
The pbind expression may include various elements from the SPEC toolset and from standard Unix commands, such as:
No special commands are needed for feedback-directed optimization, other than the compiler profile flags.
One or more of the following may have been used in the run. If so, it will be listed in the notes sections. Here is a brief guide to understanding them:
LD_LIBRARY_PATH=<directories> (set via config file preENV)
LD_LIBRARY_PATH controls the search order for libraries. Often, it can be defaulted. Sometimes, it is
explicitly set (as documented in the notes in the submission), in order to ensure that the correct versions of
libraries are picked up.
OMP_STACKSIZE=N (set via config file preENV)
Set the stack size for subordinate threads.
ulimit -s N
ulimit -s unlimited
'ulimit' is a Unix commands, entered prior to the run. It sets the stack size for the main process, either
to N kbytes or to no limit.
Flag description origin markings:
For questions about the meanings of these flags, please contact the tester.
For other inquiries, please contact info@spec.org
Copyright 2017-2026 Standard Performance Evaluation Corporation
Tested with SPEC CPU2017 v1.1.9.
Report generated on 2026-04-28 13:16:50 by SPEC CPU2017 flags formatter v5178.