Pre*_*kie 9 llvm llvm-clang llvm-ir llvm-c++-api
LLVM中的comdat代表什么?您可以在这里找到来源:Comdata
源级程序表示(c++)的示例将非常有帮助。
如果您需要更多信息,请随时询问。我在 llvm 代码库的很多地方找到它,但我无法弄清楚它到底是什么,以及它的用途
感谢您的帮助!
我也在学习并从这个博客Comdat中看到以下解释。
Comdat 部分是对象文件中的一个部分,其中放置对象,可以在其他对象文件中复制这些对象。每个对象都有链接器的信息,指示检测到重复项时它必须执行的操作。选项可以是: Any\xe2\x80\x8a\xe2\x80\x94\xe2\x80\x8ado 任何内容,ExactMatch\xe2\x80\x8a\xe2\x80\x94\xe2\x80\x8aduplicates 必须完全匹配,否则出现错误,Largest\xe2\x80\x8a\xe2\x80\x94\xe2\x80\x8a取值最大的对象,NoDublicates\xe2\x80\x8a\xe2\x80\x94\xe2\x80\x8a应该有不能重复,SameSize\xe2\x80\x8a\xe2\x80\x94\xe2\x80\x8aduplicates 必须具有相同的大小,否则会出错。
\n在 LLVM 中,Comdat 数据由枚举表示:
\nenum SelectionKind {\n Any, ///< The linker may choose any COMDAT.\n ExactMatch, ///< The data referenced by the COMDAT must be the same.\n Largest, ///< The linker will choose the largest COMDAT.\n NoDuplicates, ///< No other Module may specify this COMDAT.\n SameSize, ///< The data referenced by the COMDAT must be the same size.\n };\nRun Code Online (Sandbox Code Playgroud)\nComdat 类实际上代表一对 (Name, SelectionKind)。(事实上,一切都更复杂。)所有由于某种原因无法删除的变量都被放置在一组NotDiscardableComdats中。对于函数和全局别名,我们做同样的\xe2\x80\x8a\xe2\x80\x94\xe2\x80\x8a无法删除的东西放在NotDiscardableComdats中。然后,调用全局构造函数、全局函数、全局变量、全局别名和全局析构函数的单独优化函数。优化在循环中继续进行,直到没有执行任何优化为止。在循环的每次迭代中,NotDiscardableComdats 集合被设置为零。
\n