使用LLVM 3.3后端为AMD编译OpenCL

use*_*350 6 llvm clang opencl amd-processor

究竟如何使用LLVM 3.3中的新R600后端生成适合传递到AMD卡上的OpenCL clCreateProgramWithBinary API的二进制文件?是否有任何代码示例如何执行此操作?

我已经看到了如何编译AMD的clang命令行,但我还没有看到如何使用驱动程序的输出.

非常感谢.

shi*_*ing 1

您可以阅读 中的测试用例llvm/test/CodeGen/R600

例如: add.ll

;RUN: llc < %s -march=r600 -mcpu=redwood | FileCheck %s

;CHECK: ADD_INT T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}

;CHECK: ADD_INT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}

;CHECK: ADD_INT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}

;CHECK: ADD_INT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}

define void @test(<4 x i32> addrspace(1)* %out, <4 x i32> addrspace(1)* %in) {

  %b_ptr = getelementptr <4 x i32> addrspace(1)* %in, i32 1

  %a = load <4 x i32> addrspace(1) * %in

  %b = load <4 x i32> addrspace(1) * %b_ptr

  %result = add <4 x i32> %a, %b

  store <4 x i32> %result, <4 x i32> addrspace(1)* %out

  ret void
}
Run Code Online (Sandbox Code Playgroud)

然后您可以直接通过 clCreateProgramWithBinary 使用输出。