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に依頼できますか?
前もって感謝します