Pipeline Failure Messages
A-4
A.2 Pipeline Failure Messages
Address Increment Too Large
Description
A particular function the compiler performs when software pipelining is to allow
reordering of all loads and stores occurring from the same array or pointer.
This allows for maximum flexibility in scheduling. Once a schedule is found,
the compiler will return and add the appropriate offsets and increment/decre-
ments to each load and store. Sometimes, the loads and/or stores end up be-
ing offset too far from each other after reordering (the limit for standard load
pointers is +/– 32) . If this happens, the best bet is to restructure the loop so
that the pointers are closer together or rewrite the pointers to use register off-
sets that are precomputed.
Solution
Modify code so that the memory offsets are closer.
Cannot Allocate Machine Registers
Description
After software pipelining and finding a valid schedule, the compiler must allo-
cate all values in the loop to specific machine registers (A0–A15 and B0–B15
for the ’C62x and ’C67x, or A0–A31 and B0–B31 for the ’C64x). There are oc-
casions when software pipelining this particular ii is not possible. This may be
due to the loop schedule found requiring more registers than the ’C6000 has
available. The analyzing feedback example shows:
ii = 12 Cannot allocate machine registers
Regs Live Always : 1/5 (A/B–side)
Max Regs Live : 14/19
Max Cond Regs Live : 1/0
Regs Live Always refers to the number of registers needed for variables live
every cycle in the loop. Data loaded into registers outside the loop and read
inside the loop will fall into this category.
Max Regs Live refers to the maximum number of variables live on any one
cycle in the loop. If there are 33 variables live on one of the cycles inside the
loop, a minimum of 33 registers is necessary and this will not be possible with
the 32 registers available on the C62/C67 cores. 64 registers are available on
the ’C64x core. In addition, this is broken down between A and B side, so if
there is uneven partitioning with 30 values and there are 17 on one side and
13 on the other, the same problem will exist.