C H A P T E R  3

Fortran Compiler Options

This chapter details the command-line options for the f95 compiler.


3.1 Command Syntax

The general syntax of the compiler command line is:

f95 [options] list_of_files  additional_options

Items in square brackets indicate optional parameters. The brackets are not part of the command. The options are a list of option keywords prefixed by dash (-). Some keyword options take the next item in the list as an argument. The list_of_files is a list of source, object, or library file names separated by blanks. Also, there are some options that must appear after the list of source files, and these could include additional lists of files (for example, -B, -l, and -L).


3.2 Options Syntax

Typical compiler option formats are:

TABLE 3-1 Options Syntax

Syntax Format

Example

-flag

-g

-flagvalue

-Dnostep

-flag=value

-xunroll=4

-flag value

-o outfile


The following typographical conventions are used when describing the individual options:

TABLE 3-2 Typographic Notations for Options

Notation

Meaning

Example: Text/Instance

[ ]

Square brackets contain arguments that are optional.

-O[n]

-O4, -O

{ }

Curly brackets (braces) contain a set of choices for a required option.

-d{y|n}

-dy

|

The "pipe" or "bar" symbol separates arguments, only one of which may be chosen.

-B{dynamic|static}

-Bstatic

:

The colon, like the comma, is sometimes used to separate arguments.

-Rdir[:dir]

-R/local/libs:/U/a

...

The ellipsis indicates omission in a series.

-xinline=f1[,...fn]

-xinline=alpha,dos


Brackets, pipe, and ellipsis are meta characters used in the descriptions of the options and are not part of the options themselves.

Some general guidelines for options are:

Source files, object files, and libraries are compiled and linked in the order in which they appear on the command line.


3.3 Options Summary

In this section, the compiler options are grouped by function to provide an easy reference. The details will be found on the pages in the following sections, as indicated.

The following table summarizes the f95 compiler options by functionality. The table does not include obsolete and legacy option flags. Some flags serve more than one purpose and appear more than once.

TABLE 3-3 Compiler Options Grouped by Functionality

Function

Option Flag

Compilation Mode:

 

Compile only; do not produce an executable file

-c

 

Show commands built by the driver but do not compile

-dryrun

 

Support Fortran 77 extensions and compatibility

-f77

 

Specify path for writing compiled .mod Module files

-moddir=path

 

Specify name of object, library, or executable file to write

-o filename

 

Compile and generate only assembly code

-S

 

Strip symbol table from executable

-s

 

Suppress compiler messages, except error messages

-silent

 

Define path to directory for temporary files

-temp=path

 

Show elapsed time for each compilation phase

-time

 

Show version number of compiler and its phases

-V

 

Verbose messages

-v

 

Specify non-standard aliasing situations

-xalias=list

 

Compile with multiple processors

-xjobs=n

Compiled Code:

 

Add/suppress trailing underscores on external names

-ext_names=x

 

Inline specified user functions

-inline=list

 

Compile position independent code

-KPIC/-kpic

 

Inline certain math library routines

-libmil

 

STOP returns integer status value to shell

-stop_status[=yn]

 

Specify code address space

-xcode=x

 

Enable UltraSPARC prefetch instructions

-xprefetch[=x]

 

Specify use of optional registers

-xregs=x

 

Specify default data mappings

-xtypemap=x

Data Alignment:

 

Specify alignment of data in COMMON blocks

-aligncommon[=n]

 

Force COMMON block data alignment to allow double word fetch/store

-dalign

 

Force alignment of all data on 8-byte boundaries

-dbl_align_all

 

Align COMMON block data on 8-byte boundaries

-f

 

Specify memory alignment and behavior

-xmemalign[=ab]

Debugging:

 

Enable runtime subscript range checking

-C

 

Compile for debugging with dbx

-g

 

Compile for browsing with source browser

-sb, -sbfast

 

Flag use of undeclared variables

-u

 

Check C$PRAGMA ASSUME assertions

-xassume_control=check

 

Check for stack overflow at runtime

-xcheck=stkovf

 

Enable runtime task common check

-xcommonchk

 

Compile for Performance Analyzer

-xF

 

Generate cross-reference listings

-Xlistx

 

Enable debugging without object files

-xs

Diagnostics:

 

Flag use of non-standard extensions

-ansi

 

Suppress specific error messages

-erroff=list

 

Display error tag names with error messages

-errtags

 

Show summary of compiler options

-flags, -help

 

Show version number of the compiler and its phases

-V

 

Verbose messages

-v

 

Verbose parallelization messages

-vpara

 

Show/suppress warning messages

-wn

 

Display compiler README file

-xhelp=readme

Licensing:

 

Show license server information

-xlicinfo

Linking and Libraries:

 

Allow/require dynamic/static libraries

-Bx

 

Allow only dynamic/static library linking

-dy, -dn

 

Build a dynamic (shared object) library

-G

 

Assign name to dynamic library

-hname

 

Add directory to library search path

-Lpath

 

Link with library libname.a or libname.so

-lname

 

Build runtime library search path into executable

-Rpath

 

Disable use of incremental linker, ild

-xildoff

 

Link with optimized math library

-xlibmopt

 

Link with Sun Performance Library

-xlic_lib=sunperf

 

Link editor option

-zx

 

Generate pure libraries with no relocations

-ztext

Numerics and Floating-Point:

 

Use non-standard floating-point preferences

-fnonstd

 

Select SPARC non-standard floating point

-fns

 

Enable runtime floating-point overflow during input

-fpover

 

Select IEEE floating-point rounding mode

-fpround=r

 

Select floating-point optimization level

-fsimple=n

 

Select floating-point trapping mode

-ftrap=t

 

Specify rounding method for formatted input/output

-iorounding=mode

 

Promote single precision constants to double precision

-r8const

 

Enable interval arithmetic and set the appropriate floating-point environment (includes -xinterval)

-xia[=e]

 

Enable interval arithmetic extensions

-xinterval[=e]

Optimization and Performance:

 

Analyze loops for data dependencies

-depend

 

Optimize using a selection of options

-fast

 

Specify optimization level

-On

 

Pad data layout for efficient use of cache

-pad[=p]

 

Allocate local variables on the memory stack

-stackvar

 

Enable loop unrolling

-unroll[=m]

 

Enable optimization across source files

-xcrossfile[=n]

 

Invoke interprocedural optimizations pass

-xipo[=n]

 

Set highest optimization level for #pragma OPT

-xmaxopt[=n]

 

Enable/adjust compiler generated prefetch instructions

-xprefetch=list

 

Control automatic generation of prefetch instructions

-xprefetch_level=n

 

Enable generation or use of performance profiling data

-xprofile=p

 

Assert that no memory-based traps will occur

-xsafe=mem

 

Do no optimizations that increase code size

-xspace

 

Generate calls to vector library functions automatically

-xvector[=yn]

Parallelization:

 

Enable automatic parallelization of DO loops

-autopar

 

Enable parallelization of loops explicitly marked with directives

-explicitpar

 

Show loop parallelization information

-loopinfo

 

Specify Cray-style parallelization directives

-mp=CRAY

 

Compile for hand-coded multithreaded programming

-mt

 

Accept OpenMP API directives and set appropriate environment

-openmp[=keyword]

 

Parallelize loops with -autopar -explicitpar -depend combination

-parallel

 

Recognize reduction operations in loops with automatic parallelization

-reduction

 

Verbose parallelization messages

-vpara

Source Code:

 

Define preprocessor symbol

-Dname[=val]

 

Undefine preprocessor symbol

-Uname

 

Accept extended (132 character) source lines

-e

 

Apply preprocessor to .F and/or .F90 and .F95 files but do not compile

-F

 

Accept Fortran 95 fixed-format input

-fixed

 

Preprocess all source files with the fpp preprocessor

-fpp

 

Accept Fortran 95 free-format input

-free

 

Add directory to include file search path

-Ipath

 

Add directory to module search path

-Mpath

 

Recognize upper and lower case as distinct

-U

 

Tread hollerith as character in actual arguments

-xhasc={yes|no}

 

Select preprocessor, cpp or fpp, to use

-xpp[={fpp|cpp}]

 

Allow recursive subprogram calls

-xrecursive

Target Platform:

 

Optimize for the host system

-native

 

Specify target platform instruction set for the optimizer

-xarch=a

 

Specify target cache properties for optimizer

-xcache=a

 

Specify target processor for the optimizer

-xchip=a

 

Specify target platform for the optimizer

-xtarget=a


3.3.1 Commonly Used Options

The compiler has many features that are selectable by optional command-line parameters. The short list below of commonly used options is a good place to start.

TABLE 3-4 Commonly Used Options

Action

Option

Debug--global program checking across routines for consistency of arguments, commons, and so on.

-Xlist

Debug--produce additional symbol table information to enable the dbx and debugging.

-g

Performance--invoke the optimizer to produce faster running programs.

-O[n]

Performance--Produce efficient compilation and run times for the native platform, using a set of predetermined options.

-fast

Dynamic (-Bdynamic) or static (-Bstatic) library binding.

-Bx

Compile only--Suppress linking; make a .o file for each source file.

-c

Output file--Name the executable output file nm instead of a.out.

-o nm

Source code--Compile fixed format Fortran source code.

-fixed


3.3.2 Macro Flags

Some option flags are macros that expand into a specific set of other flags. These are provided as a convenient way to specify a number of options that are usually expressed together to select a certain feature.

TABLE 3-5 Macro Option Flags

Option Flag

Expansion

-dalign

-xmemalign=8s -aligncommon=16

-f

-aligncommon=16

-fast

-xO5 -libmil -fsimple=2 -dalign -xlibmopt -depend -fns -ftrap=common -pad=local -xvector=yes -xprefetch=yes

-fnonstd

-fns -ftrap=common

-parallel

-autopar -explicitpar -depend

-xia=widestneed

-xinterval=widestneed -ftrap=%none -fns=no -fsimple=0

-xia=strict

-xinterval=strict -ftrap=%none -fns=no -fsimple=0

-xtarget

-xarch=a -xcache=b -xchip=c


Settings that follow the macro flag on the command line override the expansion of the macro. For example, to use -fast but with an optimization level of -O3, the -O3 must come after -fast on the command line.

3.3.3 Backward Compatibility and Legacy Options

The following options are provided for backward compatibility with earlier compiler releases, and certain Fortran legacy capabilities.

TABLE 3-6 Backward Compatibility Options

Action

Option

Allow assignment to constant arguments.

-copyargs

Treat hollerith constant as character or typeless in call argument lists.

-xhasc[={yes|no}]

Support Fortran 77 extensions and conventions

-f77

Nonstandard arithmetic--allow nonstandard arithmetic.

-fnonstd

Optimize performance for the host system.

-native

DO loops--use one trip DO loops.

-onetrip

Allow legacy aliasing situations

-xalias=keywords


Use of these option flags is not recommended for producing portable Fortran 95 programs.

3.3.4 Obsolete Option Flags

The following options are considered obsolete and should not be used. They might be removed from later releases of the compiler.

TABLE 3-7 Obsolete f95 Options

Option Flag

Equivalent

-a

-xprofile=tcov

-cg89

-xtarget=ss2

-cg92

-xtarget=ss1000

-noqueue

License queueing. No longer needed.

-p

Profiling. Use -pg or the Performance Analyzer

-pic

-xcode=pic13

-PIC

-xcode=pic32



3.4 Options Reference

This section shows all the f95 compiler command-line option flags, including various risks, restrictions, caveats, interactions, examples, and other details.

This options reference details each option flag.

-a

Profile by basic block using tcov, old style. (Obsolete)

This is the old style of basic block profiling for tcov. See -xprofile=tcov for information on the new style of profiling and the tcov(1) man page for more details. Also see the manual, Program Performance Analysis Tools.

-aligncommon[=n]

Specify the alignment of data in common blocks and numeric sequence types.

n may be 1, 2, 4, 8, or 16, and indicates the maximum alignment (in bytes) for data elements within common blocks and numeric sequence types.

For example, -aligncommon=4 would align data elements with natural alignments of 4 bytes or more on 4-byte boundaries.

This option does not affect data with natural alignment smaller than the specified size.

Without -aligncommon, the compiler aligns elements in common blocks and numeric sequence types on (at most) 4-byte boundaries.

Specifying -aligncommon without a value defaults to 1: all common block and numeric sequence type elements align on byte boundaries (no padding between elements).

-aligncommon=16 reverts to -aligncommon=8 on platforms that are not 64-bit enabled (platforms other than v9, v9a, or v9b).

-ansi

Identify many nonstandard extensions.

Warning messages are issued for any uses of non-standard Fortran 95 extensions in the source code.

-arg=local

Preserve actual arguments over ENTRY statements.

When you compile a subprogram with alternate entry points with this option, f95 uses copy/restore to preserve the association of dummy and actual arguments.

This option is provided for compatibility with legacy Fortran 77 programs. Code that relies on this option is non-standard.

-autopar

Enable automatic loop parallelization.

Finds and parallelizes appropriate loops for running in parallel on multiple processors. Analyzes loops for inter-iteration data dependencies and loop restructuring. If the optimization level is not specified -O3 or higher, it will automatically be raised to -O3.

Also specify the -stackvar option when using any of the parallelization options, including -autopar.

Avoid -autopar if the program already contains explicit calls to the libthread threads library. See note in -mt.

The -autopar option is not appropriate on a single-processor system, and the compiled code will generally run slower.

To run a parallelized program in a multithreaded environment, you must set the PARALLEL (or OMP_NUM_THREADS) environment variable prior to execution. This tells the runtime system the maximum number of threads the program can create. The default is 1. In general, set the PARALLEL or OMP_NUM_THREADS variable to the available number of processors on the target platform.

If you use -autopar and compile and link in one step, the multithreading library and the thread-safe Fortran runtime library will automatically be linked. If you use -autopar and compile and link in separate steps, then you must also link with -autopar to insure linking the appropriate libraries.

The -reduction option may also be useful with -autopar. Other parallelization options are -parallel and -explicitpar.

Refer to the Fortran Programming Guide for more information on parallelization.

-B{static|dynamic}

Prefer dynamic or require static library linking.

No space is allowed between -B and dynamic or static. The default, without -B specified, is -Bdynamic.

Also note:

You can toggle -Bstatic and -Bdynamic on the command line. That is, you can link some libraries statically and some dynamically by specifying -Bstatic and -Bdynamic any number of times on the command line, as follows:

f95 prog.f -Bdynamic -lwells -Bstatic -lsurface

These are loader and linker options. Compiling and linking in separate steps with -Bx on the compile command will require it in the link step as well.

You cannot specify both -Bdynamic and -dn on the command line because -dn disables linking of dynamic libraries.

In a 64-bit Solaris environment, many system libraries are available only as shared dynamic libraries. These include libm.so and libc.so (libm.a and libc.a are not provided). This means that -Bstatic and -dn may cause linking errors in 64-bit Solaris environments. Applications must link with the dynamic libraries in these cases.

