Compiler Advice (on TI Wiki)

Advice 27000: Use Optimization Options
Advice 27001: Increase Optimization Level
Advice 27002: Do not turn off software pipelining
Advice 27003: Avoid compiling with debug options
Advice 27004: No Performance Advice generated
Advice 30000: Prevent Loop Disqualification due to call
Advice 30001: Prevent Loop Disqualification due to rts-call
Advice 30002: Prevent Loop Disqualification due to asm statement
Advice 30003: Prevent Loop Disqualification due to complex condition
Advice 30004: Prevent Loop Disqualification due to switch statement
Advice 30005: Prevent Loop Disqualification due to arithmetic operation
Advice 30006: Prevent Loop Disqualification due to call(2)
Advice 30007: Prevent Loop Disqualification due to rts-call(2)
Advice 30008: Improve Loop; Qualify with restrict
Advice 30009: Improve Loop; Add MUST_ITERATE pragma
Advice 30010: Improve Loop; Add MUST_ITERATE pragma(2)
Advice 30011: Improve Loop; Add _nassert()

Typical Advice

 advice #30001: Loop at line 18 cannot be scheduled efficiently, as it
contains conversion from "type-a" to "type-b".
Try to use "suggested" type.

Why is the Compiler giving this Advice ?

The compiler is inserting a special function call within a loop, which prevents the software pipelining optimization. Software pipelining is a key compiler optimization for achieving good performance. You are getting this Advice so you can take steps to potentially prevent this pipeline disqualification.


What it means:

The compiler can insert calls to special functions in the run-time support library (RTS) to support operations that are not natively supported by the ISA. For instance, while C6000 floating-point ISAs support instructions to convert between floating-point and signed integer values, they don't support conversion between floating-point and unsigned integer values. If you use unsigned variables in floating point expressions, the compiler will generate a call to an RTS routine to carry out this function. Such a call will disable software pipelining. You can change the unsigned variable to signed variable to prevent this from happening and get better performance.

This is happening in your code. If possible, change the type of integer expressions to signed 32-bit integer. The compiler will be able to use the native hardware instead of adding the special function call, so you will get better performance.

Risks, Severity

If this condition occurs, the compiler cannot perform the software pipelining loop optimization, which is crucial to getting good performance.


Suggested Action

Use suggested type and/or change any integer sub-expressions in floating-point expressions to signed 32-bit integer expressions.

More Resources

Want to squeeze a few more Performance Cycles out of your application? Leverage the e2e (Engineer-to-Engineer) online community to get all of your Advice questions answered! Or, give back to the community with your expertise.

Go to the TI Compiler's e2e online forum! 

E2e.jpg For technical support please post your questions at http://e2e.ti.com.