我使用 LLVM 编译 libtomcrypt,它非常快(几秒钟),但是当我使用空白通道(只是一个什么都不做的模块通道)时,它非常慢(几分钟)。
有人知道为什么吗?
我使用 Fedora 19。
我使用的 LLVM 是发布版本中的 LLVM 3.4。
谢谢
我使用 LLVM 编译 libtomcrypt,它非常快(几秒钟),但是当我使用空白通道(只是一个什么都不做的模块通道)时,它非常慢(几分钟)。
有人知道为什么吗?
我使用 Fedora 19。
我使用的 LLVM 是发布版本中的 LLVM 3.4。
谢谢
我可以想到空模块传递会对编译时间产生负面影响的两种方式:
模块传递强制传递管理器上的一种同步点。例如,假设您有以下内容:
在具有两个功能f()
和g()
. 通行证管理器可以(并且将)首先在 上运行 A 和 B f()
,然后才在 上运行 A 和g()
B。除其他原因外,这对于内存局部性很有用。但是,如果您添加模块通道:
然后强制 pass 管理器首先在两个函数上运行 A,然后是模块 pass,然后在两个函数上运行 B。
从文档中:
如果一个 pass 没有实现getAnalysisUsage方法,它默认没有任何先决条件,并使所有其他 pass 无效。
因此,如果您的runOnModule
方法返回true
,则通道管理器会将之前的每个分析通道视为无效,并在以后需要时强制重新运行它们。
要获得更完整的图片,我建议阅读文档以获取有关通行证管理器功能的完整说明。