; REQUIRES: spirv-as ; RUN: spirv-as --target-env spv1.0 -o %t.spv %s ; RUN: spirv-val %t.spv ; RUN: llvm-spirv %t.spv -r --spirv-target-env=SPV-IR -o %t.rev.bc ; RUN: llvm-dis %t.rev.bc -o - | FileCheck %s --check-prefixes=CHECK,CHECK-SPV-IR ; RUN: llvm-spirv %t.rev.bc -o - -spirv-text | FileCheck %s --check-prefix=CHECK-SPV-BACK ; RUN: llvm-spirv %t.spv -r --spirv-target-env=CL2.0 -o - | llvm-dis | FileCheck %s --check-prefixes=CHECK,CHECK-CL20 ; CHECK-LABEL: spir_kernel void @test ; CHECK-SPV-IR: call spir_func i32 @_Z18__spirv_ocl_printfPU3AS2c(ptr addrspace(2) {{.*}}) ; CHECK-SPV-IR: call spir_func i32 @_Z18__spirv_ocl_printfPU3AS2ci(ptr addrspace(2) {{.*}}, i32 1) ; CHECK-SPV-IR: declare spir_func i32 @_Z18__spirv_ocl_printfPU3AS2c(ptr addrspace(2)) ; CHECK-SPV-IR: declare spir_func i32 @_Z18__spirv_ocl_printfPU3AS2ci(ptr addrspace(2), i32) ; CHECK-CL20: call spir_func i32 (ptr addrspace(2), ...) @printf(ptr addrspace(2) {{.*}}) ; CHECK-CL20: call spir_func i32 (ptr addrspace(2), ...) @printf(ptr addrspace(2) {{.*}}, i32 1) ; CHECK-CL20: declare spir_func i32 @printf(ptr addrspace(2), ...) ; CHECK-SPV-BACK: ExtInstImport [[Set:[0-9]+]] "OpenCL.std" ; CHECK-SPV-BACK-DAG: TypeInt [[Int8:[0-9]+]] 8 ; CHECK-SPV-BACK-DAG: TypeInt [[Int32:[0-9]+]] 32 ; CHECK-SPV-BACK: Constant [[Int32]] [[One:[0-9]+]] 1{{[[:space:]]}} ; CHECK-SPV-BACK: TypePointer [[Int8PtrTy:[0-9]+]] 0 [[Int8]]{{[[:space:]]}} ; CHECK-SPV-BACK: InBoundsPtrAccessChain [[Int8PtrTy]] [[Int8Ptr:[0-9]+]] ; CHECK-SPV-BACK: ExtInst [[Int32]] {{[0-9]+}} [[Set]] printf [[Int8Ptr]] ; CHECK-SPV-BACK: InBoundsPtrAccessChain [[Int8PtrTy]] [[Int8Ptr2:[0-9]+]] ; CHECK-SPV-BACK: ExtInst [[Int32]] {{[0-9]+}} [[Set]] printf [[Int8Ptr2]] [[One]] OpCapability Addresses OpCapability Kernel OpCapability Int8 %1 = OpExtInstImport "OpenCL.std" OpMemoryModel Physical32 OpenCL OpEntryPoint Kernel %26 "test" %35 = OpString "kernel_arg_type.test." OpSource OpenCL_C 200000 OpDecorate %_str Constant OpDecorate %_str_1 Constant OpDecorate %_str Alignment 1 OpDecorate %_str_1 Alignment 1 %uchar = OpTypeInt 8 0 %uint = OpTypeInt 32 0 %uchar_84 = OpConstant %uchar 84 %uchar_101 = OpConstant %uchar 101 %uchar_115 = OpConstant %uchar 115 %uchar_116 = OpConstant %uchar 116 %uchar_10 = OpConstant %uchar 10 %uchar_0 = OpConstant %uchar 0 %uint_6 = OpConstant %uint 6 %uchar_58 = OpConstant %uchar 58 %uchar_32 = OpConstant %uchar 32 %uchar_37 = OpConstant %uchar 37 %uchar_100 = OpConstant %uchar 100 %uint_10 = OpConstant %uint 10 %uint_0 = OpConstant %uint 0 %uint_1 = OpConstant %uint 1 %_arr_uchar_uint_6 = OpTypeArray %uchar %uint_6 %_ptr_UniformConstant__arr_uchar_uint_6 = OpTypePointer UniformConstant %_arr_uchar_uint_6 %_arr_uchar_uint_10 = OpTypeArray %uchar %uint_10 %_ptr_UniformConstant__arr_uchar_uint_10 = OpTypePointer UniformConstant %_arr_uchar_uint_10 %void = OpTypeVoid %25 = OpTypeFunction %void %_ptr_UniformConstant_uchar = OpTypePointer UniformConstant %uchar %12 = OpConstantComposite %_arr_uchar_uint_6 %uchar_84 %uchar_101 %uchar_115 %uchar_116 %uchar_10 %uchar_0 %_str = OpVariable %_ptr_UniformConstant__arr_uchar_uint_6 UniformConstant %12 %21 = OpConstantComposite %_arr_uchar_uint_10 %uchar_84 %uchar_101 %uchar_115 %uchar_116 %uchar_58 %uchar_32 %uchar_37 %uchar_100 %uchar_10 %uchar_0 %_str_1 = OpVariable %_ptr_UniformConstant__arr_uchar_uint_10 UniformConstant %21 %26 = OpFunction %void None %25 %entry = OpLabel %30 = OpInBoundsPtrAccessChain %_ptr_UniformConstant_uchar %_str %uint_0 %uint_0 %call = OpExtInst %uint %1 printf %30 %32 = OpInBoundsPtrAccessChain %_ptr_UniformConstant_uchar %_str_1 %uint_0 %uint_0 %call1 = OpExtInst %uint %1 printf %32 %uint_1 OpReturn OpFunctionEnd