描述
默认情况下:
- 函数在 RTL 中作为独立层级块保留。
- 同一层级上的任一函数的所有实例都使用相同 RTL 实现(块)。
set_directive_function_instantiate
命令用于为函数的每个实例创建唯一的 RTL 实现,允许对每个实例进行最优化。
默认情况下,以下代码可为全部 3 个实例的 foo_sub
函数生成单一 RTL 实现。
char foo_sub(char inval, char incr)
{
return inval + incr;
}
void foo(char inval1, char inval2, char inval3,
char *outval1, char *outval2, char * outval3)
{
*outval1 = foo_sub(inval1, 1);
*outval2 = foo_sub(inval2, 2);
*outval3 = foo_sub(inval3, 3);
}
按如下示例部分所示使用指令可生成 3 个版本的 foo_sub
函数,每个版本都独立针对 incr
变量进行最优化。
语法
set_directive_function_instantiate <location> <variable>
-
<location>
即生成函数的唯一实例的位置(格式为function[/label]
)。 <variable>
<string>
用于指定将哪个函数实参<string>
指定为常量。
选项
此命令不含任何选项。
示例
对于以上所示示例代码,以下 Tcl(或置于 foo_sub
函数中的编译指示)支持对 foo_sub
函数的每个实例进行与 incr
输入相关的独立最优化。
set_directive_function_instantiate foo_sub incr