2013-08-04 23 views
2

我嘗試編譯我的opencl內核到llvm IR。「clang」執行常見的子表達式消除嗎?

下面的指令

/家庭/爲mypass/LLVM /調試+斷言/斌/鐺-I /家庭/ ian031545/libclc /通用/包括-include CLC/clc.h -Dcl_clang_storage_class_specifiers -target nvptx - nvidiacl -Xclang -mlink-位碼文件-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不要這樣做嗎?在上面的指令中添加標誌?

在此先感謝

回答

1

嘗試使用-O0標誌鏗鏘。

+0

謝謝,但這並沒有早期的優化。我可以關閉一些像「early cse」這樣的特定優化嗎? –

+1

不是我所知。但是,使用'-O0'生成未優化的IR後,您可以使用'opt'完成所需的所有優化。 – shrm

+0

@IanTsai考慮投票和/或接受答案,如果它有幫助。 – shrm