【问题标题】:Does "clang" perform common subexpression elimination?“clang”是否执行公共子表达式消除?
【发布时间】:2013-08-04 04:18:21
【问题描述】:

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

提前致谢

【问题讨论】:

    标签: optimization compiler-construction clang llvm llvm-ir


    【解决方案1】:

    尝试使用带有clang的-O0标志。

    【讨论】:

    • 谢谢,但这不是早期的优化。我可以关闭一些特定的优化,比如“early cse”吗?
    • 我不知道。但是,一旦使用 -O0 生成未优化的 IR,您就可以使用 opt 进行所有需要的优化。
    • @IanTsai 如果有帮助,请考虑投票和/或接受答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-12
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 2015-08-24
    相关资源
    最近更新 更多