我尝试将我的 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 不要这样做吗?
提前致谢