【问题标题】:big functions do not inline llvm -inline pass大函数不内联 llvm -inline pass
【发布时间】:2015-08-28 20:43:11
【问题描述】:

似乎 llvm -inline 只传递内联小函数。有没有办法内联所有函数,不管它们有多大?

【问题讨论】:

  • 内联是为了内联小函数而创建的。为什么要内联大的?
  • 我需要在程序上做一些实验,但我不能使用函数调用。
  • 我可以强制内联每个函数吗??
  • 在我看来,它没有用,因为某些函数根本无法内联(例如,main LOL)。此外,clang 足够聪明,可以在您请求时内联所有可能的功能。我认为当你要求它这样做时它会尽力而为。
  • 您可以使用always_inline 属性,然后运行-always-inline 传递(如this question)。这需要您注释每个函数...

标签: llvm inline llvm-clang


【解决方案1】:

您可以使用-inline-threshold 标志来更改 LLVM 将内联函数的“成本”。更高的值意味着更多的函数将被内联。

opt -inline -inline-threshold=10000 ...

显然函数不能总是内联,尤其是当调用图包含循环(递归调用)时。

【讨论】:

  • 是否还有其他原因(递归除外)导致函数无法内联??
  • 间接函数调用没有被内联。有什么帮助吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-18
  • 2011-02-11
  • 1970-01-01
相关资源
最近更新 更多