Michael Ehmke via llvm-dev
2017-Nov-28 17:21 UTC
[llvm-dev] CUDA kernel call with template parameters not appearing in Clang AST
Hello all, I'm using Clang and am trying to refactor CUDA code. I want to traverse the AST to access a CUDAKernelCallExpr node where the kernel call has template parameters. I have been able to successfully match on and access CUDA kernel calls which have no template parameters by using the AST matchers to match on a CUDAKernelCallExpr. However, when my code comes across a kernel call with template parameters, it appears that the expression is not even existent in the AST when it is dumped. This is the expression that I'm having trouble parsing: ex. matrixMulCUDA<16><<< grid, threads >>>(d_C, d_A, d_B, dimsA.x, dimsB.x); This expression does not show up at all in the AST when dumping the AST. I have been able to successfully parse the following kernel call expression and it shows up in the AST as a "CudaKernelCallExpr" node. ex. matrixMulCUDA<<< grid, threads >>>(d_C, d_A, d_B, dimsA.x, dimsB.x); As you can see, the only difference is the <16> after the name of the call, and this node is clearly represented in the AST. Here is a screenshot showing the lack of a node to represent the call with template parameters. [image: image.png] If I could get any assistance on why this is happening, I would appreciate it greatly. Thank you, Michael Ehmke -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20171128/44ba592f/attachment-0001.html> -------------- next part -------------- A non-text attachment was scrubbed... Name: image.png Type: image/png Size: 1368382 bytes Desc: not available URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20171128/44ba592f/attachment-0001.png>
Justin Lebar via llvm-dev
2017-Nov-29 05:07 UTC
[llvm-dev] CUDA kernel call with template parameters not appearing in Clang AST
Hi, Michael.
Are you able to create a reduced testcase which demonstrates your problem?
I tried
template <int N>
__global__ void Kernel() {}
void test() {
Kernel<16><<<100, 200>>>();
}
which I compiled with
$ clang -c -Xclang -ast-dump test.cu
and the AST looks fine to me -- the CUDAKernelCallExpr shows up as expected.
Regards,
-Justin
On Tue, Nov 28, 2017 at 2:33 PM Michael Ehmke via llvm-dev <
llvm-dev at lists.llvm.org> wrote:
> Hello all,
>
> I'm using Clang and am trying to refactor CUDA code. I want to traverse
> the AST to access a CUDAKernelCallExpr node where the kernel call has
> template parameters. I have been able to successfully match on and access
> CUDA kernel calls which have no template parameters by using the AST
> matchers to match on a CUDAKernelCallExpr. However, when my code comes
> across a kernel call with template parameters, it appears that the
> expression is not even existent in the AST when it is dumped.
>
> This is the expression that I'm having trouble parsing:
>
> ex. matrixMulCUDA<16><<< grid, threads >>>(d_C,
d_A, d_B, dimsA.x,
> dimsB.x);
>
> This expression does not show up at all in the AST when dumping the AST. I
> have been able to successfully parse the following kernel call expression
> and it shows up in the AST as a "CudaKernelCallExpr" node.
>
> ex. matrixMulCUDA<<< grid, threads >>>(d_C, d_A, d_B,
dimsA.x, dimsB.x);
>
> As you can see, the only difference is the <16> after the name of the
> call, and this node is clearly represented in the AST.
>
> Here is a screenshot showing the lack of a node to represent the call with
> template parameters.
>
>
> If I could get any assistance on why this is happening, I would appreciate
> it greatly.
>
> Thank you,
> Michael Ehmke
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20171129/279fc0cd/attachment.html>