Performance 当pass激活时LLVM变慢
我使用LLVM编译libtomcrypt,它非常快(几秒钟),但当我使用空白传递(只是一个不做任何事情的模块传递)时,它非常慢(几分钟) 有人知道为什么吗 我用软呢帽 我使用的LLVM是版本中的LLVM3.4Performance 当pass激活时LLVM变慢,performance,llvm,libtomcrypt,Performance,Llvm,Libtomcrypt,我使用LLVM编译libtomcrypt,它非常快(几秒钟),但当我使用空白传递(只是一个不做任何事情的模块传递)时,它非常慢(几分钟) 有人知道为什么吗 我用软呢帽 我使用的LLVM是版本中的LLVM3.4 谢谢我可以想出两种方法,空模块传递会对编译时间产生负面影响: 1.通行证订购 模块传递在传递管理器上强制一种同步点。例如,假设你有以下几点: 函数传递A 功能通行证B 在具有两个函数的模块上f()和g()。通行证管理器可以(也将)首先在f()上运行A和B,然后在g()上运行A和B。除其他原
谢谢我可以想出两种方法,空模块传递会对编译时间产生负面影响: 1.通行证订购 模块传递在传递管理器上强制一种同步点。例如,假设你有以下几点:
f()
和g()
。通行证管理器可以(也将)首先在f()
上运行A和B,然后在g()上运行A和B。除其他原因外,这对于内存局部性非常有用。
但是,如果添加模块过程:
函数传递A
模块通行证
功能通行证B
然后强制pass管理器首先对两个函数运行A,然后对模块pass,然后对两个函数运行B
2.使以前的结果无效
发件人:
如果一个过程没有实现该方法,它默认为没有任何先决条件过程,并使所有其他过程无效
因此,如果您的runOnModule
方法返回true
,则过程管理器会将以前的每个分析过程都视为无效,如果以后需要,则会强制重新运行它们
要获得更完整的信息,我建议您阅读的文档。您是在谈论编译时还是运行时?除了空白通行证之外,您还运行哪些通行证?我讲的是编译时间。我看不出运行时间之间有任何差异。我也尝试了一些其他的方法,这是同样的问题。谢谢,我要看一下关于getAnalysisUsage的文档。