将llvm mca与CMake结合使用



我正在尝试设置llvm mca以使用CMake。官方文档给出了输出信息的简单命令,如.

$ clang foo.c -O2 -target x86_64-unknown-unknown -S -o - | llvm-mca -mcpu=btver2

这适用于简单的文件。然而,我不确定如何扩展这一点,并将其用于使用CMake的实际项目。

为其他遇到这个问题的人发布我的答案。

#compile with optimizations on
target_compile_options(Executable PRIVATE -O3 -g)
#this will convert the passed file to assembly
add_custom_command(
OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/assembly.s
COMMAND ${CMAKE_CXX_COMPILER}
ARGS ${CMAKE_CURRENT_SOURCE_DIR}/foo.cpp -O3 -S -o ${CMAKE_CURRENT_SOURCE_DIR}/assembly.s
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/foo.cpp
COMMENT "Generating The Assembly File"
VERBATIM
)
#this will convert the assembly analysis
add_custom_command(
OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/analysis.txt
COMMAND llvm-mca
ARGS -mcpu=btver2 -timeline ${CMAKE_CURRENT_SOURCE_DIR}/assembly.s -o ${CMAKE_CURRENT_SOURCE_DIR}/analysis.txt
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/assembly.s
COMMENT "Running LLVM MCA"
VERBATIM
)
add_custom_target(run ALL DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/assembly.s ${CMAKE_CURRENT_SOURCE_DIR}/analysis.txt)

可能值得一提的是,我绝非专家,然而LLVM MCA似乎是用于一次分析单个文件的。这意味着一个简单的命令(比如我在问问题时粘贴在上面(就足够了。

还有一个错误"error:no assembly instructions found"。意味着优化可能会删除START和END宏之间的所有代码(当我制作一个简单的测试程序时发生过这种情况(。

最新更新