Preventive Service Planning
Abstract
This page contains corrections and additions to the product documentation shipped with IBM XL C/C++ for Linux, V12.1.
Content
Installation Guide
The following corrections and additions apply to the IBM XL C/C++ for Linux, V12.1 Installation Guide:
Topic location: Before installing IBM XL C/C++ for Linux, V12.1
Upgrading the evaluation copy of the XL C/C++ compiler
Install only the vac.lic RPM packages for the full product version of the XL C/C++ compiler and run vac_configure to re-configure the compiler.
Should read:
- Install the vac.lic RPM packages.
- Install the vac.cmp and vacpp.cmp RPM packages using the --replacepkgs --replacefiles options.
For example:
rpm -ivh vac.cmp-12.1.0.0-120323.ppc64.rpm --replacepkgs --replacefiles
rpm -ivh vacpp.cmp-12.1.0.0-120323.ppc64.rpm --replacepkgs --replacefiles
- Run new_install or vac_configure to re-configure the compiler.
Topic location: Before installing IBM XL C/C++ for Linux, V12.1 > The installation image and packages
Table 2. Utilization reporting tool package 1.1
Should read:
Table 2. Utilization reporting tool package 1.2
All references to the version of the utilization reporting tool (urt) in the Installation Guide should be changed to V1.2.
Compiler Reference
The following corrections and additions apply to the IBM XL C/C++ for Linux, V12.1 Compiler Reference:
Topic location: Configuring compiler defaults > Setting environment variables > Environment variables for parallel processing > Environment variables for OpenMP > OMP_STACKSIZE
The default value for 32-bit mode is 256M. For 64-bit mode, the default is up to the limit imposed by system resources.
Should read:
The default value is 4194304B. The maximum value for 32-bit mode is 256M. For 64-bit mode, the maximum is up to the limit imposed by system resources.
Topic location: Tracking and reporting compiler usage > Understanding the utilization reporting tool
The tool is located in the /opt/ibmurt/1.1/bin directory.
Should read:
The tool is located in the /opt/ibmurt/1.2/bin directory.
A default configuration file ibmurt.cfg is provided in the /opt/ibmurt/1.1/config directory.
Should read:
A default configuration file ibmurt.cfg is provided in the /opt/ibmurt/1.2/config directory.
All references to the version of the utilization reporting tool (urt) in the Compiler Reference should be changed to V1.2.
Topic location: Compiler options reference > Individual option descriptions > -qalign
Defaults
-qalign=power
linuxppc
Should read:
Defaults
-qalign=linuxppc
Topic location: Compiler options reference > Individual option descriptions > -qdigraph
Purpose
Enables recognition of digraph key combinations or keywords to represent characters not found on some keyboards.
Should read:
Enables recognition of digraph key combinations and operator keywords to represent characters that are not found on some keyboards. Digraph key combinations include <:, <%, and so on. Operator keywords include and, or, and so on.
Topic location: Compiler options reference > Individual option descriptions > -qinline
Note that the -qinline- and -qinline+ options are supported only by the XL C compiler.
Defaults
- -qnoinline
- At optimization levels of -O2 and higher, the default is -qinline=noauto
- -qinline=auto:level=5 is the default suboption of -qinline
Parameters
noauto | auto
Enables or disables automatic inlining. If you do not specify any -qinline suboptions, -qinline=auto is the default.
Defaults
If -qinline is not specified, the default option is -qnoinline at the -O0 or -qnoopt optimization level or -qinline=noauto:level=5:20 at the -O2 or higher optimization levels.
If -qinline is specified without any suboptions, the default option is -qinline=auto:level=5:20.
Parameters
noauto | auto
Enables or disables automatic inlining.
Topic location: Compiler options reference > Individual option descriptions > -O, -qoptimize
The following statement should be added under "Usage":
If optimization level -O3 or higher is specified on the command line, the -qhot and -qipa options that are set by the optimization level cannot be overridden by #pragma option_override(identifier, "opt(level, 0)") or #pragma option_override(identifier, "opt(level, 2)").
Topic location: Compiler options reference > Individual option descriptions > -qstaticlink
Syntax
Should read:
The following description should be added under Parameters:
xllibs
- When you specify xllibs with nostaticlink, the compiler links the shared version of the XL compiler libraries.
- When you specify xllibs with staticlink, the compiler links the static version of the XL compiler libraries.
For more information, see A new suboption xllibs added to -qstaticlink for XL C/C++ for Linux, V12.1 and XL Fortran for Linux, V14.1.
Topic location: Compiler options reference > Individual option descriptions > -qtune
The following rows in the Acceptable -qarch/-qtune combinations table:
-qarch option | Default -qtune setting | Available -qtune settings |
pwr4 | pwr4 | auto | pwr4 | pwr5 | pwr7 | ppc970 | balanced |
pwr5 | pwr5 | auto | pwr5 | pwr7 | balanced |
pwr5x | pwr5 | auto | pwr5 | pwr7 | balanced |
Should read:
-qarch option | Default -qtune setting | Available -qtune settings |
pwr4 | pwr4 | auto | pwr4 | pwr5 | pwr6 | pwr7 | ppc970 | balanced |
pwr5 | pwr5 | auto | pwr5 | pwr6 | pwr7 | balanced |
pwr5x | pwr5 | auto | pwr5 | pwr6 | pwr7 | balanced |
Topic location: Compiler pragmas reference > Individual pragma descriptions > #pragma option_override
Syntax
Should read:
Parameters
#pragma option_override value | Equivalent compiler option |
level, 0 | -O |
level, 2 | -O2 |
level, 3 | -O3 |
level, 4 | -O4 |
level, 5 | -O5 |
registerspillsize, size | -qspill=size |
size | -qcompact |
size, yes | |
size, no | -qnocompact |
strict, all | -qstrict, -qstrict=all |
strict, no, none | -qnostrict |
strict, suboption_list | -qstrict=suboption_list |
Should read:
Notes:
1. If optimization level -O3 or higher is specified on the command line, #pragma option_override(identifier, "opt(level, 0)") or #pragma option_override(identifier, "opt(level, 2)") does not turn off the implication of the -qhot and -qipa options.
2. Specifying -O3 implies -qhot=level=0. However, specifying #pragma option_override(identifier, "opt(level, 3)") in source code does not imply -qhot=level=0.
Topic location: Compiler pragmas reference > Individual pragma descriptions > #pragma reg_killed_by
fs
- Floating-point and status control register
Should read:
fsr
- Floating-point and status control register
Topic location: Compiler pragmas reference > Individual pragma descriptions > #pragma ibm independent_loop
This section should be moved out of the "Pragma directives for parallel processing" section and be put under the "Individual pragma descriptions" section directly.
The following statement should be added:
This pragma only takes effect if you specify the -qsmp or -qhot compiler option.
Topic location: Compiler built-in functions > Synchronization and atomic built-in functions > Synchronization functions > __lwsync, __iospace_lwsync
Load Word Synchronize
Should read:
Lightweight Synchronize
Topic location: Compiler built-in functions > GCC atomic memory access built-in functions
The data types of the parameters that are supported in these functions include Boolean type and any integral scalar type of 1, 2, 4 or 8 bytes, listed as follows.
Should read:
In the prototype of each function, the parameter types T, U, and V can be of pointer or integral type. U and V can also be of real floating-point type, but only when T is of integral type. The following tables list the integral and floating-point types that are supported by these built-in functions.
Table 1. Supported data types
Should read:
Table 1. Supported integral data types
The following data types in Table 1. Supported integral data types
bool | wchar_t |
_Bool |
Should read:
bool | _Bool |
The following table should be added:
Table 2. Supported floating-point data types
float |
double |
long double |
Language Reference
The following corrections and additions apply to the IBM XL C/C++ for Linux, V12.1 Language Reference:
Topic location: Declarators > Pointers > Type-based aliasing
In the example:
Should read:
The compiler determines that the result of f += 1.0; is never used subsequently. Thus, the optimizer may discard the statement from the generated code.
Should read:
The compiler determines that the result of f += 1.0 does not affect the value of *p. Thus, the optimizer might move the assignment after the printf statement.
Topic location: Declarators > Initializers > Initialization of structures and unions
You do not have to initialize all members of a structure or union; the initial value of uninitialized structure members depends on the storage class associated with the structure or union variable. In a structure declared as static, any members that are not initialized are implicitly initialized to zero of the appropriate type; the members of a structure with automatic storage have no default initialization. The default initializer for a union with static storage is the default for the first component; a union with automatic storage has no default initialization.
The following definition shows a partially initialized structure:
struct address {
int street_no;
char *street_name;
char *city;
char *prov;
char *postal_code;
};
struct address temp_address =
{ 44, "Knyvet Ave.", "Hamilton", "Ontario" };
The values of temp_address are:
Member | Value |
temp_address.street_no | 44 |
temp_address.street_name | address of string "Knyvet Ave." |
temp_address.city | address of string "Hamilton" |
temp_address.prov | address of string "Ontario" |
temp_address.postal_code | Depends on the storage class of the temp_address variable; if it is static, the value would be NULL. |
Should read:
You do not have to initialize all members of structure variables. If a structure variable does not have an initializer, the initial values of the structure members depend on the storage class associated with the structure variable:
- If a structure variable has static storage, its members are implicitly initialized to zero of the appropriate type.
- If a structure variable has automatic storage, its members have no default initialization.
If a structure variable is partially initialized, all the uninitialized structure members are implicitly initialized to zero no matter what the storage class of the structure variable is. See the following example:
struct one {
int a;
int b;
int c;
};
void main(){
struct one z1; // Members in z1 do not have default initial values.
static struct one z2; // z2.a=0, z2.b=0, and z2.c=0.
struct one z3 = {1}; // z3.a=1, z3.b=0, and z3.c=0.
}
In this example, structure variable z1 has automatic storage, and it does not have an initializer, so all the members in z1 do not have default initial values. Structure variable z2 has static storage, and all its members are implicitly initialized to zero. Structure variable z3 is partially initialized, so all its uninitialized members are implicitly initialized to zero.
You do not have to initialize all members of a union. The default initializer for a union with static storage is the default for the first component. A union with automatic storage has no default initialization.
Was this topic helpful?
Document Information
Modified date:
08 August 2018
UID
swg21588552