如何在我自己的Jitter中实现-time-pass的行为?

时间:2013-03-11 22:43:36

标签: performance llvm jit

我正在研究基于LLVM的Jitter。我对性能有一个真正的问题。我正在阅读很多相关内容,我知道这是LLVM中的一个问题。但是,我想知道是否还有其他瓶颈。因此,我想在我的Jitter中使用相同的机制提供-time-pass,但将结果保存到特定文件。通过这种方式,我可以做一些简单的数学运算:

real_execution_time = total_time - time_passes

我在命令行中添加了选项,但它不起作用:

// Disable branch fold for accurate line numbers.
llvm_argv[arrayIndex++] = "-disable-branch-fold";
llvm_argv[arrayIndex++] = "-stats";
llvm_argv[arrayIndex++] = "-time-passes";
llvm_argv[arrayIndex++] = "-info-output-file"; 
llvm_argv[arrayIndex++] = "pepe.txt";

cl::ParseCommandLineOptions(arrayIndex, const_cast<char**>(llvm_argv));

任何解决方案?

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方案。我正在发布解决方案,因为它可能对其他人有用。

在程序中的任何退出(代码)之前,您必须包含对

的调用

LLVM :: llvm_shutdown();

此调用将信息刷新到文件中。

我的问题是:

1 - 其他线程在没有提到的调用的情况下退出。

2 - 有一个花哨的struct llvm :: llvm_shutdown_obj,它带有一个析构函数,可以调用上面提到的方法。我在main函数中声明了一个变量如下:

llvm::llvm_shutdown_obj X();

每个人都知道编译器应该调用析构函数,但在这种情况下它没有发生。原因是该变量未被使用,因此编译器将其删除。 没有变量=&gt;没有析构函数=&gt;没有刷新文件