LLVM 上的简单标量支持

Posted

技术标签:

【中文标题】LLVM 上的简单标量支持【英文标题】:Simplescalar support on LLVM 【发布时间】:2012-02-10 05:28:41 【问题描述】:

我想查看 LLVM IR 程序的配置文件。简单标量模拟器是否支持 LLVM?有没有其他模拟器可以做同样的事情?

【问题讨论】:

【参考方案1】:

如果 Simplescalar 支持 ARM 和 x86 ELF 二进制文件,它可以与 LLVM 编译的程序一起使用。

但如果您想做简单的分析(在真实 CPU 上运行时程序的每个部分需要多少时间),您可以查看更多已知的分析器,例如:

google-perftools 或 callgrind/cachegrind 或 oprofile.

您不能只运行 LLVM IR,因为 SimpleScalar 或通常的分析器不支持 LLVM 的 IR。 lli 和其他 llvm 工具支持 IR。

如果您想分析使用了哪些分支以及使用频率,可以使用 LLVM 分析 PGO(配置文件引导优化)。有 llvm-prof utility 和 utils/profile.pl 脚本来分析 LLVM IR 程序。

如何来自utils/profile.pl source:

# Program:  profile.pl
#
# Synopsis: Insert instrumentation code into a program, run it with the JIT,
#           then print out a profile report.
#
# Syntax:   profile.pl [OPTIONS] bytecodefile <arguments>
#
# OPTIONS may include one or more of the following:
#     -block    - Enable basicblock profiling
#     -edge     - Enable edge profiling
#     -function - Enable function profiling
#     -o <filename> - Emit profiling information to the specified file, instead
#                     of llvmprof.out
#
# Any unrecognized options are passed into the invocation of llvm-prof

内部是

    运行 opt 并带有一些 -insert-*-profiling 通行证。输出是仪表 IR 使用 lli 运​​行内置的 IR(希望使用 JIT) 启动 llvm-prof 以将 llvmprof.out 转换为可读文本

PS 有一些关于 LLLVM 分析的研究论文:llvm.org/pubs/2010-04-NeustifterProfiling.pdf

【讨论】:

以上是关于LLVM 上的简单标量支持的主要内容,如果未能解决你的问题,请参考以下文章

使用 LLVM 实现一个简单编译器

LLVM编译器优化与应用示例

FreeMarker类型

第二十六个知识点:描述NAF标量乘法算法

LLVM和clang

sql MS SQL简单标量函数