为 Os 而不是 O2 启用 llvm pass

Enable a llvm pass for Os but not O2

我在 O2 上有通行证 运行,现在想在 Os 上禁用它。一种解决方案是添加如下编译选项:

 static cl::opt<bool> DisableMyPass("disable-mypass",cl::Hidden,cl::init(false));

并与 -mllvm disable-mypass=true 一起使用。 但我真正需要的是默认情况下在 -Os 时禁用它,而在 -O2 时启用它而没有任何其他命令行选项,我找不到办法做到这一点。

你应该添加

// This pass generally increases code size
if (skipFunction(F) || F.optForSize()) {
  return false;
}

runOnFunction 的开头。