Sun Studio 12: Fortran User's Guide

3.4.112 –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). 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.