“clang”是否执行常见的子表达式消除?

时间:2013-08-04 04:18:22

标签: optimization compiler-construction clang llvm llvm-ir

我尝试将我的opencl内核编译为llvm IR。

使用以下说明

/ home / mypass / llvm / Debug + Asserts / bin / clang -I / home / ian031545 / libclc / generic / include -include clc / clc.h -Dcl_clang_storage_class_specifiers -target nvptx - nvidiacl -Xclang - mlink-bitcode-file -Xclang /ian031545/libclc/nvptx--nvidiacl/lib/builtins.bc -S -emit-llvm kernel.cl -o kernel.ll

opencl内核的结构如下所示

__kernel(){

  if() x[i]=a+b+1
  else x[i]=a+b+2

}

使用上述说明后的llvm IR看起来像这样

entry: // it perform a+b here , we say c
then part: // it perform c+1
else part: // it perform c+2

有谁知道为什么clang会在这里进行这种优化? (我们说它是前端)

或者它可能不是一种优化?

我不知道为什么clang在这里做这个,为了什么目的?

我可以通过在上面的指令中添加标志来请求clang不要这样做吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

尝试在clang中使用-O0标志。