Oracle-Developer-Studio12.6
Oracle Solaris SPEC CPU Flags
MTEXCLUSIVE
If set to "Y", additional memory allocation buckets will be created, so that threads will not need to share buckets
unless more than 2*NCPUS threads are created. This variable is used by mtmalloc.
SUNW_MP_PROCBIND
Binds threads in an OpenMP program to the virtual processors enumerated in the assignment. Can also be set to TRUE,
which casues threads to be bound in a round-robin fashion.
SUNW_MP_THR_IDLE
Specifies whether idle threads should SLEEP or SPIN.
STACKSIZE=<n>
Set the size of the stack (temporary storage area) for each slave thread of a multithreaded program.
ulimit -s <n>
Sets the stack size to n kbytes, or "unlimited" to allow the stack size to grow without limit.
Note that the "heap" and the "stack" share space; if your application allocates large amounts of memory on the heap,
then you may find that the stack limit should not be set to "unlimited". A commonly used setting for SPEC CPU2006 purposes
is a stack size of 128MB (131072K).
]]>
/path/to/{CC|cc|f90|f95}
This flag is just to trim the path from the compiler line.
/path/to/mapfile
This flag is just to trim the path from a mapfile.
CC
Invoke the Oracle Developer Studio C++ Compiler
cc
Invoke the Oracle Developer Studio C Compiler.
f95
Invoke the Oracle Developer Studio Fortran Compiler
Splitter rule for qoptions: -Qoption (cg|iropt|f90comp) -switch[,-switch...]
Splitter rule for Wx: -W2,-switch[,-switch...] or -Wc,-switch[,-switch...]
Splitter rule for -Ainline
Splitter rule for -Apf
Splitter rule for -Qlp
[optimizer flag]
Increase the probability that the compiler will perform memcpy/memset transformations.
]]>
The mangle6 sub-option selects correct name mangling that might not be
compatible with prior compiler releases.
-Addint:ignore_parallel
[optimizer]
Ignore parallelization factors in loop interchange heuristics.
]]>
-Addint:sf=<n>
[optimizer]
When considering whether to interchange loops, set memory store operation weight to n. A higher value of
n indicates a greater performance cost for stores.
]]>
-Afully_unroll:always=on
[optimizer]
Do aggressive loop fully unrolling based on the size and trip count of the loop.
]]>
-Ainline:cp=<n>
[optimizer flag]
Control the optimizer's loop inliner; set the minimum call site frequency counter in order to consider a routine for
inlining.
]]>
-Ainline:cs=<n>
[optimizer flag]
Control the optimizer's loop inliner; Set inline callee size limit to n. The unit roughly corresponds to the
number of instructions.
]]>
-Ainline:inc=<n>
[optimizer flag]
Control the optimizer's loop inliner;
The inliner is allowed to increase the size of the program by up to n%.
]]>
-Ainline:irs=<n>
[optimizer flag]
Control the optimizer's loop inliner; Allow routines to increase by up to n. The unit roughly corresponds to
the number of instructions.
]]>
-Ainline:mi
[optimizer flag]
Control the optimizer's loop inliner; Perform maximum inlining (without considering code size increase).
]]>
-Ainline:recursion=1
[optimizer flag]
Control the optimizer's loop inliner; Allow routines that are called recursively to still be eligible for inlining.
]]>
-Ainline:rs=400
[optimizer flag]
Inliner only considers routines smaller than n pseudo instructions as possible inline candidates.
]]>
[optimizer flag]
Increase the probability that loop induction variables will replaced, so that some extraneous code can be eliminated from
loops.
]]>
-Aloop_dist:ignore_parallel
[optimizer flag]
Ignore parallelization factors in loop distribution heuristics.
]]>
-Amemopt:arrayloc
[optimizer flag]
Reconstruct array subscripts during memory allocation merging and data layout program transformation.
]]>
-Aparallel:nthreads=16
The option instructs the compiler on the number of threads to use for automatically parallelized regions. The nthreads
value is only applicable for parallelized regions in the modules that are compiled with this option. The value specified by
this option will override any values previously set by the OMP_NUM_THREADS or PARALLEL environment variable. The runtime
library may choose to alter the number of threads unless the environment variable OMP_DYNAMIC is set to false.
Note that this is a flag to the "iropt" component of the compilation system. In general, flags may be sent to iropt using
"Qoption iropt" from the "f90" and "CC" commands; or using "-W2," from the "cc" command.
]]>
-Apf:llist=<n>
[optimizer flag]
Do speculative prefetching for link-list data structures; perform prefetching n iterations ahead.
]]>
-Apf:noinnerllist
[optimizer flag]
Do speculative prefetching for link-list data structures; do not attempt prefetching for innermost loops.
]]>
-Apf:pdl=1
[optimizer flag]
Allow prefetching through up to n levels of indirect memory references.
]]>
-array_pad_rows,<n>
Enable padding of arrays by n.
]]>
-W2,-Asac
Structure Array Contraction reduces strides in a hot loop accessing a big array. This is done by collecting only the hot fields into a new structure and rearranging the dimensions in the new array (of the new structure) to minimize stride width, e.g. a[x][y] to a[y][x]
]]>
[optimizer flag]
Convert multiple short memory operations into single long memory operations.
]]>
-Atile:skewp[:b<n>]
[optimizer flag]
Perform loop tiling which is enabled by loop skewing. Loop skewing is a transformation that transforms a non-fully
interchangeable loop nest to a fully interchangeable loop nest. The optional b<n> sets the tiling block
size to n.
]]>
-Aujam:inner=g
[optimizer flag]
Increase the probability that small-trip-count inner loops will be fully unrolled.
]]>
[optimizer flag]
Enable optimization of critical control paths
]]>
Assume data is naturally aligned.
-Dalloca=__builtin_alloca
Used for 403.gcc: allow use of compiler's internal builtin alloca.
Synonym for -xdepend.
Prepend the string "error:" to error messages, to make them easier to see.
Allows the compiler to assume that your code does not rely on setting of the errno variable.
]]>
-fast
A convenience option, this switch selects several other options that are described in this file.
-fast
A convenience option, this switch selects several other options that are described in this file.
-fast
A convenience option, this switch selects the following switches that are described in this file:
Ensure that there are no surprises if the benchmarks are run in an environment where file system metadata uses 64 bits.
-xalias_level=no%except
The compiler's treatment of extern inline functions conforms by default to the behavior specified by the ISO/IEC 9899:1999 C standard.
- conststrings Enables the placement of string literals in readonly memory.
- no%conststrings Disables the placement of string literals in readonly memory.
- extensions Allows zero-sized struct/union declarations and void function with return statements returning a value to work.
- no%extensions Disallows zero-sized struct/union declarations and void function with return statements returning a value to work.
- extinl Generates extern inline functions as global functions.
- no%extinl Generates extern inline functions as static functions.
]]>
-xalias_level=no%except
The compiler's treatment of extern inline functions conforms by default to the behavior specified by the ISO/IEC 9899:1999 C standard.
- except Allow C++ exceptions.
- no%except Disallow C++ exceptions.
]]>
Enables the use of the fused multiply-add instruction.
]]>
Selects faster (but nonstandard) handling of floating point arithmetic exceptions and gradual underflow.
-fsimple=<n>
Controls simplifying assumptions for floating point arithmetic:
- -fsimple=0 permits no simplifying assumptions. Preserves strict IEEE 754 conformance.
- -fsimple=1 allows the optimizer to assume:
- The IEEE 754 default rounding/trapping modes do not change after process initialization.
- Computations producing no visible result other than potential floating-point exceptions may be deleted.
- Computations with Infinity or NaNs as operands need not propagate NaNs to their results. For example, x*0 may be
replaced by 0.
- Computations do not depend on sign of zero.
- -fsimple=2 permits more aggressive floating point optimizations that may cause programs to produce
different numeric results due to changes in rounding. Even with -fsimple=2, the optimizer still is not
permitted to introduce a floating point exception in a program that otherwise produces none.
]]>
Evaluate float expressions as single precision.
Sets the IEEE 754 trapping mode to common exceptions (invalid, division by zero, and overflow).
-ftrap=%none
Turns off all IEEE 754 trapping modes.
Includes symbols in the executable. If the optimization level is -xO3 or lower, some optimizations may be
disabled when -g is present. At -xO4 or higher, full optimization is performed, even when -g is present.
Includes symbols in the executable. If the optimization level is -xO3 or lower, some optimizations may be
disabled when -g0 is present. At -xO4 or higher, full optimization is performed, even when -g0 is present.
Produce file and line number as well as simple parameter information that is considered crucial during post-mortem debugging.
-include alloca.h
Include the designated file as if it were mentioned on the first line of the source file
in a #include preprocessor directive.
Links in a library of general purpose memory allocation routines which can be faster than those found in libc, at the expense
of more virtual memory consumed.
This library is necessary to get full implementation of _Complex data types on Solaris 8 and Solaris 9. It is not
necessary (and should not be used) on Solaris 10.
This library provides faster versions of some common functions, such as malloc/free and bcopy.
Disables use of the compiler-provided Cstd header files.
Include a library containing chip-specific memory routines.
Include the optimized math library. This option usually generates faster code, but may produce slightly different
results. Usually these results will differ only in the last bit.
Include the optimized heap memory managment library.
Include a library with malloc/free optimized for use in multithreaded applications.
Include a library with vectorized versions of some elementary mathematical functions.
Use the Apache stdcxx version 4 library that is installed as part of Oracle Solaris, instead of the default libCstd.
Use STLport's Standard Library implementation instead of the default libCstd.
The libsunmath math library contains functions that are not specified by any standard but are useful in numerical software.
It also contains many of the functions that are in libm.so.2 but not in libm.so.1.
Links in a library of "object caching" memory allocation routines which can be faster than those found in libc.
Specifies the ILP32 model: 32-bit ints, longs, and pointer types.
Specifies the LP64 model: 32-bit ints, 64-bit longs and pointers types.
Links in a linker mapfile that aligns text, data, and bss on $3 ${4}B boundaries.
Links in a linker mapfile that enables the creation of a 'bss' segment, and aligns
the segment at 4MB. This effectively provides an appropriate alignment for
large page mapping of the heap.
Do not allow C++ exceptions. A throw specification on a function is accepted but ignored; the compiler does not generate
exception code.
A synomym for -xO3.
Do not allow C++ exceptions. A throw specification on a function is accepted but ignored; the compiler does not generate
exception code.
-Qdepgraph-early_cross_call=1
[code generator flag]
There are several scheduling passes in the compiler. This option allows early passes to move instructions across call
instructions.
]]>
-Qeps:do_spec_load=1
[code generator flag]
Allow the enhanced pipeline scheduler (EPS) to use speculative (non-faulting) loads.
]]>
-Qeps:enabled=1
[code generator flag]
Use enhanced pipeline scheduling (EPS) and selective scheduling algorithms for instruction scheduling.
]]>
-Qeps:rp_filtering_margin=<n>
[code generator flag]
The number of live variables allowed at any given point is n more than the number of physical registers. Setting n to a
significantly large number (e.g., 100) will disable register pressure heuristics in EPS.
]]>
-Qeps:ws=<n>
[code generator flag]
Set the EPS window size, that is, the number of instructions it will consider across all paths when trying to find
independent instructions to schedule a parallel group. Larger values may result in better run time, at the cost of increased
compile time.
]]>
-Qgsched-T=<n>
[code generator flag]
Sets the aggressiveness of the trace formation, where n is 4, 5, or 6. The higher the value of n,
the lower the branch probability needed to include a basic block in a trace.
]]>
-Qgsched-trace_late=1
[code generator flag]
Enable the (late) trace scheduler. This is a new feature of the compiler which is being tuned from release to release.
It may become the default in a future release.
]]>
-Qgsched-trace_spec_load=1
[code generator flag]
When performing trace scheduling, enable the conversion of loads to non-faulting loads inside the trace.
]]>
-Qicache-chbab=1
[code generator flag]
Turn on optimization to reduce branch after branch penalty: nops will be inserted to prevent one branch from occupying
the delay slot of another branch.
]]>
-Qipa:valueprediction
[code generator flag]
Use profile feedback data to predict values and attempt to generate faster code along these control paths, even at the
expense of possibly slower code along paths leading to different values. Correct code is generated for all paths.
]]>
-Qiselect-funcalign=<n>
[code generator flag]
Do function entry alignment at n-byte boundaries.
]]>
-Qiselect-rcpa=<n>
[code generator flag]
Single- and double-precision floating-point division operations are approximated based on the SPARC64 X reciprocal
approximation instructions (frcpa[sd]).
This option has no effect unless -xarch=sparcace or -xarch=sparcaceplus, and -fsimple=2 are both in effect.
In this situation, the use of -fns=yes is strongly advised.
These approximated floating-point division operations do not conform to IEEE-754.
Furthermore, spurious floating-point exceptions can be raised in certain corner cases. In particular, the invalid
operation exception is raised when the divisor is subnormal or an infinity, or when the dividend is an infinity and
the divisor is near the overflow threshold (i.e. with magnitude greater than 2^126 or 2^1022 in single- or double-precision
respectively).
]]>
-Qiselect-rsqrta=<n>
[code generator flag]
Single- and double-precision floating-point square root operations are approximated based on the SPARC64 X approximation instructions
(frsqrta[sd]).
This option has no effect unless -xarch=sparcace or -xarch=sparcaceplus, and -fsimple=2 are both in effect. In this situation,
the use of -fns=yes is strongly advised.
These approximated floating-point square root operations do not conform to IEEE-754.
]]>
-Qiselect-rsqrta1x=<n>
[code generator flag]
The reciprocal of single- and double-precision floating-point square root operations are approximated based on the SPARC64 X approximation
instructions (frsqrta[sd]).
This option has no effect unless -xarch=sparcace or -xarch=sparcaceplus, and -fsimple=2 are both in effect. In this situation,
the use of -fns=yes is strongly advised.
Furthermore, DZ exception is never raised when input is a positive subnormal or a zero, and a positive zero is returned instead of infinity with appropriate sign.
]]>
-Qiselect-sw_pf_tbl_th=<n>
[code generator flag]
Peels the most frequent test branches/cases off a switch until the branch probability reaches less than 1/n. This is
effective only when profile feedback is used
]]>
-Qlp=<n>
[code generator flag]
Control irregular loop prefetching; turns the module on (1) or off (0) (default is on for F90/F95; for C/C++ the default is
off unless -xprefetch=auto or -xprefetch_level=[2|3] is present, in which case the default is on)
]]>
-Qlp-av=<n>
[code generator flag]
Control irregular loop prefetching; sets the prefetch look ahead distance, in bytes. The default is 256.
]]>
-Qlp-fa=<n>
[code generator flag]
Control irregular loop prefetching; a setting of "1" means force user settings to override internally computed values.
]]>
-Qlp-fl=<n>
[code generator flag]
Control irregular loop prefetching; a setting of "1" means force the optimization to be turned on for all languages.
]]>
-Qlp-imb=1
[code generator flag]
Insert indirect prefetches when the indirect access chain spans across basic blocks.
]]>
-Qlp-it=3
[code generator flag]
Indicates to the compiler to insert n extra prefetches for each indirect access in outer loops
]]>
-Qlp-ol=1
[code generator flag]
Turns on prefetching for outer loops
]]>
-Qlp-prt=1
[code generator flag]
Use prefetch with function code 1 (prefetch for one read) for memory accesses which are read only.
]]>
-Qlp-prwt=3
[code generator flag]
Use prefetch with function code 3 (prefetch for one write) for memory accesses which are read and then written.
]]>
-Qlp-pt=weak
[code generator flag]
Control irregular loop prefetching; use weak prefetches in the general loop prefetch.
]]>
-Qlp-pwt=3
[code generator flag]
Use prefetch with function code 3 (prefetch for one write) for memory accesses which are written only.
]]>
-Qlp-t=<n>
[code generator flag]
Control irregular loop prefetching; sets the number of attempts at prefetching. If not specified, t=2 if
-xprefetch_level=3 has been set; otherwise, defaults to t=1.
]]>
[code generator flag]
Enable the loop unroller (en=1 enables, en=0 disables) for loops with control flow, with an unroll count of 4.
]]>
-Qms_pipe+alldoall
[code generator flag]
Specifies that all loops can be pipelined without needing to be concerned about loop-carried dependencies.
]]>
-Qms_pipe+intdivusefp
[code generator flag]
In pipelined loops, use floating point divide instructions for signed integer division.
]]>
-Qms_pipe-pref
[code generator flag]
Disable prefetching within modulo scheduling (used in software pipelining).
]]>
-Qms_pipe+prefolim=<n>
[code generator flag]
Set number of outstanding prefetches in pipelined loops to <n>
]]>
-Qms_pipe-pref_prolog
[code generator flag]
Turn off prefetching in the prolog of modulo scheduled loops.
]]>
-Qms_pipe-prefst
[code generator flag]
Turn off prefetching for stores in the pipeliner.
]]>
-Qms_pipe-prefstrong=0
[code generator flag]
Turn off the use of strong prefetches in modulo scheduled loops.
]]>
-Qms_pipe+ulms=1
[code generator flag]
Allow the pipeliner to unroll multi-instruction loops that set integer condition codes
]]>
-Qms_pipe+unoovf
[code generator flag]
Assert (to the pipeliner) that unsigned int computations will not overflow.
]]>
-Qpeep-Sh0
[code generator flag]
Reduce the probability that the compiler will hoist sethi insructions out of loops.
]]>
-Qpeep-Ex[1]:minmax_use_cmov=2
[code generator flag]
During Expansion (that is, prior to register allocation), use the 'movcc' instruction to implement min and max operations. The options for use of movcc include:
- 0 to disable
- 1 to let the compiler choose, and
- 2 to enable.
If the "Ex" is followed by the optional character "1", then movcc will be applied during the first phase of peephole optimization, but not during later phases.
]]>
Do not perform loop distribution transformations.
-Rujam
[optimizer flag]
Disable loop unroll and jam optimization in iropt
]]>
Allocate routine local variables on the stack.
-staticlib=%all
Link with static libraries. When the value "%all" is chosen, then all available static libraries are used. Note that the set of libraries may change from release to release, and that many libraries are available only in dynamic form.
-std=c99, -std=c11
Selects the C language dialect.
-std=c++03, -std=sun03, -std=c++11
Selects the C++ language dialect.
-template=extdef
Controls various template options:
- [no%]extdef
- [Do not] Search for template definitions in separate source files. With no
%extdef, the compiler predefines _TEMPLATE_NO_EXTDEF
- [no%]geninlinefuncs
- [Do not] Generate unreferenced inline member functions for explicitly
instantiated class templates.
- [no%]wholeclass
- [Do not] Instantiate a whole template class, rather than only those functions
that are used. You must reference at least one member of the class.
Otherwise, the compiler does not instantiate any members for the
class.
The default is -template=no%wholeclass,no%extdef.
]]>
-#
Turns on verbose mode, showing how command options expand. Shows each component as it is invoked.
-verbose=diags,version
Controls compiler verbosity. There are several values that can be used with this flag:
- [no%]diags
- [Do not] Print the command line for each compilation pass
- [no%]template
- [Do not] Turn on the template instantiation verbose mode (sometimes called the "verify" mode). The
verbose mode displays each phase of instantiation as it occurs during compilation.
- [no%]version
- [Do not] Direct the CC driver to print the names and version numbers of the programs it invokes.
- %all
- Invokes all of the above.
- %none
- -verbose=%none is the same as -verbose=no%template,no%diags,no%version.
The default is -verbose=%none.
]]>
-v
Same as -verbose=diags.
]]>
-v
This flag will cause the Oracle Developer Studio Fortran compiler to emit verbose messages.
-V
Directs the compiler to print the name and version ID of each component as the compiler executes.
-V
Same as -verbose=version.
]]>
-X[a|c]
Specifies the degree of conformance with the ISO C standard: -Xc indicates strict conformance, whereas -Xa indicates ISO C
plus some K&R compatibility extensions.
]]>
-xalias_level=[any|basic|weak|layout|strict|std|strong]
Allows the compiler to perform type-based alias analysis at the specified alias level:
- any assume all references can alias each other
- basic assume that memory references that involve different C basic types do not alias each
other.
- weak assume that any structure pointer an point to any structure type
- layout assume that memory references with the same sequence of types can alias
- strict assume that structs and unions do not alias if their types differ, after removing tags.
- std assume aliasing rules described in the ISO 1999 C standard: structs and unions must have the
same types and tags in order to alias.
- strong in addition to the restrictions at the std level, assume that pointers of type
char * are used only to access an object of type char; and assume that there are no interior pointers.
]]>
-xalias_level[=any|simple|compatible]
Allows the compiler to perform type-based alias analysis:
- any assumes that any type can alias any other
- simple assumes that fundamental types are not aliased
- compatible assumes that layout-incompatible types are not aliased.
]]>
-xarch=...
Specifies which instructions can be used. Among the choices are:
- native Use the instructions available on the current processor
- generic Use instructions that are compatible with most SPARC processors
- ultra3cu Use instructions compatible with the UltraSPARC IIIcu processor
- v8plusa Use instructions that are available on the UltraSPARC processors
- v8plusb Use instructions that are available on the UltraSPARC III/IV processors
- sparcfmaf Allows use of the v8plusb set plus extensions for floating-point multiply-add
- sparcima Allows use of the v8plusb set plus extensions for floating-point and integer multiply-add
- sparcvis2 Use instructions that are available on the UltraSPARC III/IV processors
- sparcvis3 Use instructions that are available with sparcvis2 as well as fused multiply-add and VIS version 3.0 instrutions.
- sparc5 Use instructions compatible with the SPARC M7 processor
]]>
Turn on automatic parallelization for multiple processors.
-xbuiltin=%all
Substitute intrinsic functions or inline system functions where profitable for performance.
-xcache=...
xcache defines the cache properties for use by the optimizer. It can specify
use of default assumptions ("generic"); use of whatever the compiler can assume
about the current platform ("native"); or an explicit description of up to three
levels of cache, using colon-separated specifiers of the form si/li/ai[/ti],
where:
- si is the size of the cache, in kb
- li is the line size, in bytes
- ai is the associativity
- ti (optional) is the number of hardware threads share the cache
]]>
Treat character constants and variables declared as 'char' as unsigned.
-xcheck=%none
Do not perform any of the runtime check for stack overflow of the main thread in a singly-threaded program as well as slave-thread stacks in a multi-threaded program.
-xchip=...
xchip determines timing properties that are assumed by the compiler. It does not limit which instructions are allowed
(see xtarget for that). Among the choices are:
- sparcvis2 Optimize for the UltraSPARC III/IV processors
- ultra3 Optimize for the UltraSPARC III processor
- ultra3cu Optimize for the UltraSPARC IIIcu processor
- native Optimize for the current processor
- generic Use timing properties for good performance on most SPARC processors
- sparc64vi Optimize for the SPARC64 VI processor
- sparc64vii Optimize for the SPARC64 VII processor
- sparc64viiplus Optimize for the SPARC64 VII+ processor
- sparc64x Optimize for the SPARC64 X processor
- sparc64xplus Optimize for the SPARC64 X+ processor
- sparc64xii Optimize for the SPARC64 XII processor
- T3 Optimize for the SPARC T3 processor
- T4 Optimize for the SPARC T4 processor
- T5 Optimize for the SPARC T5 processor
- M5 Optimize for the SPARC M5 processor
- M7 Optimize for the SPARC M7 processor
]]>
Analyze loops for inter-iteration data dependencies, and do loop restructuring.
Loop restructuring includes loop interchange, loop fusion,
scalar replacement, and elimination of "dead" array assignments.
Declares that all files (other than scratch files) should be interpreted as big-endian with 8-btye alignment.
Report memory used by the optimizer.
-xinline=
Turn off inlining.
-xinline_param=lavel:2
Use this option to manually change the heuristics used by the compiler for deciding when to inline a function call.
- level:1 enables automatic generation of basic inlining.
- level:2 enables automatic generation of medium inlining.
- max_inst_hard:1000 enables automatic generation of inlining only considers functions smaller than 1000 pseudo instructions.
- max_inst_soft:500 enables automatic generation of inlining whose size limit to 500 pseudo instructions.
- max_growth:60 enables automatic generation of inlining whose size limit to 60% of the program.
]]>
-xipo or -xipo=(0|1|2)
Perform optimizations across all object files in the link step:
- 0 = off
- 1 = on
- 2 = performs whole-program detection and analysis.
At -xipo=2, the compiler performs inter-procedural aliasing analysis as well as optimization of memory allocation and
layout to improve cache performance.
]]>
-xjobs=<n>
Specify the -xjobs option to set how many processes the compiler creates to complete its work. Currently,
-xjobs works only with the -xipo option. When you specify -xjobs=n, the interprocedural
optimizer uses n as the maximum number of code generator instances it can invoke to compile different files.
]]>
Use inline expansion for math library, libm.
Select the optimized math library.
Perform link-time optimizations on the resulting executable over and above any
optimizations in the object files. These optimizations are performed at link time by analyzing the object binary code. The
meanings of the options are:
0. The link optimizer is disabled. (This is the default.)
1. Perform optimizations based on control flow analysis, including instruction cache coloring and branch optimizations, at link
time.
2. Perform additional data flow analysis, including dead-code elimination and address computation simplification, at
link time.
]]>
-xmemalign=<n>s
Sets the maximum assumed data alignment:
- -xmemalign=4s assumes a 4 byte boundary and raise
signal SIGBUS in the case of misaligned data accesses.
- -xmemalign=8s assumes a 8 byte boundary and raise
signal SIGBUS in the case of misaligned data accesses.
]]>
-xO<n>
Specify optimization level n:
- -xO1 does only basic local optimizations (peephole.)
- -xO2 Do basic local and global optimizations, such as induction variable elimination, common subexpression
elimination, constant propogation, register allocation, and basic block merging.
- -xO3 Add global optimizations at the function level, loop unrolling, and software pipelining.
- -xO4 Adds automatic inlining of functions in the same file.
- -xO5 Uses optmization algorithms that may take significantly more compilation time or that do not have as
high a probability of improving execution time, such as speculative code motion.
]]>
Enable explicit parallelization with OpenMP directives.
-xpad=common[:<n>]
If multiple arrays are placed in common, insert padding between them for better use of cache. n specifies the
amount of padding to apply, in units that are the same size as the array elements. If no parameter is specified then the
compiler selects one automatically.
]]>
Pad local variables, for better use of cache.
-xpagesize=<n>
Set the preferred page size for running the program.
-xpagesize_heap=<n>
Set the preferred heap page size for running the program.
-xpagesize_stack=<n>
Set the preferred stack page size for running the program.
-xprefetch=auto,explicit
Control generation of prefetch instructions.
- auto enables automatic generation of prefetch instructions.
- no%auto disables automatic generation of prefetch instructions.
- explicit enables explicit prefetch macros.
- no%explicit disables explicit prefetch macros.
- -xprefetch=yes and -xprefetch are synonyms for -xprefetch=auto,explicit.
- -xprefetch=no is a synonym for -xprefetch=no%auto,no%explicit.
(Explicit prefetch macros are not used in the source code of the SPEC CPU2006 benchmarks; therefore, in the context
of CPU2006, -xprefetch=yes is effectively a synonym for -xprefetch=auto.)
]]>
Generate indirect prefetches for data arrays accessed indirectly.
-xprefetch=latx:<n>
Adjust the compiler's assumptions about prefetch latency by the specified factor. Typically values in the range of 0.5
to 2.0 will be useful. A lower number might indicate that data will usually be cache resident; a higher number might
indicate a relatively larger gap between the processor speed and the memory speed (compared to the assumptions built into the
compiler).
-xprefetch_level=<n>
Control the level of searching that the compiler does for prefetch opportunities by setting n to 1, 2, or 3,
where higher numbers mean to do more searching. The default for Oracle Developer Studio C and Oracle Developer Studio C++ is 1.
The default for Oracle Developer Studio Fortran is 2.
]]>
-xprofile=collect[:directory]
Collect profile data for feedback-directed optimization. If an option directory is named, the feedback will be stored
there.
When FDO is used, the training run gathers information regarding execution paths and data values. Hardware performance
counters are not used. FDO improves existing optimizations but does not introduce new classes of optimization.
]]>
-xprofile=use[:directory]
Use data collected for profile feedback. If an option directory is named, look for the feedback data there.
regexp="-xprofile=use(:\S+)?\b">
Use -xprofile_ircache with -xprofile=collect|use to improve compilation time during the use phase by reusing compilation data saved from the collect phase.
Analyze loops for reductions such as dot products, maximum and minimum finding.
Treat pointer-valued function parameters as restricted pointers.
Enables the use of non-faulting loads when used in conjunction with -xarch=v8plus. Assumes that no
memory based traps will occur.
]]>
-xsegment_align<n>
Causes the driver to include a special mapfile on the link line.
The mapfile aligns the text, data, and bss segments to the value specified by n.
-xtarget=native, or -xtarget=(some specific target)
Selects options for architecture, chip timing, and cache sizes. These can also be controlled separately, via
-xarch, -xchip, and -xcache, respectively. A wide variety of targets can be selected, including
ultra3, ultra3cu, ultra3i, ultra3iplus, ultra4, ultra4plus, ultraT1, ultraT2, ultraT2plus, T3, T4, T5, T7, M5, M6, M7, sparc64vi, sparc64vii, sparc64viiplus, sparc64x, sparc64xplus, sparc64xii . In each case, appropriate options
are selected for architecture, chip timing, and cache size to match that target.
If -xtarget=native is selected, options that are appropriate for the system where the compile is being done.
The default is -xtarget=generic, which sets the parameters for the best performance over most 32-bit platform
architectures.
On Solaris SPARC systems, the default pointer size with -xtarget=native is 32-bit.
]]>
-xthroughput=yes
Prefer optimization for high throughput situations where memory is already heavily loaded,
and the number of prefetches should therefore not be excessive.
yes means that the compiler will favor optimizations that slightly reducre performance for a single process while improving the amount of work achieved by all the processes on the system.
no is the default. The compiler does not reduce performance.
]]>
-xunroll=<n>
Enable unrolling loops n times where possible.
-xvector, -xvector=lib, -xvector=no%lib
Controll the vector math library.
- lib allows the compiler to transform math library calls within loops into calls to the vector math library.
- no%lib does not allow the compiler to transform math library calls within loops into calls to the vector math library.
- simd directs the compiler to use floating point and integer SIMD instructions.
- no%simd does not directs the compiler to use floating point and integer SIMD instructions.
- %none disables this option entirely.
-xvector is equivalent to -xvector=lib.
]]>