将 llvm-mca 与 CMake 结合使用

Using llvm-mca with 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 宏之间的所有代码(当我制作一个简单的测试程序时发生在我身上)。