llvm::Function.isDeclaration() 和 llvm::Function.isDeclarationForLinker() 有什么区别?

问题描述 投票:0回答:1

我在我的项目中使用 LLVM。

llvm::Function.isDeclaration()
llvm::Function.isDeclarationForLinker()
有什么区别?

clang llvm
1个回答
0
投票

isDeclarationForLinker
是以下任一者:

  1. A
    GlobalValue
    是一个声明
  2. A
    GlobalValue
    AvailableExternallyLinkage

我从

isDeclarationForLinker
函数的定义中得到了这个:

bool isDeclarationForLinker() const {
  if (hasAvailableExternallyLinkage())
    return true;

  return isDeclaration();
}

ExternallyAvailableLinkage
的意思是:

具有“

available_externally
”链接的全局变量永远不会发送到与 LLVM 模块对应的目标文件中。从链接器的角度来看,
available_externally
全局相当于外部声明。

它们的存在是为了允许在了解全局定义的情况下进行内联和其他优化,已知全局定义位于模块之外的某个地方。

具有

available_externally
链接的全局变量可以随意丢弃,并允许内联和其他优化。此链接类型仅允许用于定义,不允许用于声明。

基本上,区别在于

isDeclaration
表示没有定义。
isDeclarationForLinker
表示有定义,但不会发出全局代码

© www.soinside.com 2019 - 2024. All rights reserved.