1*0a6a1f1dSLionel Sambuc// RUN: %clang_cc1 %s -cl-kernel-arg-info -emit-llvm -o - -triple spir-unknown-unknown | FileCheck %s -check-prefix ARGINFO 2*0a6a1f1dSLionel Sambuc// RUN: %clang_cc1 %s -emit-llvm -o - -triple spir-unknown-unknown | FileCheck %s -check-prefix NO-ARGINFO 3f4a2713aSLionel Sambuc 4f4a2713aSLionel Sambuckernel void foo(__global int * restrict X, const int Y, 5f4a2713aSLionel Sambuc volatile int anotherArg, __constant float * restrict Z) { 6f4a2713aSLionel Sambuc *X = Y + anotherArg; 7f4a2713aSLionel Sambuc} 8f4a2713aSLionel Sambuc 9*0a6a1f1dSLionel Sambuc// CHECK: !{!"kernel_arg_addr_space", i32 1, i32 0, i32 0, i32 2} 10*0a6a1f1dSLionel Sambuc// CHECK: !{!"kernel_arg_access_qual", !"none", !"none", !"none", !"none"} 11*0a6a1f1dSLionel Sambuc// CHECK: !{!"kernel_arg_type", !"int*", !"int", !"int", !"float*"} 12*0a6a1f1dSLionel Sambuc// CHECK: !{!"kernel_arg_base_type", !"int*", !"int", !"int", !"float*"} 13*0a6a1f1dSLionel Sambuc// CHECK: !{!"kernel_arg_type_qual", !"restrict", !"const", !"volatile", !"restrict const"} 14*0a6a1f1dSLionel Sambuc// ARGINFO: !{!"kernel_arg_name", !"X", !"Y", !"anotherArg", !"Z"} 15*0a6a1f1dSLionel Sambuc// NO-ARGINFO-NOT: !{!"kernel_arg_name", !"X", !"Y", !"anotherArg", !"Z"} 16f4a2713aSLionel Sambuc 17f4a2713aSLionel Sambuckernel void foo2(read_only image1d_t img1, image2d_t img2, write_only image2d_array_t img3) { 18f4a2713aSLionel Sambuc} 19*0a6a1f1dSLionel Sambuc// CHECK: !{!"kernel_arg_addr_space", i32 1, i32 1, i32 1} 20*0a6a1f1dSLionel Sambuc// CHECK: !{!"kernel_arg_access_qual", !"read_only", !"read_only", !"write_only"} 21*0a6a1f1dSLionel Sambuc// CHECK: !{!"kernel_arg_type", !"image1d_t", !"image2d_t", !"image2d_array_t"} 22*0a6a1f1dSLionel Sambuc// CHECK: !{!"kernel_arg_base_type", !"image1d_t", !"image2d_t", !"image2d_array_t"} 23*0a6a1f1dSLionel Sambuc// CHECK: !{!"kernel_arg_type_qual", !"", !"", !""} 24*0a6a1f1dSLionel Sambuc// ARGINFO: !{!"kernel_arg_name", !"img1", !"img2", !"img3"} 25*0a6a1f1dSLionel Sambuc// NO-ARGINFO-NOT: !{!"kernel_arg_name", !"img1", !"img2", !"img3"} 26*0a6a1f1dSLionel Sambuc 27*0a6a1f1dSLionel Sambuckernel void foo3(__global half * X) { 28*0a6a1f1dSLionel Sambuc} 29*0a6a1f1dSLionel Sambuc// CHECK: !{!"kernel_arg_addr_space", i32 1} 30*0a6a1f1dSLionel Sambuc// CHECK: !{!"kernel_arg_access_qual", !"none"} 31*0a6a1f1dSLionel Sambuc// CHECK: !{!"kernel_arg_type", !"half*"} 32*0a6a1f1dSLionel Sambuc// CHECK: !{!"kernel_arg_base_type", !"half*"} 33*0a6a1f1dSLionel Sambuc// CHECK: !{!"kernel_arg_type_qual", !""} 34*0a6a1f1dSLionel Sambuc// ARGINFO: !{!"kernel_arg_name", !"X"} 35*0a6a1f1dSLionel Sambuc// NO-ARGINFO-NOT: !{!"kernel_arg_name", !"X"} 36*0a6a1f1dSLionel Sambuc 37*0a6a1f1dSLionel Sambuctypedef unsigned int myunsignedint; 38*0a6a1f1dSLionel Sambuckernel void foo4(__global unsigned int * X, __global myunsignedint * Y) { 39*0a6a1f1dSLionel Sambuc} 40*0a6a1f1dSLionel Sambuc// CHECK: !{!"kernel_arg_addr_space", i32 1, i32 1} 41*0a6a1f1dSLionel Sambuc// CHECK: !{!"kernel_arg_access_qual", !"none", !"none"} 42*0a6a1f1dSLionel Sambuc// CHECK: !{!"kernel_arg_type", !"uint*", !"myunsignedint*"} 43*0a6a1f1dSLionel Sambuc// CHECK: !{!"kernel_arg_base_type", !"uint*", !"uint*"} 44*0a6a1f1dSLionel Sambuc// CHECK: !{!"kernel_arg_type_qual", !"", !""} 45*0a6a1f1dSLionel Sambuc// ARGINFO: !{!"kernel_arg_name", !"X", !"Y"} 46*0a6a1f1dSLionel Sambuc// NO-ARGINFO-NOT: !{!"kernel_arg_name", !"X", !"Y"} 47*0a6a1f1dSLionel Sambuc 48*0a6a1f1dSLionel Sambuctypedef image1d_t myImage; 49*0a6a1f1dSLionel Sambuckernel void foo5(read_only myImage img1, write_only image1d_t img2) { 50*0a6a1f1dSLionel Sambuc} 51*0a6a1f1dSLionel Sambuc// CHECK: !{!"kernel_arg_access_qual", !"read_only", !"write_only"} 52*0a6a1f1dSLionel Sambuc// CHECK: !{!"kernel_arg_type", !"myImage", !"image1d_t"} 53*0a6a1f1dSLionel Sambuc// CHECK: !{!"kernel_arg_base_type", !"image1d_t", !"image1d_t"} 54*0a6a1f1dSLionel Sambuc// ARGINFO: !{!"kernel_arg_name", !"img1", !"img2"} 55*0a6a1f1dSLionel Sambuc// NO-ARGINFO-NOT: !{!"kernel_arg_name", !"img1", !"img2"} 56