Optimization 是不是;"叮当",;执行公共子表达式消除?

Optimization 是不是;"叮当",;执行公共子表达式消除?,optimization,compiler-construction,clang,llvm,llvm-ir,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\u clang\u存储类\u说明符-target nvptx--nvidiacl-Xclang-mlink位码文件-Xclang/ian031545/libclc/nvptx--nvidiacl/buildins.bc-S-e

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

按照下面的指示

/home/mypass/llvm/Debug+Asserts/bin/clang-I/home/ian031545/libclc/generic/include-include-clc/clc.h-Dcl\u clang\u存储类\u说明符-target nvptx--nvidiacl-Xclang-mlink位码文件-Xclang/ian031545/libclc/nvptx--nvidiacl/buildins.bc-S-emit llvm kernel.cl-o kernel.ll

opencl内核的结构如下所示

__kernel(){

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

}
entry: // it perform a+b here , we say c
then part: // it perform c+1
else part: // it perform c+2
使用上述指令后的llvm IR如下所示

__kernel(){

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

}
entry: // it perform a+b here , we say c
then part: // it perform c+1
else part: // it perform c+2
有人知道为什么clang会在这里进行这种优化吗?(我们称之为前端)

或者它可能不是一种优化

我不知道为什么叮当在这里这么做,为了什么

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


提前感谢

尝试使用带有叮当声的
-O0
标志。

谢谢,但这并不影响早期优化。我可以关闭一些特定的优化,比如“早期cse”吗?据我所知不是这样。但是你可以使用<代码> opt<代码>来做所有你需要的优化,一旦你用<代码> -O0生成了未优化的IR。@ IanTsai考虑投票和/或接受答案,如果它有帮助的话。