See the Fortran Programming Guide for more information on static and dynamic libraries.

-C

Check array references for out of range subscripts and conformance at runtime.

Subscripting arrays beyond their declared sizes may result in unexpected results, including segmentation faults. The -C option checks for possible array subscript violations in the source code and during execution. -C also adds runtime checks for array conformance in array syntax expressions

Specifying -C may make the executable file larger.

If the -C option is used, array subscript violations are treated as an error. If an array subscript range violation is detected in the source code during compilation, it is treated as a compilation error.

If an array subscript violation can only be determined at runtime, the compiler generates range-checking code into the executable program. This may cause an increase in execution time. As a result, it is appropriate to enable full array subscript checking while developing and debugging a program, then recompiling the final production executable without subscript checking.

-c

Compile only; produce object .o files, but suppress linking.

Compile a .o file for each source file. If only a single source file is being compiled, the -o option can be used to specify the name of the .o file written.

-cg89

Compile for generic SPARC architecture. (Obsolete)

This option is a macro for: -xarch=v7 -xchip=old -xcache=64/32/1 which is equivalent to -xtarget=ss2.

-cg92

Compile for SPARC V8 architecture. (Obsolete)

This option is a macro for:
-xarch=v8 -xchip=super -xcache=16/32/4:1024/32/1 which is equivalent to -xtarget=ss1000.

-copyargs

Allow assignment to constant arguments.

Allow a subprogram to change a dummy argument that is a constant. This option is provided only to allow legacy code to compile and execute without a runtime error.

Code that aborts unless compiled with -copyargs is, of course, not Fortran standard compliant. Also, such code is often unpredictable.

-Dname[=def]

Define symbol name for the preprocessor.

This option only applies to .F, .F90, and .F95 source files.

-Dnamedef Define name to have value def

-Dname Define name to be 1

On the command line, this option will define name as if:

#define name[=def]

had appears in the source file. If no =def specified, the name name is defined as the value 1. The macro symbol name is passed on to the preprocessor fpp (or cpp -- see the -xpp option) for expansion.

The predefined macro symbols have two leading underscores. The Fortran syntax may not support the actual values of these macros--they should appear only in fpp or cpp preprocessor directives.

_ _sparc, _ _unix, _ _sun, _ _SVR4,
_ _SunOS_5_6, _ _SunOS_5_7, _ _SunOS_5_8

For instance, the value _ _sparc is defined on SPARC systems. You can use these values in such preprocessor conditionals as the following:

#ifdef _ _sparc

f95 uses the fpp(1) preprocessor by default. Like the C preprocessor cpp(1), fpp expands source code macros and enables conditional compilation of code. Unlike cpp, fpp understands Fortran syntax, and is preferred as a Fortran preprocessor. Use the -xpp=cpp flag to force the compiler to specifically use cpp rather than fpp.

-dalign

Align COMMON blocks and numerical sequence types, and generate faster multi-word load/stores.

This flag changes the data layout in COMMON blocks, numeric sequence types, and EQUIVALENCE classes, and enables the compiler to generate faster multi-word load/stores for that data.

The data layout effect is that of the -f flag: double- and quad-precision data in COMMON blocks and EQUIVALENCE classes are laid out in memory along their "natural" alignment, which is on 8-byte boundaries (or on 16-byte boundaries for quad-precision when compiling for 64-bit environments with -xarch=v9 or v9a). The default alignment of data in COMMON blocks is on 4-byte boundaries. The compiler is also allowed to assume natural alignment and generate faster multi-word load/stores to reference the data.



Note - -dalign may result in nonstandard alignment of data, which could cause problems with variables in EQUIVALENCE or COMMON and may render the program non-portable if -dalign is required.



-dalign is a macro equivalent to: -xmemalign=8s -aligncommon=16. See -aligncommon[=n], and -xmemalign[=<a><b>].

If you compile one subprogram with -dalign, compile all subprograms of the program with -dalign. This option is included in the -fast option.

Note that because -dalign invokes -aligncommon, numeric sequence types are also affected by this option.

-dbl_align_all={yes|no}

Force alignment of data on 8-byte boundaries

The value is either yes or no. If yes, all variables will be aligned on 8-byte boundaries. Default is -dbl_align_all=no.

When compiling for 64-bit environments with -xarch=v9 or v9a, this flag will align quad-precision data on 16-byte boundaries.

This flag does not alter the layout of data in COMMON blocks or user-defined structures.

Use with -dalign to enable added efficiency with multi-word load/stores.

If used, all routines must be compiled with this flag.

-depend{=yes|no}

Analyze loops for data dependencies and do loop restructuring.

Dependence analysis is enabled with -depend or -depend=yes. The analysis is disabled with -depend=no, which is the compiler default.

This option will raise the optimization level to O3 if no optimization level is specified, or if it is specified less than O3. -depend is also included with -fast, -autopar and -parallel. Note also that specifying an optimization level -O3 or higher automatically adds -depend. (See the Fortran Programming Guide.)

-dn

Disallow dynamic libraries. See -d{y|n}.

-dryrun

Show commands built by the f95 command-line driver, but do not compile.

Useful when debugging, this option displays the commands and suboptions the compiler will invoke to perform the compilation.

-d{y|n}

Allow or disallow dynamic libraries for the entire executable.

The default, if not specified, is -dy.

Unlike -Bx, this option applies to the whole executable and need appear only once on the command line.

-dy|-dn are loader and linker options. If you compile and link in separate steps with these options, then you need the same option in the link step.

In a 64-bit Solaris environment, many system libraries are not available only as shared dynamic libraries. These include libm.so and libc.so (libm.a and libc.a are not provided). This means that -dn and -Bstatic may cause linking errors in 64-bit Solaris environments. Applications must link with the dynamic libraries in these cases.

-e

Accept extended length input source line.

Extended source lines can be up to 132 characters long. The compiler pads on the right with trailing blanks to column 132. If you use continuation lines while compiling with -e, then do not split character constants across lines, otherwise, unnecessary blanks may be inserted in the constants.

-erroff=taglist

Suppress warning messages listed by tag name.

Suppress the display of warning messages specified in the comma-separated list of tag names taglist. If taglist consists of %none, no warnings are suppressed. If taglist consists of %all, all warnings are suppressed (this is equivalent to the -w option.)

Example:

f95 -erroff=WDECL_LOCAL_NOTUSED ink.f

Use the -errtags option to see the tag names associated with warning messages.

-errtags[={yes|no}]

Display the message tag with each warning message.

With-errtags=yes, the compiler's internal error tag name will appear along with warning messages. The default is not to display the tag (-errtags=no).

demo% f95 -errtags ink.f
ink.f:
 MAIN:
"ink.f", line 11: Warning: local variable "i" never used (WDECL_LOCAL_NOTUSED)  <- The warning message's tag name

-errtags alone stands for -errtags=yes.

-explicitpar

Parallelize loops explicitly marked by Sun or Cray directives.

The compiler will generate parallel code even if there are data dependencies in the DO loop that would cause the loop to generate incorrect results when run in parallel. With explicit parallelization, it is the user's responsibility to correctly analyze loops for data dependency problems before marking them with parallelization directives.

Parallelization is appropriate only on multiprocessor systems.

This option enables Sun and/or Cray explicit parallelization directives. DO loops immediately preceded by parallelization directives will have threaded code generated for them.

To enable OpenMP explicit parallelization directives, do not use -explicitpar. Use -openmp instead. See -openmp[=keyword])



Note - -explicitpar should not be used to compile programs that already do their own multithreading with calls to the libthread library.



To run a parallelized program in a multithreaded environment, you must set the PARALLEL (or OMP_NUM_THREADS) environment variable prior to execution. This tells the runtime system the maximum number of threads the program can create. The default is 1. In general, set the PARALLEL or OMP_NUM_THREADS variable to the available number of processors on the target platform.

If you use -explicitpar and compile and link in one step, then linking automatically includes the multithreading library and the thread-safe Fortran runtime library. If you use -explicitpar and compile and link in separate steps, then you must also link with -explicitpar.

To improve performance, also specify the -stackvar option when using any of the parallelization options, including -explicitpar.

Use the -mp option (-mp={%none|sun|cray}) to select the style of parallelization directives enabled. The default with -explicitpar is Sun directives. Use -explicitpar -mp=cray to enable Cray directives.

If the optimization level is not -O3 or higher, it is raised to -O3 automatically.

For details, see the "Parallelization" chapter in the Fortran Programming Guide.

-ext_names=e

Create external names with or without trailing underscores.

e must be either plain or underscores. The default is underscores.

-ext_names=plain: Do not add trailing underscore.

-ext_names=underscores: Add trailing underscore.

An external name is a name of a subroutine, function, block data subprogram, or labeled common. This option affects both the name of the routine's entry point and the name used in calls to it. Use this flag to allow Fortran 95 routines to call (and be called by) other programming language routines.

-F

Invoke the source file preprocessor, but do not compile.

Apply the fpp preprocessor to .F files (and .f95 files with f95) and write the processed result on a file with the same name but with suffix changed to .f (or .f95), but do not compile.

Example:

f95 -F source.F

writes the processed source file to source.f

fpp is the default preprocessor for Fortran. The C preprocessor, cpp, can be selected instead by specifying -xpp=cpp.

-f

Align double- and quad-precision data in COMMON blocks.

-f is a legacy option flag equivalent to -aligncommon=16. Use of -aligncommon is preferred.

The default alignment of data in COMMON blocks is on 4-byte boundaries. -f changes the data layout of double- and quad-precision data in COMMON blocks and EQUIVALENCE classes to be placed in memory along their "natural" alignment, which is on 8-byte boundaries (or on 16-byte boundaries for quad-precision when compiling for 64-bit environments with -xarch=v9 or v9a).



Note - -f may result in nonstandard alignment of data, which could cause problems with variables in EQUIVALENCE or COMMON and may render the program non-portable if -f is required.



Compiling any part of a program with -f requires compiling all subprograms of that program with -f.

By itself, this option does not enable the compiler to generate faster multi-word fetch/store instructions on double and quad precision data. The -dalign option does this and invokes -f as well. Use of -dalign is preferred over the older -f. See -dalign. Because -dalign is part of the -fast option, so is -f.

-f77[=list]

Select Fortran 77 compatibility mode.

This option flag enables porting legacy Fortran 77 source programs, including those with language extensions accepted by the f77 compiler, to the f95 Fortran 95 compiler.

list is a comma-separated list selected from the following possible keywords:

keyword

meaning

%all

Enable all the Fortran 77 compatibility features.

%none

Disable all the Fortran 77 compatibility features.

backslash

Accept backslash as an escape sequence in character strings.

input

Allow input formats accepted by f77.

intrinsics

Limit recognition of intrinsics to only Fortran 77 intrinsics.

logical

Accept Fortran 77 usage of logical variables, such as:

- assigning integer values to logical variables
- allowing arithmetic expressions in logical conditional statements, with .NE.0 representing .TRUE.
- allowing relational operators .EQ. and .NE. with logical operands

misc

Allow miscellaneous f77 Fortran 77 extensions.

output

Generate f77-style formatted output, including list-directed and NAMELIST output.

subscript

Allow non-integer expressions as array subscripts.

tab

Enable f77-style TAB-formatting, including unlimited source line length. No blank padding will be added to source lines shorter than 72 characters.


All keywords can be prefixed by no% to disable the feature, as in:

-f77=%all,no%backslash

The default, when -f77 is not specified, is -f77=%none. Using -f77 without a list is equivalent to specifying -f77=%all.

Exceptions Trapping and -f77:

Specifying -f77 adds -ftrap=%none to the comand line to mimic Fortran 77's behavior regarding arithmetic exception trapping. The Fortran 77 compiler allowed execution to continue after an arithmetic exception occurred. Compiling with -f77 also causes the program to call ieee_retrospective on program exit to report on any arithmetic exceptions that might have occurred. Specify -ftrap=common following the -f77 option flag on the command line to enable trapping after an exception is raised.

See Chapter 5 for complete information on f77 compatibility and Fortran 77 to Fortran 95 migration.

See also the -xalias flag for handling non-standard programming syndromes that may cause incorrect results.

-fast

Select options that optimize execution performance.



Note - This option is defined as a particular selection of other options that is subject to change from one release to another, and between compilers. Also, some of the options selected by -fast might not be available on all platforms. Compile with the -v (verbose) flag to see the expansion of -fast.



-fast provides high performance for certain benchmark applications. However, the particular choice of options may or may not be appropriate for your application. Use -fast as a good starting point for compiling your application for best performance. But additional tuning may still be required. If your program behaves improperly when compiled with -fast, look closely at the individual options that make up -fast and invoke only those appropriate to your program that preserve correct behavior.

Note also that a program compiled with -fast may show good performance and accurate results with some data sets, but not with others. Avoid compiling with -fast those programs that depend on particular properties of floating-point arithmetic.

Because some of the options selected by -fast have linking implications, if you compile and link in separate steps be sure to link with -fast also.

-fast selects the following options:

Details about the options selected by -fast:

It is possible to add or subtract from this list by following the -fast option with other options, as in:

f95 -fast -fsimple=1 -xnolibmopt ...

which overrides the -fsimple=2 option and disables the -xlibmopt selected by -fast.

Because -fast invokes -dalign, -fns, -fsimple=2, programs compiled with -fast can result in nonstandard floating-point arithmetic, nonstandard alignment of data, and nonstandard ordering of expression evaluation. These selections might not be appropriate for most programs.

Note that the set of options selected by the -fast flag can change with each compiler release.

-fixed

Specify fixed-format Fortran 95 source input files.

All source files on the command-line will be interpreted as fixed format regardless of filename extension. Normally, f95 interprets only .f files as fixed format, .f95 as free format.

-flags

Synonym for -help.

-fnonstd

Initialize floating-point hardware to non-standard preferences.

This option is a macro for the combination of the following option flags:

-fns -ftrap=common

Specifying -fnonstd is approximately equivalent to the following two calls at the beginning of a Fortran main program.

i=ieee_handler("set", "common", SIGFPE_ABORT)
call nonstandard_arithmetic() 

The nonstandard_arithmetic() routine replaces the obsolete abrupt_underflow() routine of earlier releases.

To be effective, the main program must be compiled with this option.

Using this option initializes the floating-point hardware to:

See -fns for more information about gradual underflow and subnormal numbers.

The -fnonstd option allows hardware traps to be enabled for floating-point overflow, division by zero, and invalid operation exceptions. These are converted into SIGFPE signals, and if the program has no SIGFPE handler, it terminates with a dump of memory.

For more information, see the ieee_handler(3m) and ieee_functions(3m) man pages, the Numerical Computation Guide, and the Fortran Programming Guide.

