-2

我使用 LLVM 编译 libtomcrypt,它非常快(几秒钟),但是当我使用空白通道(只是一个什么都不做的模块通道)时,它非常慢(几分钟)。

有人知道为什么吗?

我使用 Fedora 19。

我使用的 LLVM 是发布版本中的 LLVM 3.4。

谢谢

4

1 回答 1

1

我可以想到空模块传递会对编译时间产生负面影响的两种方式:

1.通行证订购

模块传递强制传递管理器上的一种同步点。例如,假设您有以下内容:

  1. 函数传递 A
  2. 函数传递 B

在具有两个功能f()g(). 通行证管理器可以(并且将)首先在 上运行 A 和 B f(),然后才在 上运行 A 和g()B。除其他原因外,这对于内存局部性很有用。但是,如果您添加模块通道:

  1. 函数传递 A
  2. 模块通行证
  3. 函数传递 B

然后强制 pass 管理器首先在两个函数上运行 A,然后是模块 pass,然后在两个函数上运行 B。

2. 使以前的结果无效

文档中

如果一个 pass 没有实现getAnalysisUsage方法,它默认没有任何先决条件,并使所有其他 pass 无效。

因此,如果您的runOnModule方法返回true,则通道管理器会将之前的每个分析通道视为无效,并在以后需要时强制重新运行它们。

要获得更完整的图片,我建议阅读文档以获取有关通行证管理器功能的完整说明

于 2014-01-08T13:31:02.097 回答