【问题标题】:Convert LLVM IR to higher optimization level将 LLVM IR 转换为更高的优化级别
【发布时间】:2018-05-28 01:57:57
【问题描述】:

我已将 C 代码编译为 LLVM IR 代码并使用 -O0 优化。

如何将这个 -O0 LLVM IR 代码转换为“没有 C 代码”的 -O3 LLVM IR 代码?

我在下面尝试过:

clang -O3 -S -emit-llvm O0.ll -o O3.ll

和

opt -O3 -S O0.ll -o O3.ll

但输出仍然是-O0 级别。

谢谢。

【问题讨论】:

标签: clang llvm llvm-clang llvm-ir


【解决方案1】:

我不确定更改发生的时间(我认为是LLVM 3.9.0 及更高版本),但是当您编译为位码时,函数会使用optnone 属性进行注释,并且不会执行进一步的优化。

查看相关的 SO 讨论 here。

建议这样做:

clang -emit-llvm -O1 -mllvm -disable-llvm-optzns -disable-llvm-passes foo.c -o foo.bc

对于LLVM 3.8.0 及更早版本(我认为),您已经在做的就足够了。

因此,一旦您获得该位码(不带 optnone)参数,您就可以像以前一样使用 opt。

【讨论】:

  • 现在对知识的好奇让我想编写一个转换来删除所有optnone 属性,但我不认为它会结束。
  • 哈哈,是的,但我不确定optnone 的存在是有原因的。
猜你喜欢
  • 1970-01-01
  • 2014-08-30
  • 1970-01-01
  • 1970-01-01
  • 2021-02-22
  • 2019-01-02
  • 2020-07-26
  • 2014-02-22
  • 1970-01-01
相关资源
最近更新 更多