-fns[={no|yes}]

Select SPARC nonstandard floating-point mode.

The default is the SPARC standard floating-point mode (-fns=no). (See the "Floating-Point Arithmetic" chapter of the Fortran Programming Guide.)

Optional use of =yes or =no provides a way of toggling the -fns flag following some other macro flag that includes it, such as -fast. -fns is the same as -fns=yes.

This option flag enables nonstandard floating-point mode when the program begins execution. On some SPARC systems, specifying nonstandard floating-point mode disables "gradual underflow", causing tiny results to be flushed to zero rather than producing subnormal numbers. It also causes subnormal operands to be silently replaced by zero. On those SPARC systems that do not support gradual underflow and subnormal numbers in hardware, use of this option can significantly improve the performance of some programs.

Where x does not cause total underflow, x is a subnormal number if and only if |x| is in one of the ranges indicated:

TABLE 3-8 Subnormal REAL and DOUBLE

Data Type

Range

REAL

0.0 < |x| < 1.17549435e-38

DOUBLE PRECISION

0.0 < |x| < 2.22507385072014e-308


See the Numerical Computation Guide for details on subnormal numbers, and the Fortran Programming Guide chapter "Floating-Point Arithmetic" for more information about this and similar options. (Some arithmeticians use the term denormalized number for subnormal number.)

The standard initialization of floating-point preferences is the default:

To be effective, the main program must be compiled with this option.

-fpover[={yes|no}]

Detect floating-point overflow in formatted input.

With -fpover=yes specified, the I/O library will detect runtime floating-point overflows in formatted input and return an error condition (1031). The default is no such overflow detection (-fpover=no). -fpover is equivalent to -fpover=yes.

-fpp

Force preprocessing of input with fpp.

Pass all the input source files listed on the f95 command line through the fpp preprocessor, regardless of file extension. (Normally, only files with .F, .F90, or .F95 extension are automatically preprocessed by fpp.) See also -xpp={fpp|cpp}.

-free

Specify free-format source input files.

All source files on the command-line will be interpreted as f95 free format regardless of filename extension. Normally, f95 interprets .f files as fixed format, .f95 as free format.

-fround=r

Set the IEEE rounding mode in effect at startup.

r must be one of: nearest, tozero, negative, positive.

The default is -fround=nearest.

To be effective, compile the main program with this option.

This option sets the IEEE 754 rounding mode that:

When r is tozero, negative, or positive, the option sets the rounding direction to round-to-zero, round-to-negative-infinity, or round-to-positive-infinity, respectively, when the program begins execution. When -fround is not specified, -fround=nearest is used as the default and the rounding direction is round-to-nearest. The meanings are the same as those for the ieee_flags function. (See the "Floating-Point Arithmetic" chapter of the Fortran Programming Guide.)

-fsimple[=n]

Select floating-point optimization preferences.

Allow the optimizer to make simplifying assumptions concerning floating-point arithmetic. (See the "Floating-Point Arithmetic" chapter of the Fortran Programming Guide.)

For consistent results, compile all units of a program with the same -fsimple option.

If n is present, it must be 0, 1, or 2. The defaults are:

The different floating-point simplification levels are:

-fsimple=0

Permit no simplifying assumptions. Preserve strict IEEE 754 conformance.

-fsimple=1

Allow conservative simplifications. The resulting code does not strictly conform to IEEE 754, but numeric results of most programs are unchanged.

With -fsimple=1, the optimizer can assume the following:

With -fsimple=1, the optimizer is not allowed to optimize completely without regard to roundoff or exceptions. In particular, a floating-point computation cannot be replaced by one that produces different results with rounding modes held constant at run time.

-fsimple=2

Permit aggressive floating point optimizations. This can cause some programs to produce different numeric results due to changes in the way expressions are evaluated. In particular, the Fortran standard rule requiring compilers to honor explicit parentheses around subexpressions to control expression evaluation order may be broken with -fsimple=2. This could result in numerical rounding differences with programs that depend on this rule.

For example, with -fsimple=2, the compiler may evaluate C-(A-B) as
(C-A)+B, breaking the standard's rule about explicit parentheses, if the resulting code is better optimized. The compiler might also replace repeated computations of x/y with x*z, where z=1/y is computed once and saved in a temporary, to eliminate the costly divide operations.

Programs that depend on particular properties of floating-point arithmetic should not be compiled with -fsimple=2.

Even with -fsimple=2, the optimizer still is not permitted to introduce a floating point exception in a program that otherwise produces none.

-fast sets -fsimple=2.

-ftrap=t

Set floating-point trapping mode in effect at startup.

t is a comma-separated list that consists of one or more of the following:

%all, %none, common, [no%]invalid, [no%]overflow, [no%]underflow, [no%]division, [no%]inexact.

-ftrap=common is a macro for
-ftrap=invalid,overflow,underflow,division.

The f95 default is -ftrap=common.

This option sets the IEEE 754 trapping modes that are established at program initialization. Processing is left-to-right. The common exceptions, by definition, are invalid, division by zero, and overflow. For example: -ftrap=overflow.

Example: -ftrap=%all,no%inexact means set all traps, except inexact.

The meanings for -ftrap=t are the same as for ieee_flags(), except that:

To be effective, compile the main program with this option.

For further information, see the "Floating-Point Arithmetic" chapter in the Fortran Programming Guide.

-G

Build a dynamic shared library instead of an executable file.

Direct the linker to build a shared dynamic library. Without -G, the linker builds an executable file. With -G, it builds a dynamic library. Use -o with -G to specify the name of the file to be written. See the Fortran Programming Guide chapter "Libraries" for details.

-g

Compile for debugging and performance analysis.

Produce additional symbol table information for debugging with dbx(1) debugging utility and for performance analysis with the Performance Analyzer.

Although some debugging is possible without specifying -g, the full capabilities of dbx and debugger are only available to those compilation units compiled with -g.

Some capabilities of other options specified along with -g may be limited. See the dbx documentation for details.

The -g option makes -xildon the default incremental linker option when .o object files appear on the command line (see -xild{off|on}). That is, with -g, the compiler default behavior is to automatically invoke ild in place of ld, unless the -G option is present, or any source file is named on the command line.

To use the full capabilities of the Performance Analyzer, compile with -g. While some performance analysis features do not require -g, you must compile with -g to view annotated source, some function level information, and compiler commentary messages. (See the analyzer(1) man page and the manual Program Performance Analysis Tools.)

The commentary messages generated with -g describe the optimizations and transformations the compiler made while compiling your program. The messages, interleaved with the source code, can be displayed by the er_src(1) command.

Note that commentary messages only appear if the compiler actually performed any optimizations. You are more likely to see commentary messages when you request high optimization levels, such as with -xO4, or -fast.

-hname

Specify the name of the generated dynamic shared library.

This option is passed on to the linker. For details, see the Solaris Linker and Libraries Guide, and the Fortran Programming Guide chapter "Libraries."

The -hname option records the name name to the shared dynamic library being created as the internal name of the library. A space between -h and name is optional (except if the library name is elp, for which the space will be needed). In general, name must be the same as what follows the -o. Use of this option is meaningless without also specifying -G.

Without the -hname option, no internal name is recorded in the library file.

If the library has an internal name, whenever an executable program referencing the library is run the runtime linker will search for a library with the same internal name in any path the linker is searching. With an internal name specified, searching for the library at runtime linking is more flexible. This option can also be used to specify versions of shared libraries.

If there is no internal name of a shared library, then the linker uses a specific path for the shared library file instead.

-help

Display a summary list of compiler options.

See also -xhelp=h.

-Ipath

Add path to the INCLUDE file search path.

Insert the directory path path at the start of the INCLUDE file search path. No space is allowed between -I and path. Invalid directories are ignored with no warning message.

The include file search path is the list of directories searched for INCLUDE files--file names appearing on preprocessor #include directives, or Fortran INCLUDE statements.

Example: Search for INCLUDE files in /usr/app/include:

demo% f95 -I/usr/app/include growth.F

Multiple -Ipath options may appear on the command line. Each adds to the top of the search path list (first path searched).

The search order for relative paths on INCLUDE or #include is:

1. The directory that contains the source file

2. The directories that are named in the -I options

3. The directories in the compiler's internal default list

4. /usr/include/

-inline=[%auto][[,][no%]f1,...[no%]fn]

Enable or disable inlining of specified routines.

Request the optimizer to inline the user-written routines named in the f1,...,fn list. Prefixing a routine name with no% disables inlining of that routine.

Inlining is an optimization technique whereby the compiler effectively replaces a subprogram reference such as a CALL or function call with the actual subprogram code itself. Inlining often provides the optimizer more opportunities to produce efficient code.

The lists are a comma-separated list of functions and subroutines. To inhibit inlining of a function, prefix its name with no%.

Example: Inline the routines xbar, zbar, vpoint:

demo% f95 -O3 -inline=xbar,zbar,vpoint *.f

Following are the restrictions; no warnings are issued:

The appearance of -inline with -O4 disables the automatic inlining that the compiler would normally perform, unless %auto is also specified. With -O4, the compilers normally try to inline all appropriate user-written subroutines and functions. Adding -inline with -O4 may degrade performance by restricting the optimizer's inlining to only those routines in the list. In this case, use the %auto suboption to enable automatic inlining at -O4 and -O5.

demo% f95 -O4 -inline=%auto,no%zpoint *.f

In the example above, the user has enabled -O4's automatic inlining while disabling any possible inlining of the routine zpoint() that the compiler might attempt.

-iorounding=mode

Set floating-point rounding mode for formatted input/output.

Sets the ROUND= specifier globally for all formatted input/output operations.

Allowed values for mode are compatible and processor-defined.

With -iorounding=compatible, the value resulting from data conversion is the one closer to the two nearest representations, or the value away from zero if the value is halfway between them.

With -iorounding=processor-defined, the rounding mode is the processor's default mode. This is the default when -iorounding is not specified.

-Kpic

Obsolete synonym for -xcode=pic13.

-KPIC

Obsolete synonym for -xcode=pic32.

-Lpath

Add path to list of directory paths to search for libraries.

Adds path to the front of the list of object-library search directories. A space between -L and path is optional. This option is passed to the linker. See also -lx.

While building the executable file, ld(1) searches path for archive libraries (.a files) and shared libraries (.so files). ld searches path before searching the default directories. (See the Fortran Programming Guide chapter "Libraries" for information on library search order.) For the relative order between LD_LIBRARY_PATH and
-Lpath, see ld(1).



Note - Specifying /usr/lib or /usr/ccs/lib with -Lpath may prevent linking the unbundled libm. These directories are searched by default.



Example: Use -Lpath to specify library search directories:

demo% f95 -L./dir1 -L./dir2 any.f

-lx

Add library libx.a to linker's list of search libraries.

Pass -lx to the linker to specify additional libraries for ld to search for unresolved references. ld links with object library libx. If shared library libx.so is available (and -Bstatic or -dn are not specified), ld uses it, otherwise, ld uses static library libx.a. If it uses a shared library, the name is built in to a.out. No space is allowed between -l and x character strings.

Example: Link with the library libVZY:

demo% f95 any.f -lVZY

Use -lx again to link with more libraries.

Example: Link with the libraries liby and libz:

demo% f95 any.f -ly -lz 

See also the "Libraries" chapter in the Fortran Programming Guide for information on library search paths and search order.

-libmil

Inline selected libm library routines for optimization.

There are inline templates for some of the libm library routines. This option selects those inline templates that produce the fastest executable for the floating-point options and platform currently being used.

For more information, see the man pages libm_single(3F) and libm_double(3F)

-loopinfo

Show loop parallelization results.

Show which loops were and were not parallelized with the -parallel, -autopar, or -explicitpar options. (Option -loopinfo must appear with one of these parallelization options.)

-loopinfo displays a list of messages on standard error:

demo% f95 -o shalow -fast -parallel -loopinfo shalow.f
...
"shalow.f", line 325: not parallelized, not profitable (inlined loop)
"shalow.f", line 172: PARALLELIZED, and serial version generated
"shalow.f", line 173: not parallelized, not profitable
"shalow.f", line 181: PARALLELIZED, fused
"shalow.f", line 182: not parallelized, not profitable
"shalow.f", line 193: not parallelized, not profitable
"shalow.f", line 199: PARALLELIZED, and serial version generated
"shalow.f", line 200: not parallelized, not profitable
"shalow.f", line 226: PARALLELIZED, and serial version generated
"shalow.f", line 227: not parallelized, not profitable
...etc

-Mpath

Add path to directory paths searched for Fortran 95 modules. No space appears between the -M and path.

path may specify the path to a directory, a .mod precompiled module file, or .a archive file of precompiled module files. The compiler determines the type of the file by examining its contents.

.a archive files must be explicitly specified on a -M option flag to be searched for modules.

Only .mod files with the same names as the MODULE names appearing on USE statements will be searched.

If not specified, the compiler searches the current directory for module files.

See Module Files for more information about modules in Fortran 95.

-moddir=path

Specify where the compiler will write compiled .mod MODULE files.

The compiler will write the .mod MODULE information files it compiles in the directory specified by path. The directory path can also be specified with the MODDIR environment variable. If both are specified, this option flag takes precedence.

The compiler uses the current directory as the default for writing .mod files.

See Module Files for more information about modules in Fortran 95.

-mp={%none|sun|cray}

Select Sun or Cray parallelization directives.

The default without specifying -explicitpar is -mp=%none.

The default with -explicitpar is -mp=sun.

-mp=sun

Accept Sun-style directives: C$PAR or !$PAR prefix.

-mp=cray

Accept Cray-style directives: CMIC$ or !MIC$ prefix.

-mp=%none

Ignore all parallelization directives.


You must also specify -explicitpar (or -parallel) to enable parallelization. For correctness, also specify -stackvar:

-explicitpar -stackvar -mp=cray

To compile for OpenMP parallelization, use the -openmp flag. See -openmp[=keyword].

Sun and Cray directives cannot both be active in the same compilation unit.

A summary of the Sun and Cray parallelization directives appears in Appendix D in this manual. See the Fortran Programming Guide for details.

-mt

Require linking to thread-safe libraries.

If you do your own low-level thread management (for example, by calling the libthread library), compiling with -mt prevents conflicts.

Use -mt if you mix Fortran with multithreaded C code that calls the libthread library. See also the Solaris Multithreaded Programming Guide.

-mt is implied automatically when using the -autopar, -explicitpar, or -parallel options.

Note the following:

-native

Optimize performance for the host system. (Obsolete)

This option is a synonym for -xtarget=native. The -fast option sets -xtarget=native.

-noautopar

Disables automatic parallelization invoked by -autopar earlier on the command line.

-nodepend

Cancel any -depend appearing earlier on the command line.

-noexplicitpar

Disables explicit parallelization invoked by -explicitpar earlier on the command line.

-nolib

