答案 0 :(得分:20)
isra
是在执行gcc
选项-fipa-sra
编译器优化时添加到函数名称的后缀。
来自gcc manual:
-fipa-sra
执行过程间的标量替换聚合,删除未使用的 通过参数传递的参数和参数的替换 按价值。
在级别
-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);
}
此处,参数2 const char *suffix
为"isra"
,并注意函数宏ASM_FORMAT_PRIVATE_NAME
的底部,其中clone_fn_id_num++
为第3个参数。这是在"isra"
之后找到的任意数字。其名称是在此编译器选项下克隆的函数计数(或者可以是跟踪所有克隆函数的全局计数器)。
如果您想了解更多信息,请在文件modify_function
中搜索gcc/tree-sra.c
,cgraph_function_versioning()
依次调用"isra"
作为最后一个参数传递{{1}}。