LLVM OPT未将优化文件作为输出。

问题描述 投票:1回答:1

opt的手册页说:“它将LLVM源文件作为输入,对其运行指定的优化或分析,然后输出优化文件或分析结果”。

我的目标:使用-dce中提供的内置优化传递opt。这个传球做Dead Code Elimination

我的源文件foo.c

int foo(void)
 {
   int a = 24;
   int b = 25; /* Assignment to dead variable -- dead code */
   int c;
   c = a * 4;
   return c;
}

这是我做的: 1. clang-7.0 -S -emit-llvm foo.c -o foo.ll 2. opt -dce -S foo.ll -o fooOpt.ll

我所期望的:一个.ll文件,其中消除了死代码(带有注释的源代码)部分。

我得到的:fooOpt.ll与非优化代码foo.ll相同

我已经看过this SO答案,但我没有得到优化的代码。 我在这里错过了什么吗?有人可以指导我走正确的道路。 谢谢。

llvm llvm-clang llvm-ir llvm-c++-api
1个回答
3
投票

如果查看clang生成的.ll文件,它将包含如下所示的行:

attributes #0 = { noinline nounwind optnone sspstrong uwtable ...}

你应该在这里删除optnone属性。每当函数具有optnone属性时,opt根本不会触及该函数。

现在,如果你再试一次,你会注意到......没有。它仍然无法正常工作。

这次问题是代码正在处理内存,而不是寄存器。我们需要做的是使用alloca-mem2regs转换为寄存器。事实上这样做已经优化了b,所以你甚至不需要-dce旗。

© www.soinside.com 2019 - 2024. All rights reserved.