2

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に依頼できますか?

前もって感謝します

4

1 に答える 1

1

-O0フラグを clang で使用してみてください。

于 2013-08-04T06:55:32.607 に答える