-qisolated_call

Purpose

Specifies functions in the source file that have no side effects other than those implied by their parameters.

Essentially, any change in the state of the runtime environment is considered a side effect, including:

  • Accessing a volatile object
  • Modifying an external object
  • Modifying a static object
  • Modifying a file
  • Accessing a file that is modified by another process or thread
  • Allocating a dynamic object, unless it is released before returning
  • Releasing a dynamic object, unless it was allocated during the same invocation
  • Changing system state, such as rounding mode or exception handling
  • Calling a function that does any of the above

Marking a function as isolated indicates to the optimizer that external and static variables cannot be changed by the called function and that pessimistic references to storage can be deleted from the calling function where appropriate. Instructions can be reordered with more freedom, resulting in fewer pipeline delays and faster execution in the processor. Multiple calls to the same function with identical parameters can be combined, calls can be deleted if their results are not needed, and the order of calls can be changed.

Syntax

Read syntax diagramSkip visual syntax diagram
Option syntax

                          .-:--------.   
                          V          |   
>>- -q--isolated_call--=----function-+-------------------------><

Defaults

Not applicable.

Parameters

function
The name of a function that does not have side effects or does not rely on functions or processes that have side effects. function is a primary expression that can be an identifier, operator function, conversion function, or qualified name. An identifier must be of type function or a typedef of function. C++ only If the name refers to an overloaded function, all variants of that function are marked as isolated calls. C++ only

Usage

The only side effect that is allowed for a function named in the option or pragma is modifying the storage pointed to by any pointer arguments passed to the function, that is, calls by reference. The function is also permitted to examine nonvolatile external objects and return a result that depends on the nonvolatile state of the runtime environment. Do not specify a function that causes any other side effects; that calls itself; or that relies on local static storage. If a function is incorrectly identified as having no side effects, the program behavior might be unexpected or produce incorrect results.

Predefined macros

None.

Examples

To compile myprogram.c, specifying that the functions myfunction(int) and classfunction(double) do not have side effects, enter:
xlc myprogram.c -qisolated_call=myfunction:classfunction


Voice your opinion on getting help information Ask IBM compiler experts a technical question in the IBM XL compilers forum Reach out to us