Example 1. Software Pipelining Information
*----------------------------------------------------------------------------*
;* SOFTWARE PIPELINE INFORMATION
;*
;* Known Minimum Trip Count : 2
;* Known Maximum Trip Count : 2
;* Known Max Trip Count Factor : 2
;* Loop Carried Dependency Bound(^) : 4
;* Unpartitioned Resource Bound : 4
;* Partitioned Resource Bound(*) : 5
;* Resource Partition:
;* A-side B-side
;* .L units 2 3
;* .S units 4 4
;* .D units 1 0
;* .M units 0 0
;* .X cross paths 1 3
;* .T address paths 1 0
;* Long read paths 0 0
;* Long write paths 0 0
;* Logical ops (.LS) 0 1 (.L or .S unit)
;* Addition ops (.LSD) 6 3 (.L or .S or .D unit)
;* Bound(.L .S .LS) 3 4
;* Bound(.L .S .D .LS .LSD) 5* 4
;*
;* Searching for software pipeline schedule at ...
;* ii = 5 Register is live too long
;* ii = 6 Did not find schedule
;* ii = 7 Schedule found with 3 iterations in parallel
;* done
;*
;* Epilog not entirely removed
;* Collapsed epilog stages : 1
;*
;* Prolog not removed
;* Collapsed prolog stages : 0
;*
;* Minimum required memory pad : 2 bytes
;*
;* Minimum safe trip count : 2
;*
;*----------------------------------------------------------------------------*
The terms defined below appear in the software pipelining information. For more information on each term, see the TMS320C6000 Programmer's Guide.
- Loop unroll factor. The number of times the loop was unrolled specifically to increase performance based on the resource bound constraint in a software pipelined loop.
- Known minimum trip count. The minimum number of times the loop will be executed.
- Known maximum trip count. The maximum number of times the loop will be executed.
- Known max trip count factor. Factor that would always evenly divide the loops trip count. This information can be used to possibly unroll the loop.
- Loop label. The label you specified for the loop in the linear assembly input file. This field is not present for C/C++ code.
- Loop carried dependency bound. The distance of the largest loop carry path. A loop carry path occurs when one iteration of a loop writes a value that must be read in a future iteration. Instructions that are part of the loop carry bound are marked with the ^ symbol.
- Initiation interval (ii). The number of cycles between the initiation of successive iterations of the loop. The smaller the initiation interval, the fewer cycles it takes to execute a loop.
- Resource bound. The most used resource constrains the minimum initiation interval. If four instructions require a .D unit, they require at least two cycles to execute (4 instructions/2 parallel .D units).
- Unpartitioned resource bound. The best possible resource bound values before the instructions in the loop are partitioned to a particular side.
- Partitioned resource bound (*). The resource bound values after the instructions are partitioned.
- Resource partition. This table summarizes how the instructions have been partitioned. This information can be used to help assign functional units when writing linear assembly. Each table entry has values for the A-side and B-side registers. An asterisk is used to mark those entries that determine the resource bound value. The table entries represent the following terms:
- .L units is the total number of instructions that require .L units.
- .S units is the total number of instructions that require .S units.
- .D units is the total number of instructions that require .D units.
- .M units is the total number of instructions that require .M units.
- .X cross paths is the total number of .X cross paths.
- .T address paths is the total number of address paths.
- Long read path is the total number of long read port paths.
- Long write path is the total number of long write port paths.
- Logical ops (.LS) is the total number of instructions that can use either the .L or .S unit.
- Addition ops (.LSD) is the total number of instructions that can use either the .L or .S or .D unit
- Bound(.L .S .LS). The resource bound value as determined by the number of instructions that use the .L and .S units. It is calculated with the following formula:
Bound(.L .S .LS ) = ceil((.L + .S + .LS) / 2)
- Bound(.L .S .D .LS .LSD). The resource bound value as determined by the number of instructions that use the .D, .L, and .S units. It is calculated with the following formula:
Bound(.L .S .D .LS .SLED) = ceil((.L + .S + .D + .LS + .LSD) / 3)
- Minimum required memory pad. The number of bytes that are read if speculative execution is enabled. See Section 4.6.3 for more information.