Viv*_*k S 21
isra是执行gcc选项-fipa-sra编译器优化时添加到函数名称的后缀.
从gcc手册:
-fipa-sra
Run Code Online (Sandbox Code Playgroud)
执行过程的标量替换聚合,删除未使用的参数以及通过值传递的参数替换参考传递的参数.
在级别启用
-O2,-O3和-Os.
在此选项下优化的所有函数都isra附加到其名称后面.我深入研究gcc代码并找出附加字符串的函数.
tree
clone_function_name (tree decl, const char *suffix)
{
tree name = DECL_ASSEMBLER_NAME (decl);
size_t len = IDENTIFIER_LENGTH (name);
char *tmp_name, *prefix;
prefix = XALLOCAVEC (char, len + strlen (suffix) + 2);
memcpy (prefix, IDENTIFIER_POINTER (name), len);
strcpy (prefix + len + 1, suffix);
#ifndef NO_DOT_IN_LABEL
prefix[len] = '.';
#elif !defined NO_DOLLAR_IN_LABEL
prefix[len] = '$';
#else
prefix[len] = '_';
#endif
ASM_FORMAT_PRIVATE_NAME (tmp_name, prefix, clone_fn_id_num++);
return get_identifier (tmp_name);
}
Run Code Online (Sandbox Code Playgroud)
这里,参数2,const char *suffix是"isra"和函数宏底部的注意事项,ASM_FORMAT_PRIVATE_NAME它以clone_fn_id_num++第三个参数为例.这是之后找到的任意数字"isra".其名称是在此编译器选项下克隆的函数计数(或者可以是跟踪所有克隆函数的全局计数器).
如果你想了解更多,请modify_function在文件gcc/tree-sra.c中搜索,然后调用cgraph_function_versioning()哪个文件"isra"作为最后一个参数.
| 归档时间: |
|
| 查看次数: |
3530 次 |
| 最近记录: |