Instructs the compiler to perform high-order loop analysis and transformations during optimization.
where:
arraypad The compiler will pad any arrays where it infers there may be a benefit and will pad by whatever amount it chooses. Not all arrays will necessarily be padded, and different arrays may be padded by different amounts. arraypad=n The compiler will pad every array in the code. The pad amount must be a positive integer value, and each array will be padded by an integral number of elements. Because n is an integral value, we recommend that pad values be multiples of the largest array element size, typically 4, 8, or 16. simd | nosimd The compiler converts certain operations that are performed in a loop on successive elements of an array into a call to a VMX (Vector Multimedia Extension) instruction. This call calculates several results at one time, which is faster than calculating each result sequentially. If you specify -qhot=nosimd, the compiler performs optimizations on loops and arrays, but avoids replacing certain code with calls to VMX instructions.
This suboption has effect only when -qarch=ppc970 is in effect, and your operating system is of a version that supports VMX instructions.
vector | novector The compiler converts certain operations that are performed in a loop on successive elements of an array (for example, square root, reciprocal square root) into a call to a library routine. This call will calculate several results at one time, which is faster than calculating each result sequentially. If you specify -qhot=novector, the compiler performs high-order transformations on loops and arrays, but avoids optimizations where certain code is replaced by calls to vector library routines. The -qhot=vector option may affect the precision of your program's results so you should specify either -qhot=novector or -qstrict if the change in precision is unacceptable to you.
The -qhot=simd and -qhot=vector suboptions are on by default when you specify the -qhot, -O4, or -O5 options.
If you do not also specify optimization of at least level 2 when specifying -qhot on the command line, the compiler assumes -O2.
Because of the implementation of the cache architecture, array dimensions that are powers of two can lead to decreased cache utilization. The optional arraypad suboption permits the compiler to increase the dimensions of arrays where doing so might improve the efficiency of array-processing loops. If you have large arrays with some dimensions (particularly the first one) that are powers of 2, or if you find that your array-processing programs are slowed down by cache misses or page faults, consider specifying -qhot=arraypad.
The simd suboption optimizes array data to run mathematical operations in parallel where the target architecture allows such operations. Parallel operations occur in 16-byte vector registers. The compiler divides vectors that exceed the register length into 16-byte units to facilitate optimization. A 16-byte unit can contain one of the following types of data:
- 4 Integers.
- 8 2-byte units
- 16 1-byte units
Short vectorization does not support double-precision floating point mathematics, and you must specify -qarch=ppc970. Applying -qhot=simd optimization is useful for applications with significant image processing demands.
The vector suboption optimizes array data to run mathematical operations in parallel where applicable. The compiler uses standard registers with no vector size restrictions. The vector suboption supports single and double-precision floating-point mathematics, and is useful for applications with significant mathematical processing deamnds.
Both -qhot=arraypad and -qhot=arraypad=n are unsafe options. They do not perform any checking for reshaping or equivalences that may cause the code to break if padding takes place.
The following example turns on the -qhot=arraypad option:
xlc -qhot=arraypad myprogram.c