Disable linking with system libraries.

Do not automatically link with any system or language library; that is do not pass any default -lx options on to ld. The normal behavior is to link system libraries into the executables automatically, without the user specifying them on the command line.

The -nolib option makes it easier to link one of these libraries statically. The system and language libraries are required for final execution. It is your responsibility to link them in manually. This option provides you with complete control.

Link libm statically and libc dynamically with f95:

demo% f95 -nolib any.f95 -Bstatic -lm -Bdynamic -lc

The order for the -lx options is important. Follow the order shown in the examples.

-nolibmil

Cancel -libmil on command line.

Use this option after the -fast option to disable inlining of libm math routines:

demo% f95 -fast -nolibmil ...

-noreduction

Disable -reduction on command line.

This option disables -reduction.

-norunpath

Do not build a runtime shared library search path into the executable.

The compiler normally builds into an executable a path that tells the runtime linker where to find the shared libraries it will need. The path is installation dependent. The -norunpath option prevents that path from being built in to the executable.

This option is helpful when libraries have been installed in some nonstandard location, and you do not wish to make the loader search down those paths when the executable is run at another site. Compare with -Rpaths.

See the Fortran Programming Guide chapter on "Libraries" for more information.

-O[n]

Specify optimization level.

n can be 1, 2, 3, 4, or 5. No space is allowed between -O and n.

If -O[n] is not specified, only a very basic level of optimization limited to local common subexpression elimination and dead code analysis is performed. A program's performance may be significantly improved when compiled with an optimization level than without optimization. Use of -O (which sets -O3) or
-fast (which sets -O5) is recommended for most programs.

Each -On level includes the optimizations performed at the levels below it. Generally, the higher the level of optimization a program is compiled with, the better runtime performance obtained. However, higher optimization levels may result in increased compilation time and larger executable files.

Debugging with -g does not suppress -On, but -On limits -g in certain ways; see the dbx documentation.

The -O3 and -O4 options reduce the utility of debugging such that you cannot display variables from dbx, but you can still use the dbx where command to get a symbolic traceback.

If the optimizer runs out of memory, it attempts to proceed over again at a lower level of optimization, resuming compilation of subsequent routines at the original level.

For details on optimization, see the Fortran Programming Guide chapters "Performance Profiling" and "Performance and Optimization."

-O

This is equivalent to -O3.

-O1

Provides a minimum of statement-level optimizations.

Use if higher levels result in excessive compilation time, or exceed available swap space.

-O2

Enables basic block level optimizations.

This level usually gives the smallest code size. (See also -xspace.)

-O3 is preferred over -O2 unless -O3 results in unreasonably long compilation time, exceeds swap space, or generates excessively large executable files.

-O3

Adds loop unrolling and global optimizations at the function level. Adds -depend automatically.

Usually -O3 generates larger executable files.

-O4

Adds automatic inlining of routines contained in the same file.

Usually -O4 generates larger executable files due to inlining.

The -g option suppresses the -O4 automatic inlining described above.
-xcrossfile increases the scope of inlining with -O4.

-O5

Attempt aggressive optimizations.

Suitable only for that small fraction of a program that uses the largest fraction of compute time. -O5's optimization algorithms take more compilation time, and may also degrade performance when applied to too large a fraction of the source program.

Optimization at this level is more likely to improve performance if done with profile feedback. See -xprofile=p.

-o name

Specify the name of the executable file to be written.

There must be a blank between -o and name. Without this option, the default is to write the executable file to a.out. When used with -c, -o specifies the target .o object file; with -G it specifies the target .so library file.

-onetrip

Enable one trip DO loops.

Compile DO loops so that they are executed at least once. DO loops in standard Fortran are not performed at all if the upper limit is smaller than the lower limit, unlike some legacy implementations of Fortran.

-openmp[=keyword]

Enable explicit parallelization with Fortran 95 OpenMP Version 2.0 directives.

The flag accepts the following optional keyword suboptions:

parallel

  • Enables recognition of OpenMP pragmas, and the program is parallelized accordingly.
  • The minimum optimization level for -xopenmp=parallel is -xO3. The compiler changes the optimization from a lower level to -xO3 if necessary, and issues a warning.
  • Defines preprocessor token _OPENMP to be 200011
  • Invokes -stackvar automatically.

noopt

  • Enables recognition of OpenMP pragmas, and the program is parallelized accordingly.
  • The compiler does not raise the optimization level if it is lower than -xO3. If you explicitly set the optimization to a level lower than -xO3, as in -xO2 -openmp=noopt the compiler will issue an error. If you do not specify an optimization level with -openmp=noopt, the OpenMP pragmas are recognized, the program is parallelized accordingly, but no optimization is done.
  • Defines preprocessor token _OPENMP to be 200011
  • Invokes -stackvar automatically.

stubs

  • Disables recognition of OpenMP pragmas, links to stub library routines, and does not change the optimization level. Use this option if your application makes explicit calls to the OpenMP runtime library and you want to compile it to execute serially.
  • Defines preprocessor token _OPENMP to be 200011

none

