Performance 当pass激活时LLVM变慢

Performance 当pass激活时LLVM变慢,performance,llvm,libtomcrypt,Performance,Llvm,Libtomcrypt,我使用LLVM编译libtomcrypt,它非常快(几秒钟),但当我使用空白传递(只是一个不做任何事情的模块传递)时,它非常慢(几分钟) 有人知道为什么吗 我用软呢帽 我使用的LLVM是版本中的LLVM3.4 谢谢我可以想出两种方法,空模块传递会对编译时间产生负面影响: 1.通行证订购 模块传递在传递管理器上强制一种同步点。例如,假设你有以下几点: 函数传递A 功能通行证B 在具有两个函数的模块上f()和g()。通行证管理器可以(也将)首先在f()上运行A和B,然后在g()上运行A和B。除其他原

我使用LLVM编译libtomcrypt,它非常快(几秒钟),但当我使用空白传递(只是一个不做任何事情的模块传递)时,它非常慢(几分钟)

有人知道为什么吗

我用软呢帽

我使用的LLVM是版本中的LLVM3.4


谢谢

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

1.通行证订购 模块传递在传递管理器上强制一种同步点。例如,假设你有以下几点:

  • 函数传递A
  • 功能通行证B
  • 在具有两个函数的模块上
    f()
    g()
    。通行证管理器可以(也将)首先在
    f()
    上运行A和B,然后在
    g()上运行A和B。除其他原因外,这对于内存局部性非常有用。
    但是,如果添加模块过程:

  • 函数传递A
  • 模块通行证
  • 功能通行证B
  • 然后强制pass管理器首先对两个函数运行A,然后对模块pass,然后对两个函数运行B

    2.使以前的结果无效 发件人:

    如果一个过程没有实现该方法,它默认为没有任何先决条件过程,并使所有其他过程无效

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


    要获得更完整的信息,我建议您阅读的文档。

    您是在谈论编译时还是运行时?除了空白通行证之外,您还运行哪些通行证?我讲的是编译时间。我看不出运行时间之间有任何差异。我也尝试了一些其他的方法,这是同样的问题。谢谢,我要看一下关于getAnalysisUsage的文档。