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