]> granicus.if.org Git - clang/commit
[OpenCL] Remove block invoke function from emitted block literal struct
authorYaxun Liu <Yaxun.Liu@amd.com>
Wed, 7 Mar 2018 19:32:58 +0000 (19:32 +0000)
committerYaxun Liu <Yaxun.Liu@amd.com>
Wed, 7 Mar 2018 19:32:58 +0000 (19:32 +0000)
commitc603a41d41660d63288402c48bd74bba41773efe
treef4810ba8233c9970b6088b1efc00baaf5bf53bba
parent6522d1a8032cc5c07590d2508ca0b4b9f92c1aa2
[OpenCL] Remove block invoke function from emitted block literal struct

OpenCL runtime tracks the invoke function emitted for
any block expression. Due to restrictions on blocks in
OpenCL (v2.0 s6.12.5), it is always possible to know the
block invoke function when emitting call of block expression
or __enqueue_kernel builtin functions. Since __enqueu_kernel
already has an argument for the invoke function, it is redundant
to have invoke function member in the llvm block literal structure.

This patch removes invoke function from the llvm block literal
structure. It also removes the bitcast of block invoke function
to the generic block literal type which is useless for OpenCL.

This will save some space for the kernel argument, and also
eliminate some store instructions.

Differential Revision: https://reviews.llvm.org/D43783

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@326937 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/CGBlocks.cpp
lib/CodeGen/CGOpenCLRuntime.cpp
lib/CodeGen/CGOpenCLRuntime.h
test/CodeGenOpenCL/amdgpu-enqueue-kernel.cl
test/CodeGenOpenCL/blocks.cl
test/CodeGenOpenCL/cl20-device-side-enqueue.cl