Disables recognition of OpenMP pragmas and does not change the optimization level. (This is the compiler's default.)


-openmp specified without a suboption keyword is equivalent to -openmp=parallel. Note that this default might change in later releases.

To debug OpenMP programs with dbx, compile with -g -openmp=noopt to be able to breakpoint within parallel regions and display the contents of variables.

The OpenMP directives are summarized in the OpenMP API User's Guide.

To run a parallelized program in a multithreaded environment, you must set the PARALLEL (or OMP_NUM_THREADS) environment variable prior to execution. This tells the runtime system the maximum number of threads the program can create. The default is 1. In general, set the PARALLEL or OMP_NUM_THREADS variable to the available number of processors on the target platform.

OpenMP requires the definition of the preprocessor symbol _OPENMP to have the decimal value YYYYMM where YYYY and MM are the year and month designations of the version of the OpenMP Fortran API that the implementation supports.

When compiling and linking in separate steps, also specify -openmp on the link step. This is especially important when compiling libraries that contain OpenMP directives.

-PIC

Compile position-independent code with 32-bit addresses. (Obsolete)

-PIC is equivalent to -xcode=pic32. See -xcode=addr for more information about position-independent code.

-p

Compile for profiling with the prof profiler. (Obsolete)

Prepare object files for profiling, see prof (1). If you compile and link in separate steps, and also compile with the -p option, then be sure to link with the -p option. -p with prof is provided mostly for compatibility with older systems. -pg profiling with gprof is possibly a better alternative. See the Fortran Programming Guide chapter on Performance Profiling for details.

-pad[=p]

Insert padding for efficient use of cache.

This option inserts padding between arrays or character variables, if they are static local and not initialized, or if they are in common blocks. The extra padding positions the data to make better use of cache. In either case, the arrays or character variables can not be equivalenced.

p, if present, must be either or both of:

local

Add padding between adjacent local variables.

common

Add padding between variables in common blocks.

%none

Do not add padding. (Compiler default.)


Defaults for -pad:

The following are equivalent:

The -pad[=p] option applies to items that satisfy the following criteria:

For a definition of local or static variables, see -stackvar.

Restrictions on -pad=common:

-parallel

Parallelize with: -autopar, -explicitpar, -depend

Parallelize loops chosen automatically by the compiler as well as explicitly specified by user supplied directives. Optimization level is automatically raised to -O3 if it is lower. See also -explicitpar.

To improve performance, also specify the -stackvar option when using any of the parallelization options, including -autopar.

Sun-style parallelization directives are enabled by default. Use -mp=cray to select Cray style parallelization directives. (Note: For OpenMP parallelization use -openmp, not -parallel.)

Avoid -parallel if you do your own thread management. See -mt.

Parallelization options like -parallel are intended to produce executable programs to be run on multiprocessor systems. On a single-processor system, parallelization generally degrades performance.

To run a parallelized program in a multithreaded environment, you must set the PARALLEL (or OMP_NUM_THREADS) environment variable prior to execution. This tells the runtime system the maximum number of threads the program can create. The default is 1. In general, set the PARALLEL or OMP_NUM_THREADS variable to the available number of processors on the target platform.

If you use -parallel and compile and link in one step, then linking automatically includes the multithreading library and the thread-safe Fortran runtime library. If you use -parallel and compile and link in separate steps, then you must also link with -parallel.

See the Fortran Programming Guide chapter "Parallelization" for further information.

-pg

Compile for profiling with the gprof profiler.

Compile self-profiling code in the manner of -p, but invoke a runtime recording mechanism that keeps more extensive statistics and produces a gmon.out file when the program terminates normally. Generate an execution profile by running gprof. See the gprof(1) man page and the Fortran Programming Guide for details.

Library options must be after the .f and .o files (-pg libraries are static).

If you compile and link in separate steps, and you compile with -pg, then be sure to link with -pg.

-pic

Compile position-independent code for shared library. (Obsolete)

-pic is equivalent to -xcode=pic13. See -xcode=addr for more information on position-indepented code.

-Qoption pr ls

Pass the suboption list ls to the compilation phase pr.

There must be blanks separating Qoption, pr, and ls. The Q can be uppercase or lowercase. The list is a comma-delimited list of suboptions, with no blanks within the list. Each suboption must be appropriate for that program phase, and can begin with a minus sign.

This option is provided primarily for debugging the internals of the compiler by support staff. Use the LD_OPTIONS environment variable to pass options to the linker. See the chapter on linking and libraries in the Fortran Programming Guide.

-qp

Synonym for -p.

-R ls

Build dynamic library search paths into the executable file.

With this option, the linker, ld(1), stores a list of dynamic library search paths into the executable file.

ls is a colon-separated list of directories for library search paths. The blank between -R and ls is optional.

Multiple instances of this option are concatenated together, with each list separated by a colon.

The list is used at runtime by the runtime linker, ld.so. At runtime, dynamic libraries in the listed paths are scanned to satisfy any unresolved references.

Use this option to let users run shippable executables without a special path option to find needed dynamic libraries.

Building an executable file using -Rpaths adds directory paths to a default path, /opt/SUNWspro/lib, that is always searched last.

For more information, see the "Libraries" chapter in the Fortran Programming Guide, and the Solaris Linker and Libraries Guide.

-r8const

Promote single-precision constants to REAL*8 constants.

All single-precision REAL constants are promoted to REAL*8. Double-precision (REAL*8) constants are not changed. This option only applies to constants. To promote both constants and variables, see -xtypemap=spec.

Use this option flag carefully. It could cause interface problems when a subroutine or function expecting a REAL*4 argument is called with a REAL*4 constant that gets promoted to REAL*8. It could also cause problems with programs reading unformatted data files written by an unformatted write with REAL*4 constants on the I/O list.

-reduction

Recognize reduction operations in loops.

Analyze loops for reduction operations during automatic parallelization. There is potential for roundoff error with the reduction.

A reduction operation accumulates the elements of an array into a single scalar value. For example, summing the elements of a vector is a typical reduction operation. Although these operations violate the criteria for parallelizability, the compiler can recognize them and parallelize them as special cases when -reduction is specified. See the Fortran Programming Guide chapter "Parallelization" for information on reduction operations recognized by the compilers.

This option is usable only with the automatic parallelization options -autopar or -parallel. It is ignored otherwise. Explicitly parallelized loops are not analyzed for reduction operations.

Example: Automatically parallelize with reduction:

demo% f95 -parallel -reduction any.f

-S

Compile and only generate assembly code.

Compile the named programs and leave the assembly-language output on corresponding files suffixed with .s. No .o file is created.

-s

Strip the symbol table out of the executable file.

This option makes the executable file smaller and more difficult to reverse engineer. However, this option inhibits debugging with dbx or other tools, and overrides -g.

-sb

Produce table information for the source code browser.



Note - -sb cannot be used on source files the compiler automatically passes through the fpp or cpp preprocessors (that is, files with .F, .F90, or .F95 extensions), or used with the -F option.



-sbfast

Produce only source code browser tables.

Produce only table information for the source code browser. Do not assemble, link, or make object files.



Note - -sbfast cannot be used on source files the compiler automatically passes through the fpp or cpp preprocessors (that is, files with .F, .F90, or .F95 extensions), or used with the -F option.



-silent

Suppress compiler messages.

Normally, the f95 compiler does not issue messages, other than error diagnostics, during compilation. This option flag is provided for compatibility with the legacy f77 compiler, and its use is redundant except with the -f77 compatibility flag.

-stackvar

Allocate local variables on the stack whenever possible.

This option makes writing recursive and re-entrant code easier and provides the optimizer more freedom when parallelizing loops.

Use of -stackvar is recommended with any of the parallelization options.

Local variables are variables that are not dummy arguments, COMMON variables, variables inherited from an outer scope, or module variables made accessible by a USE statement.

With -stackvar in effect, local variables are allocated on the stack unless they have the attributes SAVE or STATIC. Note that explicitly initialized variables are implicitly declared with the SAVE attribute. A structure variable that is not explicitly initialized but some of whose components are initialized is, by default, not implicitly declared SAVE. Also, variables equivalenced with variables that have the SAVE or STATIC attribute are implicitly SAVE or STATIC.

A statically allocated variable is implicitly initialized to zero unless the program explicitly specifies an initial value for it. Variables allocated on the stack are not implicitly initialized except that components of structure variables can be initialized by default.

Putting large arrays onto the stack with -stackvar can overflow the stack causing segmentation faults. Increasing the stack size may be required.

The initial thread executing the program has a main stack, while each helper thread of a multithreaded program has its own thread stack.

The default stack size is about 8 Megabytes for the main stack and 4 Megabytes (8 Megabytes on SPARC V9 platforms) for each thread stack. The limit command (with no parameters) shows the current main stack size. If you get a segmentation fault using -stackvar, try increasing the main and thread stack sizes.

Example: Show the current main stack size:

demo% limit
cputime         unlimited
filesize        unlimited
datasize        523256 kbytes
stacksize       8192 kbytes      <---
coredumpsize    unlimited
descriptors     64 
memorysize      unlimited
demo%

Example: Set the main stack size to 64 Megabytes:

demo% limit stacksize 65536

Example: Set each thread stack size to 8 Megabytes:

demo% setenv STACKSIZE 8192

For further information of the use of -stackvar with parallelization, see the "Parallelization" chapter in the Fortran Programming Guide. See csh(1) for details on the limit command.

-stop_status=yn

Permit STOP statement to return an integer status value.

yn is either yes or no. The default is no.

With -stop_status=yes, a STOP statement may contain an integer constant. That value will be passed to the environment as the program terminates:

STOP 123

The value must be in the range 0 to 255. Larger values are truncated and a run-time message issued. Note that

STOP `stop string'

is still accepted and returns a status value of 0 to the environment, although a compiler warning message will be issued.

The environment status variable is $status for the C shell csh, and $? for the Bourne and Korn shells, sh and ksh.

-temp=dir

Define directory for temporary files.

Set directory for temporary files used by the compiler to be dir. No space is allowed within this option string. Without this option, the files are placed in the /tmp directory.

-time

Time each compilation phase.

The time spent and resources used in each compiler pass is displayed.

-U

Recognize upper and lower case in source files.

Do not treat uppercase letters as equivalent to lowercase. The default is to treat uppercase as lowercase except within character-string constants. With this option, the compiler treats Delta, DELTA, and delta as different symbols.

Portability and mixing Fortran with other languages may require use of -U. See the Fortran Programming Guide chapter on porting programs to Fortran 95.

-Uname

Undefine preprocessor macro name.

This option applies only to .F and .F95 source files that invoke the fpp or cpp pre-processor. It removes any initial definition of the preprocessor macro name created by -Dname on the same command line, including those implicitly placed there by the command-line driver, regardless of the order the options appear. It has no effect on any macro definitions in source files. Multiple -Uname flags can appear on the command line. There must be no space between -U and the macro name.

-u

Report undeclared variables.

Make the default type for all variables be undeclared rather than using Fortran implicit typing. This option warns of undeclared variables, and does not override any IMPLICIT statements or explicit type statements.

-unroll=n

Enable unrolling of DO loops where possible.

n is a positive integer. The choices are:

Loop unrolling generally improves performance, but will increase the size of the executable file. For more information on this and other compiler optimizations, see the "Performance and Optimization" chapter in the Fortran Programming Guide. See also The UNROLL Directive.

-use=list

Specify implicit USE modules.

list is a comma-separated list of module names or module file names.

Compiling with -use=module_name has the effect of adding a USE module_name statement to each subprogram or module being compiled. Compiling with -use=module_file_name has the effect of adding a USE module_name for each of the modules contained in the specified file.

See Module Files for more information about modules in Fortran 95.

-V

Show name and version of each compiler pass.

This option prints the name and version of each pass as the compiler executes.

This information may be helpful when discussing problems with Sun service engineers.

-v

Verbose mode - show details of each compiler pass.

Like -V, shows the name of each pass as the compiler executes, and details the options, macro flag expansions, and environment variables used by the driver.

-vax=keywords

Specify choice of VAX VMS Fortran extensions enabled.

The keywords specifier must be one of the following suboptions or a comma-delimited list of a selection of these.

blank_zero

Interpret blanks in formatted input as zeros on internal files.

debug

Interpret lines starting with the character 'D' to be regular Fortran statements rather than comments, as in VMS Fortran.

rsize

Interpret unformatted record size to be in words rather than bytes.

struct_align

Layout components of a VAX structure in memory as in VMS Fortran, without padding. Note: this can cause data misalignments.

%all

Enable all these VAX VMS features.

%none

Disable all these VAX VMS features.


Sub-options can be individually selected or turned off by preceeding with no%.

Example:

-vax=debug,rsize,no%blank_zero

-vpara

Show verbose parallelization messages.

As the compiler analyzes loops explicitly marked for parallelization with directives, it issues warning messages about certain data dependencies it detects; but the loop will still be parallelized.

Example: Verbose parallelization warnings:

demo% f95 -explicitpar -vpara any.f
any.f:
 MAIN any:
"any.f", line 11: Warning: the loop may have parallelization inhibiting reference

-w[n]

Show or suppress warning messages.

This option shows or suppresses most warning messages. However, if one option overrides all or part of an option earlier on the command line, you do get a warning.

n may be 0, 1, 2 ,3, or 4.

-w0 shows just error messages. This is equivalent to -w
-w1
shows errors and warnings. This is the default without -w.
-w2 shows errors, warnings, and cautions.
-w3 shows errors, warnings, cautions, and notes.
-w4 shows errors, warnings, cautions, notes, and comments.

Example: -w still allows some warnings to get through:

demo% f95 -w -parallel any.f
f95: Warning: Optimizer level changed from 0 to 3 to support parallelized code
demo%

-Xlist[x]

Produce listings and do global program checking (GPC).

Use this option to find potential programming bugs. It invokes an extra compiler pass to check for consistency in subprogram call arguments, common blocks, and parameters, across the global program. The option also generates a line-numbered listing of the source code, including a cross reference table. The error messages issued by the -Xlist options are advisory warnings and do not prevent the program from being compiled and linked.



Note - Be sure to correct all syntax errors in the source code before compiling with -Xlist. Unpredictable reports may result when run on a source code with syntax errors.



Example: Check across routines for consistency:

 demo% f95 -Xlist  fil.f

The above example writes the following to the output file fil.lst:

By default, the listings are written to the file name.lst, where name is taken from the first listed source file on the command line.

A number of sub-options provide further flexibility in the selection of actions. These are specified by suffixes to the main -Xlist option, as shown in the following table

TABLE 3-9 -Xlist Suboptions

Option

Feature

-Xlist

Show errors, listing, and cross reference table

-Xlistc

Show call graphs and errors

-XlistE

Show errors

-Xlisterr[nnn]

Suppress error nnn messages

-Xlistf

Show errors, listing, and cross references, but no object files

-Xlisth

Terminate compilation if errors detected

-XlistI

Analyze #include and INCLUDE files as well as source files

-XlistL

Show listing and errors only

-Xlistln

Set page length to n lines

-XlistMP

Check OpenMP directives

-Xlisto name

Output report file to name instead of file.lst

-Xlists

Suppress unreferenced names from the cross-reference table

-Xlistvn

Set checking level to n (1,2,3, or 4) - default is 2

-Xlistw[nnn]

Set width of output line to nnn columns - default is 79

-Xlistwar[nnn]

Suppress warning nnn messages

-XlistX

Show cross-reference table and errors


See the Fortran Programming Guide chapter "Program Analysis and Debugging" for details.

-xa

Synonym for -a.

-xalias[=keywords]

Specify degree of aliasing to be assumed by the compiler.

Some non-standard programming techniques can introduce situations that interfere with the compiler's optimization strategies. The use of overindexing, pointers, and passing global or non-unique variables as subprogram arguments, can introduce ambiguous aliasing situations that could result code that does not work as expected.

Use the -xalias flag to inform the compiler about the degree to which the program deviates from the aliasing requirements of the Fortran standard.

The flag may appear with or without a list of keywords. The keywords list is comma-separated, and each keyword indicates an aliasing situation present in the program.

Each keyword may be prefixed by no% to indicate an aliasing type that is not present.

The aliasing keywords are:

TABLE 3-10 -xalias Option Keywords

keyword

meaning

dummy

Dummy (formal) subprogram parameters can alias each other and global variables.

no%dummy

(Default). Usage of dummy parameters follows the Fortran standard and do not alias each other or global variables.

craypointer

(Default) (Default). Cray pointers can point at any global variable or a local variable whose address is taken by the LOC() function. Also, two Cray pointers might point at the same data. This is a safe assumption that could inhibit some optimizations.

no%craypointer

Cray pointers point only at unique memory addresses, such as obtained from malloc(). Also, no two Cray pointers point at the same data. This assumption enables the compiler to optimize Cray pointer references.

actual

The compiler treats actual subprogram arguments as if they were global variables. Passing an argument to a subprogram might result in aliasing through Cray pointers.

no%actual

(Default) Passing an argument does not result in further aliasing.

overindex

  • A reference to an element in a COMMON block might refer to any element in a COMMON block or equivalence group.
  • Passing any element of a COMMON block or equivalence group as an actual argument to a subprogram gives access to any element of that COMMON block or equivalence group to the called subprogram.
  • Variables of a sequence derived type are treated as if they were COMMON blocks, and elements of such a variable might alias other elements of that variable.
  • Individual array bounds may be violated, but except as noted above, the referenced array element is assumed to stay within the array.
    Array syntax, WHERE, and FORALL statements are not considered for overindexing. If overindexing occurs in these constructs, they should be rewritten as DO loops.

no%overindex

(Default) Array bounds are not violated. Array references do not reference other variables.

ftnpointer

Calls to external functions might cause Fortran pointers to point at target variables of any type, kind, or rank.

no%ftnpointer

(Default) Fortran pointers follow the rules of the standard.


Specifying -xalias without a list gives the best performance for most programs that do not violate Fortran aliasing rules, and corresponds to:

no%dummy,no%craypointer,no%actual,no%overindex,no%ftnpointer

To be effective, -xalias should be used when compiling with optimization levels -xO3 and higher.

The compiler default, with no -xalias flag specified, assumes that the program conforms to the Fortran 95 standard except for Cray pointers:

no%dummy,craypointer,no%actual,no%overindex,no%ftnpointer

Examples of various aliasing situations and how to specify them with -xalias are given in the Porting chapter of the Fortran Programming Guide.

-xarch=isa

Specify instruction set architecture (ISA).

Architectures that are accepted by -xarch keyword isa are shown in TABLE 3-11:

TABLE 3-11 -xarch ISA Keywords

Platform

Valid -xarch Keywords

SPARC

generic, generic64, native, native64, v7, v8a, v8, v8plus, v8plusa, v8plusb, v9, v9a, v9b


Note that although -xarch can be used alone, it is part of the expansion of the
-xtarget option and may be used to override the -xarch value that is set by a specific -xtarget option. For example:

% f95 -xtarget=ultra2 -xarch=v8plusb ...

overrides the -xarch=v8 set by -xtarget=ultra2

This option limits the code generated by the compiler to the instructions of the specified instruction set architecture by allowing only the specified set of instructions. This option does not guarantee use of any target-specific instructions.

If this option is used with optimization, the appropriate choice can provide good performance of the executable on the specified architecture. An inappropriate choice results in a binary program that is not executable on the intended target platform.

TABLE 3-12 summarizes the most general -xarch options:

TABLE 3-12 Most General -xarch Options on SPARC Platforms

-xarch=

Performance

generic

  • runs adequately on all platforms

v8plusa

  • runs optimally on UltraSPARC-II processors in 32-bit mode

v8plusb

  • runs optimally on UltraSPARC-III processors in 32-bit mode
  • no execution on other platforms

v9a

  • runs optimally on UltraSPARC-II processors in 64-bit mode
  • no execution on other platforms

v9b

  • runs optimally on UltraSPARC-III processors in 64-bit mode
  • no execution on other platforms

Also note the following:

For any particular choice, the generated executable may run much more slowly on earlier architectures. Also, although quad-precision (REAL*16 and long double) floating-point instructions are available in many of these instruction set architectures, the compiler does not use these instructions in the code it generates.

TABLE 3-13 gives details for each of the -xarch keywords on SPARC platforms.

TABLE 3-13 -xarch Values for SPARC Platforms

-xarch=

Meaning

generic

Compile for good performance on most 32-bit systems.
This is the default. This option uses the best instruction set for good performance on most processors without major performance degradation on any of them. With each new release, the definition of "best" instruction set may be adjusted, if appropriate, and is currently v8.

generic64

Compile for good performance on most 64-bit enabled systems.
This option uses the best instruction set for good performance on most 64-bit enabled processors without major performance degradation on any of them. With each new release, the definition of "best" instruction set may be adjusted, if appropriate, and is currently interpreted as v9.

native

Compile for good performance on this system.

This is the default for the -fast option. The compiler chooses the appropriate setting for the current system processor it is running on.

native64

Compile for good performance in 64-bit mode on this system.

Like native, compiler chooses the appropriate setting for 64-bit mode on the current system processor it is running on.

v7

Compile for the SPARC-V7 ISA.
Enables the compiler to generate code for good performance on the V7 ISA.

This is equivalent to using the best instruction set for good performance on the V8 ISA, but without integer mul and div instructions, and the fsmuld instruction.

Examples: SPARCstation 1, SPARCstation 2

v8a

Compile for the V8a version of the SPARC-V8 ISA.

By definition, V8a means the V8 ISA, but without the fsmuld instruction.

This option enables the compiler to generate code for good performance on the V8a ISA.

Example: Any system based on the microSPARC I chip architecture

v8

Compile for the SPARC-V8 ISA.

Enables the compiler to generate code for good performance on the V8 architecture.

Example: SPARCstation 10

v8plus

Compile for the V8plus version of the SPARC-V9 ISA.

By definition, V8plus means the V9 ISA, but limited to the 32-bit subset defined by the V8plus ISA specification, without the Visual Instruction Set (VIS), and without other implementation-specific ISA extensions.

  • This option enables the compiler to generate code for good performance on the V8plus ISA.
  • The resulting object code is in SPARC-V8+ ELF32 format and only executes in a Solaris UltraSPARC environment--it does not run on a V7 or V8 processor.

Example: Any system based on the UltraSPARC chip architecture

v8plusa

Compile for the V8plusa version of the SPARC-V9 ISA.

By definition, V8plusa means the V8plus architecture, plus the Visual Instruction Set (VIS) version 1.0, and with UltraSPARC extensions.

  • This option enables the compiler to generate code for good performance on the UltraSPARC architecture, but limited to the 32-bit subset defined by the V8plus specification.
  • The resulting object code is in SPARC-V8+ ELF32 format and only executes in a Solaris UltraSPARC environment--it does not run on a V7 or V8 processor.

Example: Any system based on the UltraSPARC chip architecture

v8plusb

Compile for the V8plusb version of the SPARC-V8plus ISA with UltraSPARC-III extensions.

Enables the compiler to generate object code for the UltraSPARC architecture, plus the Visual Instruction Set (VIS) version 2.0, and with UltraSPARC-III extensions.

  • The resulting object code is in SPARC-V8+ ELF32 format and executes only in a Solaris UltraSPARC-III environment.
  • Compiling with this option uses the best instruction set for good performance on the UltraSPARC-III architecture.

v9

Compile for the SPARC-V9 ISA.

Enables the compiler to generate code for good performance on the V9 SPARC architecture.

  • The resulting .o object files are in ELF64 format and can only be linked with other SPARC-V9 object files in the same format.
  • The resulting executable can only be run on an UltraSPARC processor running a 64-bit enabled Solaris operating environment with the 64-bit kernel.
  • -xarch=v9 is only available when compiling in a 64-bit enabled Solaris environment.

v9a

Compile for the SPARC-V9 ISA with UltraSPARC extensions.

Adds to the SPARC-V9 ISA the Visual Instruction Set (VIS) and extensions specific to UltraSPARC processors, and enables the compiler to generate code for good performance on the V9 SPARC architecture.

  • The resulting .o object files are in ELF64 format and can only be linked with other SPARC-V9 object files in the same format.
  • The resulting executable can only be run on an UltraSPARC processor running a 64-bit enabled Solaris operating environment with the 64-bit kernel.
  • -xarch=v9a is only available when compiling in a 64-bit enabled Solaris operating environment.

v9b

Compile for the SPARC-V9 ISA with UltraSPARC-III extensions.

Adds UltraSPARC-III extensions and VIS version 2.0 to the V9a version of the SPARC-V9 ISA. Compiling with this option uses the best instruction set for good performance in a Solaris UltraSPARC-III environment.

  • The resulting object code is in SPARC-V9 ELF64 format and can only be linked with other SPARC-V9 object files in the same format.
  • The resulting executable can only be run on an UltraSPARC-III processor running a 64-bit enabled Solaris operating environment with the 64-bit kernel.
  • -xarch=v9b is only available when compiling in a 64-bit enabled Solaris operating environment.

 

-xassume_control[=keywords]

Set parameters to control ASSUME pragmas.

Use this flag to control the way the compiler handles ASSUME pragmas in the source code.

The ASSUME pragmas provide a way for the programmer to assert special information that the compiler can use for better optimization. These assertions may be qualified with a probability value. Those with a probability of 0 or 1 are marked as certain; otherwise they are considered non-certain.

You can also assert, with a probability or certainty, the trip count of an upcoming DO loop, or that an upcoming branch will be taken.

See Section 2.3.1.9, The ASSUME Directives, for a description of the ASSUME pragmas recognized by the f95 compiler.

The keywords on the -xassume_control option can be a single suboption keyword or a comma-separated list of keywords. The keyword suboptions recognized are:

optimize

The assertions made on ASSUME pragmas affect optimization of the program.

check

The compiler generates code to check the correctness of all assertions marked as certain, and emits a runtime message if the assertion is violated; the program continues if fatal is not also specified.

fatal

When used with check, the program will terminate when an assertion marked certain is violated.

retrospective[:d]

The d parameter is an optional tolerance value, and must be a real positive constant less than 1. The default is ".1". retrospective compiles code to count the truth or falsity of all assertions. Those outside the tolerance value d are listed on output at program termination.

%none

All ASSUME pragmas are ignored.


The compiler default is

-xassume_control=optimize

This means that the compiler recognizes ASSUME pragmas and they will affect optimization, but no checking is done.

If specified without parameters, -xassume_control implies

-xassume_control=check,fatal

In this case the compiler accepts and checks all certain ASSUME pragmas, but they do not affect optimization. Assertions that are invalid cause the program to terminate.

-xautopar

Synonym for -autopar.

-xcache=c

Define cache properties for the optimizer.

c must be one of the following:

The si/li/ai are defined as follows:

si The size of the data cache at level i, in kilobytes
li The line size of the data cache at level i, in bytes
ai The associativity of the data cache at level i

This option specifies the cache properties that the optimizer can use. It does not guarantee that any particular cache property is used.

Although this option can be used alone, it is part of the expansion of the
-xtarget option; it is provided to allow overriding an -xcache value implied by a specific -xtarget option.

TABLE 3-14 -xcache Values

Value

Meaning

generic

Define the cache properties for good performance on most SPARC processors without any major performance degradation. This is the default.

native

Define the cache properties for good performance on this host platform.

s1/l1/a1

Define level 1 cache properties.

s1/l1/a1:s2/l2/a2

Define levels 1 and 2 cache properties.

s1/l1/a1:s2/l2/a2:s3/l3/a3

Define levels 1, 2, and 3 cache properties


Example: -xcache=16/32/4:1024/32/1 specifies the following:

A Level 1 cache has: 16K bytes, 32 byte line size, 4-way associativity.

A Level 2 cache has: 1024K bytes, 32 byte line size, direct mapping associativity.

-xcg89

Synonym for -cg89.

-xcg92

Synonym for -cg92.

-xcheck=keyword

Generate special runtime checks and initializations.

The keyword must be one of the following:

keyword

Feature

stkovf

Turn on runtime checking for stack overflow on subprogram entry. If a stack overflow is detected, a SIGSEGV segment fault will be raised.

no%stkovf

Disable runtime checking for stack overflow.

init_local

Perform special initialization of local variables.

The compiler initializes local variables to a value that is likely to cause an arithmetic exception if it is used by the program before it is assigned. Memory allocated by the ALLOCATE statement will also be initialized in this manner.

Module variables, SAVE variables, and variables in COMMON blocks are not initialized.

no%init_local

Disable local variable initialization. This is the default.

%all

Turn on all these runtime checking features.

%none

Disable all these runtime checking features.


Stack overflows, especially in multithreaded applications with large arrays allocated on the stack, can cause silent data corruption in neighboring thread stacks. Compile all routines with -xcheck=stkovf if stack overflow is suspected. But note that compiling with this flag does not guarantee that all stack overflow situations will be detected since they could occur in routines not compiled with this flag.

-xchip=c

Specify target processor for the optimizer.

This option specifies timing properties by specifying the target processor.

Although this option can be used alone, it is part of the expansion of the
-xtarget option; it is provided to allow overriding a -xchip value implied by the a specific -xtarget option.

Some effects of -xchip=c are:

The following tables list the valid -xchip processor name values:

TABLE 3-15 Commonly Used -xchip Processor Names

-xchip=

Optimize for:

generic

most SPARC processors. (This is the default.)

native

this host platform.

ultra

the UltraSPARC processor.

ultra2

the UltraSPARC II processor.

ultra2e

the UltraSPARC IIe processor.

ultra2i

the UltraSPARC IIi processor.

ultra3

the UltraSPARC III processor.

ultra3cu

the UltraSPARC IIIcu processor.


The following are older, less common -xchip processor names and are listed here for reference purposes:

TABLE 3-16 Less Commonly Used -xchip Processor Names

-xchip=

Optimize for:

old

pre-SuperSPARC processors.

super

the SuperSPARC processor.

super2

the SuperSPARC II processor.

micro

the MicroSPARC processor.

micro2

the MicroSPARC II processor.

hyper

the HyperSPARC processor.

hyper2

the HyperSPARC II processor.

powerup

the Weitek PowerUp processor.


-xcode=addr

Specify code address space on SPARC platforms.

The values for addr are:

addr

Feature

abs32

Generate 32-bit absolute addresses. Code+data+bss size is limited to 2**32 bytes. This is the default on 32-bit platforms: -xarch=generic, v7, v8, v8a, v8plus, v8plusa

abs44

Generate 44-bit absolute addresses. Code+data+bss size is limited to 2**44 bytes. Available only on 64-bit platforms: -xarch=v9, v9a

abs64

Generate 64-bit absolute addresses. Available only on 64-bit platforms: -xarch=v9, v9a

pic13

Generate position-independent code (small model). Equivalent to -pic. Permits references to at most 2**11 unique external symbols on 32-bit platforms, 2**10 on 64-bit platforms.

pic32

Generate position-independent code (large model). Equivalent to -PIC. Permits references to at most 2**30 unique external symbols on 32-bit platforms, 2**29 on 64-bit platforms.


The defaults (not specifying -xcode=addr explicitly) are:

-xcode=abs32 on SPARC V8 and V7 platforms.
-xcode=abs64 on SPARC and UltraSPARC V9 (-xarch=v9 or v9a)

Position-Independent Code:

Use -xcode=pic13 or -xcode=pic32 when creating dynamic shared libraries to improve runtime performance.

While the code within a dynamic executable is usually tied to a fixed address in memory, position-independent code can be loaded anywhere in the address space of the process.

When you use position-independent code, relocatable references are generated as an indirect reference through a global offset table. Frequently accessed items in a shared object will benefit from compiling with -xcode=pic13 or -xcode=pic32 by not requiring the large number of relocations imposed by code that is not position-independent.

The size of the global offset table is limited to 8Kb.

There are two nominal performance costs with -xcode={pic13|pic32} :

When considering the above costs, remember that the use of -xcode=pic13 or -xcode=pic32 can significantly reduce system memory requirements, due to the effect of library code sharing. Every page of code in a shared library compiled -xcode=pic13 or -xcode=pic32 can be shared by every process that uses the library. If a page of code in a shared library contains even a single non-pic (that is, absolute) memory reference, the page becomes nonsharable, and a copy of the page must be created each time a program using the library is executed.

The easiest way to tell whether or not a .o file has been compiled with -xcode=pic13 or -xcode=pic32 is with the nm command:

nm file.o | grep _GLOBAL_OFFSET_TABLE_

A .o file containing position-independent code will contain an unresolved external reference to _GLOBAL_OFFSET_TABLE_ as marked by the letter U.

To determine whether to use -xcode=pic13 or -xcode=pic32 use nm to identify the number of distinct global and static variables used or defined in the library. If the size of _GLOBAL_OFFSET_TABLE_ is under 8,192 bytes, you can use pic13. Otherwise, you must use pic32.

Compiling with the -xcode=pic13 or pic32 (or -pic or -PIC) options is recommended when building dynamic libraries. See the Solaris Linker and Libraries Guide.

-xcommonchk[={no|yes}]

Enable runtime checking of common block inconsistencies.

This option provides a debug check for common block inconsistencies in programs using TASK COMMON and parallelization. (See the discussion of the TASK COMMON directive in the "Parallelization" chapter in the Fortran Programming Guide.)

The default is -xcommonchk=no; runtime checking for common block inconsistencies is disabled because it will degrade performance. Use -xcommon=yes only during program development and debugging, and not for production-quality programs.

Compiling with -xcommonchk=yes enables runtime checking. If a common block declared in one source program unit as a regular common block appears somewhere else on a TASK COMMON directive, the program will stop with an error message indicating the first such inconsistency.

Example: Missing TASKCOMMON directive in tc.f

demo% cat tc.f
                common /x/y(1000)
                do 1 i=1,1000
 1              y(i) = 1.
                call z(57.)
                end
demo% cat tz.f
                subroutine z(c)
                common /x/h(1000)
C$PAR TASKCOMMON X
C$PAR DOALL
                do 1 i=1,1000
1                       h(i) = c* h(i)
                return
                end
demo% f95 -c -O4 -parallel -xcommonchk tc.f
demo% f95 -c -O4 -parallel -xcommonchk tz.f
demo% f95 -o tc -O4 -parallel -xcommonchk tc.o tz.o
demo% tc
ERROR(libmtsk): inconsistent declaration of threadprivate/taskcommon
   x_: not declared as threadprivate/taskcommon at line 1 of tc.f
demo% 

-xcrossfile[=n]

Enable optimization and inlining across source files.

If specified, n may be 0, or 1.

Normally, the scope of the compiler's analysis is limited to each separate file on the command line. For example, -O4's automatic inlining is limited to subprograms defined and referenced within the same source file.

With -xcrossfile, the compiler analyzes all the files named on the command line as if they had been concatenated into a single source file.

-xcrossfile is only effective when used with -O4 or -O5.

Cross-file inlining creates a possible source file interdependence that would not normally be there. If any file in a set of files compiled together with
-xcrossfile is changed, then all files must be recompiled to insure that the new code is properly inlined. See -inline=[%auto][[,][no%]f1,...[no%]fn].

The default, without -xcrossfile on the command line, is -xcrossfile=0, and no cross-file optimizations are performed. To enable cross-file optimizations, specify -xcrossfile (equivalent to -xcrossfile=1).

-xdepend

Synonym for -depend.

-xexplicitpar

Synonym for -explicitpar.

-xF

Allow function-level reordering by the Performance Analyzer.

Allow the reordering of functions (subprograms) in the core image using the compiler, the performance analyzer and the linker. If you compile with the -xF option, then run the analyzer, you can generate a map file that optimizes the ordering of the functions in memory depending on how they are used together. A subsequent link to build the executable file can be directed to use that map by using the linker -Mmapfile option. It places each function from the executable file into a separate section.

Reordering the subprograms in memory is useful only when the application text page fault time is consuming a large percentage of the application time. Otherwise, reordering may not improve the overall performance of the application. See the Program Performance Analysis Tools manual for further information on the analyzer.

-xhasc[={yes|no}]

Treat Hollerith constant as a character string in an actual argument list.

With -xhasc=yes, the compiler treats Hollerith constants as character strings when they appear as an actual argument on a subroutine or function call. This is the default, and complies with the Fortran standard. (The actual call list generated by the compiler contains hidden string lengths for each character string.)

With -xhasc=no, Hollerith constants are treated as typeless values in subprogram calls, and only their addresses are put on the actual argument list. (No string length is generated on the actual call list passed to the subprogram.)

Compile routines with -xhasc=no if they call a subprogram with a Hollerith constant and the called subprogram expects that argument as INTEGER (or anything other than CHARACTER).

Example:

demo% cat hasc.f
                call z(4habcd, 'abcdefg')
                end
                subroutine z(i, s)
                integer i
                character *(*) s
                print *, "string length = ", len(s)
                return
                end
demo% f95 -o has0 hasc.f
demo% has0
 string length =   4    <-- should be 7
demo% f95 -o has1 -xhasc=no hasc.f
demo% has1
 string length =   7  <-- now correct length for s

Passing 4habcd to z is handled correctly by compiling with -xhasc=no.

This flag is provided to aid porting legacy Fortran 77 programs.

-xhelp=h

Show summary help information on options or README file.

The h is either readme or flags.

-xhelp=readme Show the online README file for this release of the compiler.
-xhelp=flags Show the compiler flags (options), and is same as -help.

-xia[=v]

Enable interval arithmetic extensions and set a suitable floating-point environment.

v can be one of either widestneed or strict. The default if not specified is widestneed.

Fortran 95 extensions for interval arithmetic calculations are detailed in the Interval Arithmetic Programming Reference. See also -xinterval[=v].

The -xia flag is a macro that expands as follows:

-xia or
-xia=widestneed

-xinterval=widestneed -ftrap=%none -fns=no -fsimple=0

-xia=strict

-xinterval=strict -ftrap=%none -fns=no -fsimple=0


-xild{off|on}

Enable/disable the Incremental Linker.

-xildoff disables the use of the incremental linker, ild. The standard linker, ld, is used instead. -xildon enables use of ild instead of ld.

-xildoff is the default if you do not use the -g option. It is also the default if you use -G or name any source file on the command line.

-xildon is the default if you use -g and do not use -G, and no source files appear on the command line (just object files and/or libraries).

See the section on ild in the C User's Guide.

-xinline=list

Synonym for -inline.

-xinterval[=v]

Enable interval arithmetic extensions.

v can be one of either no, widestneed or strict. The default if not specified is widestneed.

no

Interval arithmetic extensions not enabled.

widestneed

Promotes all non-interval variables and literals in any mixed-mode expression to the widest interval data type in the expression.

strict

Prohibits mixed-type or mixed-length interval expressions. All interval type and length conversions must be explicit.


Fortran 95 extensions for interval arithmetic calculations are detailed in the Fortran 95 Interval Arithmetic Programming Reference. See also -xia[=v].

-xipo[={0|1|2}]

Perform interprocedural optimizations.

Performs whole-program optimizations by invoking an interprocedural analysis pass. Unlike -xcrossfile, -xipo will perform optimizations across all object files in the link step, and is not limited to just the source files on the compile command.

-xipo is particularly useful when compiling and linking large multi-file applications. Object files compiled with this flag have analysis information compiled within them that enables interprocedural analysis across source and pre-compiled program files. However, analysis and optimization is limited to the object files compiled with -xipo, and does not extend to object files on libraries.

-xipo=0 disables, and -xipo=1 enables, interprocedural analysis. -xipo=2 adds interprocedural aliasing analysis and memory allocation and layout optimizations to improve cache performance. The default is -xipo=0, and if -xipo is specified without a value, -xipo=1 is used.

When compiling and linking are performed in separate steps, -xipo must be specified in both steps to be effective.

Example using -xipo in a single compile/link step:

demo% f95 -xipo -xO4 -o prog  part1.f part2.f part3.f

The optimizer performs crossfile inlining across all three source files. This is done in the final link step, so the compilation of the source files need not all take place in a single compilation and could be over a number of separate compilations, each specifying -xipo.

Example using -xipo in separate compile/link steps:

demo% f95 -xipo -xO4 -c part1.f part2.f 
demo% f95 -xipo -xO4 -c part3.f
demo% f95 -xipo -xO4 -o prog  part1.o part2.o part3.o

The object files created in the compile steps have additional analysis information compiled within them to permit crossfile optimizations to take place at the link step.

A restriction is that libraries, even if compiled with -xipo do not participate in crossfile interprocedural analysis, as shown in this example:

demo% f95 -xipo -xO4 one.f two.f three.f
demo% ar -r mylib.a one.o two.o three.o
...
demo% f95 -xipo -xO4 -o myprog main.f four.f mylib.a

Here interprocedural optimizations will be performed between one.f, two.f and three.f, and between main.f and four.f, but not between main.f or four.f and the routines on mylib.a. (The first compilation may generate warnings about undefined symbols, but the interprocedural optimizations will be performed because it is a compile and link step.)

Other important information about -xipo:

-xjobs=n

Compile with multiple processors.

Specify the -xjobs option to set how many processes the compiler creates to complete its work. This option can reduce the build time on a multi-cpu machine. In this release of the f95 compiler, -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.

Generally, a safe value for n is 1.5 multiplied by the number of available processors. Using a value that is many times the number of available processors can degrade performance because of context switching overheads among spawned jobs. Also, using a very high number can exhaust the limits of system resources such as swap space.

You must always specify -xjobs with a value. Otherwise an error diagnostic is issued and compilation aborts.

Multiple instances of -xjobs on the command line override each other until the rightmost instance is reached.

The following example compiles more quickly on a system with two processors than the same command without the -xjobs option.

example% f95 -xipo -xO4 -xjobs=3 t1.f t2.f t3.f

-xknown_lib=library_list

Recognize calls to a known library.

When specified, the compiler treats references to certain known libraries as intrinsics, ignoring any user-supplied versions. This enables the compiler to perform optimizations over calls to library routines based on its special knowledge of that library.

The library_list is a comma-delimited list of keywords currently to blas, blas1, blas2, blas3, and intrinsics. The compiler recognizes calls to the following BLAS1, BLAS2, and BLAS3 library routines and is free to optimize appropriately for the Sun Performance Library implementation. The compiler will ignore user-supplied versions of these library routines and link to the BLAS routines in the Sun Performance Library.

-xknown_lib=

Feature

blas1

The compiler recognizes calls to the following BLAS1 library routines:

caxpy ccopy cdotc cdotu crotg cscal csrot csscal cswap dasum daxpy dcopy ddot drot drotg drotm drotmg dscal dsdot dswap dnrm2 dzasum dznrm2 icamax idamax isamax izamax sasum saxpy scasum scnrm2 scopy sdot sdsdot snrm2 srot srotg srotm srotmg sscal sswap zaxpy zcopy zdotc zdotu zdrot zdscal zrotg zscal zswap

blas2

The compiler recognizes calls to the following BLAS2 library routines:

cgemv cgerc cgeru ctrmv ctrsv dgemv dger dsymv dsyr dsyr2 dtrmv dtrsv sgemv sger ssymv ssyr ssyr2 strmv strsv zgemv zgerc zgeru ztrmv ztrsv

blas3

The compiler recognizes calls to the following BLAS2 library routines:

cgemm csymm csyr2k csyrk ctrmm ctrsm dgemm dsymm dsyr2k dsyrk dtrmm dtrsm sgemm ssymm ssyr2k ssyrk strmm strsm zgemm zsymm zsyr2k zsyrk ztrmm ztrsm

blas

Selects all the BLAS routines. Equivalent to
-xknown_lib=blas1,blas2,blas3

intrinsics

The compiler ignores any explicit EXTERNAL declarations for Fortran 95 intrinsics, thereby ignoring any user-supplied intrinsic routines.


-xlang=f77

Prepare for linking with runtime libraries compiled with earlier versions of f77.

f95 -xlang=f77 implies linking with the f77compat library, and is a shorthand way for linking Fortran 95 object files with older Fortran 77 object files. Compiling with this flag insures the proper runtime environment.

Use f95 -xlang=f77 when linking f95 and f77 compiled objects together into a single executable.

-xlibmil

Synonym for -libmil.

-xlibmopt

Use library of optimized math routines.

Use selected math routines optimized for speed. This option usually generates faster code. It may produce slightly different results; if so, they usually differ in the last bit. The order on the command line for this library option is not significant.

-xlic_lib=sunperf

Link with the Sun Performance Library.

For example:

f95 -o pgx -fast pgx.f -xlic_lib=sunperf 

As with -l, this option should appear on the command line after all source and object file names.

This option must be used to link with the Sun Performance Library. (See the Sun Performance Library User's Guide.)

-xlicinfo

Show license information.

Use this option to return serial number entitlement information about the installed compiler software.

-xlinkopt[=level]

Perform link-time optimizations on relocatable object files.

The post-optimizer performs a number of advanced performance optimizations on the binary object code at link-time. The value level sets the level of optimizations performed, and must be 0, 1, or 2.

0

The post-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.


Specifying the -xlinkopt flag without a level parameter implies -xlinkopt=1.

These optimizations are performed at link time by analyzing the object binary code. The object files are not rewritten but the resulting executable code may differ from the original object codes.

This option is most effective when used to compile the whole program, and with profile feedback.

When compiling in separate steps, -xlinkopt must appear on both compile and link steps.

demo% f95 -c -xlinkopt a.f95 b.f95
demo% f95 -o myprog -xlinkopt=2 a.o b.o

Note that the level parameter is only used when the compiler is linking. In the example above, the postoptimization level used is 2 even though the object binaries were compiled with an implied level of 1.

The link-time post-optimizer cannot be used with the incremental linker, ild. The -xlinkopt flag will set the default linker to be ld. Enabling the incremental linker explicitly withthe -xildon flag will disable the -xlinkopt option if both are specified together.

For the -xlinkopt option to be useful, at least some, but not necessarily all, of the routines in the program must be compiled with this option. The optimizer can still perform some limited optimizations on object binaries not compiled with -xlinkopt.

The -xlinkopt option will optimize code coming from static libraries that appear on the compiler command line, but it will skip and not optimize code coming from shared (dynamic) libraries that appear on the command line. You can also use -xlinkopt when building shared libraries (compiling with -G ).

The link-time post-optimizer is most effective when used with run-time profile feedback. Profiling reveals the most and least used parts of the code and directs the optimizer to focus its effort accordingly. This is particularly important with large applications where optimal placement of code performed at link time can reduce instruction cache misses. Typically, this would be compiled as shown below:

demo% f95 -o progt -xO5 -xprofile=collect:prog file.f95
demo% progt
demo% f95 -o prog -xO5 -xprofile=use:prog -xlinkopt file.95

For details on using profile feedback, see the -xprofile option

Note that compiling with this option will increase link time slightly. Object file sizes also increase, but the size of the executable remains the same. Compiling with the -xlinkopt and -g flags increases the size of the excutable by including debugging information.

-xloopinfo

Synonym for -loopinfo.

-xmaxopt[=n]

Enable optimization pragma and set maximum optimization level.

n has the value 1 through 5 and corresponds to the optimization levels of -O1 through -O5. If not specified, the compiler uses 5.

This option enables the C$PRAGMA SUN OPT=n directive when it appears in the source input. Without this option, the compiler treats these lines as comments. See The OPT Directive.

If this pragma appears with an optimization level greater than the maximum level on the -xmaxopt flag, the compiler uses the level set by -xmaxopt.

-xmemalign[=<a><b>]

Specify maximum assumed memory alignment and behavior of misaligned data accesses.

For memory accesses where the alignment is determinable at compile time, the compiler will generate the appropriate load/store instruction sequence for that data alignment.

For memory accesses where the alignment cannot be determined at compile time, the compiler must assume an alignment to generate the needed load/store sequence.

The -xmemalign flag allows the user to specify the maximum memory alignment of data to be assumed by the compiler for those indeterminate situations. It also specifies the error behavior at runtime when a misaligned memory access does take place.

The value specified consists of two parts: a numeric alignment value, <a>, and an alphabetic behavior flag, <b>.

Allowed values for alignment, <a>, are:

1 Assume at most 1-byte alignment.
2 Assume at most 2-byte alignment.
4 Assume at most 4-byte alignment.
8 Assume at most 8-byte alignment.
16 Assume at most 16-byte alignment.

Allowed values for error behavior on accessing misaligned data, <b>, are:

i Interpret access and continue execution
s Raise signal SIGBUS
f Raise signal SIGBUS only for alignments less or equal to 4

The defaults without -xmemalign specified are:

The default for -xmemalign appearing without a value is 1i for all platforms.

The -dalign option is a macro:

-dalign is a macro for: -xmemalign=8s -aligncommon=16

-xnolib

Synonym for -nolib.

-xnolibmil

Synonym for -nolibmil.

-xnolibmopt

Do not use fast math library.

Use with -fast to override linking the optimized math library:

f95 -fast -xnolibmopt ...

-xOn

Synonym for -On.

-xopenmp

Synonym for -openmp.

-xpad

Synonym for -pad.

-xpagesize=size

Set the preferred page size for the stack and the heap.

The size value must be one of the following:

8K 64K 512K 4M 32M 256M 2G 16G or default

For example: -xpagesize=4M

Not all these page sizes are supported on all platforms and depend on the architecture and Solaris environment. The page size specified must be a valid page size for the Solaris operating environment on the target platform, as returned by getpagesizes(3C). If it is not, the request will be silently ignored at run-time. The Solaris environment offers no guarantee that the page size request will be honored.

You can use pmap(1) or meminfo(2) to determine if your running program received the requested page size.

If you specify -xpagesize=default, the flag is ignored; -xpagesize specified without a size value is equivalent to -xpagesize=default.

This option is a macro for
-xpagesize_heap=size -xpagesize_stack=size
These two options accept the same arguments as -xpagesize: 8K, 64K, 512K, 4M, 32M, 256M, 2G, 16G, default. You can set them both with the same value by specifying -xpagesize=size or you can specify them individually with different values.

Compiling with this flag has the same effect as setting the LD_PRELOAD environment variable to mpss.so.1 with the equivalent options, or running the Solaris 9 command ppgsz(1) with the equivalent options, before starting the program. See the Solaris 9 man pages for details.

Note that this feature is not available on Solaris 7 and 8 environments. A program compiled with this option will not link on Solaris 7 and 8 environments.

-xpagesize_heap=size

Set the preferred page size for the heap.

The size value must be one of the following:

8K 64K 512K 4M 32M 256M 2G 16G or default

For example: -xpagesize_heap=4M

See -xpagesize for details.

-xpagesize_stack=size

Set the preferred page size for the stack.

The size value must be one of the following:

8K 64K 512K 4M 32M 256M 2G 16G or default

For example: -xpagesize_stack=4M

See -xpagesize for details.

-xparallel

Synonym for -parallel.

-xpg

Synonym for -pg.

-xpp={fpp|cpp}

Select source file preprocessor.

The default is -xpp=fpp.

The compilers use fpp(1) to preprocess .F or .f95 source files. This preprocessor is appropriate for Fortran. Previous versions used the standard C preprocessor cpp. To select cpp, specify -xpp=cpp.

-xprefetch[=a[,a]]

Enable prefetch instructions on those architectures that support prefetch, such as UltraSPARC II or UltraSPARC III (-xarch=v8plus, v8plusa, v9plusb, v9, v9a, or v9b)

See The PREFETCH Directives for a description of the Fortran PREFETCH directives.

a must be one of the following:

a is

Meaning

auto

Enable automatic generation of prefetch instructions

no%auto

Disable automatic generation of prefetch instructions

explicit

Enable explicit prefetch macros

no%explicit

Disable explicit prefetch macros

latx:factor

Adjust the compiler's assumed prefetch-to-load and prefetch-to-store latencies by the specified factor. The factor must be a positive floating-point or integer number.

yes

-xprefetch=yes is the same as -xprefetch=auto,explicit

no

-xprefetch=no is the same as -xprefetch=no%auto,no%explicit


With -xprefetch, -xprefetch=auto, and -xprefetch=yes, the compiler is free to insert prefetch instructions into the code it generates. This may result in a performance improvement on architectures that support prefetch.

If you are running computationally intensive codes on large multiprocessors, you might find it advantageous to use -xprefetch=latx:factor. This option instructs the code generator to adjust the default latency time between a prefetch and its associated load or store by the specified factor.

The prefetch latency is the hardware delay between the execution of a prefetch instruction and the time the data being prefetched is available in the cache. The compiler assumes a prefetch latency value when determining how far apart to place a prefetch instruction and the load or store instruction that uses the prefetched data.



Note - The assumed latency between a prefetch and a load may not be the same as the assumed latency between a prefetch and a store.



The compiler tunes the prefetch mechanism for optimal performance across a wide range of machines and applications. This tuning may not always be optimal. For memory-intensive applications, especially applications intended to run on large multiprocessors, you may be able to obtain better performance by increasing the prefetch latency values. To increase the values, use a factor that is greater than 1. A value between .5 and 2.0 will most likely provide the maximum performance.

For applications with datasets that reside entirely within the external cache, you may be able to obtain better performance by decreasing the prefetch latency values. To decrease the values, use a factor that is less than 1.

To use the -xprefetch=latx:factor option, start with a factor value near 1.0 and run performance tests against the application. Then increase or decrease the factor, as appropriate, and run the performance tests again. Continue adjusting the factor and running the performance tests until you achieve optimum performance. When you increase or decrease the factor in small steps, you will see no performance difference for a few steps, then a sudden difference, then it will level off again.

Defaults:

If -xprefetch is not specified, -xprefetch=no%auto,explicit is assumed.

If only -xprefetch is specified, -xprefetch=auto,explicit is assumed.

The default of no%auto is assumed unless explicitly overridden with the use of -xprefetch without any arguments or with an argument of auto or yes. For example, -xprefetch=explicit is the same as -xprefetch=explicit,no%auto.

The default of explicit is assumed unless explicitly overridden with an argument of no%explicit or an argument of no. For example, -xprefetch=auto is the same as -xprefetch=auto,explicit.

If automatic prefetching is enabled, such as with -xprefetch or -xprefetch=yes, but a latency factor is not specified, then -xprefetch=latx:1.0 is assumed.

Interactions:

With -xprefetch=explicit, the compiler will recognize the directives:

$PRAGMA SPARC_PREFETCH_READ_ONCE (name)
$PRAGMA SPARC_PREFETCH_READ_MANY (
name)
$PRAGMA SPARC_PREFETCH_WRITE_ONCE (
name)
$PRAGMA SPARC_PREFETCH_WRITE_MANY (
name)

The -xchip setting effects the determination of the assumed latencies and therefore the result of a latx:factor setting.

The latx:factor suboption is valid only when automatic prefetching is enabled. That is, latx:factor is ignored unless it is used with yes or auto.

Warnings:

Explicit prefetching should only be used under special circumstances that are supported by measurements.

Because the compiler tunes the prefetch mechanism for optimal performance across a wide range of machines and applications, you should only use -xprefetch=latx:factor when the performance tests indicate there is a clear benefit. The assumed prefetch latencies may change from release to release. Therefore, retesting the effect of the latency factor on performance whenever switching to a different release is highly recommended.

-xprefetch_level=n

Control the automatic generation of prefetch instructions.

This option is only effective when compiling with:

n may be 1, 2, or 3.

The default for -xprefetch=auto without specifying -xprefetch_level is level 2.

Prefetch level 2 generates additional opportunities for prefetch instructions than level 1. Prefetch level 3 generates additional prefetch instructions than level 2.

Prefetch levels 2 and 3 are only effective on UltraSPARC III platforms (v8plusb or v9b)

-xprofile=p

Collect or optimize with runtime profiling data, or perform basic block coverage analysis.

p must be one of collect[:name], use[:name], or tcov.

Compiling with high optimization levels (-xO5) is enhanced by providing the compiler with runtime performance feedback. To produce the profile feedback the compiler needs to do its best optimizations, you must compile first with -xprofile=collect, run the executable against a typical data set, and then recompile at the highest optimization level and with -xprofile=use.

collect[:name]

Collect and save execution frequency data for later use by the optimizer with -xprofile=use. The compiler generates code to measure statement execution frequency.

The name is the name of the program that is being analyzed. This name is optional. If name is not specified, a.out is assumed to be the name of the executable.

At runtime a program compiled with -xprofile=collect:name will create by default the subdirectory name.profile to hold the runtime feedback information. The program writes its runtime profile data to the file named feedback in this subdirectory. If you run the program several times, the execution frequency data accumulates in the feedback file; that is, output from prior runs is not lost.

You can set the environment variables SUN_PROFDATA and SUN_PROFDATA_DIR to control the file and directory where a program compiled with -xprofile=collect writes its runtime profile data. With these variables set, the program compiled with -xprofile=collect writes its profile data to $SUN_PROFDATA_DIR/$SUN_PROFDATA.

These environment variables similarly control the path and names of the profile data files written by tcov, as described in the tcov(1) man page.

Profile collection is "MT-safe". That is, profiling a program that does its own multitasking by compiling with -mt and calling the multitasking library directly will give accurate results.

When compiling and linking in separate steps, the link step must also specify -xprofile=collect if it appears on the compile step.

use[:nm]

Use execution frequency data to optimize strategically at optimization level -xO5.

As with collect:nm, the nm is optional and may be used to specify the name of the program.

The program is optimized by using the execution frequency data previously generated and saved in the profile data files written by a previous execution of the program compiled with -xprofile=collect.

The source files and other compiler options must be exactly the same as used for the compilation that created the compiled program that generated the feedback file. If compiled with -xprofile=collect:nm, the same program name nm must appear in the optimizing compilation: -xprofile=use:nm.

See also -xprofile_ircache for speeding up compilationg between the collect and use phases.

See also -xprofile_pathmap for controlling where the compiler looks for profile data files.

tcov

Basic block coverage analysis using "new" style tcov. Optimization level must be -O2 or greater.

Code instrumentation is similar to that of -a, but .d files are no longer generated for each source file. Instead, a single file is generated, whose name is based on the name of the final executable. For example, if stuff is the executable file, then stuff.profile/tcovd is the data file.

When running tcov, you must pass it the -x option to make it use the new style of data. If not, tcov uses the old .d files, if any, by default for data, and produces unexpected output.

Unlike -a, the TCOVDIR environment variable has no effect at compile-time. However, its value is used at program runtime to identify where to create the profile subdirectory.

See the tcov(1) man page, the "Performance Profiling" chapter of the Fortran Programming Guide, and the Program Performance Analysis Tools manual for more details.



Note - The report produced by tcov can be unreliable if there is inlining of subprograms due to -O4 or -inline. Coverage of calls to routines that have been inlined is not recorded.



-xprofile_ircache[=path]

Save and reuse compilation data between collect and use profile phases.

Use with -xprofile=collect|use to improve compilation time during the use phase by reusing compilation data saved from the collect phase.

If specified, path will override the location where the cached files are saved. By default, these files will be saved in the same directory as the object file. Specifying a path is useful when the collect and use phases happen in two different places.

A typical sequence of commands might be:

demo% f95 -xO5 -xprofile=collect -xprofile_ircache t1.c t2.c
demo% a.out     collects feedback data
demo% f95 -xO5 -xprofile=use -xprofile_ircache t1.c t2.c

With large programs, compilation time in the use phase can improve significantly by saving the intermediate data in this manner. But this will be at the expense of disk space, which could increase considerably.

-xprofile_pathmap=collect_prefix:use_prefix

Set path mapping for profile data files.

Use the -xprofile_pathmap option with the -xprofile=use option.

Use -xprofile_pathmap when the compiler is unable to find profile data for an object file that is compiled with -xprofile=use, and:

The collect-prefix is the prefix of the UNIX pathname of a directory tree in which object files were compiled using -xprofile=collect.

The use-prefix is the prefix of the UNIX pathname of a directory tree in which object files are to be compiled using -xprofile=use.

If you specify multiple instances of -xprofile_pathmap, the compiler processes them in the order of their occurrence. Each use-prefix specified by an instance of -xprofile_pathmap is compared with the object file pathname until either a matching use-prefix is identified or the last specified use-prefix is found not to match the object file pathname.

-xrecursive

Allow routines without RECURSIVE attribute call themselves recursively.

Normally, only subprograms defined with the RECURSIVE attribute can call themselves recursively.

Compiling with -xrecursive enables subprograms to call themselves, even if they are not defined with the RECURSIVE attribute. But, unlike subroutines defined RECURSIVE, use of this flag does not cause local variables to be allocated on the stack by default. For local variables to have separate values in each recursive invocation of the subprogram, compile also with -stackvar to put local variables on the stack.

Indirect recursion (routine A calls routine B which then calls routine A) can give inconsistent results at optimization levels greater than -xO2. Compiling with the -xrecursive flag guarantees correctness with indirect recursion, even at higher optimization levels.

Compiling with -xrecursive can cause performance degradations.

-xreduction

Synonym for -reduction.

-xregs=r

Specify register usage.

r is a comma-separated list that consists of one or more of the following:

[no%]appl, [no%]float.

Where the % is shown, it is a required character.

Example: -xregs=appl,no%float

On SPARC systems, certain registers are described as application registers. Using these registers can increase performance because fewer load and store instructions are needed. However, such use can conflict with some old library programs written in assembly code.

The set of application registers depends on the SPARC platform:

The compiler default is: -xregs=appl,float.

-xs

Allow debugging by dbx without object (.o) files.

With -xs, all debug information is copied into the executable file. If you move executables to another directory, then you can use dbx and ignore the object (.o) files. Use this option when you cannot retain the .o files.

Without -xs, if you move the executables, you must move both the source files and the object (.o) files, or set the path with either the dbx pathmap or use command.

-xsafe=mem

Allow the compiler to assume that no memory protection violations occur.

Using this option allows the compiler to assume no memory-based traps occur. It grants permission to use the speculative load instruction on the SPARC V9 platforms.

This option is effective only when used with optimization level -O5 one one of the following architectures (-xarch): v8plus, v8plusa, v8plusb, v9, v9a, or v9b



caution icon

Caution - Because non-faulting loads do not cause a trap when a fault such as address misalignment or segmentation violation occurs, you should use this option only for programs in which such faults cannot occur. Because few programs incur memory-based traps, you can safely use this option for most programs. Do not use this option with programs that explicitly depend on memory-based traps to handle exceptional conditions.



-xsb

Synonym for -sb.

-xsbfast

Synonym for -sbfast.

-xspace

Do no optimizations that increase the code size.

Example: Do not unroll or parallelize loops if it increases code size.

-xtarget=t

Specify the target platform for the instruction set and optimization.

t must be one of: native, native64, generic, generic64, platform-name.

The -xtarget option permits a quick and easy specification of the -xarch, -xchip, and -xcache combinations that occur on real platforms. The only meaning of -xtarget is in its expansion.

The performance of some programs may benefit by providing the compiler with an accurate description of the target computer hardware. When program performance is critical, the proper specification of the target hardware could be very important. This is especially true when running on the newer SPARC processors. However, for most programs and older SPARC processors, the performance gain is negligible and a generic specification is sufficient.

native: Optimize performance for the host platform.

The compiler generates code optimized for the host platform. It determines the available architecture, chip, and cache properties of the machine on which the compiler is running.

native64: Compile for native 64-bit environment.

Set the architecture, chip, and cache properties for the 64-bit environment on the machine on which the compiler is running.

generic: Get the best performance for generic architecture, chip, and cache.

The compiler expands -xtarget=generic to:

-xarch=generic -xchip=generic -xcache=generic

This is the default value.

generic64: Compile for generic 64-bit environment.

This expands to -xarch=v9 -xcache=generic -xchip=generic

platform-name: Get the best performance for the specified platform.

Use the fpversion(1) command to determine the expansion of -xtarget=native on a running system.

Note that -xtarget for a specific host platform might not expand to the same -xarch, -xchip, or -xcache settings as -xtarget=native when compiling on that platform.

The following table gives a list of the commonly used system platform names accepted by the compiler. Appendix C gives a list of older and less commonly used system platform names

TABLE 3-17 Expansions of Commonly Used -xtarget System Platforms

-xtarget=platform-name

-xarch

-xchip

-xcache

generic

generic

generic

generic

generic64

v9

generic

generic

entr150

v8plusa

ultra

16/32/1:512/64/1

entr2

v8plusa

ultra

16/32/1:512/64/1

entr2/1170

v8plusa

ultra

16/32/1:512/64/1

entr2/1200

v8plusa

ultra

16/32/1:512/64/1

entr2/2170

v8plusa

ultra

16/32/1:512/64/1

entr2/2200

v8plusa

ultra

16/32/1:512/64/1

entr3000

v8plusa

ultra

16/32/1:512/64/1

entr4000

v8plusa

ultra

16/32/1:512/64/1

entr5000

v8plusa

ultra

16/32/1:512/64/1

entr6000

v8plusa

ultra

16/32/1:512/64/1

ultra

v8plusa

ultra

16/32/1:512/64/1

ultra1/140

v8plusa

ultra

16/32/1:512/64/1

ultra1/170

v8plusa

ultra

16/32/1:512/64/1

ultra1/200

v8plusa

ultra

16/32/1:512/64/1

ultra2

v8plusa

ultra2

16/32/1:512/64/1

ultra2/1170

v8plusa

ultra

16/32/1:512/64/1

ultra2/1200

v8plusa

ultra

16/32/1:1024/64/1

ultra2/1300

v8plusa

ultra2

16/32/1:2048/64/1

ultra2/2170

v8plusa

ultra

16/32/1:512/64/1

ultra2/2200

v8plusa

ultra

16/32/1:1024/64/1

ultra2/2300

v8plusa

ultra2

16/32/1:2048/64/1

ultra2e

v8plusa

ultra2e

16/32/1:256/64/4

ultra2i

v8plusa

ultra2i

16/32/1:512/64/1

ultra3

v8plusa

ultra3

64/32/4:8192/512/1

ultra3cu

v8plusa

ultra3cu

64/32/4:8192/512/2


-xtime

Synonym for -time.

-xtypemap=spec

Specify default data mappings.

This option provides a flexible way to specify the byte sizes for default data types. This option applies to both default-size variables and constants.

The specification string spec may contain any or all of the following in a comma-delimited list:

real:size
double:size
integer:size

The allowable combinations on each platform are:

For example:

maps both default REAL and DOUBLE to 8 bytes.

This option applies to all variables declared with default specifications (without explicit byte sizes), as in REAL XYZ (resulting in a 64-bit XYZ). Also, all single-precision REAL constants are promoted to REAL*8.

Note that INTEGER and LOGICAL are treated the same, and COMPLEX is mapped as two REALs. Also, DOUBLE COMPLEX will be treated the way DOUBLE is mapped.

-xunroll=n

Synonym for -unroll=n.

-xvector[={yes|no}]

Enable automatic calls to the SPARC vector library functions.

With -xvector=yes, the compiler is permitted to transform certain math library calls within DO loops into single calls to the equivalent vectorized library routine whenever possible. This could result in a performance improvement for loops with large loop counts.

The compiler defaults to -xvector=no. Specifying -xvector by itself defaults to -xvector=yes.

This option also triggers -depend. (Follow -xvector with -nodepend on the command line to cancel the dependency analysis.)

The compiler will automatically notify the linker to include the libmvec and libc libraries in the load step if -xvector appears. However, to compile and link in separate steps requires specifying -xvector on the link step as well to correctly select these necessary libraries.

-ztext

Generate only pure libraries with no relocations.

The general purpose of -ztext is to verify that a generated library is pure text; instructions are all position-independent code. Therefore, it is generally used with both -G and -pic.

With -ztext, if ld finds an incomplete relocation in the text segment, then it does not build the library. If it finds one in the data segment, then it generally builds the library anyway; the data segment is writable.

Without -ztext, ld builds the library, relocations or not.

A typical use is to make a library from both source files and object files, where you do not know if the object files were made with -pic.

Example: Make library from both source and object files:

demo% f95 -G -pic -ztext -o MyLib -hMyLib a.f b.f x.o y.o

An alternate use is to ask if the code is position-independent already: compile without -pic, but ask if it is pure text.

Example: Ask if it is pure text already--even without -pic:

demo% f95 -G -ztext -o MyLib -hMyLib a.f b.f x.o y.o

If you compile with -ztext and ld does not build the library, then you can recompile without -ztext, and ld will build the library. The failure to build with -ztext means that one or more components of the library cannot be shared; however, maybe some of the other components can be shared. This raises questions of performance that are best left to you, the programmer.