2013-08-04 3 views
2

Я пытаюсь скомпилировать мое ядро ​​opencl для llvm IR.Выполняет ли «clang» выполнение общего исключения подвыражения?

С следующей инструкцией

/дома/mypass/LLVM/Debug + Утверждает/bin/лязг -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 делает это здесь, с какой целью?

Могу ли я попросить clang не делать этого, добавив флаг в инструкцию выше?

Заранее спасибо

ответ

1

Попробуйте использовать -O0 флаг с лязгом.

+0

Спасибо, но это не связано с ранней оптимизацией. Могу ли я отключить определенную оптимизацию, например, «ранний cse»? –

+1

Не знаю. Но вы можете использовать 'opt' для выполнения всех оптимизаций, которые вам нужны, когда вы создали неоптимизированный IR, используя' -O0'. – shrm

+0

@IanTsai Рассмотрите возможность голосования и/или принятия ответа, если это поможет. – shrm

Смежные вопросы