使用clang优化传递/标志进行编译

时间:2014-06-06 18:26:00

标签: clang llvm compiler-optimization llvm-clang

我正在尝试使用clang3.4编译程序,并且忽略了我使用的优化传递(或标志?!)。

例如我正在尝试编译并传递以下选项“ -O1 -instcombine

我明白了:

clang34: warning: argument unused during compilation: '-instcombine'

可以找到LLVM的所有可用优化通道的列表here,并在此question中找到。我错过了什么吗?

谢谢。

2 个答案:

答案 0 :(得分:5)

这些是LLVM优化传递,而非clang。您无法直接调用LLVM优化传递。但是,您可以发出LLVM IR vie -emit-llvm选项并使用opt工具调用任何LLVM优化传递。

答案 1 :(得分:2)

正如@Anton上面提到的那样,这些编译器传递意味着与llvm-opt一起使用而不是clang,clang只支持标准优化级别-O [X]。但是,如果您想使用编译器标志。即“-instcombine”,首先你必须在使用clang时添加选项-emit-llvm。

一些评论和示例:

  1. 可以找到LLVM-opt列表Here!

  2. 以下是使用LLVM-opt的简短示例:

  3. clang -S -emit-llvm foo.c -lm
    opt ${<MY_DESIRED_COMPILER_FLAGS>} -S -o foo_OPTIMIZED.ll foo.ll

    clang foo_OPTIMIZED.ll -lm

    现在,如果您使用diffLLVM-IR两个版本的.ll文件,则可以看到差异。

    1. 选择整个项目
    2. 就此而言,您应该将这些命令置于循环中并对您需要的每个文件应用opt

      OR

      编写一个为您执行此操作的makefile。

      OR

      创建您自己的传递,其中包含您想要的传球,并将它们包含为.so文件。更多信息Here!

      希望有所帮助。