├── .clang-format ├── .gitignore ├── AUTHORS ├── CMakeLists.txt ├── CONTRIBUTING.md ├── CONTRIBUTORS ├── LICENSE ├── README.md ├── amber ├── README.md ├── hack_scf │ ├── sclamp.amber │ ├── smax.amber │ ├── smax_vector.amber │ └── smin.amber ├── images │ ├── read_image2d_r32f.amber │ ├── read_image2d_r32i.amber │ ├── read_image2d_r32ui.amber │ ├── read_image2d_rg32f.amber │ ├── read_image2d_rg32i.amber │ ├── read_image2d_rg32ui.amber │ ├── read_image2d_rgba32f.amber │ ├── read_image2d_rgba32i.amber │ ├── read_image2d_rgba32ui.amber │ ├── read_image2d_unsampled_r32f.amber │ ├── read_image2d_unsampled_r32i.amber │ ├── read_image2d_unsampled_r32ui.amber │ ├── read_image2d_unsampled_rg32f.amber │ ├── read_image2d_unsampled_rg32i.amber │ ├── read_image2d_unsampled_rg32ui.amber │ ├── read_image2d_unsampled_rgba32f.amber │ ├── read_image2d_unsampled_rgba32i.amber │ ├── read_image2d_unsampled_rgba32ui.amber │ ├── read_only_sampled_image2d_queries.amber │ ├── write_image2d_r32f.amber │ ├── write_image2d_r32i.amber │ ├── write_image2d_r32ui.amber │ ├── write_image2d_rg32f.amber │ ├── write_image2d_rg32i.amber │ ├── write_image2d_rg32ui.amber │ ├── write_image2d_rgba32f.amber │ ├── write_image2d_rgba32i.amber │ ├── write_image2d_rgba32ui.amber │ └── write_only_image2d_queries.amber ├── integer │ ├── add_sat.amber │ ├── add_sat_short.amber │ ├── add_sat_uint.amber │ ├── clz_int.amber │ ├── clz_long.amber │ ├── clz_short.amber │ ├── ctz_int.amber │ ├── ctz_long.amber │ ├── ctz_short.amber │ ├── hadd_uint.amber │ ├── rhadd_uint.amber │ ├── sub_sat_int.amber │ ├── sub_sat_short.amber │ ├── sub_sat_uint.amber │ └── sub_sat_ushort.amber ├── loops │ └── split_merge_and_continue.amber └── run_tests.py ├── cmake ├── CMakeLists.txt ├── bake_file.py ├── define_clspv_builtins.py ├── spirv_c_strings.py ├── spirv_ext_inst.py └── util.cmake ├── deps.json ├── docs ├── C_API.md └── OpenCLCOnVulkan.md ├── include └── clspv │ ├── AddressSpace.h │ ├── ArgKind.h │ ├── Compiler.h │ ├── FeatureMacro.h │ ├── Option.h │ ├── Passes.h │ ├── PushConstant.h │ ├── Sampler.h │ └── SpecConstant.h ├── kokoro ├── amber-linux-gcc-release │ ├── build.sh │ ├── continuous.cfg │ └── presubmit.cfg ├── check-format │ ├── build-docker.sh │ ├── build.sh │ ├── build_continuous.sh │ ├── continuous.cfg │ └── presubmit.cfg ├── clvk-linux-clang-debug │ ├── build.sh │ ├── continuous.cfg │ └── presubmit.cfg ├── linux-clang-debug │ ├── build.sh │ ├── continuous.cfg │ └── presubmit.cfg ├── linux-clang-release │ ├── build.sh │ ├── continuous.cfg │ └── presubmit.cfg ├── linux-gcc-debug │ ├── build.sh │ ├── continuous.cfg │ └── presubmit.cfg ├── linux-gcc-release │ ├── build.sh │ ├── continuous.cfg │ └── presubmit.cfg ├── macos-clang-debug │ ├── build.sh │ ├── continuous.cfg │ └── presubmit.cfg ├── macos-clang-release │ ├── build.sh │ ├── continuous.cfg │ └── presubmit.cfg ├── scripts │ ├── linux │ │ ├── build-amber.sh │ │ ├── build-clvk.sh │ │ └── build.sh │ ├── macos │ │ └── build.sh │ └── windows │ │ └── build.bat ├── windows-msvc-2019-release │ ├── build.bat │ ├── continuous.cfg │ └── presubmit.cfg ├── windows-vs2022-amd64-debug │ ├── build.bat │ ├── continuous.cfg │ └── presubmit.cfg └── windows-vs2022-amd64-release │ ├── build.bat │ ├── continuous.cfg │ └── presubmit.cfg ├── lib ├── AddFunctionAttributesPass.cpp ├── AddFunctionAttributesPass.h ├── AllocateDescriptorsPass.cpp ├── AllocateDescriptorsPass.h ├── AnnotationToMetadataPass.cpp ├── AnnotationToMetadataPass.h ├── ArgKind.cpp ├── ArgKind.h ├── AutoPodArgsPass.cpp ├── AutoPodArgsPass.h ├── BitcastUtils.cpp ├── BitcastUtils.h ├── Builtins.cpp ├── Builtins.h ├── BuiltinsEnum.h ├── BuiltinsMap.inc ├── CMakeLists.txt ├── CallGraphOrderedFunctions.cpp ├── CallGraphOrderedFunctions.h ├── ClusterConstants.cpp ├── ClusterConstants.h ├── ClusterPodKernelArgumentsPass.cpp ├── ClusterPodKernelArgumentsPass.h ├── Compiler.cpp ├── ComputeStructuredOrder.cpp ├── ComputeStructuredOrder.h ├── ConstantEmitter.cpp ├── ConstantEmitter.h ├── Constants.cpp ├── Constants.h ├── DeclarePushConstantsPass.cpp ├── DeclarePushConstantsPass.h ├── DefineOpenCLWorkItemBuiltinsPass.cpp ├── DefineOpenCLWorkItemBuiltinsPass.h ├── DescriptorCounter.cpp ├── DescriptorCounter.h ├── DirectResourceAccessPass.cpp ├── DirectResourceAccessPass.h ├── FeatureMacro.cpp ├── FixupBuiltinsPass.cpp ├── FixupBuiltinsPass.h ├── FixupStructuredCFGPass.cpp ├── FixupStructuredCFGPass.h ├── FrontendPlugin.cpp ├── FrontendPlugin.h ├── FunctionInternalizerPass.cpp ├── FunctionInternalizerPass.h ├── HideConstantLoadsPass.cpp ├── HideConstantLoadsPass.h ├── InlineEntryPointsPass.cpp ├── InlineEntryPointsPass.h ├── InlineFuncWithImageMetadataGetterPass.cpp ├── InlineFuncWithImageMetadataGetterPass.h ├── InlineFuncWithPointerBitCastArgPass.cpp ├── InlineFuncWithPointerBitCastArgPass.h ├── InlineFuncWithPointerToFunctionArgPass.cpp ├── InlineFuncWithPointerToFunctionArgPass.h ├── InlineFuncWithReadImage3DNonLiteralSampler.cpp ├── InlineFuncWithReadImage3DNonLiteralSampler.h ├── InlineFuncWithSingleCallSitePass.cpp ├── InlineFuncWithSingleCallSitePass.h ├── KernelArgNamesToMetadataPass.cpp ├── KernelArgNamesToMetadataPass.h ├── Layout.cpp ├── Layout.h ├── LogicalPointerToIntPass.cpp ├── LogicalPointerToIntPass.h ├── LongVectorLoweringPass.cpp ├── LongVectorLoweringPass.h ├── LowerAddrSpaceCastPass.cpp ├── LowerAddrSpaceCastPass.h ├── LowerPrivatePointerPHIPass.cpp ├── LowerPrivatePointerPHIPass.h ├── MemFence.h ├── MultiVersionUBOFunctionsPass.cpp ├── MultiVersionUBOFunctionsPass.h ├── NativeMathPass.cpp ├── NativeMathPass.h ├── NormalizeGlobalVariable.cpp ├── NormalizeGlobalVariable.h ├── OpenCLInlinerPass.cpp ├── OpenCLInlinerPass.h ├── Option.cpp ├── PassRegistry.def ├── Passes.cpp ├── Passes.h ├── PhysicalPointerArgsPass.cpp ├── PhysicalPointerArgsPass.h ├── PrintfPass.cpp ├── PrintfPass.h ├── PushConstant.cpp ├── PushConstant.h ├── RemoveUnusedArguments.cpp ├── RemoveUnusedArguments.h ├── ReorderBasicBlocksPass.cpp ├── ReorderBasicBlocksPass.h ├── ReplaceLLVMIntrinsicsPass.cpp ├── ReplaceLLVMIntrinsicsPass.h ├── ReplaceOpenCLBuiltinPass.cpp ├── ReplaceOpenCLBuiltinPass.h ├── ReplacePointerBitcastPass.cpp ├── ReplacePointerBitcastPass.h ├── RewriteInsertsPass.cpp ├── RewriteInsertsPass.h ├── RewritePackedStructs.cpp ├── RewritePackedStructs.h ├── SPIRVOp.cpp ├── SPIRVOp.h ├── SPIRVProducerPass.cpp ├── SPIRVProducerPass.h ├── Sampler.cpp ├── SamplerUtils.cpp ├── SamplerUtils.h ├── ScalarizePass.cpp ├── ScalarizePass.h ├── SetImageMetadataPass.cpp ├── SetImageMetadataPass.h ├── ShareModuleScopeVariables.cpp ├── ShareModuleScopeVariables.h ├── SignedCompareFixupPass.cpp ├── SignedCompareFixupPass.h ├── SimplifyPointerBitcastPass.cpp ├── SimplifyPointerBitcastPass.h ├── SpecConstant.cpp ├── SpecConstant.h ├── SpecializeImageTypes.cpp ├── SpecializeImageTypes.h ├── SplatArgPass.cpp ├── SplatArgPass.h ├── SplatSelectCondition.cpp ├── SplatSelectCondition.h ├── StripFreezePass.cpp ├── StripFreezePass.h ├── ThreeElementVectorLoweringPass.cpp ├── ThreeElementVectorLoweringPass.h ├── Types.cpp ├── Types.h ├── UBOTypeTransformPass.cpp ├── UBOTypeTransformPass.h ├── UndoBoolPass.cpp ├── UndoBoolPass.h ├── UndoByvalPass.cpp ├── UndoByvalPass.h ├── UndoGetElementPtrConstantExprPass.cpp ├── UndoGetElementPtrConstantExprPass.h ├── UndoInstCombinePass.cpp ├── UndoInstCombinePass.h ├── UndoSRetPass.cpp ├── UndoSRetPass.h ├── UndoTranslateSamplerFoldPass.cpp ├── UndoTranslateSamplerFoldPass.h ├── UndoTruncateToOddIntegerPass.cpp ├── UndoTruncateToOddIntegerPass.h ├── ZeroInitializeAllocasPass.cpp └── ZeroInitializeAllocasPass.h ├── test ├── AddFunctionAttributes │ ├── no_sampler_phi.cl │ └── translate_literal_sampler.ll ├── AddressSpaceCast │ ├── generic_volatile_memory_access.cl │ ├── incompatible_cast.ll │ ├── inttoptr.ll │ ├── issue-1077.ll │ ├── issue-1096.ll │ ├── issue-1097.ll │ ├── issue-1107.cl │ ├── issue-1156.ll │ ├── issue-1259.ll │ ├── issue-1341.ll │ ├── issue-1364.ll │ ├── ptrtoint.ll │ ├── to_global.cl │ ├── to_global.ll │ ├── to_local.cl │ ├── to_local.ll │ ├── to_private.cl │ └── to_private.ll ├── AddressSpaceQualifierBuiltins │ └── get_fence.cl ├── AllocateDescriptors │ ├── atomic_compare_exchange.ll │ ├── atomic_inc_dec.ll │ ├── atomic_spirv_op.ll │ ├── atomic_store.ll │ ├── atomics.ll │ ├── fract.ll │ ├── frexp.ll │ ├── gep.ll │ ├── images.ll │ ├── lgamma_r.ll │ ├── literal_sampler.ll │ ├── load.ll │ ├── modf.ll │ ├── remquo.ll │ ├── sampler_arg.ll │ ├── sincos.ll │ ├── spec_images_no_sharing.ll │ ├── spec_images_sharing.ll │ ├── store.ll │ ├── struct_arg.ll │ ├── traverse_pointer_instruction.ll │ ├── unspecialized_image.ll │ ├── vload.ll │ └── vstore.ll ├── ArmDot │ ├── arm_dot │ │ ├── arm_dot_1x32_signed.cl │ │ ├── arm_dot_1x32_signed_no_int8.cl │ │ ├── arm_dot_4x8_signed.cl │ │ ├── arm_dot_4x8_signed_no_int8.cl │ │ └── arm_dot_4x8_unsigned.cl │ ├── arm_dot_acc │ │ ├── arm_dot_acc_1x32_signed.cl │ │ ├── arm_dot_acc_1x32_signed_no_int8.cl │ │ ├── arm_dot_acc_2x16_signed.cl │ │ ├── arm_dot_acc_2x16_signed_no_int8.cl │ │ ├── arm_dot_acc_2x16_unsigned.cl │ │ ├── arm_dot_acc_4x8_signed.cl │ │ ├── arm_dot_acc_4x8_signed_no_int8.cl │ │ └── arm_dot_acc_4x8_unsigned.cl │ └── arm_dot_acc_sat │ │ ├── arm_dot_acc_sat_1x32_signed.cl │ │ ├── arm_dot_acc_sat_1x32_signed_no_int8.cl │ │ ├── arm_dot_acc_sat_4x8_signed.cl │ │ ├── arm_dot_acc_sat_4x8_signed_no_int8.cl │ │ └── arm_dot_acc_sat_4x8_unsigned.cl ├── AsyncWorkGroupCopy │ ├── async_work_group_copy_long_vector_test_gen.py │ ├── async_work_group_copy_test_gen.py │ ├── async_work_group_copy_v16i16_global_to_local.ll │ ├── async_work_group_copy_v16i16_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_copy_v16i16_local_to_global.ll │ ├── async_work_group_copy_v16i16_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_copy_v16i32_global_to_local.ll │ ├── async_work_group_copy_v16i32_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_copy_v16i32_local_to_global.ll │ ├── async_work_group_copy_v16i32_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_copy_v16i64_global_to_local.ll │ ├── async_work_group_copy_v16i64_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_copy_v16i64_local_to_global.ll │ ├── async_work_group_copy_v16i64_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_copy_v16i8_global_to_local.ll │ ├── async_work_group_copy_v16i8_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_copy_v16i8_local_to_global.ll │ ├── async_work_group_copy_v16i8_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_copy_v1i16_global_to_local.ll │ ├── async_work_group_copy_v1i16_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_copy_v1i16_local_to_global.ll │ ├── async_work_group_copy_v1i16_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_copy_v1i32_global_to_local.ll │ ├── async_work_group_copy_v1i32_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_copy_v1i32_local_to_global.ll │ ├── async_work_group_copy_v1i32_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_copy_v1i64_global_to_local.ll │ ├── async_work_group_copy_v1i64_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_copy_v1i64_local_to_global.ll │ ├── async_work_group_copy_v1i64_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_copy_v1i8_global_to_local.ll │ ├── async_work_group_copy_v1i8_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_copy_v1i8_local_to_global.ll │ ├── async_work_group_copy_v1i8_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_copy_v2i16_global_to_local.ll │ ├── async_work_group_copy_v2i16_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_copy_v2i16_local_to_global.ll │ ├── async_work_group_copy_v2i16_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_copy_v2i32_global_to_local.ll │ ├── async_work_group_copy_v2i32_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_copy_v2i32_local_to_global.ll │ ├── async_work_group_copy_v2i32_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_copy_v2i64_global_to_local.ll │ ├── async_work_group_copy_v2i64_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_copy_v2i64_local_to_global.ll │ ├── async_work_group_copy_v2i64_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_copy_v2i8_global_to_local.ll │ ├── async_work_group_copy_v2i8_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_copy_v2i8_local_to_global.ll │ ├── async_work_group_copy_v2i8_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_copy_v3i16_global_to_local.ll │ ├── async_work_group_copy_v3i16_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_copy_v3i16_local_to_global.ll │ ├── async_work_group_copy_v3i16_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_copy_v3i32_global_to_local.ll │ ├── async_work_group_copy_v3i32_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_copy_v3i32_local_to_global.ll │ ├── async_work_group_copy_v3i32_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_copy_v3i64_global_to_local.ll │ ├── async_work_group_copy_v3i64_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_copy_v3i64_local_to_global.ll │ ├── async_work_group_copy_v3i64_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_copy_v3i8_global_to_local.ll │ ├── async_work_group_copy_v3i8_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_copy_v3i8_local_to_global.ll │ ├── async_work_group_copy_v3i8_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_copy_v4i16_global_to_local.ll │ ├── async_work_group_copy_v4i16_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_copy_v4i16_local_to_global.ll │ ├── async_work_group_copy_v4i16_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_copy_v4i32_global_to_local.ll │ ├── async_work_group_copy_v4i32_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_copy_v4i32_local_to_global.ll │ ├── async_work_group_copy_v4i32_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_copy_v4i64_global_to_local.ll │ ├── async_work_group_copy_v4i64_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_copy_v4i64_local_to_global.ll │ ├── async_work_group_copy_v4i64_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_copy_v4i8_global_to_local.ll │ ├── async_work_group_copy_v4i8_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_copy_v4i8_local_to_global.ll │ ├── async_work_group_copy_v4i8_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_copy_v8i16_global_to_local.ll │ ├── async_work_group_copy_v8i16_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_copy_v8i16_local_to_global.ll │ ├── async_work_group_copy_v8i16_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_copy_v8i32_global_to_local.ll │ ├── async_work_group_copy_v8i32_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_copy_v8i32_local_to_global.ll │ ├── async_work_group_copy_v8i32_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_copy_v8i64_global_to_local.ll │ ├── async_work_group_copy_v8i64_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_copy_v8i64_local_to_global.ll │ ├── async_work_group_copy_v8i64_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_copy_v8i8_global_to_local.ll │ ├── async_work_group_copy_v8i8_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_copy_v8i8_local_to_global.ll │ ├── async_work_group_copy_v8i8_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_long_vector_test_gen.py │ ├── async_work_group_strided_copy_test_gen.py │ ├── async_work_group_strided_copy_v16i16_global_to_local.ll │ ├── async_work_group_strided_copy_v16i16_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v16i16_local_to_global.ll │ ├── async_work_group_strided_copy_v16i16_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v16i32_global_to_local.ll │ ├── async_work_group_strided_copy_v16i32_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v16i32_local_to_global.ll │ ├── async_work_group_strided_copy_v16i32_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v16i64_global_to_local.ll │ ├── async_work_group_strided_copy_v16i64_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v16i64_local_to_global.ll │ ├── async_work_group_strided_copy_v16i64_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v16i8_global_to_local.ll │ ├── async_work_group_strided_copy_v16i8_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v16i8_local_to_global.ll │ ├── async_work_group_strided_copy_v16i8_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v1i16_global_to_local.ll │ ├── async_work_group_strided_copy_v1i16_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v1i16_local_to_global.ll │ ├── async_work_group_strided_copy_v1i16_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v1i32_global_to_local.ll │ ├── async_work_group_strided_copy_v1i32_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v1i32_local_to_global.ll │ ├── async_work_group_strided_copy_v1i32_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v1i64_global_to_local.ll │ ├── async_work_group_strided_copy_v1i64_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v1i64_local_to_global.ll │ ├── async_work_group_strided_copy_v1i64_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v1i8_global_to_local.ll │ ├── async_work_group_strided_copy_v1i8_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v1i8_local_to_global.ll │ ├── async_work_group_strided_copy_v1i8_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v2i16_global_to_local.ll │ ├── async_work_group_strided_copy_v2i16_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v2i16_local_to_global.ll │ ├── async_work_group_strided_copy_v2i16_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v2i32_global_to_local.ll │ ├── async_work_group_strided_copy_v2i32_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v2i32_local_to_global.ll │ ├── async_work_group_strided_copy_v2i32_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v2i64_global_to_local.ll │ ├── async_work_group_strided_copy_v2i64_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v2i64_local_to_global.ll │ ├── async_work_group_strided_copy_v2i64_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v2i8_global_to_local.ll │ ├── async_work_group_strided_copy_v2i8_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v2i8_local_to_global.ll │ ├── async_work_group_strided_copy_v2i8_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v3i16_global_to_local.ll │ ├── async_work_group_strided_copy_v3i16_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v3i16_local_to_global.ll │ ├── async_work_group_strided_copy_v3i16_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v3i32_global_to_local.ll │ ├── async_work_group_strided_copy_v3i32_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v3i32_local_to_global.ll │ ├── async_work_group_strided_copy_v3i32_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v3i64_global_to_local.ll │ ├── async_work_group_strided_copy_v3i64_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v3i64_local_to_global.ll │ ├── async_work_group_strided_copy_v3i64_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v3i8_global_to_local.ll │ ├── async_work_group_strided_copy_v3i8_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v3i8_local_to_global.ll │ ├── async_work_group_strided_copy_v3i8_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v4i16_global_to_local.ll │ ├── async_work_group_strided_copy_v4i16_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v4i16_local_to_global.ll │ ├── async_work_group_strided_copy_v4i16_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v4i32_global_to_local.ll │ ├── async_work_group_strided_copy_v4i32_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v4i32_local_to_global.ll │ ├── async_work_group_strided_copy_v4i32_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v4i64_global_to_local.ll │ ├── async_work_group_strided_copy_v4i64_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v4i64_local_to_global.ll │ ├── async_work_group_strided_copy_v4i64_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v4i8_global_to_local.ll │ ├── async_work_group_strided_copy_v4i8_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v4i8_local_to_global.ll │ ├── async_work_group_strided_copy_v4i8_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v8i16_global_to_local.ll │ ├── async_work_group_strided_copy_v8i16_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v8i16_local_to_global.ll │ ├── async_work_group_strided_copy_v8i16_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v8i32_global_to_local.ll │ ├── async_work_group_strided_copy_v8i32_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v8i32_local_to_global.ll │ ├── async_work_group_strided_copy_v8i32_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v8i64_global_to_local.ll │ ├── async_work_group_strided_copy_v8i64_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v8i64_local_to_global.ll │ ├── async_work_group_strided_copy_v8i64_local_to_global_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v8i8_global_to_local.ll │ ├── async_work_group_strided_copy_v8i8_global_to_local_explicit_spirv_variables.ll │ ├── async_work_group_strided_copy_v8i8_local_to_global.ll │ ├── async_work_group_strided_copy_v8i8_local_to_global_explicit_spirv_variables.ll │ └── wait_group_event.ll ├── AtomicBuiltins │ ├── Explicit │ │ ├── atomic_compare_exchange_strong.cl │ │ ├── atomic_compare_exchange_weak.cl │ │ ├── atomic_exchange.cl │ │ ├── atomic_fetch_add.cl │ │ ├── atomic_fetch_and.cl │ │ ├── atomic_fetch_max_signed.cl │ │ ├── atomic_fetch_max_unsigned.cl │ │ ├── atomic_fetch_min_signed.cl │ │ ├── atomic_fetch_min_unsigned.cl │ │ ├── atomic_fetch_or.cl │ │ ├── atomic_fetch_sub.cl │ │ ├── atomic_fetch_xor.cl │ │ ├── atomic_load.cl │ │ ├── atomic_store.cl │ │ ├── compare_exchange_global.ll │ │ ├── compare_exchange_local.ll │ │ ├── exchange.ll │ │ ├── fetch.ll │ │ ├── load.ll │ │ └── store.ll │ ├── atom_add_int.cl │ ├── atom_add_int_local.cl │ ├── atom_add_uint.cl │ ├── atom_add_uint_local.cl │ ├── atom_and_int.cl │ ├── atom_and_int_local.cl │ ├── atom_and_uint.cl │ ├── atom_and_uint_local.cl │ ├── atom_cmpxchg_int.cl │ ├── atom_cmpxchg_int_local.cl │ ├── atom_cmpxchg_uint.cl │ ├── atom_cmpxchg_uint_local.cl │ ├── atom_dec_int.cl │ ├── atom_dec_int_local.cl │ ├── atom_dec_uint.cl │ ├── atom_dec_uint_local.cl │ ├── atom_inc_int.cl │ ├── atom_inc_int_local.cl │ ├── atom_inc_uint.cl │ ├── atom_inc_uint_local.cl │ ├── atom_max_int.cl │ ├── atom_max_int_local.cl │ ├── atom_max_uint.cl │ ├── atom_max_uint_local.cl │ ├── atom_min_int.cl │ ├── atom_min_int_local.cl │ ├── atom_min_uint.cl │ ├── atom_min_uint_local.cl │ ├── atom_or_int.cl │ ├── atom_or_int_local.cl │ ├── atom_or_uint.cl │ ├── atom_or_uint_local.cl │ ├── atom_sub_int.cl │ ├── atom_sub_int_local.cl │ ├── atom_sub_uint.cl │ ├── atom_sub_uint_local.cl │ ├── atom_xchg_int.cl │ ├── atom_xchg_int_local.cl │ ├── atom_xchg_uint.cl │ ├── atom_xchg_uint_local.cl │ ├── atom_xor_int.cl │ ├── atom_xor_int_local.cl │ ├── atom_xor_uint.cl │ ├── atom_xor_uint_local.cl │ ├── atomic_add_int.cl │ ├── atomic_add_int_local.cl │ ├── atomic_add_uint.cl │ ├── atomic_add_uint_local.cl │ ├── atomic_and_int.cl │ ├── atomic_and_int_local.cl │ ├── atomic_and_uint.cl │ ├── atomic_and_uint_local.cl │ ├── atomic_cmpxchg_int.cl │ ├── atomic_cmpxchg_int_local.cl │ ├── atomic_cmpxchg_uint.cl │ ├── atomic_cmpxchg_uint_local.cl │ ├── atomic_dec_int.cl │ ├── atomic_dec_int_local.cl │ ├── atomic_dec_uint.cl │ ├── atomic_dec_uint_local.cl │ ├── atomic_flag.cl │ ├── atomic_flag_errors.cl │ ├── atomic_flag_warnings.cl │ ├── atomic_inc_int.cl │ ├── atomic_inc_int_local.cl │ ├── atomic_inc_uint.cl │ ├── atomic_inc_uint_local.cl │ ├── atomic_init.cl │ ├── atomic_max_int.cl │ ├── atomic_max_int_local.cl │ ├── atomic_max_uint.cl │ ├── atomic_max_uint_local.cl │ ├── atomic_min_int.cl │ ├── atomic_min_int_local.cl │ ├── atomic_min_uint.cl │ ├── atomic_min_uint_local.cl │ ├── atomic_or_int.cl │ ├── atomic_or_int_local.cl │ ├── atomic_or_uint.cl │ ├── atomic_or_uint_local.cl │ ├── atomic_overloads.ll │ ├── atomic_sub_int.cl │ ├── atomic_sub_int_local.cl │ ├── atomic_sub_uint.cl │ ├── atomic_sub_uint_local.cl │ ├── atomic_xchg_int.cl │ ├── atomic_xchg_int_local.cl │ ├── atomic_xchg_uint.cl │ ├── atomic_xchg_uint_local.cl │ ├── atomic_xor_int.cl │ ├── atomic_xor_int_local.cl │ ├── atomic_xor_uint.cl │ ├── atomic_xor_uint_local.cl │ └── enum_values.cl ├── AutoPodArgs │ ├── array_prevents_push_constants.ll │ ├── cluster_pod_args_preserves_metadata.ll │ ├── contains_image_channel_getter.ll │ ├── contains_read_image3d.ll │ ├── enqueued_local_size_prevents_push_constant.ll │ ├── fallback_on_ssbo.ll │ ├── force_pushconstant.ll │ ├── force_ubo.ll │ ├── max_size_prevents_push_constants.ll │ ├── no_16bit_push_constant.ll │ ├── no_16bit_ubo_pushconstant.ll │ ├── no_8bit_push_constant.ll │ ├── no_8bit_ubo_pushconstant.ll │ ├── non_clustered_args_prevents_push_constants.ll │ ├── other_push_constants_prevent_global_push_constants.ll │ └── use_global_push_constant.ll ├── BuiltinsWithGenericPointer │ ├── fract_libclc.cl │ ├── fract_native.cl │ ├── fract_print.cl │ ├── frexp_libclc.cl │ ├── frexp_native.cl │ ├── issue-1079.cl │ ├── issue-1079_novec.cl │ ├── issue-1343.cl │ ├── lgamma_r_libclc.cl │ ├── modf_libclc.cl │ ├── remquo_libclc.cl │ └── sincos_libclc.cl ├── CMakeLists.txt ├── CPlusPlus │ ├── cpp-2021.cl │ ├── generic-addrspace.cl │ ├── issue-357.cl │ ├── kernel-overload.cl │ ├── object-and-overload.cl │ ├── opsource.cl │ ├── reference-parameter.cl │ └── template.cl ├── Coherent │ ├── coherent_barrier_subfunction.ll │ ├── coherent_fence_simple.ll │ ├── coherent_multiple_subfunctions.ll │ ├── coherent_simple.ll │ ├── coherent_subfunction_parameter.ll │ ├── frexp.ll │ ├── missing_barrier.ll │ ├── parameter_one_use_is_coherent.ll │ ├── read_only.ll │ ├── selection.ll │ └── write_only.ll ├── CommonBuiltins │ ├── clamp │ │ ├── float2_clamp.cl │ │ ├── float3_clamp.cl │ │ ├── float3_clamp_novec3.cl │ │ ├── float4_clamp.cl │ │ ├── float_clamp.cl │ │ ├── half2_clamp.cl │ │ ├── half2_clamp_splat.ll │ │ ├── half3_clamp.cl │ │ ├── half3_clamp_novec3.cl │ │ ├── half3_clamp_splat.ll │ │ ├── half4_clamp.cl │ │ ├── half4_clamp_splat.ll │ │ └── half_clamp.cl │ ├── float2_degrees.cl │ ├── float2_radians.cl │ ├── float2_sign.cl │ ├── float3_degrees.cl │ ├── float3_degrees_novec3.cl │ ├── float3_radians.cl │ ├── float3_radians_novec3.cl │ ├── float3_sign.cl │ ├── float3_sign_novec3.cl │ ├── float4_degrees.cl │ ├── float4_radians.cl │ ├── float4_sign.cl │ ├── float_degrees.cl │ ├── float_radians.cl │ ├── float_sign.cl │ ├── max │ │ ├── float2_max.cl │ │ ├── float3_max.cl │ │ ├── float3_max_novec3.cl │ │ ├── float4_max.cl │ │ ├── float8_max.cl │ │ ├── float_max.cl │ │ ├── half2_fmax.cl │ │ ├── half2_fmax_splat.ll │ │ ├── half2_max.cl │ │ ├── half2_max_splat.ll │ │ ├── half3_fmax.cl │ │ ├── half3_fmax_novec3.cl │ │ ├── half3_fmax_splat.ll │ │ ├── half3_max.cl │ │ ├── half3_max_novec3.cl │ │ ├── half3_max_splat.ll │ │ ├── half4_fmax.cl │ │ ├── half4_fmax_splat.ll │ │ ├── half4_max.cl │ │ ├── half4_max_splat.ll │ │ ├── half_fmax.cl │ │ └── half_max.cl │ ├── min │ │ ├── float2_min.cl │ │ ├── float3_min.cl │ │ ├── float3_min_novec3.cl │ │ ├── float4_min.cl │ │ ├── float_min.cl │ │ ├── half2_fmin.cl │ │ ├── half2_fmin_splat.ll │ │ ├── half2_min.cl │ │ ├── half2_min_splat.ll │ │ ├── half3_fmin.cl │ │ ├── half3_fmin_novec3.cl │ │ ├── half3_fmin_splat.ll │ │ ├── half3_min.cl │ │ ├── half3_min_novec3.cl │ │ ├── half3_min_splat.ll │ │ ├── half4_fmin.cl │ │ ├── half4_fmin_splat.ll │ │ ├── half4_min.cl │ │ ├── half4_min_splat.ll │ │ ├── half_fmin.cl │ │ └── half_min.cl │ ├── mix │ │ ├── float2_mix.cl │ │ ├── float3_mix.cl │ │ ├── float3_mix_novec3.cl │ │ ├── float4_mix.cl │ │ ├── float_mix.cl │ │ ├── half2_mix.cl │ │ ├── half2_mix_splat.ll │ │ ├── half3_mix.cl │ │ ├── half3_mix_novec3.cl │ │ ├── half3_mix_splat.ll │ │ ├── half4_mix.cl │ │ ├── half4_mix_splat.ll │ │ └── half_mix.cl │ ├── no_duplicate_barrier.cl │ ├── no_duplicate_barrier.ll │ ├── smoothstep │ │ ├── smoothstep_float.cl │ │ ├── smoothstep_float2.cl │ │ ├── smoothstep_float3.cl │ │ ├── smoothstep_float3_novec3.cl │ │ ├── smoothstep_float4.cl │ │ ├── smoothstep_float_float2.cl │ │ ├── smoothstep_float_float3.cl │ │ ├── smoothstep_float_float3_novec3.cl │ │ └── smoothstep_float_float4.cl │ └── step │ │ ├── float2_step.cl │ │ ├── float3_step.cl │ │ ├── float4_step.cl │ │ ├── float_step.cl │ │ ├── step_float.cl │ │ ├── step_float2.cl │ │ ├── step_float3.cl │ │ ├── step_float3_novec3.cl │ │ ├── step_float4.cl │ │ ├── step_float_float2.cl │ │ ├── step_float_float3.cl │ │ ├── step_float_float3_novec3.cl │ │ └── step_float_float4.cl ├── Contraction │ ├── contract.cl │ └── no_contract.cl ├── ConvertBuiltins │ ├── char │ │ ├── convert_char16_float16.cl │ │ ├── convert_char4_float4.cl │ │ ├── convert_char4_int4.cl │ │ ├── convert_char4_long4.cl │ │ ├── convert_char4_short4.cl │ │ ├── convert_char4_uchar4.cl │ │ ├── convert_char4_uint4.cl │ │ ├── convert_char4_ulong4.cl │ │ ├── convert_char4_ushort4.cl │ │ ├── convert_char_float.cl │ │ ├── convert_char_int.cl │ │ ├── convert_char_long.cl │ │ ├── convert_char_short.cl │ │ ├── convert_char_uchar.cl │ │ ├── convert_char_uint.cl │ │ ├── convert_char_ulong.cl │ │ ├── convert_char_ushort.cl │ │ ├── convert_uchar4_char4.cl │ │ ├── convert_uchar4_float4.cl │ │ ├── convert_uchar4_int4.cl │ │ ├── convert_uchar4_long4.cl │ │ ├── convert_uchar4_short4.cl │ │ ├── convert_uchar4_uint4.cl │ │ ├── convert_uchar4_ulong4.cl │ │ ├── convert_uchar4_ushort4.cl │ │ ├── convert_uchar_char.cl │ │ ├── convert_uchar_float.cl │ │ ├── convert_uchar_int.cl │ │ ├── convert_uchar_long.cl │ │ ├── convert_uchar_short.cl │ │ ├── convert_uchar_uint.cl │ │ ├── convert_uchar_ulong.cl │ │ └── convert_uchar_ushort.cl │ ├── float │ │ ├── convert_float4_char4.cl │ │ ├── convert_float4_int4.cl │ │ ├── convert_float4_long4.cl │ │ ├── convert_float4_short4.cl │ │ ├── convert_float4_uchar4.cl │ │ ├── convert_float4_uint4.cl │ │ ├── convert_float4_ulong4.cl │ │ ├── convert_float4_ushort4.cl │ │ ├── convert_float8_int8.cl │ │ ├── convert_float_char.cl │ │ ├── convert_float_int.cl │ │ ├── convert_float_long.cl │ │ ├── convert_float_short.cl │ │ ├── convert_float_uchar.cl │ │ ├── convert_float_uint.cl │ │ ├── convert_float_ulong.cl │ │ └── convert_float_ushort.cl │ ├── hack_convert_to_float.ll │ ├── half │ │ ├── convert_half2_char2.ll │ │ ├── convert_half2_double2.ll │ │ ├── convert_half2_float2.ll │ │ ├── convert_half2_half2.ll │ │ ├── convert_half2_int2.ll │ │ ├── convert_half2_long2.ll │ │ ├── convert_half2_short2.ll │ │ ├── convert_half2_uchar2.ll │ │ ├── convert_half2_uint2.ll │ │ ├── convert_half2_ulong2.ll │ │ ├── convert_half2_ushort2.ll │ │ ├── convert_half3_char3.ll │ │ ├── convert_half3_double3.ll │ │ ├── convert_half3_float3.ll │ │ ├── convert_half3_half3.ll │ │ ├── convert_half3_int3.ll │ │ ├── convert_half3_long3.ll │ │ ├── convert_half3_short3.ll │ │ ├── convert_half3_uchar3.ll │ │ ├── convert_half3_uint3.ll │ │ ├── convert_half3_ulong3.ll │ │ ├── convert_half3_ushort3.ll │ │ ├── convert_half4_char4.ll │ │ ├── convert_half4_double4.ll │ │ ├── convert_half4_float4.ll │ │ ├── convert_half4_half4.ll │ │ ├── convert_half4_int4.ll │ │ ├── convert_half4_long4.ll │ │ ├── convert_half4_short4.ll │ │ ├── convert_half4_uchar4.ll │ │ ├── convert_half4_uint4.ll │ │ ├── convert_half4_ulong4.ll │ │ ├── convert_half4_ushort4.ll │ │ ├── convert_half8_short8.cl │ │ ├── convert_half_char.ll │ │ ├── convert_half_double.ll │ │ ├── convert_half_float.ll │ │ ├── convert_half_half.ll │ │ ├── convert_half_int.ll │ │ ├── convert_half_long.ll │ │ ├── convert_half_short.ll │ │ ├── convert_half_uchar.ll │ │ ├── convert_half_uint.ll │ │ ├── convert_half_ulong.ll │ │ └── convert_half_ushort.ll │ ├── int │ │ ├── convert_int4_char4.cl │ │ ├── convert_int4_float4.cl │ │ ├── convert_int4_long4.cl │ │ ├── convert_int4_short4.cl │ │ ├── convert_int4_uchar4.cl │ │ ├── convert_int4_uint4.cl │ │ ├── convert_int4_ulong4.cl │ │ ├── convert_int4_ushort4.cl │ │ ├── convert_int8_short8.cl │ │ ├── convert_int_char.cl │ │ ├── convert_int_float.cl │ │ ├── convert_int_long.cl │ │ ├── convert_int_short.cl │ │ ├── convert_int_uchar.cl │ │ ├── convert_int_uint.cl │ │ ├── convert_int_ulong.cl │ │ ├── convert_int_ushort.cl │ │ ├── convert_uint4_char4.cl │ │ ├── convert_uint4_float4.cl │ │ ├── convert_uint4_int4.cl │ │ ├── convert_uint4_long4.cl │ │ ├── convert_uint4_short4.cl │ │ ├── convert_uint4_uchar4.cl │ │ ├── convert_uint4_ulong4.cl │ │ ├── convert_uint4_ushort4.cl │ │ ├── convert_uint_char.cl │ │ ├── convert_uint_float.cl │ │ ├── convert_uint_int.cl │ │ ├── convert_uint_long.cl │ │ ├── convert_uint_short.cl │ │ ├── convert_uint_uchar.cl │ │ ├── convert_uint_ulong.cl │ │ └── convert_uint_ushort.cl │ ├── long │ │ ├── convert_long4_char4.cl │ │ ├── convert_long4_float4.cl │ │ ├── convert_long4_int4.cl │ │ ├── convert_long4_short4.cl │ │ ├── convert_long4_uchar4.cl │ │ ├── convert_long4_uint4.cl │ │ ├── convert_long4_ulong4.cl │ │ ├── convert_long4_ushort4.cl │ │ ├── convert_long_char.cl │ │ ├── convert_long_float.cl │ │ ├── convert_long_int.cl │ │ ├── convert_long_short.cl │ │ ├── convert_long_uchar.cl │ │ ├── convert_long_uint.cl │ │ ├── convert_long_ulong.cl │ │ ├── convert_long_ushort.cl │ │ ├── convert_ulong4_char4.cl │ │ ├── convert_ulong4_float4.cl │ │ ├── convert_ulong4_int4.cl │ │ ├── convert_ulong4_long4.cl │ │ ├── convert_ulong4_short4.cl │ │ ├── convert_ulong4_uchar4.cl │ │ ├── convert_ulong4_uint4.cl │ │ ├── convert_ulong4_ushort4.cl │ │ ├── convert_ulong_char.cl │ │ ├── convert_ulong_float.cl │ │ ├── convert_ulong_int.cl │ │ ├── convert_ulong_long.cl │ │ ├── convert_ulong_short.cl │ │ ├── convert_ulong_uchar.cl │ │ ├── convert_ulong_uint.cl │ │ └── convert_ulong_ushort.cl │ └── short │ │ ├── convert_short4_char4.cl │ │ ├── convert_short4_float4.cl │ │ ├── convert_short4_int4.cl │ │ ├── convert_short4_long4.cl │ │ ├── convert_short4_uchar4.cl │ │ ├── convert_short4_uint4.cl │ │ ├── convert_short4_ulong4.cl │ │ ├── convert_short4_ushort4.cl │ │ ├── convert_short8_int8.cl │ │ ├── convert_short_char.cl │ │ ├── convert_short_float.cl │ │ ├── convert_short_int.cl │ │ ├── convert_short_long.cl │ │ ├── convert_short_uchar.cl │ │ ├── convert_short_uint.cl │ │ ├── convert_short_ulong.cl │ │ ├── convert_short_ushort.cl │ │ ├── convert_ushort4_char4.cl │ │ ├── convert_ushort4_float4.cl │ │ ├── convert_ushort4_int4.cl │ │ ├── convert_ushort4_long4.cl │ │ ├── convert_ushort4_short4.cl │ │ ├── convert_ushort4_uchar4.cl │ │ ├── convert_ushort4_uint4.cl │ │ ├── convert_ushort4_ulong4.cl │ │ ├── convert_ushort_char.cl │ │ ├── convert_ushort_float.cl │ │ ├── convert_ushort_int.cl │ │ ├── convert_ushort_long.cl │ │ ├── convert_ushort_short.cl │ │ ├── convert_ushort_uchar.cl │ │ ├── convert_ushort_uint.cl │ │ └── convert_ushort_ulong.cl ├── Diagnostics │ ├── dse-unsupported-cl2.cl │ ├── dse-unsupported-cl3.cl │ ├── dse-unsupported-default.cl │ ├── no-pushconstant-16bit.cl │ ├── no-pushconstant-8bit.cl │ ├── no-ssbo-16bit.cl │ ├── no-ssbo-8bit.cl │ ├── no-ubo-16bit.cl │ ├── no-ubo-8bit.cl │ ├── pipes-unsupported-cl2.cl │ ├── pipes-unsupported-cl3.cl │ ├── pipes-unsupported-default.cl │ └── relax_16bit_pod_arg_check.cl ├── DirectResourceAccess │ ├── common_global_into_helper.cl │ ├── constant_arg.cl │ ├── global_arg.cl │ ├── global_subobject_base.cl │ ├── inconsistent_kernel_args_global.cl │ ├── local_arg.cl │ ├── local_arg_one_entry_point.cl │ ├── local_variable.cl │ ├── partial_access_chain_global.cl │ ├── ro_image2_sampler_args.cl │ ├── ro_image3_sampler_args.cl │ ├── wo_image2_args.cl │ └── wo_image3_args.cl ├── ExplicitMemoryFenceBuiltins │ ├── mem_fence_both.cl │ ├── mem_fence_global.cl │ ├── mem_fence_local.cl │ ├── read_mem_fence_both.cl │ ├── read_mem_fence_global.cl │ ├── read_mem_fence_local.cl │ ├── write_mem_fence_both.cl │ ├── write_mem_fence_global.cl │ └── write_mem_fence_local.cl ├── Features │ ├── cl3-all-features.cl │ ├── cl3-disabled-features.cl │ ├── cl3-no-features.cl │ ├── cl3-some-features.cl │ ├── fp16-default.cl │ ├── fp16-disabled.cl │ ├── fp64-default-cl3.cl │ ├── fp64-default.cl │ ├── fp64-disabled-cl3.cl │ └── fp64-disabled.cl ├── FixupStructuredCFG │ ├── UndefPHI.ll │ ├── conditional_loop_header.cl │ ├── multiple_inner_loop_phi_values.ll │ ├── single_block_inner_loop.ll │ ├── single_block_loop_phi.ll │ ├── split_and_isolate.ll │ ├── split_convergent_continue_branch.ll │ └── split_convergent_continue_cond_branch.ll ├── GeometricBuiltins │ ├── float2_distance.cl │ ├── float2_dot.cl │ ├── float2_fast_distance.cl │ ├── float2_fast_length.cl │ ├── float2_fast_normalize.cl │ ├── float2_length.cl │ ├── float2_normalize.cl │ ├── float3_cross.cl │ ├── float3_cross_novec3.cl │ ├── float3_distance.cl │ ├── float3_distance_novec3.cl │ ├── float3_dot.cl │ ├── float3_dot_novec3.cl │ ├── float3_fast_distance.cl │ ├── float3_fast_distance_novec3.cl │ ├── float3_fast_length.cl │ ├── float3_fast_length_novec3.cl │ ├── float3_fast_normalize.cl │ ├── float3_fast_normalize_novec3.cl │ ├── float3_length.cl │ ├── float3_length_novec3.cl │ ├── float3_normalize.cl │ ├── float3_normalize_novec3.cl │ ├── float4_cross.cl │ ├── float4_cross_novec3.cl │ ├── float4_distance.cl │ ├── float4_dot.cl │ ├── float4_fast_distance.cl │ ├── float4_fast_length.cl │ ├── float4_fast_normalize.cl │ ├── float4_length.cl │ ├── float4_normalize.cl │ ├── float_distance.cl │ ├── float_dot.cl │ ├── float_fast_distance.cl │ ├── float_fast_length.cl │ ├── float_fast_normalize.cl │ ├── float_length.cl │ ├── float_normalize.cl │ ├── half2_dot.cl │ ├── half3_dot.cl │ ├── half3_dot_novec3.cl │ ├── half4_dot.cl │ └── half_dot.cl ├── HalfStorage │ ├── clspv_vloada_half2_global.cl │ ├── clspv_vloada_half2_local.cl │ ├── clspv_vloada_half2_private.cl │ ├── clspv_vloada_half4_global.ll │ ├── clspv_vloada_half4_local.ll │ ├── clspv_vloada_half4_private.cl │ ├── vload_half.cl │ ├── vload_half.ll │ ├── vload_half16.cl │ ├── vload_half16.ll │ ├── vload_half2.cl │ ├── vload_half2.ll │ ├── vload_half2_pointer_cast_from_float4.ll │ ├── vload_half3.cl │ ├── vload_half3.ll │ ├── vload_half3_no_16bit_storage.ll │ ├── vload_half4.cl │ ├── vload_half4.ll │ ├── vload_half4_pointer_cast_from_float4.cl │ ├── vload_half8.cl │ ├── vload_half8.ll │ ├── vload_half_pointer_cast_from_short.cl │ ├── vloada_half2_global.cl │ ├── vloada_half3.cl │ ├── vloada_half3.ll │ ├── vloada_half4_global.ll │ ├── vstore_half.cl │ ├── vstore_half.ll │ ├── vstore_half16.cl │ ├── vstore_half16.ll │ ├── vstore_half2.cl │ ├── vstore_half2.ll │ ├── vstore_half2_pointer_cast_to_float4.cl │ ├── vstore_half3.cl │ ├── vstore_half3.ll │ ├── vstore_half3_no_16bit_storage.ll │ ├── vstore_half4.cl │ ├── vstore_half4.ll │ ├── vstore_half4_pointer_cast_to_float4.ll │ ├── vstore_half8.cl │ ├── vstore_half8.ll │ ├── vstore_half_pointer_cast_to_short.cl │ ├── vstore_half_without_16bit_storage_uses_atomic_xor.cl │ ├── vstorea_half2_global.cl │ ├── vstorea_half2_local.cl │ ├── vstorea_half2_private.cl │ ├── vstorea_half3.cl │ ├── vstorea_half3.ll │ ├── vstorea_half3_no_16bit_storage.ll │ ├── vstorea_half4_global.ll │ ├── vstorea_half4_local.ll │ └── vstorea_half4_private.ll ├── ImageBuiltins │ ├── get_image_array_size_image1d_array_readonly.cl │ ├── get_image_array_size_image1d_array_readonly.ll │ ├── get_image_array_size_image1d_array_readwrite.cl │ ├── get_image_array_size_image1d_array_readwrite.ll │ ├── get_image_array_size_image1d_array_writeonly.cl │ ├── get_image_array_size_image1d_array_writeonly.ll │ ├── get_image_array_size_image2d_array_readonly.cl │ ├── get_image_array_size_image2d_array_readonly.ll │ ├── get_image_array_size_image2d_array_readwrite.cl │ ├── get_image_array_size_image2d_array_readwrite.ll │ ├── get_image_array_size_image2d_array_writeonly.cl │ ├── get_image_array_size_image2d_array_writeonly.ll │ ├── get_image_channel_image1d_array_read_only.cl │ ├── get_image_channel_image1d_array_read_only.ll │ ├── get_image_channel_image1d_array_read_write.cl │ ├── get_image_channel_image1d_array_read_write.ll │ ├── get_image_channel_image1d_array_write_only.cl │ ├── get_image_channel_image1d_array_write_only.ll │ ├── get_image_channel_image1d_buffer_read_only.cl │ ├── get_image_channel_image1d_buffer_read_only.ll │ ├── get_image_channel_image1d_buffer_read_write.cl │ ├── get_image_channel_image1d_buffer_read_write.ll │ ├── get_image_channel_image1d_buffer_write_only.cl │ ├── get_image_channel_image1d_buffer_write_only.ll │ ├── get_image_channel_image1d_read_only.cl │ ├── get_image_channel_image1d_read_only.ll │ ├── get_image_channel_image1d_read_write.cl │ ├── get_image_channel_image1d_read_write.ll │ ├── get_image_channel_image1d_write_only.cl │ ├── get_image_channel_image1d_write_only.ll │ ├── get_image_channel_image2d_array_read_only.cl │ ├── get_image_channel_image2d_array_read_only.ll │ ├── get_image_channel_image2d_array_read_write.cl │ ├── get_image_channel_image2d_array_read_write.ll │ ├── get_image_channel_image2d_array_write_only.cl │ ├── get_image_channel_image2d_array_write_only.ll │ ├── get_image_channel_image2d_read_only.cl │ ├── get_image_channel_image2d_read_only.ll │ ├── get_image_channel_image2d_read_write.cl │ ├── get_image_channel_image2d_read_write.ll │ ├── get_image_channel_image2d_write_only.cl │ ├── get_image_channel_image2d_write_only.ll │ ├── get_image_channel_image3d_read_only.cl │ ├── get_image_channel_image3d_read_only.ll │ ├── get_image_channel_image3d_read_write.cl │ ├── get_image_channel_image3d_read_write.ll │ ├── get_image_channel_image3d_write_only.cl │ ├── get_image_channel_image3d_write_only.ll │ ├── get_image_channel_multiple_kernel.cl │ ├── get_image_channel_multiple_kernel.ll │ ├── get_image_channel_test_gen.py │ ├── get_image_channel_with_pod_arg.cl │ ├── get_image_depth_image3d_readonly.cl │ ├── get_image_depth_image3d_readwrite.cl │ ├── get_image_depth_image3d_writeonly.cl │ ├── get_image_dim_image2d_readonly.cl │ ├── get_image_dim_image2d_readwrite.cl │ ├── get_image_dim_image2d_writeonly.cl │ ├── get_image_dim_image3d_readonly.cl │ ├── get_image_dim_image3d_readwrite.cl │ ├── get_image_dim_image3d_writeonly.cl │ ├── get_image_height_image2d_readonly.cl │ ├── get_image_height_image2d_readwrite.cl │ ├── get_image_height_image2d_writeonly.cl │ ├── get_image_height_image3d_readonly.cl │ ├── get_image_height_image3d_readwrite.cl │ ├── get_image_height_image3d_writeonly.cl │ ├── get_image_width_image1d_buffer_readonly.cl │ ├── get_image_width_image1d_buffer_readwrite.cl │ ├── get_image_width_image1d_buffer_writeonly.cl │ ├── get_image_width_image1d_readonly.cl │ ├── get_image_width_image1d_readwrite.cl │ ├── get_image_width_image1d_writeonly.cl │ ├── get_image_width_image2d_readwrite.cl │ ├── get_image_width_image3d_readonly.cl │ ├── get_image_width_image3d_readwrite.cl │ ├── get_image_width_image3d_writeonly.cl │ ├── get_image_width_imaged2d_readonly.cl │ ├── get_image_width_imaged2d_writeonly.cl │ ├── half_image_builtins.ll │ ├── image_1d_array.cl │ ├── image_1d_buffer.cl │ ├── image_1d_buffer_capability.cl │ ├── image_1d_capability.cl │ ├── image_2d_array.cl │ ├── opaque_image_metadata.ll │ ├── read_image3d_with_literal_unorm_sampler.cl │ ├── read_image3d_with_literal_unorm_sampler.ll │ ├── read_image3d_with_non_literal_sampler.cl │ ├── read_image3d_with_non_literal_sampler.ll │ ├── read_imagef_int.cl │ ├── read_imagef_int2.cl │ ├── read_imagef_int4.cl │ ├── read_imagef_sampler_float.cl │ ├── read_imagef_sampler_float2.cl │ ├── read_imagef_sampler_float4.cl │ ├── read_imagei_int.cl │ ├── read_imagei_int2.cl │ ├── read_imagei_int4.cl │ ├── read_imagei_sampler_float.cl │ ├── read_imagei_sampler_float2.cl │ ├── read_imagei_sampler_float4.cl │ ├── read_imageui_int.cl │ ├── read_imageui_int2.cl │ ├── read_imageui_int4.cl │ ├── read_imageui_sampler_float.cl │ ├── read_imageui_sampler_float2.cl │ ├── read_imageui_sampler_float4.cl │ ├── read_only_image2d_passed_to_other_function.cl │ ├── read_only_image3d_passed_to_other_function.cl │ ├── readwrite_imagef_int.cl │ ├── readwrite_imagef_int2.cl │ ├── readwrite_imagef_int4.cl │ ├── readwrite_imagei_int.cl │ ├── readwrite_imagei_int2.cl │ ├── readwrite_imagei_int4.cl │ ├── readwrite_imageui_int.cl │ ├── readwrite_imageui_int2.cl │ ├── readwrite_imageui_int4.cl │ ├── sampled_1d_capability.cl │ ├── sampled_1d_read_image_with_int_coord.ll │ ├── sampled_2d_3d_read_image_with_int_coords.ll │ ├── two_int_images.cl │ ├── unsampled_read_image_descriptor_map.cl │ ├── write_imagef_int.cl │ ├── write_imagef_sampler_int2.cl │ ├── write_imagef_sampler_int4.cl │ ├── write_imagei_int.cl │ ├── write_imagei_sampler_int2.cl │ ├── write_imagei_sampler_int4.cl │ ├── write_imageui_int.cl │ ├── write_imageui_sampler_int2.cl │ ├── write_imageui_sampler_int4.cl │ ├── write_only_image2d_passed_to_other_function.cl │ └── write_only_image3d_passed_to_other_function.cl ├── InlineEntryPoints │ └── inline_everything.cl ├── InlineFuncWithImageMetadataGetter │ └── get_image_channel_metadata.ll ├── InlineFuncWithReadImage3DNonLiteralSampler │ └── read_image3d.ll ├── InlineFuncWithSingleCallSite │ ├── function_chain.cl │ ├── non_local_parameter.cl │ └── two_kernels_partial_chain_inline.cl ├── Int8 │ ├── bool_to_char.cl │ ├── char_pod_arg.cl │ ├── char_ssbo.cl │ ├── char_struct_ssbo.cl │ ├── char_struct_ssbo_novec3.cl │ ├── int8_default.cl │ └── simple_kernel.cl ├── IntegerBuiltins │ ├── abs │ │ ├── abs_char.cl │ │ ├── abs_char2.cl │ │ ├── abs_char3.cl │ │ ├── abs_char3_novec3.cl │ │ ├── abs_char4.cl │ │ ├── abs_int.cl │ │ ├── abs_int2.cl │ │ ├── abs_int3.cl │ │ ├── abs_int3_novec3.cl │ │ ├── abs_int4.cl │ │ ├── abs_long.cl │ │ ├── abs_long2.cl │ │ ├── abs_long3.cl │ │ ├── abs_long3_novec3.cl │ │ ├── abs_long4.cl │ │ ├── abs_short.cl │ │ ├── abs_short2.cl │ │ ├── abs_short3.cl │ │ ├── abs_short3_novec3.cl │ │ ├── abs_short4.cl │ │ ├── abs_uchar.cl │ │ ├── abs_uchar2.cl │ │ ├── abs_uchar3.cl │ │ ├── abs_uchar3_novec3.cl │ │ ├── abs_uchar4.cl │ │ ├── abs_uint.cl │ │ ├── abs_uint2.cl │ │ ├── abs_uint3.cl │ │ ├── abs_uint3_novec3.cl │ │ ├── abs_uint4.cl │ │ ├── abs_ulong.cl │ │ ├── abs_ulong2.cl │ │ ├── abs_ulong3.cl │ │ ├── abs_ulong3_novec3.cl │ │ ├── abs_ulong4.cl │ │ ├── abs_ushort.cl │ │ ├── abs_ushort2.cl │ │ ├── abs_ushort3.cl │ │ ├── abs_ushort3_novec3.cl │ │ └── abs_ushort4.cl │ ├── abs_diff │ │ ├── abs_diff_char.cl │ │ ├── abs_diff_char2.cl │ │ ├── abs_diff_char3.cl │ │ ├── abs_diff_char3_novec3.cl │ │ ├── abs_diff_char4.cl │ │ ├── abs_diff_int.cl │ │ ├── abs_diff_int2.cl │ │ ├── abs_diff_int3.cl │ │ ├── abs_diff_int3_novec3.cl │ │ ├── abs_diff_int4.cl │ │ ├── abs_diff_long.cl │ │ ├── abs_diff_long2.cl │ │ ├── abs_diff_long3.cl │ │ ├── abs_diff_long3_novec3.cl │ │ ├── abs_diff_long4.cl │ │ ├── abs_diff_short.cl │ │ ├── abs_diff_short2.cl │ │ ├── abs_diff_short3.cl │ │ ├── abs_diff_short3_novec3.cl │ │ ├── abs_diff_short4.cl │ │ ├── abs_diff_uchar.cl │ │ ├── abs_diff_uchar2.cl │ │ ├── abs_diff_uchar3.cl │ │ ├── abs_diff_uchar3_novec3.cl │ │ ├── abs_diff_uchar4.cl │ │ ├── abs_diff_uint.cl │ │ ├── abs_diff_uint2.cl │ │ ├── abs_diff_uint3.cl │ │ ├── abs_diff_uint3_novec3.cl │ │ ├── abs_diff_uint4.cl │ │ ├── abs_diff_ulong.cl │ │ ├── abs_diff_ulong2.cl │ │ ├── abs_diff_ulong3.cl │ │ ├── abs_diff_ulong3_novec3.cl │ │ ├── abs_diff_ulong4.cl │ │ ├── abs_diff_ushort.cl │ │ ├── abs_diff_ushort2.cl │ │ ├── abs_diff_ushort3.cl │ │ ├── abs_diff_ushort3_novec3.cl │ │ └── abs_diff_ushort4.cl │ ├── add_sat │ │ ├── add_sat_char.ll │ │ ├── add_sat_char2.ll │ │ ├── add_sat_char3.ll │ │ ├── add_sat_char4.ll │ │ ├── add_sat_hack_clamp_char.ll │ │ ├── add_sat_hack_clamp_char2.ll │ │ ├── add_sat_hack_clamp_char3.ll │ │ ├── add_sat_hack_clamp_char4.ll │ │ ├── add_sat_hack_clamp_int.ll │ │ ├── add_sat_hack_clamp_int2.ll │ │ ├── add_sat_hack_clamp_int3.ll │ │ ├── add_sat_hack_clamp_int4.ll │ │ ├── add_sat_hack_clamp_long.ll │ │ ├── add_sat_hack_clamp_long2.ll │ │ ├── add_sat_hack_clamp_long3.ll │ │ ├── add_sat_hack_clamp_long4.ll │ │ ├── add_sat_hack_clamp_short.ll │ │ ├── add_sat_hack_clamp_short2.ll │ │ ├── add_sat_hack_clamp_short3.ll │ │ ├── add_sat_hack_clamp_short4.ll │ │ ├── add_sat_hack_clamp_test_gen.cpp │ │ ├── add_sat_hack_clamp_uchar.ll │ │ ├── add_sat_hack_clamp_uchar2.ll │ │ ├── add_sat_hack_clamp_uchar3.ll │ │ ├── add_sat_hack_clamp_uchar4.ll │ │ ├── add_sat_hack_clamp_uint.ll │ │ ├── add_sat_hack_clamp_uint2.ll │ │ ├── add_sat_hack_clamp_uint3.ll │ │ ├── add_sat_hack_clamp_uint4.ll │ │ ├── add_sat_hack_clamp_ulong.ll │ │ ├── add_sat_hack_clamp_ulong2.ll │ │ ├── add_sat_hack_clamp_ulong3.ll │ │ ├── add_sat_hack_clamp_ulong4.ll │ │ ├── add_sat_hack_clamp_ushort.ll │ │ ├── add_sat_hack_clamp_ushort2.ll │ │ ├── add_sat_hack_clamp_ushort3.ll │ │ ├── add_sat_hack_clamp_ushort4.ll │ │ ├── add_sat_int.ll │ │ ├── add_sat_int2.ll │ │ ├── add_sat_int3.ll │ │ ├── add_sat_int4.ll │ │ ├── add_sat_long.ll │ │ ├── add_sat_long2.ll │ │ ├── add_sat_long3.ll │ │ ├── add_sat_long4.ll │ │ ├── add_sat_short.ll │ │ ├── add_sat_short2.ll │ │ ├── add_sat_short3.ll │ │ ├── add_sat_short4.ll │ │ ├── add_sat_test_gen.cpp │ │ ├── add_sat_uchar.ll │ │ ├── add_sat_uchar2.ll │ │ ├── add_sat_uchar3.ll │ │ ├── add_sat_uchar4.ll │ │ ├── add_sat_uint.cl │ │ ├── add_sat_uint.ll │ │ ├── add_sat_uint2.ll │ │ ├── add_sat_uint3.ll │ │ ├── add_sat_uint4.ll │ │ ├── add_sat_ulong.ll │ │ ├── add_sat_ulong2.ll │ │ ├── add_sat_ulong3.ll │ │ ├── add_sat_ulong4.ll │ │ ├── add_sat_ushort.ll │ │ ├── add_sat_ushort2.ll │ │ ├── add_sat_ushort3.ll │ │ └── add_sat_ushort4.ll │ ├── clamp │ │ ├── clamp_char.cl │ │ ├── clamp_char2.cl │ │ ├── clamp_char3.cl │ │ ├── clamp_char3_novec3.cl │ │ ├── clamp_char4.cl │ │ ├── clamp_int.cl │ │ ├── clamp_int2.cl │ │ ├── clamp_int3.cl │ │ ├── clamp_int3_novec3.cl │ │ ├── clamp_int4.cl │ │ ├── clamp_long.cl │ │ ├── clamp_long2.cl │ │ ├── clamp_long3.cl │ │ ├── clamp_long3_novec3.cl │ │ ├── clamp_long4.cl │ │ ├── clamp_short.cl │ │ ├── clamp_short2.cl │ │ ├── clamp_short3.cl │ │ ├── clamp_short3_novec3.cl │ │ ├── clamp_short4.cl │ │ ├── clamp_uchar.cl │ │ ├── clamp_uchar2.cl │ │ ├── clamp_uchar3.cl │ │ ├── clamp_uchar3_novec3.cl │ │ ├── clamp_uchar4.cl │ │ ├── clamp_uint.cl │ │ ├── clamp_uint2.cl │ │ ├── clamp_uint3.cl │ │ ├── clamp_uint3_novec3.cl │ │ ├── clamp_uint4.cl │ │ ├── clamp_ulong.cl │ │ ├── clamp_ulong2.cl │ │ ├── clamp_ulong3.cl │ │ ├── clamp_ulong3_novec3.cl │ │ ├── clamp_ulong4.cl │ │ ├── clamp_ushort.cl │ │ ├── clamp_ushort2.cl │ │ ├── clamp_ushort3.cl │ │ ├── clamp_ushort3_novec3.cl │ │ └── clamp_ushort4.cl │ ├── clz │ │ ├── char2_clz.ll │ │ ├── char_clz.ll │ │ ├── int2_clz.cl │ │ ├── int3_clz.cl │ │ ├── int3_clz_novec3.cl │ │ ├── int4_clz.cl │ │ ├── int_clz.cl │ │ ├── long2_clz.ll │ │ ├── long_clz.ll │ │ ├── short2_clz.ll │ │ ├── short_clz.ll │ │ ├── uint2_clz.cl │ │ ├── uint3_clz.cl │ │ ├── uint3_clz_novec3.cl │ │ ├── uint4_clz.cl │ │ └── uint_clz.cl │ ├── ctz │ │ ├── uchar2_ctz.ll │ │ ├── uchar_ctz.ll │ │ ├── uint2_ctz.cl │ │ ├── uint_ctz.cl │ │ ├── ulong2_ctz.ll │ │ ├── ulong_ctz.ll │ │ ├── ushort2_ctz.ll │ │ └── ushort_ctz.ll │ ├── hadd │ │ ├── hadd_char.ll │ │ ├── hadd_char2.ll │ │ ├── hadd_char3.ll │ │ ├── hadd_char4.ll │ │ ├── hadd_int.ll │ │ ├── hadd_int2.ll │ │ ├── hadd_int3.ll │ │ ├── hadd_int4.ll │ │ ├── hadd_long.ll │ │ ├── hadd_long2.ll │ │ ├── hadd_long3.ll │ │ ├── hadd_long4.ll │ │ ├── hadd_short.ll │ │ ├── hadd_short2.ll │ │ ├── hadd_short3.ll │ │ ├── hadd_short4.ll │ │ ├── hadd_test_gen.cpp │ │ ├── hadd_uchar.ll │ │ ├── hadd_uchar2.ll │ │ ├── hadd_uchar3.ll │ │ ├── hadd_uchar4.ll │ │ ├── hadd_uint.ll │ │ ├── hadd_uint2.ll │ │ ├── hadd_uint3.ll │ │ ├── hadd_uint4.ll │ │ ├── hadd_ulong.ll │ │ ├── hadd_ulong2.ll │ │ ├── hadd_ulong3.ll │ │ ├── hadd_ulong4.ll │ │ ├── hadd_ushort.ll │ │ ├── hadd_ushort2.ll │ │ ├── hadd_ushort3.ll │ │ ├── hadd_ushort4.ll │ │ ├── rhadd_char.ll │ │ ├── rhadd_char2.ll │ │ ├── rhadd_char3.ll │ │ ├── rhadd_char4.ll │ │ ├── rhadd_int.ll │ │ ├── rhadd_int2.ll │ │ ├── rhadd_int3.ll │ │ ├── rhadd_int4.ll │ │ ├── rhadd_long.ll │ │ ├── rhadd_long2.ll │ │ ├── rhadd_long3.ll │ │ ├── rhadd_long4.ll │ │ ├── rhadd_short.ll │ │ ├── rhadd_short2.ll │ │ ├── rhadd_short3.ll │ │ ├── rhadd_short4.ll │ │ ├── rhadd_uchar.ll │ │ ├── rhadd_uchar2.ll │ │ ├── rhadd_uchar3.ll │ │ ├── rhadd_uchar4.ll │ │ ├── rhadd_uint.ll │ │ ├── rhadd_uint2.ll │ │ ├── rhadd_uint3.ll │ │ ├── rhadd_uint4.ll │ │ ├── rhadd_ulong.ll │ │ ├── rhadd_ulong2.ll │ │ ├── rhadd_ulong3.ll │ │ ├── rhadd_ulong4.ll │ │ ├── rhadd_ushort.ll │ │ ├── rhadd_ushort2.ll │ │ ├── rhadd_ushort3.ll │ │ └── rhadd_ushort4.ll │ ├── int2_mad24.cl │ ├── int2_max_var.cl │ ├── int2_min_var.cl │ ├── int2_mul24.cl │ ├── int3_mad24.cl │ ├── int3_mad24_novec3.cl │ ├── int3_max_var.cl │ ├── int3_max_var_novec3.cl │ ├── int3_min_var.cl │ ├── int3_min_var_novec3.cl │ ├── int3_mul24.cl │ ├── int3_mul24_novec3.cl │ ├── int4_mad24.cl │ ├── int4_max_var.cl │ ├── int4_min_var.cl │ ├── int4_mul24.cl │ ├── int_mad24.cl │ ├── int_mul24.cl │ ├── mad_hi │ │ ├── mad_hi_all_overloads.cl │ │ ├── mad_hi_all_overloads_novec3.cl │ │ ├── mad_hi_char.cl │ │ ├── mad_hi_char4.cl │ │ ├── mad_hi_int.cl │ │ ├── mad_hi_int4.cl │ │ ├── mad_hi_long.cl │ │ ├── mad_hi_long4.cl │ │ ├── mad_hi_short.cl │ │ ├── mad_hi_short4.cl │ │ ├── mad_hi_uchar.cl │ │ ├── mad_hi_uchar4.cl │ │ ├── mad_hi_uint.cl │ │ ├── mad_hi_uint4.cl │ │ ├── mad_hi_ulong.cl │ │ ├── mad_hi_ulong4.cl │ │ ├── mad_hi_ushort.cl │ │ └── mad_hi_ushort4.cl │ ├── mad_sat │ │ ├── mad_sat_char.ll │ │ ├── mad_sat_char2.ll │ │ ├── mad_sat_hack_clamp_char.ll │ │ ├── mad_sat_hack_clamp_char2.ll │ │ ├── mad_sat_hack_clamp_int.ll │ │ ├── mad_sat_hack_clamp_int2.ll │ │ ├── mad_sat_hack_clamp_long.ll │ │ ├── mad_sat_hack_clamp_long2.ll │ │ ├── mad_sat_hack_clamp_short.ll │ │ ├── mad_sat_hack_clamp_short2.ll │ │ ├── mad_sat_hack_clamp_test_gen.cpp │ │ ├── mad_sat_hack_clamp_uchar.ll │ │ ├── mad_sat_hack_clamp_uchar2.ll │ │ ├── mad_sat_hack_clamp_uint.ll │ │ ├── mad_sat_hack_clamp_uint2.ll │ │ ├── mad_sat_hack_clamp_ulong.ll │ │ ├── mad_sat_hack_clamp_ulong2.ll │ │ ├── mad_sat_hack_clamp_ushort.ll │ │ ├── mad_sat_hack_clamp_ushort2.ll │ │ ├── mad_sat_int.ll │ │ ├── mad_sat_int2.ll │ │ ├── mad_sat_long.ll │ │ ├── mad_sat_long2.ll │ │ ├── mad_sat_short.ll │ │ ├── mad_sat_short2.ll │ │ ├── mad_sat_test_gen.cpp │ │ ├── mad_sat_uchar.ll │ │ ├── mad_sat_uchar2.ll │ │ ├── mad_sat_uint.ll │ │ ├── mad_sat_uint2.ll │ │ ├── mad_sat_ulong.ll │ │ ├── mad_sat_ulong2.ll │ │ ├── mad_sat_ushort.ll │ │ └── mad_sat_ushort2.ll │ ├── max │ │ ├── max_char.cl │ │ ├── max_char2.cl │ │ ├── max_char3.cl │ │ ├── max_char3_novec3.cl │ │ ├── max_char4.cl │ │ ├── max_int.cl │ │ ├── max_int2.cl │ │ ├── max_int3.cl │ │ ├── max_int3_novec3.cl │ │ ├── max_int4.cl │ │ ├── max_int8.cl │ │ ├── max_long.cl │ │ ├── max_long2.cl │ │ ├── max_long3.cl │ │ ├── max_long3_novec3.cl │ │ ├── max_long4.cl │ │ ├── max_short.cl │ │ ├── max_short2.cl │ │ ├── max_short3.cl │ │ ├── max_short3_novec3.cl │ │ ├── max_short4.cl │ │ ├── max_uchar.cl │ │ ├── max_uchar2.cl │ │ ├── max_uchar3.cl │ │ ├── max_uchar3_novec3.cl │ │ ├── max_uchar4.cl │ │ ├── max_uint.cl │ │ ├── max_uint2.cl │ │ ├── max_uint3.cl │ │ ├── max_uint3_novec3.cl │ │ ├── max_uint4.cl │ │ ├── max_ulong.cl │ │ ├── max_ulong2.cl │ │ ├── max_ulong3.cl │ │ ├── max_ulong3_novec3.cl │ │ ├── max_ulong4.cl │ │ ├── max_ushort.cl │ │ ├── max_ushort2.cl │ │ ├── max_ushort3.cl │ │ ├── max_ushort3_novec3.cl │ │ ├── max_ushort4.cl │ │ └── max_ushort8.cl │ ├── min │ │ ├── min_char.cl │ │ ├── min_char2.cl │ │ ├── min_char3.cl │ │ ├── min_char3_novec3.cl │ │ ├── min_char4.cl │ │ ├── min_int.cl │ │ ├── min_int2.cl │ │ ├── min_int3.cl │ │ ├── min_int3_novec3.cl │ │ ├── min_int4.cl │ │ ├── min_long.cl │ │ ├── min_long2.cl │ │ ├── min_long3.cl │ │ ├── min_long3_novec3.cl │ │ ├── min_long4.cl │ │ ├── min_short.cl │ │ ├── min_short2.cl │ │ ├── min_short3.cl │ │ ├── min_short3_novec3.cl │ │ ├── min_short4.cl │ │ ├── min_uchar.cl │ │ ├── min_uchar2.cl │ │ ├── min_uchar3.cl │ │ ├── min_uchar3_novec3.cl │ │ ├── min_uchar4.cl │ │ ├── min_uint.cl │ │ ├── min_uint2.cl │ │ ├── min_uint3.cl │ │ ├── min_uint3_novec3.cl │ │ ├── min_uint4.cl │ │ ├── min_ulong.cl │ │ ├── min_ulong2.cl │ │ ├── min_ulong3.cl │ │ ├── min_ulong3_novec3.cl │ │ ├── min_ulong4.cl │ │ ├── min_ushort.cl │ │ ├── min_ushort2.cl │ │ ├── min_ushort3.cl │ │ ├── min_ushort3_novec3.cl │ │ └── min_ushort4.cl │ ├── mul_hi │ │ ├── mul_hi_all_overloads.cl │ │ ├── mul_hi_all_overloads_novec3.cl │ │ ├── mul_hi_char.cl │ │ ├── mul_hi_char4.cl │ │ ├── mul_hi_int.cl │ │ ├── mul_hi_int4.cl │ │ ├── mul_hi_long.cl │ │ ├── mul_hi_long4.cl │ │ ├── mul_hi_short.cl │ │ ├── mul_hi_short4.cl │ │ ├── mul_hi_uchar.cl │ │ ├── mul_hi_uchar4.cl │ │ ├── mul_hi_uint.cl │ │ ├── mul_hi_uint4.cl │ │ ├── mul_hi_ulong.cl │ │ ├── mul_hi_ulong4.cl │ │ ├── mul_hi_ushort.cl │ │ └── mul_hi_ushort4.cl │ ├── popcount │ │ ├── char2_popcount.cl │ │ ├── char3_popcount.cl │ │ ├── char3_popcount_novec3.cl │ │ ├── char4_popcount.cl │ │ ├── char_popcount.cl │ │ ├── int2_popcount.cl │ │ ├── int3_popcount.cl │ │ ├── int3_popcount_novec3.cl │ │ ├── int4_popcount.cl │ │ ├── int_popcount.cl │ │ ├── long2_popcount.cl │ │ ├── long3_popcount.cl │ │ ├── long3_popcount_novec3.cl │ │ ├── long4_popcount.cl │ │ ├── long_popcount.cl │ │ ├── short2_popcount.cl │ │ ├── short3_popcount.cl │ │ ├── short3_popcount_novec3.cl │ │ ├── short4_popcount.cl │ │ ├── short_popcount.cl │ │ ├── uchar2_popcount.cl │ │ ├── uchar3_popcount.cl │ │ ├── uchar3_popcount_novec3.cl │ │ ├── uchar4_popcount.cl │ │ ├── uchar_popcount.cl │ │ ├── uint2_popcount.cl │ │ ├── uint3_popcount.cl │ │ ├── uint3_popcount_novec3.cl │ │ ├── uint4_popcount.cl │ │ ├── uint_popcount.cl │ │ ├── ulong2_popcount.cl │ │ ├── ulong3_popcount.cl │ │ ├── ulong3_popcount_novec3.cl │ │ ├── ulong4_popcount.cl │ │ ├── ulong_popcount.cl │ │ ├── ushort2_popcount.cl │ │ ├── ushort3_popcount.cl │ │ ├── ushort3_popcount_novec3.cl │ │ ├── ushort4_popcount.cl │ │ └── ushort_popcount.cl │ ├── rotate │ │ ├── rotate_uchar.cl │ │ ├── rotate_uchar2.cl │ │ ├── rotate_uchar3.cl │ │ ├── rotate_uchar3.ll │ │ ├── rotate_uchar4.cl │ │ ├── rotate_uchar_0.cl │ │ ├── rotate_uchar_2.cl │ │ ├── rotate_uchar_64.cl │ │ ├── rotate_uint.cl │ │ ├── rotate_uint2.cl │ │ ├── rotate_uint3.cl │ │ ├── rotate_uint3.ll │ │ ├── rotate_uint4.cl │ │ ├── rotate_ulong.cl │ │ ├── rotate_ulong2.cl │ │ ├── rotate_ulong3.cl │ │ ├── rotate_ulong3.ll │ │ ├── rotate_ulong4.cl │ │ ├── rotate_ushort.cl │ │ ├── rotate_ushort2.cl │ │ ├── rotate_ushort3.cl │ │ ├── rotate_ushort3.ll │ │ └── rotate_ushort4.cl │ ├── sub_sat │ │ ├── sub_sat_char.ll │ │ ├── sub_sat_char2.ll │ │ ├── sub_sat_char3.ll │ │ ├── sub_sat_char4.ll │ │ ├── sub_sat_hack_clamp_char.ll │ │ ├── sub_sat_hack_clamp_char2.ll │ │ ├── sub_sat_hack_clamp_char3.ll │ │ ├── sub_sat_hack_clamp_char4.ll │ │ ├── sub_sat_hack_clamp_int.ll │ │ ├── sub_sat_hack_clamp_int2.ll │ │ ├── sub_sat_hack_clamp_int3.ll │ │ ├── sub_sat_hack_clamp_int4.ll │ │ ├── sub_sat_hack_clamp_long.ll │ │ ├── sub_sat_hack_clamp_long2.ll │ │ ├── sub_sat_hack_clamp_long3.ll │ │ ├── sub_sat_hack_clamp_long4.ll │ │ ├── sub_sat_hack_clamp_short.ll │ │ ├── sub_sat_hack_clamp_short2.ll │ │ ├── sub_sat_hack_clamp_short3.ll │ │ ├── sub_sat_hack_clamp_short4.ll │ │ ├── sub_sat_hack_clamp_test_gen.cpp │ │ ├── sub_sat_hack_clamp_uchar.ll │ │ ├── sub_sat_hack_clamp_uchar2.ll │ │ ├── sub_sat_hack_clamp_uchar3.ll │ │ ├── sub_sat_hack_clamp_uchar4.ll │ │ ├── sub_sat_hack_clamp_uint.ll │ │ ├── sub_sat_hack_clamp_uint2.ll │ │ ├── sub_sat_hack_clamp_uint3.ll │ │ ├── sub_sat_hack_clamp_uint4.ll │ │ ├── sub_sat_hack_clamp_ulong.ll │ │ ├── sub_sat_hack_clamp_ulong2.ll │ │ ├── sub_sat_hack_clamp_ulong3.ll │ │ ├── sub_sat_hack_clamp_ulong4.ll │ │ ├── sub_sat_hack_clamp_ushort.ll │ │ ├── sub_sat_hack_clamp_ushort2.ll │ │ ├── sub_sat_hack_clamp_ushort3.ll │ │ ├── sub_sat_hack_clamp_ushort4.ll │ │ ├── sub_sat_int.ll │ │ ├── sub_sat_int2.ll │ │ ├── sub_sat_int3.ll │ │ ├── sub_sat_int4.ll │ │ ├── sub_sat_long.ll │ │ ├── sub_sat_long2.ll │ │ ├── sub_sat_long3.ll │ │ ├── sub_sat_long4.ll │ │ ├── sub_sat_short.ll │ │ ├── sub_sat_short2.ll │ │ ├── sub_sat_short3.ll │ │ ├── sub_sat_short4.ll │ │ ├── sub_sat_test_gen.cpp │ │ ├── sub_sat_uchar.ll │ │ ├── sub_sat_uchar2.ll │ │ ├── sub_sat_uchar3.ll │ │ ├── sub_sat_uchar4.ll │ │ ├── sub_sat_uint.ll │ │ ├── sub_sat_uint2.ll │ │ ├── sub_sat_uint3.ll │ │ ├── sub_sat_uint4.ll │ │ ├── sub_sat_ulong.ll │ │ ├── sub_sat_ulong2.ll │ │ ├── sub_sat_ulong3.ll │ │ ├── sub_sat_ulong4.ll │ │ ├── sub_sat_ushort.ll │ │ ├── sub_sat_ushort2.ll │ │ ├── sub_sat_ushort3.ll │ │ └── sub_sat_ushort4.ll │ ├── uint2_mad24.cl │ ├── uint2_mul24.cl │ ├── uint3_mad24.cl │ ├── uint3_mad24_novec3.cl │ ├── uint3_mul24.cl │ ├── uint3_mul24_novec3.cl │ ├── uint4_mad24.cl │ ├── uint4_mul24.cl │ ├── uint_mad24.cl │ ├── uint_mul24.cl │ └── upsample │ │ ├── upsample_char.cl │ │ ├── upsample_char2.cl │ │ ├── upsample_char3.cl │ │ ├── upsample_char4.cl │ │ ├── upsample_int.cl │ │ ├── upsample_int2.cl │ │ ├── upsample_int3.cl │ │ ├── upsample_int4.cl │ │ ├── upsample_short.cl │ │ ├── upsample_short2.cl │ │ ├── upsample_short3.cl │ │ └── upsample_short4.cl ├── IntegerDot │ ├── dot_acc_sat_packed_ss.cl │ ├── dot_acc_sat_packed_su.cl │ ├── dot_acc_sat_packed_us.cl │ ├── dot_acc_sat_packed_uu.cl │ ├── dot_acc_sat_ss.cl │ ├── dot_acc_sat_su.cl │ ├── dot_acc_sat_us.cl │ ├── dot_acc_sat_uu.cl │ ├── dot_acc_sat_uu_no_int8.cl │ ├── dot_packed_ss.cl │ ├── dot_packed_su.cl │ ├── dot_packed_us.cl │ ├── dot_packed_uu.cl │ ├── dot_ss.cl │ ├── dot_ss_no_int8.cl │ ├── dot_su.cl │ ├── dot_us.cl │ └── dot_uu.cl ├── KernelArgInfo │ ├── kernel-arg-info-physical-storage-buffers.cl │ ├── kernel-arg-info-unused-no-cluster-pod-args.cl │ ├── kernel-arg-info-unused.cl │ ├── kernel-arg-info.cl │ ├── kernel-arg-info.ll │ ├── unused-arg-changed-order.cl │ └── unused-intptr_t.cl ├── LLVMIntrinsics │ ├── assume.ll │ ├── bswap │ │ ├── bswap_i16.ll │ │ ├── bswap_i32.ll │ │ ├── bswap_i64.ll │ │ ├── bswap_v2i16.ll │ │ ├── bswap_v2i32.ll │ │ └── bswap_v2i64.ll │ ├── descend_into_array.cl │ ├── fshl.ll │ ├── fshr.ll │ ├── issue-1109.ll │ ├── issue-1173.cl │ ├── issue-1173.ll │ ├── lifetime_start.cl │ ├── memcpy_bitcast_used_twice.cl │ ├── memcpy_from_constant.cl │ ├── memcpy_mismatched_dest_is_array.ll │ ├── memcpy_mismatched_src_is_array.ll │ ├── memcpy_opaque.ll │ ├── memset_null_many_copies.ll │ ├── memset_opaque.ll │ ├── memset_stray_bitcast.ll │ ├── smax.ll │ ├── smin.ll │ ├── umax.ll │ ├── umin.ll │ └── unreachable.ll ├── LogicalPtrToInt │ ├── compare_local_ptr.cl │ ├── compare_local_ptr.ll │ ├── disallow_inttoptr.cl │ ├── function_inlining.ll │ ├── geps.ll │ ├── local_args_ptrtoint.cl │ ├── local_ptrtoint_32.cl │ ├── local_ptrtoint_64.cl │ └── private_ptrtoint.cl ├── LongVectorLowering │ ├── Frontend │ │ ├── lowering_disabled_function_body.cl │ │ ├── lowering_disabled_function_param_array.cl │ │ ├── lowering_disabled_function_param_pointer.cl │ │ ├── lowering_disabled_function_param_scalar.cl │ │ ├── lowering_disabled_function_param_struct.cl │ │ ├── lowering_disabled_kernel_param_pointer.cl │ │ ├── lowering_enabled_function_param_array.cl │ │ ├── lowering_enabled_function_param_pointer.cl │ │ ├── lowering_enabled_function_param_scalar.cl │ │ ├── lowering_enabled_function_param_struct.cl │ │ ├── lowering_enabled_kernel_param_array.cl │ │ ├── lowering_enabled_kernel_param_pointer.cl │ │ ├── lowering_enabled_kernel_param_scalar.cl │ │ └── lowering_enabled_kernel_param_struct.cl │ ├── abs.ll │ ├── abs2.ll │ ├── add.ll │ ├── add_sat.ll │ ├── and.ll │ ├── atan.ll │ ├── atan2.ll │ ├── bitcast.ll │ ├── bitselect_float8.ll │ ├── builtinfunctions.cl │ ├── char_struct_ssbo.cl │ ├── clamp.ll │ ├── clspv_fract.ll │ ├── cluster_pod_args_offsets.cl │ ├── clz.ll │ ├── codependent.ll │ ├── constant_vector.ll │ ├── constants.ll │ ├── constgep.ll │ ├── ctz.ll │ ├── degrees.ll │ ├── elements.ll │ ├── fadd.ll │ ├── fastmathflags.ll │ ├── fdiv.ll │ ├── floor.ll │ ├── fmuladd.ll │ ├── fract.ll │ ├── frem.ll │ ├── function.ll │ ├── gep.ll │ ├── globals.ll │ ├── half_sqrt.ll │ ├── icmp.ll │ ├── issue-1155.cl │ ├── ldexp.ll │ ├── lshr.ll │ ├── mad-float-optimization.ll │ ├── memory.ll │ ├── min.ll │ ├── minf.ll │ ├── mix.ll │ ├── multiple_opspirv.ll │ ├── native_exp.ll │ ├── opaque_alloca.ll │ ├── opaque_constgep.ll │ ├── opaque_fract.ll │ ├── opaque_frexp.ll │ ├── opaque_gep.ll │ ├── opaque_global_gep.ll │ ├── opaque_global_load.ll │ ├── opaque_global_store.ll │ ├── opaque_load.ll │ ├── opaque_store.ll │ ├── opspirv_struct_return.ll │ ├── padded_struct.ll │ ├── phi.cl │ ├── phi.ll │ ├── pod_kernel_args.cl │ ├── popcount.ll │ ├── ptrtoint.ll │ ├── radians.ll │ ├── rotate.ll │ ├── rsqrt.ll │ ├── select1.ll │ ├── select2.ll │ ├── shufflevector │ │ ├── shufflevector1.ll │ │ ├── shufflevector2.ll │ │ ├── shufflevector3.ll │ │ ├── shufflevector4.ll │ │ ├── shufflevector5.ll │ │ ├── shufflevector6.ll │ │ └── shufflevector7.ll │ ├── sign.ll │ ├── smax.ll │ ├── smoothstep.ll │ ├── sqrt.ll │ ├── step.ll │ ├── stepf.ll │ ├── struct.cl │ ├── struct.ll │ ├── sub_sat.ll │ ├── uadd_sat.ll │ ├── umax.ll │ ├── usub_sat.ll │ ├── variable_index_vector_extract.ll │ └── variable_index_vector_insert.ll ├── MathBuiltins │ ├── acos │ │ ├── float2_acos.cl │ │ ├── float2_acosh.cl │ │ ├── float2_acospi.cl │ │ ├── float3_acos.cl │ │ ├── float3_acos_novec3.cl │ │ ├── float3_acosh.cl │ │ ├── float3_acosh_novec3.cl │ │ ├── float3_acospi.cl │ │ ├── float4_acos.cl │ │ ├── float4_acosh.cl │ │ ├── float4_acospi.cl │ │ ├── float8_acos.cl │ │ ├── float8_acosh.cl │ │ ├── float_acos.cl │ │ ├── float_acosh.cl │ │ ├── float_acosh_use_native.cl │ │ └── float_acospi.cl │ ├── asin │ │ ├── float2_asin.cl │ │ ├── float2_asinh.cl │ │ ├── float2_asinpi.cl │ │ ├── float3_asin.cl │ │ ├── float3_asin_novec3.cl │ │ ├── float3_asinh.cl │ │ ├── float3_asinh_novec3.cl │ │ ├── float3_asinpi.cl │ │ ├── float4_asin.cl │ │ ├── float4_asinh.cl │ │ ├── float4_asinpi.cl │ │ ├── float8_asinh.cl │ │ ├── float_asin.cl │ │ ├── float_asinh.cl │ │ └── float_asinpi.cl │ ├── atan │ │ ├── float2_atan.cl │ │ ├── float2_atan2.cl │ │ ├── float2_atan2pi.cl │ │ ├── float2_atanh.cl │ │ ├── float2_atanpi.cl │ │ ├── float3_atan.cl │ │ ├── float3_atan2.cl │ │ ├── float3_atan2_novec3.cl │ │ ├── float3_atan2pi.cl │ │ ├── float3_atan_novec3.cl │ │ ├── float3_atanh.cl │ │ ├── float3_atanh_novec3.cl │ │ ├── float3_atanpi.cl │ │ ├── float4_atan.cl │ │ ├── float4_atan2.cl │ │ ├── float4_atan2pi.cl │ │ ├── float4_atanh.cl │ │ ├── float4_atanpi.cl │ │ ├── float8_atanh.cl │ │ ├── float_atan.cl │ │ ├── float_atan2.cl │ │ ├── float_atan2pi.cl │ │ ├── float_atan_use_native.cl │ │ ├── float_atanh.cl │ │ └── float_atanpi.cl │ ├── ceil │ │ ├── float2_ceil.cl │ │ ├── float3_ceil.cl │ │ ├── float3_ceil_novec3.cl │ │ ├── float4_ceil.cl │ │ ├── float8_ceil.cl │ │ └── float_ceil.cl │ ├── copysign │ │ ├── copysign_float.cl │ │ ├── copysign_float2.cl │ │ ├── copysign_float3.cl │ │ └── copysign_float4.cl │ ├── cos │ │ ├── float2_cos.cl │ │ ├── float2_cosh.cl │ │ ├── float2_half_cos.cl │ │ ├── float2_native_cos.cl │ │ ├── float3_cos.cl │ │ ├── float3_cos_novec3.cl │ │ ├── float3_cosh.cl │ │ ├── float3_cosh_novec3.cl │ │ ├── float3_half_cos.cl │ │ ├── float3_half_cos_novec3.cl │ │ ├── float3_native_cos.cl │ │ ├── float3_native_cos_novec3.cl │ │ ├── float4_cos.cl │ │ ├── float4_cosh.cl │ │ ├── float4_half_cos.cl │ │ ├── float4_native_cos.cl │ │ ├── float8_cos.cl │ │ ├── float_cos.cl │ │ ├── float_cosh.cl │ │ ├── float_half_cos.cl │ │ └── float_native_cos.cl │ ├── cospi │ │ ├── cospi_double2.ll │ │ ├── cospi_float.ll │ │ ├── cospi_float2.ll │ │ └── cospi_half.ll │ ├── divide │ │ ├── float2_half_divide.cl │ │ ├── float2_native_divide.cl │ │ ├── float3_half_divide.cl │ │ ├── float3_half_divide_novec3.cl │ │ ├── float3_native_divide.cl │ │ ├── float3_native_divide_novec3.cl │ │ ├── float4_half_divide.cl │ │ ├── float4_native_divide.cl │ │ ├── float_half_divide.cl │ │ └── float_native_divide.cl │ ├── erf │ │ ├── erf_float.cl │ │ └── erf_half.cl │ ├── erfc │ │ ├── erfc_float.cl │ │ └── erfc_half.cl │ ├── exp │ │ ├── float2_exp.cl │ │ ├── float2_exp10.cl │ │ ├── float2_exp2.cl │ │ ├── float2_half_exp.cl │ │ ├── float2_half_exp10.cl │ │ ├── float2_half_exp2.cl │ │ ├── float2_native_exp.cl │ │ ├── float2_native_exp10.cl │ │ ├── float2_native_exp2.cl │ │ ├── float3_exp.cl │ │ ├── float3_exp10.cl │ │ ├── float3_exp10_novec3.cl │ │ ├── float3_exp2.cl │ │ ├── float3_exp2_novec3.cl │ │ ├── float3_exp_novec3.cl │ │ ├── float3_half_exp.cl │ │ ├── float3_half_exp10.cl │ │ ├── float3_half_exp10_novec3.cl │ │ ├── float3_half_exp2.cl │ │ ├── float3_half_exp2_novec3.cl │ │ ├── float3_half_exp_novec3.cl │ │ ├── float3_native_exp.cl │ │ ├── float3_native_exp10.cl │ │ ├── float3_native_exp10_novec3.cl │ │ ├── float3_native_exp2.cl │ │ ├── float3_native_exp2_novec3.cl │ │ ├── float3_native_exp_novec3.cl │ │ ├── float4_exp.cl │ │ ├── float4_exp10.cl │ │ ├── float4_exp2.cl │ │ ├── float4_half_exp.cl │ │ ├── float4_half_exp10.cl │ │ ├── float4_half_exp2.cl │ │ ├── float4_native_exp.cl │ │ ├── float4_native_exp10.cl │ │ ├── float4_native_exp2.cl │ │ ├── float8_exp.cl │ │ ├── float8_exp2.cl │ │ ├── float_exp.cl │ │ ├── float_exp10.cl │ │ ├── float_exp2.cl │ │ ├── float_half_exp.cl │ │ ├── float_half_exp10.cl │ │ ├── float_half_exp2.cl │ │ ├── float_native_exp.cl │ │ ├── float_native_exp10.cl │ │ └── float_native_exp2.cl │ ├── expm1 │ │ ├── expm1_double2.ll │ │ ├── expm1_float.ll │ │ ├── expm1_float2.ll │ │ └── expm1_half.ll │ ├── fabs │ │ ├── float2_fabs.cl │ │ ├── float3_fabs.cl │ │ ├── float3_fabs_novec3.cl │ │ ├── float4_fabs.cl │ │ └── float_fabs.cl │ ├── fdim │ │ ├── fdim_double.ll │ │ ├── fdim_double2.ll │ │ ├── fdim_float.ll │ │ ├── fdim_float2.ll │ │ ├── fdim_half.ll │ │ └── fdim_half2.ll │ ├── floor │ │ ├── float2_floor.cl │ │ ├── float3_floor.cl │ │ ├── float3_floor_novec3.cl │ │ ├── float4_floor.cl │ │ ├── float8_floor.cl │ │ └── float_floor.cl │ ├── fma │ │ ├── float2_fma.cl │ │ ├── float3_fma.cl │ │ ├── float3_fma_novec3.cl │ │ ├── float4_fma.cl │ │ ├── float8_fma.cl │ │ └── float_fma.cl │ ├── fmax │ │ ├── float2_fmax.cl │ │ ├── float3_fmax.cl │ │ ├── float3_fmax_novec3.cl │ │ ├── float4_fmax.cl │ │ ├── float8_fmax.cl │ │ └── float_fmax.cl │ ├── fmin │ │ ├── float2_fmin.cl │ │ ├── float3_fmin.cl │ │ ├── float3_fmin_novec3.cl │ │ ├── float4_fmin.cl │ │ ├── float8_fmin.cl │ │ └── float_fmin.cl │ ├── fmod │ │ ├── float2_fmod.cl │ │ ├── float3_fmod.cl │ │ ├── float4_fmod.cl │ │ └── float_fmod.cl │ ├── fract │ │ ├── float2_fract_private.cl │ │ ├── float3_fract_private.cl │ │ ├── float4_fract_private.cl │ │ └── float_fract_private.cl │ ├── isfinite │ │ ├── isfinite_double.ll │ │ ├── isfinite_double2.ll │ │ ├── isfinite_double3.ll │ │ ├── isfinite_double4.ll │ │ ├── isfinite_float.ll │ │ ├── isfinite_float2.ll │ │ ├── isfinite_float3.ll │ │ ├── isfinite_float4.ll │ │ ├── isfinite_float8.ll │ │ ├── isfinite_half.ll │ │ ├── isfinite_half2.ll │ │ ├── isfinite_half3.ll │ │ └── isfinite_half4.ll │ ├── ldexp │ │ ├── float2_ldexp.cl │ │ ├── float3_ldexp.cl │ │ ├── float3_ldexp_novec3.cl │ │ ├── float4_ldexp.cl │ │ └── float_ldexp.cl │ ├── log │ │ ├── float2_half_log.cl │ │ ├── float2_half_log10.cl │ │ ├── float2_half_log2.cl │ │ ├── float2_log.cl │ │ ├── float2_log10.cl │ │ ├── float2_log1p.ll │ │ ├── float2_log2.cl │ │ ├── float2_native_log.cl │ │ ├── float2_native_log10.cl │ │ ├── float2_native_log2.cl │ │ ├── float3_half_log.cl │ │ ├── float3_half_log10.cl │ │ ├── float3_half_log10_novec3.cl │ │ ├── float3_half_log2.cl │ │ ├── float3_half_log2_novec3.cl │ │ ├── float3_half_log_novec3.cl │ │ ├── float3_log.cl │ │ ├── float3_log10.cl │ │ ├── float3_log10_novec3.cl │ │ ├── float3_log1p.ll │ │ ├── float3_log2.cl │ │ ├── float3_log2_novec3.cl │ │ ├── float3_log_novec3.cl │ │ ├── float3_native_log.cl │ │ ├── float3_native_log10.cl │ │ ├── float3_native_log10_novec3.cl │ │ ├── float3_native_log2.cl │ │ ├── float3_native_log2_novec3.cl │ │ ├── float3_native_log_novec3.cl │ │ ├── float4_half_log.cl │ │ ├── float4_half_log10.cl │ │ ├── float4_half_log2.cl │ │ ├── float4_log.cl │ │ ├── float4_log10.cl │ │ ├── float4_log1p.ll │ │ ├── float4_log2.cl │ │ ├── float4_native_log.cl │ │ ├── float4_native_log10.cl │ │ ├── float4_native_log2.cl │ │ ├── float8_log.cl │ │ ├── float_half_log.cl │ │ ├── float_half_log10.cl │ │ ├── float_half_log2.cl │ │ ├── float_log.cl │ │ ├── float_log10.cl │ │ ├── float_log1p.ll │ │ ├── float_log2.cl │ │ ├── float_native_log.cl │ │ ├── float_native_log10.cl │ │ └── float_native_log2.cl │ ├── mad │ │ ├── float2_mad.cl │ │ ├── float3_mad.cl │ │ ├── float3_mad_novec3.cl │ │ ├── float4_mad.cl │ │ ├── float_mad.cl │ │ ├── half2_mad.cl │ │ ├── half3_mad.cl │ │ ├── half3_mad_novec3.cl │ │ ├── half4_mad.cl │ │ └── half_mad.cl │ ├── pow │ │ ├── float2_half_powr.cl │ │ ├── float2_native_powr.cl │ │ ├── float2_pow.cl │ │ ├── float2_powr.cl │ │ ├── float3_half_powr.cl │ │ ├── float3_half_powr_novec3.cl │ │ ├── float3_native_powr.cl │ │ ├── float3_native_powr_novec3.cl │ │ ├── float3_pow.cl │ │ ├── float3_pow_novec3.cl │ │ ├── float3_powr.cl │ │ ├── float3_powr_novec3.cl │ │ ├── float4_half_powr.cl │ │ ├── float4_native_powr.cl │ │ ├── float4_pow.cl │ │ ├── float4_powr.cl │ │ ├── float8_pow.cl │ │ ├── float_half_powr.cl │ │ ├── float_native_powr.cl │ │ ├── float_pow.cl │ │ └── float_powr.cl │ ├── pown │ │ ├── pown_double2.ll │ │ ├── pown_float.ll │ │ ├── pown_float2.ll │ │ └── pown_half.ll │ ├── recip │ │ ├── float2_half_recip.cl │ │ ├── float2_native_recip.cl │ │ ├── float3_half_recip.cl │ │ ├── float3_half_recip_novec3.cl │ │ ├── float3_native_recip.cl │ │ ├── float3_native_recip_novec3.cl │ │ ├── float4_half_recip.cl │ │ ├── float4_native_recip.cl │ │ ├── float_half_recip.cl │ │ └── float_native_recip.cl │ ├── rint │ │ ├── float2_rint.cl │ │ ├── float3_rint.cl │ │ ├── float3_rint_novec3.cl │ │ ├── float4_rint.cl │ │ └── float_rint.cl │ ├── round │ │ ├── float2_round.cl │ │ ├── float3_round.cl │ │ ├── float3_round_novec3.cl │ │ ├── float4_round.cl │ │ └── float_round.cl │ ├── sin │ │ ├── float2_half_sin.cl │ │ ├── float2_native_sin.cl │ │ ├── float2_sin.cl │ │ ├── float2_sinh.cl │ │ ├── float3_half_sin.cl │ │ ├── float3_half_sin_novec3.cl │ │ ├── float3_native_sin.cl │ │ ├── float3_native_sin_novec3.cl │ │ ├── float3_sin.cl │ │ ├── float3_sin_novec3.cl │ │ ├── float3_sinh.cl │ │ ├── float3_sinh_novec3.cl │ │ ├── float4_half_sin.cl │ │ ├── float4_native_sin.cl │ │ ├── float4_sin.cl │ │ ├── float4_sinh.cl │ │ ├── float8_sin.cl │ │ ├── float8_sinh.cl │ │ ├── float_half_sin.cl │ │ ├── float_native_sin.cl │ │ ├── float_sin.cl │ │ └── float_sinh.cl │ ├── sincos │ │ ├── sincos_double2.ll │ │ ├── sincos_float.ll │ │ ├── sincos_float2.ll │ │ └── sincos_half.ll │ ├── sinpi │ │ ├── sinpi_double2.ll │ │ ├── sinpi_float.ll │ │ ├── sinpi_float2.ll │ │ └── sinpi_half.ll │ ├── sqrt │ │ ├── fixup.ll │ │ ├── float2_half_rsqrt.cl │ │ ├── float2_half_sqrt.cl │ │ ├── float2_native_rsqrt.cl │ │ ├── float2_native_sqrt.cl │ │ ├── float2_rsqrt.cl │ │ ├── float2_sqrt.cl │ │ ├── float3_half_rsqrt.cl │ │ ├── float3_half_rsqrt_novec3.cl │ │ ├── float3_half_sqrt.cl │ │ ├── float3_half_sqrt_novec3.cl │ │ ├── float3_native_rsqrt.cl │ │ ├── float3_native_rsqrt_novec3.cl │ │ ├── float3_native_sqrt.cl │ │ ├── float3_native_sqrt_novec3.cl │ │ ├── float3_rsqrt.cl │ │ ├── float3_rsqrt_novec3.cl │ │ ├── float3_sqrt.cl │ │ ├── float3_sqrt_novec3.cl │ │ ├── float4_half_rsqrt.cl │ │ ├── float4_half_sqrt.cl │ │ ├── float4_native_rsqrt.cl │ │ ├── float4_native_sqrt.cl │ │ ├── float4_rsqrt.cl │ │ ├── float4_sqrt.cl │ │ ├── float_half_rsqrt.cl │ │ ├── float_half_sqrt.cl │ │ ├── float_native_rsqrt.cl │ │ ├── float_native_sqrt.cl │ │ ├── float_rsqrt.cl │ │ ├── float_sqrt.cl │ │ └── float_sqrt_use_native.cl │ ├── tan │ │ ├── float2_half_tan.cl │ │ ├── float2_native_tan.cl │ │ ├── float2_tan.cl │ │ ├── float2_tanh.cl │ │ ├── float3_half_tan.cl │ │ ├── float3_half_tan_novec3.cl │ │ ├── float3_native_tan.cl │ │ ├── float3_native_tan_novec3.cl │ │ ├── float3_tan.cl │ │ ├── float3_tan_novec3.cl │ │ ├── float3_tanh.cl │ │ ├── float3_tanh_novec3.cl │ │ ├── float4_half_tan.cl │ │ ├── float4_native_tan.cl │ │ ├── float4_tan.cl │ │ ├── float4_tanh.cl │ │ ├── float8_tan.cl │ │ ├── float8_tanh.cl │ │ ├── float_half_tan.cl │ │ ├── float_native_tan.cl │ │ ├── float_tan.cl │ │ └── float_tanh.cl │ ├── tanpi │ │ ├── tanpi_double2.ll │ │ ├── tanpi_float.ll │ │ ├── tanpi_float2.ll │ │ └── tanpi_half.ll │ └── trunc │ │ ├── float2_trunc.cl │ │ ├── float3_trunc.cl │ │ ├── float3_trunc_novec3.cl │ │ ├── float4_trunc.cl │ │ ├── float8_trunc.cl │ │ └── float_trunc.cl ├── MultipleInputs │ ├── kernel.cl │ ├── kernel.cl2 │ ├── kernel.ll │ └── kernel.ll2 ├── NativeBuiltins │ ├── ConvertBuiltins │ │ ├── char │ │ │ ├── convert_char16_float16.cl │ │ │ ├── convert_char4_float4.cl │ │ │ ├── convert_char4_int4.cl │ │ │ ├── convert_char4_long4.cl │ │ │ ├── convert_char4_short4.cl │ │ │ ├── convert_char4_uint4.cl │ │ │ ├── convert_char4_ulong4.cl │ │ │ ├── convert_char4_ushort4.cl │ │ │ ├── convert_uchar4_float4.cl │ │ │ ├── convert_uchar4_int4.cl │ │ │ ├── convert_uchar4_long4.cl │ │ │ ├── convert_uchar4_short4.cl │ │ │ ├── convert_uchar4_uint4.cl │ │ │ ├── convert_uchar4_ulong4.cl │ │ │ └── convert_uchar4_ushort4.cl │ │ ├── float │ │ │ ├── convert_float4_char4.cl │ │ │ ├── convert_float4_int4.cl │ │ │ ├── convert_float4_long4.cl │ │ │ ├── convert_float4_relational.cl │ │ │ ├── convert_float4_short4.cl │ │ │ ├── convert_float4_uchar4.cl │ │ │ ├── convert_float4_uint4.cl │ │ │ ├── convert_float4_ulong4.cl │ │ │ ├── convert_float4_ushort4.cl │ │ │ └── convert_float8_int8.cl │ │ ├── int │ │ │ ├── convert_int4_char4.cl │ │ │ ├── convert_int4_float4.cl │ │ │ ├── convert_int4_long4.cl │ │ │ ├── convert_int4_short4.cl │ │ │ ├── convert_int4_uchar4.cl │ │ │ ├── convert_int4_ulong4.cl │ │ │ ├── convert_int4_ushort4.cl │ │ │ ├── convert_int8_short8.cl │ │ │ ├── convert_uint4_char4.cl │ │ │ ├── convert_uint4_float4.cl │ │ │ ├── convert_uint4_long4.cl │ │ │ ├── convert_uint4_short4.cl │ │ │ ├── convert_uint4_uchar4.cl │ │ │ ├── convert_uint4_ulong4.cl │ │ │ └── convert_uint4_ushort4.cl │ │ ├── long │ │ │ ├── convert_long4_char4.cl │ │ │ ├── convert_long4_float4.cl │ │ │ ├── convert_long4_int4.cl │ │ │ ├── convert_long4_short4.cl │ │ │ ├── convert_long4_uchar4.cl │ │ │ ├── convert_long4_uint4.cl │ │ │ ├── convert_long4_ushort4.cl │ │ │ ├── convert_ulong4_char4.cl │ │ │ ├── convert_ulong4_float4.cl │ │ │ ├── convert_ulong4_int4.cl │ │ │ ├── convert_ulong4_short4.cl │ │ │ ├── convert_ulong4_uchar4.cl │ │ │ ├── convert_ulong4_uint4.cl │ │ │ └── convert_ulong4_ushort4.cl │ │ └── short │ │ │ ├── convert_short4_char4.cl │ │ │ ├── convert_short4_float4.cl │ │ │ ├── convert_short4_int4.cl │ │ │ ├── convert_short4_long4.cl │ │ │ ├── convert_short4_uchar4.cl │ │ │ ├── convert_short4_uint4.cl │ │ │ ├── convert_short4_ulong4.cl │ │ │ ├── convert_short8_int8.cl │ │ │ ├── convert_ushort4_char4.cl │ │ │ ├── convert_ushort4_float4.cl │ │ │ ├── convert_ushort4_int4.cl │ │ │ ├── convert_ushort4_long4.cl │ │ │ ├── convert_ushort4_uchar4.cl │ │ │ ├── convert_ushort4_uint4.cl │ │ │ └── convert_ushort4_ulong4.cl │ └── MathBuiltins │ │ ├── acos │ │ ├── float2_acos.cl │ │ ├── float2_acospi.cl │ │ ├── float3_acos.cl │ │ ├── float3_acos_novec3.cl │ │ ├── float3_acospi.cl │ │ ├── float4_acos.cl │ │ ├── float4_acospi.cl │ │ ├── float8_acos.cl │ │ ├── float_acos.cl │ │ └── float_acospi.cl │ │ ├── asin │ │ ├── float2_asin.cl │ │ ├── float2_asinpi.cl │ │ ├── float3_asin.cl │ │ ├── float3_asin_novec3.cl │ │ ├── float3_asinpi.cl │ │ ├── float4_asin.cl │ │ ├── float4_asinpi.cl │ │ ├── float_asin.cl │ │ └── float_asinpi.cl │ │ ├── cos │ │ ├── float2_cos.cl │ │ ├── float2_cosh.cl │ │ ├── float2_half_cos.cl │ │ ├── float3_cos.cl │ │ ├── float3_cos_novec3.cl │ │ ├── float3_cosh.cl │ │ ├── float3_cosh_novec3.cl │ │ ├── float3_half_cos.cl │ │ ├── float3_half_cos_novec3.cl │ │ ├── float4_cos.cl │ │ ├── float4_cosh.cl │ │ ├── float4_half_cos.cl │ │ ├── float8_cos.cl │ │ ├── float_cos.cl │ │ ├── float_cosh.cl │ │ └── float_half_cos.cl │ │ ├── divide │ │ └── float3_half_divide_novec3.cl │ │ ├── exp │ │ ├── float2_exp.cl │ │ ├── float2_exp10.cl │ │ ├── float2_exp2.cl │ │ ├── float3_exp.cl │ │ ├── float3_exp10.cl │ │ ├── float3_exp10_novec3.cl │ │ ├── float3_exp2.cl │ │ ├── float3_exp2_novec3.cl │ │ ├── float3_exp_novec3.cl │ │ ├── float4_exp.cl │ │ ├── float4_exp10.cl │ │ ├── float4_exp2.cl │ │ ├── float8_exp.cl │ │ ├── float8_exp2.cl │ │ ├── float_exp.cl │ │ ├── float_exp10.cl │ │ └── float_exp2.cl │ │ ├── fabs │ │ ├── float2_fabs.cl │ │ ├── float3_fabs.cl │ │ ├── float3_fabs_novec3.cl │ │ ├── float4_fabs.cl │ │ └── float_fabs.cl │ │ ├── log │ │ ├── float2_log.cl │ │ ├── float2_log10.cl │ │ ├── float2_log2.cl │ │ ├── float3_log.cl │ │ ├── float3_log10.cl │ │ ├── float3_log10_novec3.cl │ │ ├── float3_log2.cl │ │ ├── float3_log2_novec3.cl │ │ ├── float3_log_novec3.cl │ │ ├── float4_log.cl │ │ ├── float4_log10.cl │ │ ├── float4_log2.cl │ │ ├── float8_log.cl │ │ ├── float_log.cl │ │ ├── float_log10.cl │ │ └── float_log2.cl │ │ ├── pow │ │ ├── float2_half_powr.cl │ │ ├── float2_pow.cl │ │ ├── float2_powr.cl │ │ ├── float3_half_powr.cl │ │ ├── float3_half_powr_novec3.cl │ │ ├── float3_pow.cl │ │ ├── float3_pow_novec3.cl │ │ ├── float3_powr.cl │ │ ├── float3_powr_novec3.cl │ │ ├── float4_half_powr.cl │ │ ├── float4_pow.cl │ │ ├── float4_powr.cl │ │ ├── float8_pow.cl │ │ ├── float_half_powr.cl │ │ ├── float_pow.cl │ │ └── float_powr.cl │ │ ├── sin │ │ ├── float2_half_sin.cl │ │ ├── float2_sin.cl │ │ ├── float2_sinh.cl │ │ ├── float3_half_sin.cl │ │ ├── float3_half_sin_novec3.cl │ │ ├── float3_sin.cl │ │ ├── float3_sin_novec3.cl │ │ ├── float3_sinh.cl │ │ ├── float3_sinh_novec3.cl │ │ ├── float4_half_sin.cl │ │ ├── float4_sin.cl │ │ ├── float4_sinh.cl │ │ ├── float8_sin.cl │ │ ├── float8_sinh.cl │ │ ├── float_half_sin.cl │ │ ├── float_sin.cl │ │ └── float_sinh.cl │ │ └── tan │ │ ├── float2_half_tan.cl │ │ ├── float2_tan.cl │ │ ├── float3_half_tan.cl │ │ ├── float3_half_tan_novec3.cl │ │ ├── float3_tan.cl │ │ ├── float3_tan_novec3.cl │ │ ├── float4_half_tan.cl │ │ ├── float4_tan.cl │ │ ├── float8_tan.cl │ │ ├── float_half_tan.cl │ │ └── float_tan.cl ├── NormalizeGlobalVariables │ ├── cluster_constants.ll │ ├── cluster_constants_alignment.ll │ ├── cluster_constants_opaque.ll │ ├── cluster_constants_phi.ll │ ├── cluster_constants_phi_physical_storage_buffers.ll │ ├── constant_bitcast.cl │ ├── different_geometry.ll │ ├── different_geometry_opaque.ll │ ├── mismatched_depths.ll │ ├── mismatched_depths_opaque.ll │ ├── multiple_uses.ll │ ├── multiple_uses2.ll │ └── multiple_uses_opaque.ll ├── PhysicalStorageBuffers │ ├── issue-1098.cl │ ├── issue-1422.cl │ ├── parameter_attributes.ll │ ├── physical_constant_module_scope.cl │ ├── physical_constant_pointer_args.cl │ ├── physical_constant_ptrtoint.cl │ ├── physical_dead_const_global.cl │ ├── physical_global_exclude_image.cl │ ├── physical_global_pointer_args.cl │ ├── physical_global_pointer_args.ll │ ├── physical_global_ptrtoint.cl │ ├── physical_pointers_no_nonuniform.cl │ └── physical_pointers_spir64_only.cl ├── PointerAccessChains │ ├── pointer_array_stride_16.cl │ ├── pointer_array_stride_32.cl │ ├── pointer_deref.cl │ ├── pointer_index_in_called_function.cl │ ├── pointer_index_is_constant_0.cl │ └── pointer_index_is_constant_1.cl ├── PointerCasts │ ├── 1292-phi_users.ll │ ├── deref_load_cast_float2_to_int4.cl │ ├── deref_load_cast_float4_to_int2.cl │ ├── deref_store_cast_int4_to_float2.cl │ ├── fake_cast.ll │ ├── implicit_gep_atomics.ll │ ├── inline_func_with_pointer_bitcast_as_argument.cl │ ├── inline_implicit_cast_through_function.ll │ ├── invalid_gep_from_gep.ll │ ├── issue-1032.cl │ ├── issue-1120.cl │ ├── issue-1122.ll │ ├── issue-1166.2.ll │ ├── issue-1166.cl │ ├── issue-1166.ll │ ├── issue-1171.cl │ ├── issue-1174.cl │ ├── issue-1176.cl │ ├── issue-1177.cl │ ├── issue-1178.cl │ ├── issue-1179.cl │ ├── issue-1180.ll │ ├── issue-1184.cl │ ├── issue-1185.cl │ ├── issue-1187.ll │ ├── issue-1192.ll │ ├── issue-1196.ll │ ├── issue-1197-2.ll │ ├── issue-1197.ll │ ├── issue-1204.ll │ ├── issue-1221-2.ll │ ├── issue-1221.ll │ ├── issue-1222-2.ll │ ├── issue-1222-3.ll │ ├── issue-1222-4.ll │ ├── issue-1222.ll │ ├── issue-1225.ll │ ├── issue-1243.ll │ ├── issue-1318.ll │ ├── issue-1322.ll │ ├── issue-1392.cl │ ├── issue-1473.cl │ ├── issue-1473.ll │ ├── issue-551.ll │ ├── load-i16-from-i32-gep.ll │ ├── multiple_implcit_casts.ll │ ├── non_pointer_cast.ll │ ├── opaque_canonical_pointer.ll │ ├── opaque_cast_and_no_cast.ll │ ├── opaque_clspv_vloada_half4_global.ll │ ├── opaque_clspv_vloada_half4_local.ll │ ├── opaque_deref_load_cast_float2_to_int4.ll │ ├── opaque_deref_load_cast_float4_to_int2.ll │ ├── opaque_deref_store_cast_int2_to_float4.ll │ ├── opaque_deref_store_cast_int4_to_float2.ll │ ├── opaque_different_casts_same_source.ll │ ├── opaque_implicit_gep.cl │ ├── opaque_implicit_gep.ll │ ├── opaque_implicit_gep_nested_struct.ll │ ├── opaque_implicit_gep_vector.ll │ ├── opaque_inline_func_with_pointer_cast_as_argument.ll │ ├── opaque_issue-551.ll │ ├── opaque_load_cast_array_of_array_int_to_long.ll │ ├── opaque_load_cast_array_of_array_local.ll │ ├── opaque_load_cast_of_array.ll │ ├── opaque_load_store_struct_i64_1.ll │ ├── opaque_load_store_struct_i64_2.ll │ ├── opaque_load_store_struct_i64_3.ll │ ├── opaque_load_store_struct_i64_4.ll │ ├── opaque_single_array_cast.ll │ ├── opaque_store_cast_array_of_array.ll │ ├── opaque_store_cast_array_of_array_int_to_long.ll │ ├── opaque_store_cast_array_of_array_local.ll │ ├── opaque_trivial_casts.ll │ ├── opaque_vload_half2_pointer_cast_from_float4.ll │ ├── opaque_vstore_half4_pointer_cast_to_float4.ll │ ├── phi-from-gep.ll │ ├── phi-uint-uint4.cl │ ├── select.ll │ ├── simplify_gep_from_gep.ll │ ├── srcEQdst │ │ ├── load_cast_char4_to_half2.ll │ │ ├── load_cast_float2_to_int2.cl │ │ ├── load_cast_float3_to_int3.cl │ │ ├── load_cast_float3_to_uint3.cl │ │ ├── load_cast_float4_to_int4.cl │ │ ├── load_cast_float_to_int.cl │ │ ├── load_cast_half2_to_char4.ll │ │ ├── load_cast_half4_to_char8.ll │ │ ├── load_cast_half8_to_int4.ll │ │ ├── load_cast_half8_to_short8.ll │ │ ├── load_cast_int4_to_float4.cl │ │ ├── store_cast_char4_to_half2.ll │ │ ├── store_cast_float2_to_int2.cl │ │ ├── store_cast_float3_to_int3.cl │ │ ├── store_cast_float3_to_uint3.cl │ │ ├── store_cast_float4_to_int4.cl │ │ ├── store_cast_float_to_int.cl │ │ ├── store_cast_half2_to_char4.ll │ │ ├── store_cast_half4_to_char8.ll │ │ ├── store_cast_half8_to_int4.ll │ │ ├── store_cast_half8_to_short8.ll │ │ ├── store_cast_int4_to_float4.cl │ │ ├── store_cast_int_to_float.cl │ │ └── store_char4_and_int.ll │ ├── srcGTdst │ │ ├── load_cast_array15_char_to_int.ll │ │ ├── load_cast_char8_to_short.ll │ │ ├── load_cast_float2_to_float.ll │ │ ├── load_cast_float2_to_half.ll │ │ ├── load_cast_float2_to_half2.ll │ │ ├── load_cast_float2_to_int.ll │ │ ├── load_cast_float4_to_char.ll │ │ ├── load_cast_float4_to_char2.ll │ │ ├── load_cast_float4_to_char3.ll │ │ ├── load_cast_float4_to_char8.ll │ │ ├── load_cast_float4_to_float.ll │ │ ├── load_cast_float4_to_float2.ll │ │ ├── load_cast_float4_to_int.ll │ │ ├── load_cast_float4_to_int2.ll │ │ ├── load_cast_float4_to_long.ll │ │ ├── load_cast_half8_to_int2.ll │ │ ├── load_cast_half8_to_int3.ll │ │ ├── load_cast_int2_to_short2.ll │ │ ├── load_cast_int4_to_float2.ll │ │ ├── load_cast_int4_to_short3.ll │ │ ├── load_cast_int8_to_short8.ll │ │ ├── load_cast_int_to_short.ll │ │ ├── load_cast_long4_to_char.ll │ │ ├── load_cast_long4_to_char2.ll │ │ ├── load_cast_long4_to_char3.ll │ │ ├── load_cast_long4_to_char8.ll │ │ ├── load_cast_long4_to_half8.ll │ │ ├── load_cast_long_to_short2.ll │ │ ├── load_cast_long_to_short3.ll │ │ ├── load_cast_struct_int3_to_int.ll │ │ ├── load_double_cast_float2_float_char2.ll │ │ ├── store_cast_complex_struct_to_char.ll │ │ ├── store_cast_float2_to_char2_alloca.ll │ │ ├── store_cast_float2_to_char2_argument.ll │ │ ├── store_cast_float2_to_char2_gep.ll │ │ ├── store_cast_float2_to_char2_global_variable.ll │ │ ├── store_cast_float2_to_float.ll │ │ ├── store_cast_float2_to_half2.ll │ │ ├── store_cast_float2_to_int.ll │ │ ├── store_cast_float4_to_float.ll │ │ ├── store_cast_float4_to_float2.ll │ │ ├── store_cast_float4_to_int.ll │ │ └── store_cast_float4_to_long.ll │ ├── srcLTdst │ │ ├── srcelemEQdstelem │ │ │ ├── load_cast_char2_to_half2.ll │ │ │ ├── load_cast_char2_to_half3.ll │ │ │ ├── load_cast_char2_to_half8.ll │ │ │ ├── load_cast_char_to_half2.ll │ │ │ ├── load_cast_float2_to_float4.ll │ │ │ ├── load_cast_float2_to_int4.ll │ │ │ ├── load_cast_float_to_float2.ll │ │ │ ├── load_cast_float_to_float4.ll │ │ │ ├── load_cast_float_to_int2.ll │ │ │ ├── load_cast_float_to_int4.ll │ │ │ ├── load_cast_half2_to_short4.ll │ │ │ ├── load_cast_half_to_short2.ll │ │ │ ├── load_cast_int2_to_float4.ll │ │ │ ├── load_cast_int2_to_int4.ll │ │ │ ├── load_cast_int_to_float4.ll │ │ │ ├── load_cast_short2_to_half4.ll │ │ │ ├── load_cast_short_to_half2.ll │ │ │ ├── store_cast_char2_to_half2.ll │ │ │ ├── store_cast_char2_to_half3.ll │ │ │ ├── store_cast_char2_to_half8.ll │ │ │ ├── store_cast_float2_to_float4.ll │ │ │ ├── store_cast_float2_to_int4.ll │ │ │ ├── store_cast_float_to_float2.ll │ │ │ ├── store_cast_float_to_float4.ll │ │ │ ├── store_cast_int_to_float2.ll │ │ │ └── store_cast_int_to_float4.ll │ │ ├── srcelemGTdstelem │ │ │ ├── load_cast_float2_to_half8.ll │ │ │ ├── load_cast_float_to_half3.ll │ │ │ ├── load_cast_float_to_half4.ll │ │ │ ├── load_cast_float_to_short3.ll │ │ │ ├── load_cast_float_to_short4.ll │ │ │ ├── load_cast_half2_to_char8.ll │ │ │ ├── load_cast_int2_to_half8.ll │ │ │ ├── load_cast_int2_to_short8.ll │ │ │ ├── load_cast_long_to_float3.ll │ │ │ ├── load_cast_long_to_float4.ll │ │ │ ├── store_cast_float2_to_half8.ll │ │ │ └── store_cast_float_to_short4.ll │ │ └── srcelemLTdstelem │ │ │ ├── load_cast_char2_to_float.ll │ │ │ ├── load_cast_char2_to_int2.ll │ │ │ ├── load_cast_char2_to_int3.ll │ │ │ ├── load_cast_char2_to_int8.ll │ │ │ ├── load_cast_char2_to_long.ll │ │ │ ├── load_cast_float2_to_long2.ll │ │ │ ├── load_cast_half2_to_float2.ll │ │ │ ├── load_cast_half2_to_int2.ll │ │ │ ├── load_cast_half2_to_int3.ll │ │ │ ├── load_cast_half2_to_int8.ll │ │ │ ├── load_cast_half2_to_long.ll │ │ │ ├── load_cast_half8_to_long4.ll │ │ │ ├── load_cast_half_to_float2.ll │ │ │ ├── load_cast_half_to_int2.ll │ │ │ ├── load_cast_half_to_int3.ll │ │ │ ├── load_cast_short2_to_float2.ll │ │ │ ├── store_cast_char_to_float.ll │ │ │ ├── store_cast_char_to_short.ll │ │ │ ├── store_cast_half2_to_int2.ll │ │ │ ├── store_cast_half2_to_int3.ll │ │ │ ├── store_cast_half2_to_int8.ll │ │ │ ├── store_cast_half8_to_long4.ll │ │ │ ├── store_cast_half_to_int.ll │ │ │ ├── store_cast_int_to_long.ll │ │ │ ├── store_cast_short_to_float.ll │ │ │ └── store_cast_short_to_int4.ll │ ├── store-zeroinitializer.ll │ ├── store_local.ll │ ├── unneeded_indices.ll │ ├── upgradable_cst_casts.ll │ └── upgradeable_from_phi.ll ├── Preprocessor │ ├── AnotherIncludeDirectory │ │ └── AnotherHeader.h │ ├── LocalInclude.cl │ ├── SomeIncludeDirectory │ │ └── SomeHeader.h │ ├── SystemInclude.cl │ ├── TwoSystemIncludes.cl │ ├── UserDefine.cl │ ├── UserDefineValue.cl │ ├── VULKAN.cl │ ├── __FAST_RELAXED_MATH__.cl │ ├── __OPENCL_C_VERSION__.cl │ └── __OPENCL_VERSION__.cl ├── Printf │ ├── printf.ll │ ├── printf_args.cl │ ├── printf_basic.cl │ ├── printf_buffer_info.cl │ ├── printf_negative.cl │ ├── printf_physical_buffer.cl │ ├── printf_pointer.ll │ ├── printf_pointer_64bit.ll │ ├── printf_ptr_to_char4_zero.ll │ ├── printf_string.cl │ ├── printf_string_64bit_ptr.ll │ ├── printf_string_only_null.ll │ ├── printf_string_with_null.ll │ └── printf_vector.cl ├── PrivatePointerPHI │ ├── complex_struct.ll │ ├── geps.ll │ ├── icmp.ll │ ├── icmp2.ll │ ├── if.ll │ ├── invalid-loop-canonicalization.cl │ ├── loop.ll │ ├── loop64.ll │ ├── loops.ll │ ├── ptrtoint.ll │ └── scalar-alloca.ll ├── ProgramScopeConstants │ ├── constant.cl │ ├── constant_array.cl │ ├── constant_array_with_function_call.cl │ ├── constant_array_with_function_call_module_constants_storage_buffer.cl │ ├── in_storage_buffer_descriptor_map.cl │ ├── in_storage_buffer_descriptor_map_arr_arr.cl │ ├── in_storage_buffer_descriptor_map_arr_vec3.cl │ ├── in_storage_buffer_descriptor_map_arr_vec3_novec3.cl │ ├── in_storage_buffer_descriptor_map_no_constants.cl │ └── select_between_constant_load.cl ├── PushConstant │ ├── add_to_interface.ll │ ├── arrays.cl │ ├── cluster_global_pod_args-arrays.ll │ ├── cluster_global_pod_args-int.ll │ ├── cluster_global_pod_args-scalars.ll │ ├── cluster_global_pod_args-short_array.ll │ ├── cluster_global_pod_args-structs.ll │ ├── cluster_global_pod_args-vectors.ll │ ├── global_push_constant_pod_args-halfs.cl │ ├── global_push_constant_pod_args-scalars.cl │ ├── global_push_constant_pod_args.cl │ ├── max_size_execeed_cluster.cl │ ├── max_size_exeeded.cl │ ├── no_8bit_storage_pod_args.cl │ ├── opaque_pointer_gep_with_alias.ll │ ├── pod_vs_module_scope.cl │ ├── two_ints.cl │ ├── two_kernels_different_pc.cl │ └── two_kernels_share_pc.cl ├── Reflection │ ├── constant_data_storage_buffer.cl │ ├── different_reqd_work_group_sizes.cl │ ├── global_offset_spec_constant.cl │ ├── global_push_constants.cl │ ├── global_size_and_work_dim.cl │ ├── literal_sampler.cl │ ├── mixed_reqd_workgroup_sizes.cl │ ├── multiple_arguments.cl │ ├── multiple_kernel_decls.cl │ ├── pod_push_constant_argument.cl │ ├── pod_storage_buffer_argument.cl │ ├── pod_uniform_buffer_argument.cl │ ├── property_required_workgroup_size.cl │ ├── readwrite_image_argument.cl │ ├── readwrite_texel_buffer_argument.cl │ ├── sampled_image_argument.cl │ ├── sampler_argument.cl │ ├── storage_buffer_argument.cl │ ├── storage_image_argument.cl │ ├── storage_texel_buffer_argument.cl │ ├── uniform_buffer_argument.cl │ ├── uniform_texel_buffer_argument.cl │ ├── uniform_workgroup_size.cl │ ├── unused_arg.cl │ ├── work_dim_spec_constant.cl │ ├── workgroup_argument.cl │ └── workgroup_size_spec_constant.cl ├── RelationalBuiltins │ ├── all │ │ ├── all_char.cl │ │ ├── all_char16.cl │ │ ├── all_char2.cl │ │ ├── all_char3.cl │ │ ├── all_char3_novec3.cl │ │ ├── all_char4.cl │ │ ├── all_char8.cl │ │ ├── all_int.cl │ │ ├── all_int16.cl │ │ ├── all_int2.cl │ │ ├── all_int3.cl │ │ ├── all_int3_novec3.cl │ │ ├── all_int4.cl │ │ ├── all_int8.cl │ │ ├── all_long.cl │ │ ├── all_long16.cl │ │ ├── all_long2.cl │ │ ├── all_long3.cl │ │ ├── all_long3_novec3.cl │ │ ├── all_long4.cl │ │ ├── all_long8.cl │ │ ├── all_overloads.ll │ │ ├── all_short.cl │ │ ├── all_short16.cl │ │ ├── all_short2.cl │ │ ├── all_short3.cl │ │ ├── all_short3_novec3.cl │ │ ├── all_short4.cl │ │ └── all_short8.cl │ ├── any │ │ ├── any_char.cl │ │ ├── any_char16.cl │ │ ├── any_char2.cl │ │ ├── any_char3.cl │ │ ├── any_char3_novec3.cl │ │ ├── any_char4.cl │ │ ├── any_char8.cl │ │ ├── any_int.cl │ │ ├── any_int16.cl │ │ ├── any_int2.cl │ │ ├── any_int3.cl │ │ ├── any_int3_novec3.cl │ │ ├── any_int4.cl │ │ ├── any_int8.cl │ │ ├── any_long.cl │ │ ├── any_long16.cl │ │ ├── any_long2.cl │ │ ├── any_long3.cl │ │ ├── any_long3_novec3.cl │ │ ├── any_long4.cl │ │ ├── any_long8.cl │ │ ├── any_overloads.ll │ │ ├── any_short.cl │ │ ├── any_short16.cl │ │ ├── any_short2.cl │ │ ├── any_short3.cl │ │ ├── any_short3_novec3.cl │ │ ├── any_short4.cl │ │ └── any_short8.cl │ ├── bitselect │ │ ├── bitselect_char.cl │ │ ├── bitselect_char2.cl │ │ ├── bitselect_char3.cl │ │ ├── bitselect_char3_novec3.cl │ │ ├── bitselect_char4.cl │ │ ├── bitselect_float.cl │ │ ├── bitselect_float2.cl │ │ ├── bitselect_float3.cl │ │ ├── bitselect_float3_novec3.cl │ │ ├── bitselect_float4.cl │ │ ├── bitselect_int.cl │ │ ├── bitselect_int2.cl │ │ ├── bitselect_int3.cl │ │ ├── bitselect_int3_novec3.cl │ │ ├── bitselect_int4.cl │ │ ├── bitselect_long.cl │ │ ├── bitselect_long2.cl │ │ ├── bitselect_long3.cl │ │ ├── bitselect_long3_novec3.cl │ │ ├── bitselect_long4.cl │ │ ├── bitselect_short.cl │ │ ├── bitselect_short2.cl │ │ ├── bitselect_short3.cl │ │ ├── bitselect_short3_novec3.cl │ │ ├── bitselect_short4.cl │ │ ├── bitselect_uchar.cl │ │ ├── bitselect_uchar2.cl │ │ ├── bitselect_uchar3.cl │ │ ├── bitselect_uchar3_novec3.cl │ │ ├── bitselect_uchar4.cl │ │ ├── bitselect_uint.cl │ │ ├── bitselect_uint2.cl │ │ ├── bitselect_uint3.cl │ │ ├── bitselect_uint3_novec3.cl │ │ ├── bitselect_uint4.cl │ │ ├── bitselect_ulong.cl │ │ ├── bitselect_ulong2.cl │ │ ├── bitselect_ulong3.cl │ │ ├── bitselect_ulong3_novec3.cl │ │ ├── bitselect_ulong4.cl │ │ ├── bitselect_ushort.cl │ │ ├── bitselect_ushort2.cl │ │ ├── bitselect_ushort3.cl │ │ ├── bitselect_ushort3_novec3.cl │ │ └── bitselect_ushort4.cl │ ├── isequal_float.cl │ ├── isequal_float2.cl │ ├── isequal_float3.cl │ ├── isequal_float3_novec3.cl │ ├── isequal_float4.cl │ ├── isgreater_float.cl │ ├── isgreater_float2.cl │ ├── isgreater_float3.cl │ ├── isgreater_float3_novec3.cl │ ├── isgreater_float4.cl │ ├── isgreaterequal_float.cl │ ├── isgreaterequal_float2.cl │ ├── isgreaterequal_float3.cl │ ├── isgreaterequal_float3_novec3.cl │ ├── isgreaterequal_float4.cl │ ├── isinf_float.cl │ ├── isinf_float2.cl │ ├── isinf_float3.cl │ ├── isinf_float3_novec3.cl │ ├── isinf_float4.cl │ ├── isinf_overloads.ll │ ├── isless_float.cl │ ├── isless_float2.cl │ ├── isless_float3.cl │ ├── isless_float3_novec3.cl │ ├── isless_float4.cl │ ├── islessequal_float.cl │ ├── islessequal_float2.cl │ ├── islessequal_float3.cl │ ├── islessequal_float3_novec3.cl │ ├── islessequal_float4.cl │ ├── islessgreater │ │ ├── islessgreater_double.ll │ │ ├── islessgreater_double2.ll │ │ ├── islessgreater_float.ll │ │ ├── islessgreater_float2.ll │ │ ├── islessgreater_half.ll │ │ └── islessgreater_half2.ll │ ├── isnan_float.cl │ ├── isnan_float2.cl │ ├── isnan_float3.cl │ ├── isnan_float3_novec3.cl │ ├── isnan_float4.cl │ ├── isnan_overloads.ll │ ├── isnormal │ │ ├── isnormal_double.ll │ │ ├── isnormal_double2.ll │ │ ├── isnormal_float.ll │ │ ├── isnormal_float2.ll │ │ ├── isnormal_half.ll │ │ └── isnormal_half2.ll │ ├── isnotequal_float.cl │ ├── isnotequal_float2.cl │ ├── isnotequal_float3.cl │ ├── isnotequal_float3_novec3.cl │ ├── isnotequal_float4.cl │ ├── isordered │ │ ├── double2_isordered.ll │ │ ├── double_isordered.ll │ │ ├── double_spirv.cl │ │ ├── float2_isordered.ll │ │ ├── float_isordered.ll │ │ ├── float_spirv.cl │ │ ├── half2_isordered.ll │ │ ├── half_isordered.ll │ │ └── half_spirv.cl │ ├── isunordered │ │ ├── double2_isunordered.ll │ │ ├── double_isunordered.ll │ │ ├── double_spirv.cl │ │ ├── float2_isunordered.ll │ │ ├── float_isunordered.ll │ │ ├── float_spirv.cl │ │ ├── half2_isunordered.ll │ │ ├── half_isunordered.ll │ │ └── half_spirv.cl │ ├── select │ │ ├── select_char2.cl │ │ ├── select_char3.cl │ │ ├── select_char3_novec3.cl │ │ ├── select_char4.cl │ │ ├── select_float2_int2.cl │ │ ├── select_float2_uint2.cl │ │ ├── select_float3_int3.cl │ │ ├── select_float3_int3_novec3.cl │ │ ├── select_float3_uint3.cl │ │ ├── select_float3_uint3_novec3.cl │ │ ├── select_float4_int4.cl │ │ ├── select_float4_uint4.cl │ │ ├── select_float8_uint8.cl │ │ ├── select_float_int.cl │ │ ├── select_float_uint.cl │ │ ├── select_int2_int2.cl │ │ ├── select_int2_uint2.cl │ │ ├── select_int3_int3.cl │ │ ├── select_int3_int3_novec3.cl │ │ ├── select_int3_uint3.cl │ │ ├── select_int3_uint3_novec3.cl │ │ ├── select_int4_int4.cl │ │ ├── select_int4_uint4.cl │ │ ├── select_int_int.cl │ │ ├── select_int_uint.cl │ │ ├── select_long2_long2.cl │ │ ├── select_long2_ulong2.cl │ │ ├── select_long3_long3.cl │ │ ├── select_long3_long3_novec3.cl │ │ ├── select_long3_ulong3.cl │ │ ├── select_long3_ulong3_novec3.cl │ │ ├── select_long4_long4.cl │ │ ├── select_long4_ulong4.cl │ │ ├── select_long_long.cl │ │ ├── select_long_ulong.cl │ │ ├── select_short2_short2.cl │ │ ├── select_short2_ushort2.cl │ │ ├── select_short3_short3.cl │ │ ├── select_short3_short3_novec3.cl │ │ ├── select_short3_ushort3.cl │ │ ├── select_short3_ushort3_novec3.cl │ │ ├── select_short4_short4.cl │ │ ├── select_short4_ushort4.cl │ │ ├── select_short_short.cl │ │ ├── select_short_ushort.cl │ │ ├── select_uint2_int2.cl │ │ ├── select_uint2_uint2.cl │ │ ├── select_uint3_int3.cl │ │ ├── select_uint3_int3_novec3.cl │ │ ├── select_uint3_uint3.cl │ │ ├── select_uint3_uint3_novec3.cl │ │ ├── select_uint4_int4.cl │ │ ├── select_uint4_uint4.cl │ │ ├── select_uint_int.cl │ │ ├── select_uint_uint.cl │ │ ├── select_ulong2_long2.cl │ │ ├── select_ulong2_ulong2.cl │ │ ├── select_ulong3_long3.cl │ │ ├── select_ulong3_long3_novec3.cl │ │ ├── select_ulong3_ulong3.cl │ │ ├── select_ulong3_ulong3_novec3.cl │ │ ├── select_ulong4_long4.cl │ │ ├── select_ulong4_ulong4.cl │ │ ├── select_ulong_long.cl │ │ ├── select_ulong_ulong.cl │ │ ├── select_ushort2_short2.cl │ │ ├── select_ushort2_ushort2.cl │ │ ├── select_ushort3_short3.cl │ │ ├── select_ushort3_short3_novec3.cl │ │ ├── select_ushort3_ushort3.cl │ │ ├── select_ushort3_ushort3_novec3.cl │ │ ├── select_ushort4_short4.cl │ │ ├── select_ushort4_ushort4.cl │ │ ├── select_ushort_short.cl │ │ └── select_ushort_ushort.cl │ ├── signbit_float.cl │ ├── signbit_float2.cl │ ├── signbit_float3.cl │ ├── signbit_float3_novec3.cl │ ├── signbit_float4.cl │ ├── signbit_half.cl │ ├── signbit_half2.cl │ ├── signbit_half3.cl │ ├── signbit_half3_novec3.cl │ └── signbit_half4.cl ├── RemoveUnusedArguments │ ├── leverage_dra.cl │ ├── multiple_remaining_args.cl │ ├── remove_multiple_args.ll │ ├── remove_unused_arg.cl │ └── type_conversion_use.cl ├── RewritePackedStructs │ ├── packed_struct.cl │ ├── packed_struct2.ll │ ├── packed_struct3.ll │ ├── packed_struct4.ll │ └── packed_struct_opaque.ll ├── SPIRVProducer │ ├── num_args.cl │ ├── opaque_alloca.ll │ ├── opaque_buffer_write_zero.ll │ ├── opaque_literal_sampler.ll │ ├── opaque_local_arg.ll │ ├── opaque_pointer_loop.ll │ ├── opaque_pointer_parameter.ll │ ├── opaque_pointer_return.ll │ ├── opaque_pointer_select.ll │ ├── opaque_sample_image2d_float.ll │ ├── physical_storage_buffer_layout.ll │ ├── physical_storage_buffer_layout2.ll │ └── physical_storage_buffer_layout3.ll ├── Scalarize │ ├── constant_nested_struct.ll │ ├── constant_struct.ll │ └── nested_struct.cl ├── ShareModuleScopeVariables │ ├── helps_dra.cl │ ├── no_sharing.cl │ ├── no_sharing.ll │ └── share_local_var.cl ├── ShuffleBuiltins │ ├── shuffle2_cst_mask.cl │ ├── shuffle2_dyn_mask.cl │ ├── shuffle2_int2_int8.ll │ ├── shuffle2_int8_int2.ll │ ├── shuffle2_int8_int8.ll │ ├── shuffle_cst_mask.cl │ ├── shuffle_dyn_mask.cl │ ├── shuffle_int2_int8.ll │ ├── shuffle_int8_int2.ll │ └── shuffle_int8_int8.ll ├── SpecializeImageTypes │ ├── image1d_array_float_get_image_width.ll │ ├── image1d_array_float_sampled_get_image_width.ll │ ├── image1d_buffer_float_get_image_width.ll │ ├── image1d_float_get_image_width.ll │ ├── image1d_float_sampled_get_image_width.ll │ ├── image2d_array_float_get_image_height.ll │ ├── image2d_array_float_get_image_width.ll │ ├── image2d_array_float_sampled_get_image_height.ll │ ├── image2d_array_float_sampled_get_image_width.ll │ ├── image2d_array_int_get_image_dim.ll │ ├── image2d_array_int_sampled_get_image_dim.ll │ ├── image2d_float_get_image_height.ll │ ├── image2d_float_get_image_width.ll │ ├── image2d_float_sampled_get_image_height.ll │ ├── image2d_float_sampled_get_image_width.ll │ ├── image2d_int_get_image_dim.ll │ ├── image2d_int_sampled_get_image_dim.ll │ ├── image3d_float_get_image_depth.ll │ ├── image3d_float_get_image_height.ll │ ├── image3d_float_get_image_width.ll │ ├── image3d_float_sampled_get_image_depth.ll │ ├── image3d_float_sampled_get_image_height.ll │ ├── image3d_float_sampled_get_image_width.ll │ ├── image3d_int_get_image_dim.ll │ ├── image3d_int_sampled_get_image_dim.ll │ ├── images.ll │ ├── multiple_image_args_subfuction.ll │ ├── multiple_image_kernel_args.ll │ ├── multiple_image_kernel_args_different_subfunctions.ll │ ├── no_duplicate_storage_image_type.cl │ ├── pointer_loop.ll │ ├── pointer_loop_simple.ll │ ├── read_image1d_array_float.ll │ ├── read_image1d_array_int.ll │ ├── read_image1d_array_uint.ll │ ├── read_image1d_array_unsampled_float.ll │ ├── read_image1d_array_unsampled_int.ll │ ├── read_image1d_array_unsampled_uint.ll │ ├── read_image1d_buffer_float.ll │ ├── read_image1d_buffer_int.ll │ ├── read_image1d_buffer_uint.ll │ ├── read_image1d_float.ll │ ├── read_image1d_int.ll │ ├── read_image1d_uint.ll │ ├── read_image1d_unsampled_float.ll │ ├── read_image1d_unsampled_int.ll │ ├── read_image1d_unsampled_uint.ll │ ├── read_image2d_array_float.ll │ ├── read_image2d_array_int.ll │ ├── read_image2d_array_uint.ll │ ├── read_image2d_array_unsampled_float.ll │ ├── read_image2d_array_unsampled_int.ll │ ├── read_image2d_array_unsampled_uint.ll │ ├── read_image2d_float.ll │ ├── read_image2d_float_subfunction.ll │ ├── read_image2d_float_subfunction_two_kernels.ll │ ├── read_image2d_int.ll │ ├── read_image2d_uint.ll │ ├── read_image2d_unsampled_float.ll │ ├── read_image2d_unsampled_int.ll │ ├── read_image2d_unsampled_uint.ll │ ├── read_image3d_float.ll │ ├── read_image3d_int.ll │ ├── read_image3d_uint.ll │ ├── read_image3d_unsampled_float.ll │ ├── read_image3d_unsampled_int.ll │ ├── read_image3d_unsampled_uint.ll │ ├── readwrite_image2d_read_float.ll │ ├── readwrite_image2d_read_int.ll │ ├── readwrite_image2d_read_uint.ll │ ├── readwrite_image2d_write_float.ll │ ├── readwrite_image2d_write_int.ll │ ├── readwrite_image2d_write_uint.ll │ ├── unused.cl │ ├── unused.ll │ ├── write_image1d_array_float.ll │ ├── write_image1d_array_int.ll │ ├── write_image1d_array_uint.ll │ ├── write_image1d_buffer_float.ll │ ├── write_image1d_buffer_int.ll │ ├── write_image1d_buffer_uint.ll │ ├── write_image1d_float.ll │ ├── write_image1d_int.ll │ ├── write_image1d_uint.ll │ ├── write_image2d_array_float.ll │ ├── write_image2d_array_int.ll │ ├── write_image2d_array_uint.ll │ ├── write_image2d_float.ll │ ├── write_image2d_int.ll │ ├── write_image2d_uint.ll │ ├── write_image3d_float.ll │ ├── write_image3d_int.ll │ ├── write_image3d_uint.ll │ └── write_only_image_as_read_write_image_in_cl20.ll ├── SplatArgs │ └── discard_incompatible_attrs.ll ├── Spv1p4 │ ├── function-pointer-parameter-that-needs-layout.ll │ ├── int_fetch.ll │ ├── int_read.ll │ ├── int_sample.ll │ ├── int_write.ll │ ├── interface_global_push_constant.ll │ ├── interface_global_workgroup.ll │ ├── interface_literal_sampler_in_helper.ll │ ├── interface_module_constants_in_storage_buffer.ll │ ├── interface_pod_pushconstant.ll │ ├── interface_private_builtin.ll │ ├── interface_sampler.ll │ ├── interface_ssbo_resource.ll │ ├── interface_workgroup_resource.ll │ ├── load.ll │ ├── opaque_structs.ll │ ├── pod-in-ubo.ll │ ├── pointer_comparisons.ll │ ├── pointer_comparisons_with_null.ll │ ├── pointer_comparisons_workgroup.ll │ ├── scalar_cond_vector_data.ll │ ├── store.ll │ ├── uint_fetch.ll │ ├── uint_read.ll │ ├── uint_sample.ll │ └── uint_write.ll ├── StripFreeze │ ├── strip_chain_freeze.ll │ ├── strip_multiple_uses.ll │ └── strip_single_freeze.ll ├── Structs │ ├── byval.cl │ ├── extract_value.cl │ ├── insert_value.cl │ ├── insert_value_issue_14.cl │ ├── kernel_arg_has_pointer_in_struct.cl │ ├── mutual_recursion_error.cl │ ├── nested_pointer_error.cl │ ├── nested_pointer_error2.cl │ ├── ptr_in_struct.cl │ ├── ptr_in_struct2.cl │ └── sret.cl ├── SubGroup │ ├── get_enqueued_num_sub_groups.ll │ ├── get_sub_group_max_size.cl │ ├── sub_group_broadcast.cl │ ├── sub_group_id.cl │ ├── sub_group_reduce.cl │ ├── sub_group_scan_exclusive.cl │ ├── sub_group_scan_inclusive.cl │ ├── subgroup_all.cl │ └── subgroup_any.cl ├── SynchronizationBuiltins │ ├── atomic_work_item_fence.cl │ ├── barrier.cl │ ├── sub_group_barrier.cl │ ├── sub_group_barrier_scope.cl │ ├── work_group_barrier.cl │ └── work_group_barrier_scope.cl ├── ThreeElementVectorLowering │ ├── codependent_3element.ll │ ├── gep_of_gep_of_push_constant.ll │ ├── invalid_vec3_gep.ll │ ├── invalid_vec3_gep2.ll │ ├── mad_sat.ll │ ├── ushort3_to_uchar6.ll │ └── valid_vec3_gep.ll ├── UBO │ ├── array_stride_32.ll │ ├── bad_after_array.cl │ ├── bad_array.cl │ ├── bad_int_array.cl │ ├── bad_pod_ubo.cl │ ├── bad_scalar.cl │ ├── bad_ssbo_scalar.cl │ ├── bad_ssbo_vec2.cl │ ├── bad_ssbo_vec4.cl │ ├── bad_struct.cl │ ├── bad_vec2.cl │ ├── bad_vec4.cl │ ├── can_dra_but_disabled.ll │ ├── can_dra_but_disabled_two_kernels.ll │ ├── cannot_dra.ll │ ├── char_ubo_struct.ll │ ├── char_ubo_struct_novec3.ll │ ├── clustered_pod_type_mutate.ll │ ├── clustered_pod_ubo.ll │ ├── constant_and_image.ll │ ├── constant_wrapping.ll │ ├── copy.ll │ ├── copy_nested.ll │ ├── extra_arg.ll │ ├── extra_args.ll │ ├── global_wrapping.ll │ ├── large_padding.ll │ ├── large_padding_std430.ll │ ├── long_specialization_chain.ll │ ├── max_ubo_size.ll │ ├── mixed_inlining.ll │ ├── multiple_ubo_args.ll │ ├── needs_inlined.ll │ ├── nested_padding.ll │ ├── odd_size_padding.ll │ ├── relaxed_int_array.cl │ ├── test_cluster_pod_args.cl │ ├── test_cluster_pod_args.ll │ ├── transform_global.cl │ ├── transform_local.ll │ ├── transform_padding.ll │ └── vec2_no_pad.ll ├── UBOTypeTransform │ ├── transform_global_opaque.ll │ └── transform_local_opaque.ll ├── UndoInstCombine │ ├── extract_load_cast.cl │ ├── extract_load_cast_3xi32_to_12xi8.ll │ ├── extract_load_cast_3xi32_to_6xi16.ll │ ├── extract_load_cast_inst_3xi32_to_6x16.ll │ ├── extract_load_cast_opaque.ll │ ├── undo_extract_cast.cl │ ├── undo_extract_cast_2xi64_to_8xi16.ll │ ├── undo_extract_cast_4xi32_to_16xi8.ll │ ├── undo_shuffle_cast.cl │ ├── undo_shuffle_cast_2xi64_to_8xi16.ll │ ├── undo_shuffle_cast_4xi32_to16xi8.ll │ ├── undo_shuffle_load_cast_3xi32_to_6xi16.ll │ └── undo_shuffle_load_cast_opaque.ll ├── VariablePointers │ ├── function_call_image_param.ll │ ├── function_call_sampler_param.ll │ ├── function_call_ssbo.ll │ ├── function_call_ssbo_subobject.ll │ ├── function_call_wg.ll │ ├── null_pointer_ssbo.ll │ ├── null_pointer_wg.ll │ ├── phi_ssbo.ll │ ├── phi_ssbo_null.ll │ ├── phi_ssbo_same_buffer.ll │ ├── phi_wg.ll │ ├── ptr_access_chain_ssbo.ll │ ├── ptr_access_chain_wg.ll │ ├── sampler.ll │ ├── select_ssbo.ll │ ├── select_ssbo_null.ll │ ├── select_ssbo_same_buffer.ll │ └── select_wg.ll ├── VaryingLocalSizes │ ├── one_kernel.cl │ ├── reqd_work_group_size.cl │ ├── reqd_work_group_size_one_kernel.cl │ ├── reqd_work_group_size_two_kernels.cl │ └── two_kernels.cl ├── VectorLoadStore │ ├── vload16_global_float16.cl │ ├── vload2_constant_char2.ll │ ├── vload2_constant_double2.ll │ ├── vload2_constant_float2.ll │ ├── vload2_constant_half2.ll │ ├── vload2_constant_int2.ll │ ├── vload2_constant_long2.ll │ ├── vload2_constant_short2.ll │ ├── vload2_global_char2.ll │ ├── vload2_global_double2.ll │ ├── vload2_global_float2.ll │ ├── vload2_global_half2.ll │ ├── vload2_global_int2.ll │ ├── vload2_global_long2.ll │ ├── vload2_global_short2.ll │ ├── vload2_local_char2.ll │ ├── vload2_local_double2.ll │ ├── vload2_local_float2.ll │ ├── vload2_local_half2.ll │ ├── vload2_local_int2.ll │ ├── vload2_local_long2.ll │ ├── vload2_local_short2.ll │ ├── vload2_private_char2.ll │ ├── vload2_private_double2.ll │ ├── vload2_private_float2.ll │ ├── vload2_private_half2.ll │ ├── vload2_private_int2.ll │ ├── vload2_private_long2.ll │ ├── vload2_private_short2.ll │ ├── vload3_constant_char3.ll │ ├── vload3_constant_double3.ll │ ├── vload3_constant_float3.ll │ ├── vload3_constant_half3.ll │ ├── vload3_constant_int3.ll │ ├── vload3_constant_long3.ll │ ├── vload3_constant_short3.ll │ ├── vload3_global_char3.ll │ ├── vload3_global_double3.ll │ ├── vload3_global_float3.ll │ ├── vload3_global_half3.ll │ ├── vload3_global_int3.ll │ ├── vload3_global_long3.ll │ ├── vload3_global_short3.ll │ ├── vload3_local_char3.ll │ ├── vload3_local_double3.ll │ ├── vload3_local_float3.ll │ ├── vload3_local_half3.ll │ ├── vload3_local_int3.ll │ ├── vload3_local_long3.ll │ ├── vload3_local_short3.ll │ ├── vload3_private_char3.ll │ ├── vload3_private_double3.ll │ ├── vload3_private_float3.ll │ ├── vload3_private_half3.ll │ ├── vload3_private_int3.ll │ ├── vload3_private_long3.ll │ ├── vload3_private_short3.ll │ ├── vload4_constant_char4.ll │ ├── vload4_constant_double4.ll │ ├── vload4_constant_float4.ll │ ├── vload4_constant_half4.ll │ ├── vload4_constant_int4.ll │ ├── vload4_constant_long4.ll │ ├── vload4_constant_short4.ll │ ├── vload4_global_char4.ll │ ├── vload4_global_double4.ll │ ├── vload4_global_float4.ll │ ├── vload4_global_half4.ll │ ├── vload4_global_int4.ll │ ├── vload4_global_long4.ll │ ├── vload4_global_short4.ll │ ├── vload4_local_char4.ll │ ├── vload4_local_double4.ll │ ├── vload4_local_float4.ll │ ├── vload4_local_half4.ll │ ├── vload4_local_int4.ll │ ├── vload4_local_long4.ll │ ├── vload4_local_short4.ll │ ├── vload4_private_char4.ll │ ├── vload4_private_double4.ll │ ├── vload4_private_float4.ll │ ├── vload4_private_half4.ll │ ├── vload4_private_int4.ll │ ├── vload4_private_long4.ll │ ├── vload4_private_short4.ll │ ├── vload8_global_float8.cl │ ├── vstore16_global_float16.cl │ ├── vstore2_constant_char2.ll │ ├── vstore2_constant_double2.ll │ ├── vstore2_constant_float2.ll │ ├── vstore2_constant_half2.ll │ ├── vstore2_constant_int2.ll │ ├── vstore2_constant_long2.ll │ ├── vstore2_constant_short2.ll │ ├── vstore2_global_char2.ll │ ├── vstore2_global_double2.ll │ ├── vstore2_global_float2.ll │ ├── vstore2_global_half2.ll │ ├── vstore2_global_int2.ll │ ├── vstore2_global_long2.ll │ ├── vstore2_global_short2.ll │ ├── vstore2_local_char2.ll │ ├── vstore2_local_double2.ll │ ├── vstore2_local_float2.ll │ ├── vstore2_local_half2.ll │ ├── vstore2_local_int2.ll │ ├── vstore2_local_long2.ll │ ├── vstore2_local_short2.ll │ ├── vstore2_private_char2.ll │ ├── vstore2_private_double2.ll │ ├── vstore2_private_float2.ll │ ├── vstore2_private_half2.ll │ ├── vstore2_private_int2.ll │ ├── vstore2_private_long2.ll │ ├── vstore2_private_short2.ll │ ├── vstore3_constant_char3.ll │ ├── vstore3_constant_double3.ll │ ├── vstore3_constant_float3.ll │ ├── vstore3_constant_half3.ll │ ├── vstore3_constant_int3.ll │ ├── vstore3_constant_long3.ll │ ├── vstore3_constant_short3.ll │ ├── vstore3_global_char3.ll │ ├── vstore3_global_double3.ll │ ├── vstore3_global_float3.ll │ ├── vstore3_global_half3.ll │ ├── vstore3_global_int3.ll │ ├── vstore3_global_long3.ll │ ├── vstore3_global_short3.ll │ ├── vstore3_local_char3.ll │ ├── vstore3_local_double3.ll │ ├── vstore3_local_float3.ll │ ├── vstore3_local_half3.ll │ ├── vstore3_local_int3.ll │ ├── vstore3_local_long3.ll │ ├── vstore3_local_short3.ll │ ├── vstore3_private_char3.ll │ ├── vstore3_private_double3.ll │ ├── vstore3_private_float3.ll │ ├── vstore3_private_half3.ll │ ├── vstore3_private_int3.ll │ ├── vstore3_private_long3.ll │ ├── vstore3_private_short3.ll │ ├── vstore4_constant_char4.ll │ ├── vstore4_constant_double4.ll │ ├── vstore4_constant_float4.ll │ ├── vstore4_constant_half4.ll │ ├── vstore4_constant_int4.ll │ ├── vstore4_constant_long4.ll │ ├── vstore4_constant_short4.ll │ ├── vstore4_global_char4.ll │ ├── vstore4_global_double4.ll │ ├── vstore4_global_float4.ll │ ├── vstore4_global_half4.ll │ ├── vstore4_global_int4.ll │ ├── vstore4_global_long4.ll │ ├── vstore4_global_short4.ll │ ├── vstore4_local_char4.ll │ ├── vstore4_local_double4.ll │ ├── vstore4_local_float4.ll │ ├── vstore4_local_half4.ll │ ├── vstore4_local_int4.ll │ ├── vstore4_local_long4.ll │ ├── vstore4_local_short4.ll │ ├── vstore4_private_char4.ll │ ├── vstore4_private_double4.ll │ ├── vstore4_private_float4.ll │ ├── vstore4_private_half4.ll │ ├── vstore4_private_int4.ll │ ├── vstore4_private_long4.ll │ ├── vstore4_private_short4.ll │ └── vstore8_global_float8.cl ├── Warnings │ ├── error.cl │ ├── ignored.cl │ └── simple.cl ├── WorkItemBuiltins │ ├── get_enqueued_local_size.cl │ ├── get_global_id-non-uniform.cl │ ├── get_global_id-with-global-offset-dimension-4.cl │ ├── get_global_id-with-global-offset-push-constant.cl │ ├── get_global_id-with-global-offset-spec-constant.cl │ ├── get_global_id.ll │ ├── get_global_linear.cl │ ├── get_global_offset-push-constant-non-constant-dim.ll │ ├── get_global_offset-push-constant.cl │ ├── get_global_offset-spec-constant-non-constant-dim.ll │ ├── get_global_offset-spec-constant.cl │ ├── get_global_offset.cl │ ├── get_global_size-non-uniform.cl │ ├── get_global_size.ll │ ├── get_global_size_hack_initializers.cl │ ├── get_group_id-non-uniform.cl │ ├── get_group_id.ll │ ├── get_local_id.ll │ ├── get_local_linear_id.cl │ ├── get_local_size.ll │ ├── get_num_groups-non-uniform.cl │ ├── get_num_groups.ll │ ├── get_work_dim-spec_constant.cl │ ├── get_work_dim.cl │ ├── multiple-push-constant.cl │ └── via-push-constant-enabled-but-not-used.cl ├── WorkgroupVariableSize │ ├── local-size.cl │ └── local-size.ll ├── WrapKernel │ └── wrap_kernel.cl ├── always_strip_generic.ll ├── as_float.cl ├── bool_and.cl ├── bool_or.cl ├── bool_to_double_cast.cl ├── bool_to_float_cast.cl ├── bool_to_half_cast.cl ├── bool_vector_and.cl ├── bool_vector_or.cl ├── bool_xor.cl ├── char4_constant.cl ├── char4_constant_zero.cl ├── char4_insert.cl ├── char4_insert_from_float.cl ├── char4_issue15_a.cl ├── char4_issue15_b.cl ├── clspv-opt │ ├── descriptor.ll │ ├── empty.ll │ └── options.ll ├── cluster_pod_args_attibutes_on_pod.cl ├── cluster_pod_args_attributes.cl ├── cluster_pod_args_globals_scalars.cl ├── cluster_pod_args_larger_alignment.cl ├── cluster_pod_args_locals_scalars.cl ├── cluster_pod_args_locals_scalars_pod_in_ubo.cl ├── cluster_pod_args_retain_kernel_calls.cl ├── cluster_pod_args_reuse_pod_type.cl ├── cluster_pod_args_spir64_cst_expr_gep.ll ├── composite_construct.cl ├── composite_construct_array.cl ├── composite_construct_varying.cl ├── constant_buffer_arg_static_load_and_store.cl ├── constant_data_seq_string.ll ├── convergent_attribute.ll ├── correct_stride_int8_not_supported.ll ├── correct_stride_int8_not_supported_char_arr.ll ├── debug-information-control-flow.cl ├── debug-information.cl ├── descriptor_map_argtype.cl ├── descriptor_set_default.cl ├── descriptor_set_distinct.cl ├── different_address_space_same_function_type.ll ├── different_address_space_same_pointer_array_stride.ll ├── different_reqd_work_group_sizes.cl ├── div │ ├── float2_div.cl │ ├── float2_div_cst.cl │ ├── float2_div_cst_limit.cl │ ├── float3_div.cl │ ├── float3_div_cst.cl │ ├── float3_div_cst_limit.cl │ ├── float3_div_cst_novec3.cl │ ├── float3_div_novec3.cl │ ├── float4_div.cl │ ├── float4_div_cst.cl │ ├── float_div.cl │ ├── float_div_cst.cl │ └── float_div_cst_limit.cl ├── double-constants.cl ├── emit_ir.cl ├── explicit_stdin.cl ├── extract_constant.ll ├── fabs-fp16.ll ├── float2_add.cl ├── float2_mul.cl ├── float2_sub.cl ├── float3_add.cl ├── float3_add_novec3.cl ├── float3_mul.cl ├── float3_mul_novec3.cl ├── float3_sub.cl ├── float3_sub_novec3.cl ├── float4_add.cl ├── float4_mul.cl ├── float4_sub.cl ├── float_add.cl ├── float_equal.cl ├── float_greaterthan.cl ├── float_greaterthanequal.cl ├── float_lessthan.cl ├── float_lessthanequal.cl ├── float_mul.cl ├── float_notequal.cl ├── float_sub.cl ├── float_to_int.cl ├── float_to_uint.cl ├── fnegate.cl ├── for.cl ├── frontend-plugin-enum.cl ├── function_call.cl ├── global-variable-no-undef-initializer.cl ├── global_buffer_arg_dynamic_store.cl ├── global_buffer_arg_static_load_and_store.cl ├── global_buffer_arg_static_store.cl ├── hack-image1d-buffer-bgra.cl ├── hack-image1d-buffer-bgra.ll ├── hack_inserts_constant.cl ├── hack_inserts_undef.cl ├── hack_inserts_varying.cl ├── hack_inserts_zero.cl ├── hack_mul_extended │ ├── mad_hi_char_hack_mul_extended.cl │ ├── mad_hi_int_hack_mul_extended.cl │ ├── mad_hi_long_hack_mul_extended.cl │ ├── mad_hi_short_hack_mul_extended.cl │ ├── mad_hi_uchar_hack_mul_extended.cl │ ├── mad_hi_uint_hack_mul_extended.cl │ ├── mad_hi_ulong_hack_mul_extended.cl │ ├── mad_hi_ushort_hack_mul_extended.cl │ ├── mul_hi_char2_hack_mul_extended.cl │ ├── mul_hi_char_hack_mul_extended.cl │ ├── mul_hi_int2_hack_mul_extended.cl │ ├── mul_hi_int_hack_mul_extended.cl │ ├── mul_hi_long2_hack_mul_extended.cl │ ├── mul_hi_long_hack_mul_extended.cl │ ├── mul_hi_short2_hack_mul_extended.cl │ ├── mul_hi_short_hack_mul_extended.cl │ ├── mul_hi_uchar2_hack_mul_extended.cl │ ├── mul_hi_uchar_hack_mul_extended.cl │ ├── mul_hi_uint2_hack_mul_extended.cl │ ├── mul_hi_uint_hack_mul_extended.cl │ ├── mul_hi_ulong2_hack_mul_extended.cl │ ├── mul_hi_ulong_hack_mul_extended.cl │ ├── mul_hi_ushort2_hack_mul_extended.cl │ └── mul_hi_ushort_hack_mul_extended.cl ├── hack_scf │ ├── const.ll │ ├── const_left.ll │ ├── const_vec2.ll │ ├── greater_equal.ll │ ├── greater_than.ll │ ├── greater_than_const_vec4.ll │ ├── less_equal.ll │ ├── less_than.ll │ ├── llvm_smax.ll │ ├── llvm_smin.ll │ ├── sclamp.ll │ ├── smax.ll │ └── smin.ll ├── hack_undef.cl ├── hack_undef_composite.cl ├── hack_undef_image.cl ├── half-constants.cl ├── half-fma-native.cl ├── half-fma.cl ├── if.cl ├── if_branch_to_loop_needs_selection_merge.cl ├── ifelse.cl ├── ifelseif.cl ├── image2d.cl ├── image2d_read.cl ├── image2d_write.cl ├── image3d.cl ├── image3d_read.cl ├── image3d_write.cl ├── int_add.cl ├── int_and.cl ├── int_arg-info.cl ├── int_div.cl ├── int_equal.cl ├── int_greaterthan.cl ├── int_greaterthanequal.cl ├── int_lessthan.cl ├── int_lessthanequal.cl ├── int_mod.cl ├── int_mul.cl ├── int_not.cl ├── int_notequal.cl ├── int_or.cl ├── int_shl.cl ├── int_shr.cl ├── int_sub.cl ├── int_to_float.cl ├── int_xor.cl ├── ir-input.ll ├── issue-1074.ll ├── issue-1204.ll ├── issue-1228.cl ├── issue-679.cl ├── issue-679.ll ├── issue-679_opaque.cl ├── issue-679_opaque.ll ├── kernel-decl-dmap.cl ├── kernel-no-i8-ptr.cl ├── kernel_attributes.cl ├── lit.cfg.in ├── llvm-ctpop.ll ├── load_cst_expr_vec3.ll ├── local_array.cl ├── local_buffer_static_load_and_store.cl ├── longvector-metadata.ll ├── loop_continue_no_selection_merge.cl ├── mad-float-optimization.cl ├── mfmt_c.cl ├── mixed_reqd_work_group_sizes.cl ├── multiple_local_ptr_args.cl ├── no_int2.cl ├── no_int2.ll ├── no_int64_due_to_index_literal.cl ├── no_pre_sampler.cl ├── nonuniform-spv1.0.ll ├── nonuniform.ll ├── nop.cl ├── one_constant_buffer_arg.cl ├── one_global_buffer_arg.cl ├── one_uint_arg.cl ├── opselect_constants_int_scalar.cl ├── opselect_constants_int_vector.cl ├── opselect_constants_long_scalar.cl ├── opselect_constants_long_vector.cl ├── opselect_constants_short_scalar.cl ├── opselect_constants_short_vector.cl ├── opselect_float2.cl ├── opsource.cl ├── packed_struct_novec3.cl ├── packed_struct_novec3.ll ├── phi_novec3.ll ├── phi_with_cst_expr.ll ├── pod_in_ubo.cl ├── prefetch.ll ├── print-all.cl ├── ptr_function_as_return.cl ├── ptr_function_in_callee.cl ├── ptr_local_struct.cl ├── ptr_local_struct_cluster_pod_args.cl ├── read_binary.cl ├── reqd_work_group_size-non-uniform.cl ├── reqd_work_group_size.cl ├── reuse_kernel_arg_var.cl ├── rounding_mode_rte.cl ├── rounding_mode_rte_spv14.cl ├── sampler.cl ├── short_add.cl ├── spvasm2checks.pl ├── stdin.cl ├── stdout.cl ├── thread_id_kernel.ll ├── trunc_to_bool.ll ├── two_global_buffer_args_static_store.cl ├── two_nop_kernels.cl ├── uchar4_extract_to_float.cl ├── uchar4_insert_from_float.cl ├── uint_add.cl ├── uint_and.cl ├── uint_arg_static_load_store.cl ├── uint_div.cl ├── uint_equal.cl ├── uint_greaterthan.cl ├── uint_greaterthanequal.cl ├── uint_lessthan.cl ├── uint_lessthanequal.cl ├── uint_mod.cl ├── uint_mul.cl ├── uint_not.cl ├── uint_notequal.cl ├── uint_or.cl ├── uint_shl.cl ├── uint_shr.cl ├── uint_sub.cl ├── uint_to_float.cl ├── uint_xor.cl ├── unreferenced_function.cl ├── vec3_opaque_sampler_builtin.ll ├── vector_extract_element.cl ├── vector_insert_dynamic.cl ├── vector_insert_element.cl ├── vector_shuffle.cl ├── vector_shuffle_float3.cl ├── vector_shuffle_hi_lo.cl ├── vector_subgroup_broadcast.cl ├── void_ptr_functions.cl ├── void_ptr_kernel.cl ├── widen_mixed_truncate.ll ├── widen_switch_condition.cl ├── widen_switch_condition_binary_ops.ll ├── widen_switch_condition_trunc.ll ├── widen_truncate.ll ├── widen_truncate_to_i32.ll ├── widen_truncate_to_i8.ll └── workgroup_size_spec_ids.cl ├── tools ├── CMakeLists.txt ├── clspv-opt │ ├── CMakeLists.txt │ └── main.cpp ├── driver │ ├── CMakeLists.txt │ └── main.cpp └── reflection │ ├── CMakeLists.txt │ ├── ReflectionParser.cpp │ ├── ReflectionParser.h │ └── main.cpp └── utils ├── check_code_format.sh ├── fetch_sources.py └── make_test.py /.clang-format: -------------------------------------------------------------------------------- 1 | Language: Cpp 2 | BasedOnStyle: LLVM 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | build*/ 2 | TAGS 3 | *.swp 4 | cscope.* 5 | .DS_Store 6 | third_party/ 7 | -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | # This is the official list of Clspv authors for copyright purposes. 2 | # This file is distinct from the CONTRIBUTORS files. 3 | # See the latter for an explanation. 4 | 5 | # Names should be added to this file as: 6 | # Name or Organization 7 | # The email address is not required for organizations. 8 | 9 | Codeplay Software Ltd. 10 | Google Inc. 11 | -------------------------------------------------------------------------------- /amber/README.md: -------------------------------------------------------------------------------- 1 | # Amber Tests 2 | 3 | This directory (and subdirectories) contain 4 | [Amber](https://github.com/google/amber) script 5 | tests to check the functional correctness of clspv. 6 | -------------------------------------------------------------------------------- /test/AddFunctionAttributes/translate_literal_sampler.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt --passes=add-function-attributes %s -o %t.ll 2 | ; RUN: FileCheck %s < %t.ll 3 | 4 | ; CHECK: declare ptr addrspace(2) @__translate_sampler_initializer(i32) [[ATTR:#[0-9]+]] 5 | ; CHECK: attributes [[ATTR]] = { speculatable memory(none) } 6 | 7 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 8 | target triple = "spir-unknown-unknown" 9 | 10 | declare ptr addrspace(2) @__translate_sampler_initializer(i32) 11 | 12 | -------------------------------------------------------------------------------- /test/AddressSpaceCast/to_local.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv --cl-std=CLC++ --inline-entry-points %s -o %t.spv --show-producer-ir &> %t.ll 2 | // RUN: spirv-val --target-env spv1.0 %t.spv 3 | // RUN: FileCheck %s < %t.ll 4 | 5 | // CHECK-NOT: addrspacecast 6 | // CHECK-NOT: ptr addrspace({{.*}}) null 7 | 8 | float loop(const float *data, unsigned num) { 9 | float res = 0; 10 | for (unsigned j = 0; j < num; ++j) { 11 | res += to_local(data)[j]; 12 | } 13 | return res; 14 | } 15 | 16 | kernel void k(local float* in, global float* out) { 17 | unsigned index = get_global_id(0); 18 | out[index] = loop(in, index); 19 | } 20 | -------------------------------------------------------------------------------- /test/AutoPodArgs/force_pushconstant.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt --passes=auto-pod-args -pod-pushconstant %s -o %t.ll 2 | ; RUN: FileCheck %s < %t.ll 3 | 4 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 5 | target triple = "spir-unknown-unknown" 6 | 7 | ; CHECK: define spir_kernel void @foo(ptr addrspace(1) %out, i32 %pod) !clspv.pod_args_impl [[MD:![0-9]+]] 8 | ; CHECK: [[MD]] = !{i32 2} 9 | define spir_kernel void @foo(ptr addrspace(1) %out, i32 %pod) { 10 | entry: 11 | store i32 %pod, ptr addrspace(1) %out 12 | ret void 13 | } 14 | 15 | -------------------------------------------------------------------------------- /test/AutoPodArgs/force_ubo.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt --passes=auto-pod-args -pod-ubo %s -o %t.ll 2 | ; RUN: FileCheck %s < %t.ll 3 | 4 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 5 | target triple = "spir-unknown-unknown" 6 | 7 | ; CHECK: define spir_kernel void @foo(ptr addrspace(1) %out, i32 %pod) !clspv.pod_args_impl [[MD:![0-9]+]] 8 | ; CHECK: [[MD]] = !{i32 1} 9 | define spir_kernel void @foo(ptr addrspace(1) %out, i32 %pod) { 10 | entry: 11 | store i32 %pod, ptr addrspace(1) %out 12 | ret void 13 | } 14 | -------------------------------------------------------------------------------- /test/BuiltinsWithGenericPointer/fract_libclc.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %s --cl-std=CL3.0 --inline-entry-points -enable-feature-macros=__opencl_c_generic_address_space -o %t.spv 2 | // RUN: spirv-dis %t.spv -o %t.spvasm 3 | // RUN: spirv-val --target-env spv1.0 %t.spv 4 | // RUN: FileCheck %s < %t.spvasm 5 | 6 | // CHECK-NOT: Fract 7 | 8 | __kernel void foo(__global float *out1, __global float *out2, __global float *in) { 9 | size_t i = get_global_id(0); 10 | out1[i] = fract(in[i], out2 + i); 11 | } 12 | -------------------------------------------------------------------------------- /test/BuiltinsWithGenericPointer/fract_native.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %s --cl-std=CL3.0 --inline-entry-points -enable-feature-macros=__opencl_c_generic_address_space -o %t.spv --use-native-builtins=fract 2 | // RUN: spirv-dis %t.spv -o %t.spvasm 3 | // RUN: spirv-val --target-env spv1.0 %t.spv 4 | // RUN: FileCheck %s < %t.spvasm 5 | 6 | // CHECK: Fract 7 | 8 | __kernel void foo(__global float *out1, __global float *out2, __global float *in) { 9 | size_t i = get_global_id(0); 10 | out1[i] = fract(in[i], out2 + i); 11 | } 12 | -------------------------------------------------------------------------------- /test/BuiltinsWithGenericPointer/frexp_libclc.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %s --cl-std=CL3.0 --inline-entry-points -enable-feature-macros=__opencl_c_generic_address_space -o %t.spv 2 | // RUN: spirv-dis %t.spv -o %t.spvasm 3 | // RUN: spirv-val --target-env spv1.0 %t.spv 4 | // RUN: FileCheck %s < %t.spvasm 5 | 6 | // CHECK-NOT: Frexp 7 | 8 | __kernel void foo(__global float *out1, __global int *out2, __global float *in) { 9 | size_t i = get_global_id(0); 10 | out1[i] = frexp(in[i], out2 + i); 11 | } 12 | -------------------------------------------------------------------------------- /test/BuiltinsWithGenericPointer/frexp_native.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %s --cl-std=CL3.0 --inline-entry-points -enable-feature-macros=__opencl_c_generic_address_space -o %t.spv --use-native-builtins=frexp 2 | // RUN: spirv-dis %t.spv -o %t.spvasm 3 | // RUN: spirv-val --target-env spv1.0 %t.spv 4 | // RUN: FileCheck %s < %t.spvasm 5 | 6 | // CHECK: Frexp 7 | 8 | __kernel void foo(__global float *out1, __global int *out2, __global float *in) { 9 | size_t i = get_global_id(0); 10 | out1[i] = frexp(in[i], out2 + i); 11 | } 12 | -------------------------------------------------------------------------------- /test/BuiltinsWithGenericPointer/lgamma_r_libclc.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %s --cl-std=CL3.0 --inline-entry-points -enable-feature-macros=__opencl_c_generic_address_space -o %t.spv 2 | // RUN: spirv-val --target-env spv1.0 %t.spv 3 | 4 | // XFAIL: * 5 | 6 | __kernel void foo(__global float *out1, __global int *out2, __global float *in) { 7 | size_t i = get_global_id(0); 8 | out1[i] = lgamma_r(in[i], out2 + i); 9 | } 10 | -------------------------------------------------------------------------------- /test/BuiltinsWithGenericPointer/modf_libclc.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %s --cl-std=CL3.0 --inline-entry-points -enable-feature-macros=__opencl_c_generic_address_space -o %t.spv 2 | // RUN: spirv-val --target-env spv1.0 %t.spv 3 | 4 | __kernel void foo(__global float *out1, __global float *out2, __global float *in) { 5 | size_t i = get_global_id(0); 6 | out1[i] = modf(in[i], out2 + i); 7 | } 8 | -------------------------------------------------------------------------------- /test/BuiltinsWithGenericPointer/remquo_libclc.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %s --cl-std=CL3.0 --inline-entry-points -enable-feature-macros=__opencl_c_generic_address_space -o %t.spv 2 | // RUN: spirv-val --target-env spv1.0 %t.spv 3 | 4 | __kernel void foo(__global float *out1, __global int *out2, __global float *in) { 5 | size_t i = get_global_id(0); 6 | out1[i] = remquo(in[i], in[i + 1], out2 + i); 7 | } 8 | -------------------------------------------------------------------------------- /test/BuiltinsWithGenericPointer/sincos_libclc.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %s --cl-std=CL3.0 --inline-entry-points -enable-feature-macros=__opencl_c_generic_address_space -o %t.spv 2 | // RUN: spirv-val --target-env spv1.0 %t.spv 3 | 4 | __kernel void foo(__global float *out1, __global float *out2, __global float *in) { 5 | size_t i = get_global_id(0); 6 | out1[i] = sincos(in[i], out2 + i); 7 | } 8 | -------------------------------------------------------------------------------- /test/CPlusPlus/cpp-2021.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -cl-std=CLC++2021 -inline-entry-points %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: OpSource OpenCL_CPP 202100 7 | // CHECK: OpStore %{{[0-9]+}} %uint_202100 8 | 9 | kernel void test(global int *x) { 10 | x[0] = __OPENCL_CPP_VERSION__; 11 | } 12 | -------------------------------------------------------------------------------- /test/CPlusPlus/kernel-overload.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -w -cl-std=CLC++ -inline-entry-points -verify %s 2 | 3 | void kernel test(global int* ptr) {} //expected-note{{previous definition is here}} 4 | void kernel test(local int* ptr) {} 5 | //expected-error@-1{{conflicting types for 'test'}} 6 | //expected-error@-2{{kernel functions can't be overloaded}} 7 | -------------------------------------------------------------------------------- /test/CPlusPlus/opsource.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -cl-std=CLC++ -inline-entry-points %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: OpSource OpenCL_CPP 100 7 | 8 | void kernel test() {} 9 | 10 | -------------------------------------------------------------------------------- /test/CPlusPlus/reference-parameter.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv --cl-std=CLC++ --inline-entry-points %s --output-format=ll -O3 -o %t.ll 2 | // RUN: FileCheck %s < %t.ll 3 | 4 | // CHECK: define dso_local spir_func i32 @_Z1fRU3AS4i(ptr addrspace(4) align 4 dereferenceable(4) %x) 5 | int f(int &x) { 6 | return x; 7 | } 8 | -------------------------------------------------------------------------------- /test/CommonBuiltins/step/float2_step.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | kernel void foo(global float2 *A, float2 edge, float2 x) { 7 | *A = step(edge, x); 8 | } 9 | // CHECK: [[_1:%[a-zA-Z0-9_]+]] = OpExtInstImport "GLSL.std.450" 10 | // CHECK-DAG: [[_float:%[a-zA-Z0-9_]+]] = OpTypeFloat 32 11 | // CHECK-DAG: [[_v2float:%[a-zA-Z0-9_]+]] = OpTypeVector [[_float]] 2 12 | // CHECK: [[_31:%[a-zA-Z0-9_]+]] = OpExtInst [[_v2float]] [[_1]] Step 13 | // CHECK: OpStore {{.*}} [[_31]] 14 | -------------------------------------------------------------------------------- /test/CommonBuiltins/step/float3_step.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | kernel void foo(global float3 *A, float3 edge, float3 x) { 7 | *A = step(edge, x); 8 | } 9 | // CHECK: [[_1:%[a-zA-Z0-9_]+]] = OpExtInstImport "GLSL.std.450" 10 | // CHECK-DAG: [[_float:%[a-zA-Z0-9_]+]] = OpTypeFloat 32 11 | // CHECK-DAG: [[_v3float:%[a-zA-Z0-9_]+]] = OpTypeVector [[_float]] 3 12 | // CHECK: [[_31:%[a-zA-Z0-9_]+]] = OpExtInst [[_v3float]] [[_1]] Step 13 | // CHECK: OpStore {{.*}} [[_31]] 14 | -------------------------------------------------------------------------------- /test/CommonBuiltins/step/float4_step.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | kernel void foo(global float4 *A, float4 edge, float4 x) { 7 | *A = step(edge, x); 8 | } 9 | // CHECK: [[_1:%[a-zA-Z0-9_]+]] = OpExtInstImport "GLSL.std.450" 10 | // CHECK-DAG: [[_float:%[a-zA-Z0-9_]+]] = OpTypeFloat 32 11 | // CHECK-DAG: [[_v4float:%[a-zA-Z0-9_]+]] = OpTypeVector [[_float]] 4 12 | // CHECK: [[_31:%[a-zA-Z0-9_]+]] = OpExtInst [[_v4float]] [[_1]] Step 13 | // CHECK: OpStore {{.*}} [[_31]] 14 | -------------------------------------------------------------------------------- /test/CommonBuiltins/step/float_step.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | kernel void foo(global float *A, float edge, float x) { 7 | *A = step(edge, x); 8 | } 9 | // CHECK: [[_1:%[a-zA-Z0-9_]+]] = OpExtInstImport "GLSL.std.450" 10 | // CHECK-DAG: [[_float:%[a-zA-Z0-9_]+]] = OpTypeFloat 32 11 | // CHECK: [[_30:%[a-zA-Z0-9_]+]] = OpExtInst [[_float]] [[_1]] Step 12 | // CHECK: OpStore {{.*}} [[_30]] 13 | -------------------------------------------------------------------------------- /test/Contraction/contract.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis %t.spv -o %t.spvasm 3 | // RUN: FileCheck %s < %t.spvasm 4 | // CHECK: OpExtInst %{{.*}} %{{.*}} Fma 5 | 6 | #pragma OPENCL FP_CONTRACT ON 7 | kernel void test(global float *out, global float *a, global float *b, global float *c) { 8 | int i = get_global_id(0); 9 | out[i] = a[i] * b[i] + c[i]; 10 | } 11 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/char/convert_char4_float4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uchar:[0-9a-zA-Z_]+]] = OpTypeInt 8 0 7 | // CHECK-DAG: %[[uchar4:[0-9a-zA-Z_]+]] = OpTypeVector %[[uchar]] 4 8 | // CHECK: OpConvertFToS %[[uchar4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global char4* dst, global float4* src) 12 | { 13 | *dst = convert_char4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/char/convert_char4_int4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uchar:[0-9a-zA-Z_]+]] = OpTypeInt 8 0 7 | // CHECK-DAG: %[[uchar4:[0-9a-zA-Z_]+]] = OpTypeVector %[[uchar]] 4 8 | // CHECK: OpUConvert %[[uchar4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global char4* dst, global int4* src) 12 | { 13 | *dst = convert_char4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/char/convert_char4_long4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uchar:[0-9a-zA-Z_]+]] = OpTypeInt 8 0 7 | // CHECK-DAG: %[[uchar4:[0-9a-zA-Z_]+]] = OpTypeVector %[[uchar]] 4 8 | // CHECK: OpUConvert %[[uchar4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global char4* dst, global long4* src) 12 | { 13 | *dst = convert_char4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/char/convert_char4_short4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uchar:[0-9a-zA-Z_]+]] = OpTypeInt 8 0 7 | // CHECK-DAG: %[[uchar4:[0-9a-zA-Z_]+]] = OpTypeVector %[[uchar]] 4 8 | // CHECK: OpUConvert %[[uchar4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global char4* dst, global short4* src) 12 | { 13 | *dst = convert_char4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/char/convert_char4_uint4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uchar:[0-9a-zA-Z_]+]] = OpTypeInt 8 0 7 | // CHECK-DAG: %[[uchar4:[0-9a-zA-Z_]+]] = OpTypeVector %[[uchar]] 4 8 | // CHECK: OpUConvert %[[uchar4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global char4* dst, global uint4* src) 12 | { 13 | *dst = convert_char4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/char/convert_char4_ulong4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uchar:[0-9a-zA-Z_]+]] = OpTypeInt 8 0 7 | // CHECK-DAG: %[[uchar4:[0-9a-zA-Z_]+]] = OpTypeVector %[[uchar]] 4 8 | // CHECK: OpUConvert %[[uchar4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global char4* dst, global ulong4* src) 12 | { 13 | *dst = convert_char4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/char/convert_char4_ushort4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uchar:[0-9a-zA-Z_]+]] = OpTypeInt 8 0 7 | // CHECK-DAG: %[[uchar4:[0-9a-zA-Z_]+]] = OpTypeVector %[[uchar]] 4 8 | // CHECK: OpUConvert %[[uchar4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global char4* dst, global ushort4* src) 12 | { 13 | *dst = convert_char4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/char/convert_char_uchar.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uchar:[0-9a-zA-Z_]+]] = OpTypeInt 8 0 7 | // CHECK-DAG: %[[uint:[0-9a-zA-Z_]+]] = OpTypeInt 32 0 8 | // CHECK-DAG: %[[uint_0:[0-9a-zA-Z_]+]] = OpConstant %[[uint]] 0 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global char* dst, global uchar* src) 12 | { 13 | *dst = convert_char(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/char/convert_uchar4_float4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uchar:[0-9a-zA-Z_]+]] = OpTypeInt 8 0 7 | // CHECK-DAG: %[[uchar4:[0-9a-zA-Z_]+]] = OpTypeVector %[[uchar]] 4 8 | // CHECK: OpConvertFToU %[[uchar4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global uchar4* dst, global float4* src) 12 | { 13 | *dst = convert_uchar4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/char/convert_uchar4_int4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uchar:[0-9a-zA-Z_]+]] = OpTypeInt 8 0 7 | // CHECK-DAG: %[[uchar4:[0-9a-zA-Z_]+]] = OpTypeVector %[[uchar]] 4 8 | // CHECK: OpUConvert %[[uchar4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global uchar4* dst, global int4* src) 12 | { 13 | *dst = convert_uchar4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/char/convert_uchar4_long4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uchar:[0-9a-zA-Z_]+]] = OpTypeInt 8 0 7 | // CHECK-DAG: %[[uchar4:[0-9a-zA-Z_]+]] = OpTypeVector %[[uchar]] 4 8 | // CHECK: OpUConvert %[[uchar4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global uchar4* dst, global long4* src) 12 | { 13 | *dst = convert_uchar4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/char/convert_uchar4_short4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uchar:[0-9a-zA-Z_]+]] = OpTypeInt 8 0 7 | // CHECK-DAG: %[[uchar4:[0-9a-zA-Z_]+]] = OpTypeVector %[[uchar]] 4 8 | // CHECK: OpUConvert %[[uchar4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global uchar4* dst, global short4* src) 12 | { 13 | *dst = convert_uchar4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/char/convert_uchar4_uint4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uchar:[0-9a-zA-Z_]+]] = OpTypeInt 8 0 7 | // CHECK-DAG: %[[uchar4:[0-9a-zA-Z_]+]] = OpTypeVector %[[uchar]] 4 8 | // CHECK: OpUConvert %[[uchar4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global uchar4* dst, global uint4* src) 12 | { 13 | *dst = convert_uchar4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/char/convert_uchar4_ulong4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uchar:[0-9a-zA-Z_]+]] = OpTypeInt 8 0 7 | // CHECK-DAG: %[[uchar4:[0-9a-zA-Z_]+]] = OpTypeVector %[[uchar]] 4 8 | // CHECK: OpUConvert %[[uchar4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global uchar4* dst, global ulong4* src) 12 | { 13 | *dst = convert_uchar4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/char/convert_uchar4_ushort4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uchar:[0-9a-zA-Z_]+]] = OpTypeInt 8 0 7 | // CHECK-DAG: %[[uchar4:[0-9a-zA-Z_]+]] = OpTypeVector %[[uchar]] 4 8 | // CHECK: OpUConvert %[[uchar4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global uchar4* dst, global ushort4* src) 12 | { 13 | *dst = convert_uchar4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/char/convert_uchar_char.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uchar:[0-9a-zA-Z_]+]] = OpTypeInt 8 0 7 | // CHECK-DAG: %[[uint:[0-9a-zA-Z_]+]] = OpTypeInt 32 0 8 | // CHECK-DAG: %[[uint_0:[0-9a-zA-Z_]+]] = OpConstant %[[uint]] 0 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global uchar* dst, global char* src) 12 | { 13 | *dst = convert_uchar(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/float/convert_float4_char4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[float:[0-9a-zA-Z_]+]] = OpTypeFloat 32 7 | // CHECK-DAG: %[[float4:[0-9a-zA-Z_]+]] = OpTypeVector %[[float]] 4 8 | // CHECK: OpConvertSToF %[[float4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float4* dst, global char4* src) 12 | { 13 | *dst = convert_float4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/float/convert_float4_int4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[float:[0-9a-zA-Z_]+]] = OpTypeFloat 32 7 | // CHECK-DAG: %[[float4:[0-9a-zA-Z_]+]] = OpTypeVector %[[float]] 4 8 | // CHECK: OpConvertSToF %[[float4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float4* dst, global int4* src) 12 | { 13 | *dst = convert_float4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/float/convert_float4_long4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[float:[0-9a-zA-Z_]+]] = OpTypeFloat 32 7 | // CHECK-DAG: %[[float4:[0-9a-zA-Z_]+]] = OpTypeVector %[[float]] 4 8 | // CHECK: OpConvertSToF %[[float4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float4* dst, global long4* src) 12 | { 13 | *dst = convert_float4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/float/convert_float4_short4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[float:[0-9a-zA-Z_]+]] = OpTypeFloat 32 7 | // CHECK-DAG: %[[float4:[0-9a-zA-Z_]+]] = OpTypeVector %[[float]] 4 8 | // CHECK: OpConvertSToF %[[float4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float4* dst, global short4* src) 12 | { 13 | *dst = convert_float4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/float/convert_float4_uchar4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[float:[0-9a-zA-Z_]+]] = OpTypeFloat 32 7 | // CHECK-DAG: %[[float4:[0-9a-zA-Z_]+]] = OpTypeVector %[[float]] 4 8 | // CHECK: OpConvertUToF %[[float4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float4* dst, global uchar4* src) 12 | { 13 | *dst = convert_float4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/float/convert_float4_uint4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[float:[0-9a-zA-Z_]+]] = OpTypeFloat 32 7 | // CHECK-DAG: %[[float4:[0-9a-zA-Z_]+]] = OpTypeVector %[[float]] 4 8 | // CHECK: OpConvertUToF %[[float4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float4* dst, global uint4* src) 12 | { 13 | *dst = convert_float4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/float/convert_float4_ulong4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[float:[0-9a-zA-Z_]+]] = OpTypeFloat 32 7 | // CHECK-DAG: %[[float4:[0-9a-zA-Z_]+]] = OpTypeVector %[[float]] 4 8 | // CHECK: OpConvertUToF %[[float4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float4* dst, global ulong4* src) 12 | { 13 | *dst = convert_float4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/float/convert_float4_ushort4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[float:[0-9a-zA-Z_]+]] = OpTypeFloat 32 7 | // CHECK-DAG: %[[float4:[0-9a-zA-Z_]+]] = OpTypeVector %[[float]] 4 8 | // CHECK: OpConvertUToF %[[float4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float4* dst, global ushort4* src) 12 | { 13 | *dst = convert_float4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/half/convert_half2_half2.ll: -------------------------------------------------------------------------------- 1 | 2 | ; RUN: clspv-opt --passes=replace-opencl-builtin %s -o %t.ll 3 | ; RUN: FileCheck %s < %t.ll 4 | 5 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 6 | target triple = "spir-unknown-unknown" 7 | 8 | ; CHECK: ret <2 x half> %x 9 | 10 | define <2 x half>@foo(<2 x half> %x) { 11 | entry: 12 | %call = call <2 x half> @_Z13convert_half2Dv2_Dh(<2 x half> %x) 13 | ret <2 x half> %call 14 | } 15 | 16 | declare <2 x half> @_Z13convert_half2Dv2_Dh(<2 x half>) 17 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/half/convert_half3_half3.ll: -------------------------------------------------------------------------------- 1 | 2 | ; RUN: clspv-opt --passes=replace-opencl-builtin %s -o %t.ll 3 | ; RUN: FileCheck %s < %t.ll 4 | 5 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 6 | target triple = "spir-unknown-unknown" 7 | 8 | ; CHECK: ret <3 x half> %x 9 | 10 | define <3 x half>@foo(<3 x half> %x) { 11 | entry: 12 | %call = call <3 x half> @_Z13convert_half3Dv3_Dh(<3 x half> %x) 13 | ret <3 x half> %call 14 | } 15 | 16 | declare <3 x half> @_Z13convert_half3Dv3_Dh(<3 x half>) 17 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/half/convert_half4_half4.ll: -------------------------------------------------------------------------------- 1 | 2 | ; RUN: clspv-opt --passes=replace-opencl-builtin %s -o %t.ll 3 | ; RUN: FileCheck %s < %t.ll 4 | 5 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 6 | target triple = "spir-unknown-unknown" 7 | 8 | ; CHECK: ret <4 x half> %x 9 | 10 | define <4 x half>@foo(<4 x half> %x) { 11 | entry: 12 | %call = call <4 x half> @_Z13convert_half4Dv4_Dh(<4 x half> %x) 13 | ret <4 x half> %call 14 | } 15 | 16 | declare <4 x half> @_Z13convert_half4Dv4_Dh(<4 x half>) 17 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/half/convert_half_char.ll: -------------------------------------------------------------------------------- 1 | 2 | ; RUN: clspv-opt --passes=replace-opencl-builtin %s -o %t.ll 3 | ; RUN: FileCheck %s < %t.ll 4 | 5 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 6 | target triple = "spir-unknown-unknown" 7 | 8 | ; CHECK: [[conv:%[a-zA-Z0-9_.]+]] = sitofp i8 %x to half 9 | ; CHECK: ret half [[conv]] 10 | 11 | define half@foo(i8 %x) { 12 | entry: 13 | %call = call half @_Z12convert_halfc(i8 %x) 14 | ret half %call 15 | } 16 | 17 | declare half @_Z12convert_halfc(i8) 18 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/half/convert_half_double.ll: -------------------------------------------------------------------------------- 1 | 2 | ; RUN: clspv-opt --passes=replace-opencl-builtin %s -o %t.ll 3 | ; RUN: FileCheck %s < %t.ll 4 | 5 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 6 | target triple = "spir-unknown-unknown" 7 | 8 | ; CHECK: [[conv:%[a-zA-Z0-9_.]+]] = fptrunc double %x to half 9 | ; CHECK: ret half [[conv]] 10 | 11 | define half@foo(double %x) { 12 | entry: 13 | %call = call half @_Z12convert_halfDh(double %x) 14 | ret half %call 15 | } 16 | 17 | declare half @_Z12convert_halfDh(double) 18 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/half/convert_half_float.ll: -------------------------------------------------------------------------------- 1 | 2 | ; RUN: clspv-opt --passes=replace-opencl-builtin %s -o %t.ll 3 | ; RUN: FileCheck %s < %t.ll 4 | 5 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 6 | target triple = "spir-unknown-unknown" 7 | 8 | ; CHECK: [[conv:%[a-zA-Z0-9_.]+]] = fptrunc float %x to half 9 | ; CHECK: ret half [[conv]] 10 | 11 | define half@foo(float %x) { 12 | entry: 13 | %call = call half @_Z12convert_halff(float %x) 14 | ret half %call 15 | } 16 | 17 | declare half @_Z12convert_halff(float) 18 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/half/convert_half_half.ll: -------------------------------------------------------------------------------- 1 | 2 | ; RUN: clspv-opt --passes=replace-opencl-builtin %s -o %t.ll 3 | ; RUN: FileCheck %s < %t.ll 4 | 5 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 6 | target triple = "spir-unknown-unknown" 7 | 8 | ; CHECK: ret half %x 9 | 10 | define half@foo(half %x) { 11 | entry: 12 | %call = call half @_Z12convert_halfDh(half %x) 13 | ret half %call 14 | } 15 | 16 | declare half @_Z12convert_halfDh(half) 17 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/half/convert_half_int.ll: -------------------------------------------------------------------------------- 1 | 2 | ; RUN: clspv-opt --passes=replace-opencl-builtin %s -o %t.ll 3 | ; RUN: FileCheck %s < %t.ll 4 | 5 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 6 | target triple = "spir-unknown-unknown" 7 | 8 | ; CHECK: [[conv:%[a-zA-Z0-9_.]+]] = sitofp i32 %x to half 9 | ; CHECK: ret half [[conv]] 10 | 11 | define half@foo(i32 %x) { 12 | entry: 13 | %call = call half @_Z12convert_halfi(i32 %x) 14 | ret half %call 15 | } 16 | 17 | declare half @_Z12convert_halfi(i32) 18 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/half/convert_half_long.ll: -------------------------------------------------------------------------------- 1 | 2 | ; RUN: clspv-opt --passes=replace-opencl-builtin %s -o %t.ll 3 | ; RUN: FileCheck %s < %t.ll 4 | 5 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 6 | target triple = "spir-unknown-unknown" 7 | 8 | ; CHECK: [[conv:%[a-zA-Z0-9_.]+]] = sitofp i64 %x to half 9 | ; CHECK: ret half [[conv]] 10 | 11 | define half@foo(i64 %x) { 12 | entry: 13 | %call = call half @_Z12convert_halfl(i64 %x) 14 | ret half %call 15 | } 16 | 17 | declare half @_Z12convert_halfl(i64) 18 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/half/convert_half_short.ll: -------------------------------------------------------------------------------- 1 | 2 | ; RUN: clspv-opt --passes=replace-opencl-builtin %s -o %t.ll 3 | ; RUN: FileCheck %s < %t.ll 4 | 5 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 6 | target triple = "spir-unknown-unknown" 7 | 8 | ; CHECK: [[conv:%[a-zA-Z0-9_.]+]] = sitofp i16 %x to half 9 | ; CHECK: ret half [[conv]] 10 | 11 | define half@foo(i16 %x) { 12 | entry: 13 | %call = call half @_Z12convert_halfs(i16 %x) 14 | ret half %call 15 | } 16 | 17 | declare half @_Z12convert_halfs(i16) 18 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/half/convert_half_uchar.ll: -------------------------------------------------------------------------------- 1 | 2 | ; RUN: clspv-opt --passes=replace-opencl-builtin %s -o %t.ll 3 | ; RUN: FileCheck %s < %t.ll 4 | 5 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 6 | target triple = "spir-unknown-unknown" 7 | 8 | ; CHECK: [[conv:%[a-zA-Z0-9_.]+]] = uitofp i8 %x to half 9 | ; CHECK: ret half [[conv]] 10 | 11 | define half@foo(i8 %x) { 12 | entry: 13 | %call = call half @_Z12convert_halfh(i8 %x) 14 | ret half %call 15 | } 16 | 17 | declare half @_Z12convert_halfh(i8) 18 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/half/convert_half_uint.ll: -------------------------------------------------------------------------------- 1 | 2 | ; RUN: clspv-opt --passes=replace-opencl-builtin %s -o %t.ll 3 | ; RUN: FileCheck %s < %t.ll 4 | 5 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 6 | target triple = "spir-unknown-unknown" 7 | 8 | ; CHECK: [[conv:%[a-zA-Z0-9_.]+]] = uitofp i32 %x to half 9 | ; CHECK: ret half [[conv]] 10 | 11 | define half@foo(i32 %x) { 12 | entry: 13 | %call = call half @_Z12convert_halfj(i32 %x) 14 | ret half %call 15 | } 16 | 17 | declare half @_Z12convert_halfj(i32) 18 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/half/convert_half_ulong.ll: -------------------------------------------------------------------------------- 1 | 2 | ; RUN: clspv-opt --passes=replace-opencl-builtin %s -o %t.ll 3 | ; RUN: FileCheck %s < %t.ll 4 | 5 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 6 | target triple = "spir-unknown-unknown" 7 | 8 | ; CHECK: [[conv:%[a-zA-Z0-9_.]+]] = uitofp i64 %x to half 9 | ; CHECK: ret half [[conv]] 10 | 11 | define half@foo(i64 %x) { 12 | entry: 13 | %call = call half @_Z12convert_halfm(i64 %x) 14 | ret half %call 15 | } 16 | 17 | declare half @_Z12convert_halfm(i64) 18 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/half/convert_half_ushort.ll: -------------------------------------------------------------------------------- 1 | 2 | ; RUN: clspv-opt --passes=replace-opencl-builtin %s -o %t.ll 3 | ; RUN: FileCheck %s < %t.ll 4 | 5 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 6 | target triple = "spir-unknown-unknown" 7 | 8 | ; CHECK: [[conv:%[a-zA-Z0-9_.]+]] = uitofp i16 %x to half 9 | ; CHECK: ret half [[conv]] 10 | 11 | define half@foo(i16 %x) { 12 | entry: 13 | %call = call half @_Z12convert_halft(i16 %x) 14 | ret half %call 15 | } 16 | 17 | declare half @_Z12convert_halft(i16) 18 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/int/convert_int4_char4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uint:[0-9a-zA-Z_]+]] = OpTypeInt 32 0 7 | // CHECK-DAG: %[[uint4:[0-9a-zA-Z_]+]] = OpTypeVector %[[uint]] 4 8 | // CHECK: OpSConvert %[[uint4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global int4* dst, global char4* src) 12 | { 13 | *dst = convert_int4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/int/convert_int4_float4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uint:[0-9a-zA-Z_]+]] = OpTypeInt 32 0 7 | // CHECK-DAG: %[[uint4:[0-9a-zA-Z_]+]] = OpTypeVector %[[uint]] 4 8 | // CHECK: OpConvertFToS %[[uint4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global int4* dst, global float4* src) 12 | { 13 | *dst = convert_int4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/int/convert_int4_long4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uint:[0-9a-zA-Z_]+]] = OpTypeInt 32 0 7 | // CHECK-DAG: %[[uint4:[0-9a-zA-Z_]+]] = OpTypeVector %[[uint]] 4 8 | // CHECK: OpUConvert %[[uint4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global int4* dst, global long4* src) 12 | { 13 | *dst = convert_int4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/int/convert_int4_short4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uint:[0-9a-zA-Z_]+]] = OpTypeInt 32 0 7 | // CHECK-DAG: %[[uint4:[0-9a-zA-Z_]+]] = OpTypeVector %[[uint]] 4 8 | // CHECK: OpSConvert %[[uint4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global int4* dst, global short4* src) 12 | { 13 | *dst = convert_int4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/int/convert_int4_uchar4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uint:[0-9a-zA-Z_]+]] = OpTypeInt 32 0 7 | // CHECK-DAG: %[[uint4:[0-9a-zA-Z_]+]] = OpTypeVector %[[uint]] 4 8 | // CHECK: OpUConvert %[[uint4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global int4* dst, global uchar4* src) 12 | { 13 | *dst = convert_int4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/int/convert_int4_uint4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uint:[0-9a-zA-Z_]+]] = OpTypeInt 32 0 7 | // CHECK-DAG: %[[v4uint:[0-9a-zA-Z_]+]] = OpTypeVector %[[uint]] 4 8 | // CHECK-DAG: %[[uint_0:[0-9a-zA-Z_]+]] = OpConstant %[[uint]] 0 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global int4* dst, global uint4* src) 12 | { 13 | *dst = convert_int4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/int/convert_int4_ulong4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uint:[0-9a-zA-Z_]+]] = OpTypeInt 32 0 7 | // CHECK-DAG: %[[uint4:[0-9a-zA-Z_]+]] = OpTypeVector %[[uint]] 4 8 | // CHECK: OpUConvert %[[uint4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global int4* dst, global ulong4* src) 12 | { 13 | *dst = convert_int4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/int/convert_int4_ushort4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uint:[0-9a-zA-Z_]+]] = OpTypeInt 32 0 7 | // CHECK-DAG: %[[uint4:[0-9a-zA-Z_]+]] = OpTypeVector %[[uint]] 4 8 | // CHECK: OpUConvert %[[uint4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global int4* dst, global ushort4* src) 12 | { 13 | *dst = convert_int4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/int/convert_int_uint.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uint:[0-9a-zA-Z_]+]] = OpTypeInt 32 0 7 | // CHECK-DAG: %[[uint_0:[0-9a-zA-Z_]+]] = OpConstant %[[uint]] 0 8 | 9 | 10 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global int* dst, global uint* src) 11 | { 12 | *dst = convert_int(*src); 13 | } 14 | 15 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/int/convert_uint4_char4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uint:[0-9a-zA-Z_]+]] = OpTypeInt 32 0 7 | // CHECK-DAG: %[[uint4:[0-9a-zA-Z_]+]] = OpTypeVector %[[uint]] 4 8 | // CHECK: OpSConvert %[[uint4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global uint4* dst, global char4* src) 12 | { 13 | *dst = convert_uint4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/int/convert_uint4_float4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uint:[0-9a-zA-Z_]+]] = OpTypeInt 32 0 7 | // CHECK-DAG: %[[uint4:[0-9a-zA-Z_]+]] = OpTypeVector %[[uint]] 4 8 | // CHECK: OpConvertFToU %[[uint4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global uint4* dst, global float4* src) 12 | { 13 | *dst = convert_uint4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/int/convert_uint4_int4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uint:[0-9a-zA-Z_]+]] = OpTypeInt 32 0 7 | // CHECK-DAG: %[[v4uint:[0-9a-zA-Z_]+]] = OpTypeVector %[[uint]] 4 8 | // CHECK-DAG: %[[uint_0:[0-9a-zA-Z_]+]] = OpConstant %[[uint]] 0 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global uint4* dst, global int4* src) 12 | { 13 | *dst = convert_uint4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/int/convert_uint4_long4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uint:[0-9a-zA-Z_]+]] = OpTypeInt 32 0 7 | // CHECK-DAG: %[[uint4:[0-9a-zA-Z_]+]] = OpTypeVector %[[uint]] 4 8 | // CHECK: OpUConvert %[[uint4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global uint4* dst, global long4* src) 12 | { 13 | *dst = convert_uint4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/int/convert_uint4_short4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uint:[0-9a-zA-Z_]+]] = OpTypeInt 32 0 7 | // CHECK-DAG: %[[uint4:[0-9a-zA-Z_]+]] = OpTypeVector %[[uint]] 4 8 | // CHECK: OpSConvert %[[uint4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global uint4* dst, global short4* src) 12 | { 13 | *dst = convert_uint4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/int/convert_uint4_uchar4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uint:[0-9a-zA-Z_]+]] = OpTypeInt 32 0 7 | // CHECK-DAG: %[[uint4:[0-9a-zA-Z_]+]] = OpTypeVector %[[uint]] 4 8 | // CHECK: OpUConvert %[[uint4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global uint4* dst, global uchar4* src) 12 | { 13 | *dst = convert_uint4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/int/convert_uint4_ulong4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uint:[0-9a-zA-Z_]+]] = OpTypeInt 32 0 7 | // CHECK-DAG: %[[uint4:[0-9a-zA-Z_]+]] = OpTypeVector %[[uint]] 4 8 | // CHECK: OpUConvert %[[uint4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global uint4* dst, global ulong4* src) 12 | { 13 | *dst = convert_uint4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/int/convert_uint4_ushort4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uint:[0-9a-zA-Z_]+]] = OpTypeInt 32 0 7 | // CHECK-DAG: %[[uint4:[0-9a-zA-Z_]+]] = OpTypeVector %[[uint]] 4 8 | // CHECK: OpUConvert %[[uint4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global uint4* dst, global ushort4* src) 12 | { 13 | *dst = convert_uint4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/int/convert_uint_int.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uint:[0-9a-zA-Z_]+]] = OpTypeInt 32 0 7 | // CHECK-DAG: %[[uint_0:[0-9a-zA-Z_]+]] = OpConstant %[[uint]] 0 8 | 9 | 10 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global uint* dst, global int* src) 11 | { 12 | *dst = convert_uint(*src); 13 | } 14 | 15 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/long/convert_long4_char4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ulong:[0-9a-zA-Z_]+]] = OpTypeInt 64 0 7 | // CHECK-DAG: %[[ulong4:[0-9a-zA-Z_]+]] = OpTypeVector %[[ulong]] 4 8 | // CHECK: OpSConvert %[[ulong4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global long4* dst, global char4* src) 12 | { 13 | *dst = convert_long4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/long/convert_long4_float4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ulong:[0-9a-zA-Z_]+]] = OpTypeInt 64 0 7 | // CHECK-DAG: %[[ulong4:[0-9a-zA-Z_]+]] = OpTypeVector %[[ulong]] 4 8 | // CHECK: OpConvertFToS %[[ulong4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global long4* dst, global float4* src) 12 | { 13 | *dst = convert_long4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/long/convert_long4_int4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ulong:[0-9a-zA-Z_]+]] = OpTypeInt 64 0 7 | // CHECK-DAG: %[[ulong4:[0-9a-zA-Z_]+]] = OpTypeVector %[[ulong]] 4 8 | // CHECK: OpSConvert %[[ulong4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global long4* dst, global int4* src) 12 | { 13 | *dst = convert_long4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/long/convert_long4_short4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ulong:[0-9a-zA-Z_]+]] = OpTypeInt 64 0 7 | // CHECK-DAG: %[[ulong4:[0-9a-zA-Z_]+]] = OpTypeVector %[[ulong]] 4 8 | // CHECK: OpSConvert %[[ulong4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global long4* dst, global short4* src) 12 | { 13 | *dst = convert_long4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/long/convert_long4_uchar4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ulong:[0-9a-zA-Z_]+]] = OpTypeInt 64 0 7 | // CHECK-DAG: %[[ulong4:[0-9a-zA-Z_]+]] = OpTypeVector %[[ulong]] 4 8 | // CHECK: OpUConvert %[[ulong4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global long4* dst, global uchar4* src) 12 | { 13 | *dst = convert_long4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/long/convert_long4_uint4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ulong:[0-9a-zA-Z_]+]] = OpTypeInt 64 0 7 | // CHECK-DAG: %[[ulong4:[0-9a-zA-Z_]+]] = OpTypeVector %[[ulong]] 4 8 | // CHECK: OpUConvert %[[ulong4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global long4* dst, global uint4* src) 12 | { 13 | *dst = convert_long4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/long/convert_long4_ushort4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ulong:[0-9a-zA-Z_]+]] = OpTypeInt 64 0 7 | // CHECK-DAG: %[[ulong4:[0-9a-zA-Z_]+]] = OpTypeVector %[[ulong]] 4 8 | // CHECK: OpUConvert %[[ulong4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global long4* dst, global ushort4* src) 12 | { 13 | *dst = convert_long4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/long/convert_long_ulong.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ulong:[0-9a-zA-Z_]+]] = OpTypeInt 64 0 7 | // CHECK-DAG: %[[uint:[0-9a-zA-Z_]+]] = OpTypeInt 32 0 8 | // CHECK-DAG: %[[uint_0:[0-9a-zA-Z_]+]] = OpConstant %[[uint]] 0 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global long* dst, global ulong* src) 12 | { 13 | *dst = convert_long(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/long/convert_ulong4_char4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ulong:[0-9a-zA-Z_]+]] = OpTypeInt 64 0 7 | // CHECK-DAG: %[[ulong4:[0-9a-zA-Z_]+]] = OpTypeVector %[[ulong]] 4 8 | // CHECK: OpSConvert %[[ulong4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global ulong4* dst, global char4* src) 12 | { 13 | *dst = convert_ulong4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/long/convert_ulong4_float4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ulong:[0-9a-zA-Z_]+]] = OpTypeInt 64 0 7 | // CHECK-DAG: %[[ulong4:[0-9a-zA-Z_]+]] = OpTypeVector %[[ulong]] 4 8 | // CHECK: OpConvertFToU %[[ulong4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global ulong4* dst, global float4* src) 12 | { 13 | *dst = convert_ulong4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/long/convert_ulong4_int4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ulong:[0-9a-zA-Z_]+]] = OpTypeInt 64 0 7 | // CHECK-DAG: %[[ulong4:[0-9a-zA-Z_]+]] = OpTypeVector %[[ulong]] 4 8 | // CHECK: OpSConvert %[[ulong4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global ulong4* dst, global int4* src) 12 | { 13 | *dst = convert_ulong4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/long/convert_ulong4_short4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ulong:[0-9a-zA-Z_]+]] = OpTypeInt 64 0 7 | // CHECK-DAG: %[[ulong4:[0-9a-zA-Z_]+]] = OpTypeVector %[[ulong]] 4 8 | // CHECK: OpSConvert %[[ulong4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global ulong4* dst, global short4* src) 12 | { 13 | *dst = convert_ulong4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/long/convert_ulong4_uchar4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ulong:[0-9a-zA-Z_]+]] = OpTypeInt 64 0 7 | // CHECK-DAG: %[[ulong4:[0-9a-zA-Z_]+]] = OpTypeVector %[[ulong]] 4 8 | // CHECK: OpUConvert %[[ulong4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global ulong4* dst, global uchar4* src) 12 | { 13 | *dst = convert_ulong4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/long/convert_ulong4_uint4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ulong:[0-9a-zA-Z_]+]] = OpTypeInt 64 0 7 | // CHECK-DAG: %[[ulong4:[0-9a-zA-Z_]+]] = OpTypeVector %[[ulong]] 4 8 | // CHECK: OpUConvert %[[ulong4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global ulong4* dst, global uint4* src) 12 | { 13 | *dst = convert_ulong4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/long/convert_ulong4_ushort4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ulong:[0-9a-zA-Z_]+]] = OpTypeInt 64 0 7 | // CHECK-DAG: %[[ulong4:[0-9a-zA-Z_]+]] = OpTypeVector %[[ulong]] 4 8 | // CHECK: OpUConvert %[[ulong4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global ulong4* dst, global ushort4* src) 12 | { 13 | *dst = convert_ulong4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/long/convert_ulong_long.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ulong:[0-9a-zA-Z_]+]] = OpTypeInt 64 0 7 | // CHECK-DAG: %[[uint:[0-9a-zA-Z_]+]] = OpTypeInt 32 0 8 | // CHECK-DAG: %[[uint_0:[0-9a-zA-Z_]+]] = OpConstant %[[uint]] 0 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global ulong* dst, global long* src) 12 | { 13 | *dst = convert_ulong(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/short/convert_short4_char4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ushort:[0-9a-zA-Z_]+]] = OpTypeInt 16 0 7 | // CHECK-DAG: %[[ushort4:[0-9a-zA-Z_]+]] = OpTypeVector %[[ushort]] 4 8 | // CHECK: OpSConvert %[[ushort4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global short4* dst, global char4* src) 12 | { 13 | *dst = convert_short4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/short/convert_short4_float4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ushort:[0-9a-zA-Z_]+]] = OpTypeInt 16 0 7 | // CHECK-DAG: %[[ushort4:[0-9a-zA-Z_]+]] = OpTypeVector %[[ushort]] 4 8 | // CHECK: OpConvertFToS %[[ushort4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global short4* dst, global float4* src) 12 | { 13 | *dst = convert_short4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/short/convert_short4_int4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ushort:[0-9a-zA-Z_]+]] = OpTypeInt 16 0 7 | // CHECK-DAG: %[[ushort4:[0-9a-zA-Z_]+]] = OpTypeVector %[[ushort]] 4 8 | // CHECK: OpUConvert %[[ushort4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global short4* dst, global int4* src) 12 | { 13 | *dst = convert_short4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/short/convert_short4_long4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ushort:[0-9a-zA-Z_]+]] = OpTypeInt 16 0 7 | // CHECK-DAG: %[[ushort4:[0-9a-zA-Z_]+]] = OpTypeVector %[[ushort]] 4 8 | // CHECK: OpUConvert %[[ushort4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global short4* dst, global long4* src) 12 | { 13 | *dst = convert_short4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/short/convert_short4_uchar4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ushort:[0-9a-zA-Z_]+]] = OpTypeInt 16 0 7 | // CHECK-DAG: %[[ushort4:[0-9a-zA-Z_]+]] = OpTypeVector %[[ushort]] 4 8 | // CHECK: OpUConvert %[[ushort4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global short4* dst, global uchar4* src) 12 | { 13 | *dst = convert_short4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/short/convert_short4_uint4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ushort:[0-9a-zA-Z_]+]] = OpTypeInt 16 0 7 | // CHECK-DAG: %[[ushort4:[0-9a-zA-Z_]+]] = OpTypeVector %[[ushort]] 4 8 | // CHECK: OpUConvert %[[ushort4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global short4* dst, global uint4* src) 12 | { 13 | *dst = convert_short4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/short/convert_short4_ulong4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ushort:[0-9a-zA-Z_]+]] = OpTypeInt 16 0 7 | // CHECK-DAG: %[[ushort4:[0-9a-zA-Z_]+]] = OpTypeVector %[[ushort]] 4 8 | // CHECK: OpUConvert %[[ushort4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global short4* dst, global ulong4* src) 12 | { 13 | *dst = convert_short4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/short/convert_short_ushort.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ushort:[0-9a-zA-Z_]+]] = OpTypeInt 16 0 7 | // CHECK-DAG: %[[uint:[0-9a-zA-Z_]+]] = OpTypeInt 32 0 8 | // CHECK-DAG: %[[uint_0:[0-9a-zA-Z_]+]] = OpConstant %[[uint]] 0 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global short* dst, global ushort* src) 12 | { 13 | *dst = convert_short(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/short/convert_ushort4_char4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ushort:[0-9a-zA-Z_]+]] = OpTypeInt 16 0 7 | // CHECK-DAG: %[[ushort4:[0-9a-zA-Z_]+]] = OpTypeVector %[[ushort]] 4 8 | // CHECK: OpSConvert %[[ushort4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global ushort4* dst, global char4* src) 12 | { 13 | *dst = convert_ushort4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/short/convert_ushort4_float4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ushort:[0-9a-zA-Z_]+]] = OpTypeInt 16 0 7 | // CHECK-DAG: %[[ushort4:[0-9a-zA-Z_]+]] = OpTypeVector %[[ushort]] 4 8 | // CHECK: OpConvertFToU %[[ushort4]] 9 | 10 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global ushort4* dst, global float4* src) 11 | { 12 | *dst = convert_ushort4(*src); 13 | } 14 | 15 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/short/convert_ushort4_int4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ushort:[0-9a-zA-Z_]+]] = OpTypeInt 16 0 7 | // CHECK-DAG: %[[ushort4:[0-9a-zA-Z_]+]] = OpTypeVector %[[ushort]] 4 8 | // CHECK: OpUConvert %[[ushort4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global ushort4* dst, global int4* src) 12 | { 13 | *dst = convert_ushort4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/short/convert_ushort4_long4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ushort:[0-9a-zA-Z_]+]] = OpTypeInt 16 0 7 | // CHECK-DAG: %[[ushort4:[0-9a-zA-Z_]+]] = OpTypeVector %[[ushort]] 4 8 | // CHECK: OpUConvert %[[ushort4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global ushort4* dst, global long4* src) 12 | { 13 | *dst = convert_ushort4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/short/convert_ushort4_uchar4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ushort:[0-9a-zA-Z_]+]] = OpTypeInt 16 0 7 | // CHECK-DAG: %[[ushort4:[0-9a-zA-Z_]+]] = OpTypeVector %[[ushort]] 4 8 | // CHECK: OpUConvert %[[ushort4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global ushort4* dst, global uchar4* src) 12 | { 13 | *dst = convert_ushort4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/short/convert_ushort4_uint4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ushort:[0-9a-zA-Z_]+]] = OpTypeInt 16 0 7 | // CHECK-DAG: %[[ushort4:[0-9a-zA-Z_]+]] = OpTypeVector %[[ushort]] 4 8 | // CHECK: OpUConvert %[[ushort4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global ushort4* dst, global uint4* src) 12 | { 13 | *dst = convert_ushort4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/short/convert_ushort4_ulong4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ushort:[0-9a-zA-Z_]+]] = OpTypeInt 16 0 7 | // CHECK-DAG: %[[ushort4:[0-9a-zA-Z_]+]] = OpTypeVector %[[ushort]] 4 8 | // CHECK: OpUConvert %[[ushort4]] 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global ushort4* dst, global ulong4* src) 12 | { 13 | *dst = convert_ushort4(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/ConvertBuiltins/short/convert_ushort_short.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ushort:[0-9a-zA-Z_]+]] = OpTypeInt 16 0 7 | // CHECK-DAG: %[[uint:[0-9a-zA-Z_]+]] = OpTypeInt 32 0 8 | // CHECK-DAG: %[[uint_0:[0-9a-zA-Z_]+]] = OpConstant %[[uint]] 0 9 | 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global ushort* dst, global short* src) 12 | { 13 | *dst = convert_ushort(*src); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/Diagnostics/no-pushconstant-16bit.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -verify %s -no-16bit-storage=pushconstant -w -pod-pushconstant 2 | 3 | #pragma OPENCL EXTENSION cl_khr_fp16 : enable 4 | 5 | kernel void foo(short a) { } //expected-error{{16-bit storage is not supported for push constants}} 6 | 7 | kernel void bar(half a) { } //expected-error{{16-bit storage is not supported for push constants}} 8 | 9 | kernel void baz(ushort a) { } //expected-error{{16-bit storage is not supported for push constants}} 10 | -------------------------------------------------------------------------------- /test/Diagnostics/no-pushconstant-8bit.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -verify %s -no-8bit-storage=pushconstant -w -pod-pushconstant 2 | 3 | kernel void bar(char a) { } //expected-error{{8-bit storage is not supported for push constants}} 4 | 5 | kernel void baz(uchar a) { } //expected-error{{8-bit storage is not supported for push constants}} 6 | 7 | -------------------------------------------------------------------------------- /test/Diagnostics/no-ssbo-16bit.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -verify %s -no-16bit-storage=ssbo -w 2 | 3 | #pragma OPENCL EXTENSION cl_khr_fp16 : enable 4 | 5 | struct A { 6 | half4 x; 7 | }; 8 | 9 | struct B { 10 | struct A a[2]; 11 | }; 12 | 13 | kernel void foo(global short* a) { } //expected-error{{16-bit storage is not supported for SSBOs}} 14 | 15 | kernel void bar(constant struct B* a) { } //expected-error{{16-bit storage is not supported for SSBOs}} 16 | -------------------------------------------------------------------------------- /test/Diagnostics/no-ssbo-8bit.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -verify %s -no-8bit-storage=ssbo -w 2 | 3 | kernel void foo(global char* a) { } //expected-error{{8-bit storage is not supported for SSBOs}} 4 | 5 | kernel void bar(constant char* a) { } //expected-error{{8-bit storage is not supported for SSBOs}} 6 | 7 | -------------------------------------------------------------------------------- /test/Diagnostics/no-ubo-16bit.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -verify %s -no-16bit-storage=ubo -w -pod-ubo -constant-args-ubo -std430-ubo-layout 2 | 3 | #pragma OPENCL EXTENSION cl_khr_fp16 : enable 4 | 5 | kernel void foo(constant half* a) { } //expected-error{{16-bit storage is not supported for UBOs}} 6 | 7 | kernel void bar(ushort a) { } //expected-error{{16-bit storage is not supported for UBOs}} 8 | 9 | kernel void baz(short a) { } //expected-error{{16-bit storage is not supported for UBOs}} 10 | 11 | -------------------------------------------------------------------------------- /test/Diagnostics/no-ubo-8bit.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -verify %s -no-8bit-storage=ubo -w -pod-ubo -constant-args-ubo -std430-ubo-layout 2 | 3 | kernel void foo(constant char* a) { } //expected-error{{8-bit storage is not supported for UBOs}} 4 | 5 | kernel void bar(uchar a) { } //expected-error{{8-bit storage is not supported for UBOs}} 6 | 7 | kernel void baz(char a) { } //expected-error{{8-bit storage is not supported for UBOs}} 8 | 9 | -------------------------------------------------------------------------------- /test/Diagnostics/pipes-unsupported-cl2.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -cl-std=CL2.0 -inline-entry-points -verify %s 2 | 3 | kernel void pipes(read_only pipe int in, write_only pipe int out) { //expected-error{{pipes are not supported}} 4 | reserve_id_t ires = reserve_read_pipe(in, 2); //expected-warning{{unused variable 'ires'}} 5 | reserve_id_t ores = reserve_write_pipe(out, 2); //expected-warning{{unused variable 'ores'}} 6 | } 7 | -------------------------------------------------------------------------------- /test/Diagnostics/relax_16bit_pod_arg_check.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -verify -no-16bit-storage=ssbo -w 2 | 3 | // Lack of ssbo support for 16-bit values shouldn't prohibit this kernel. 4 | kernel void foo(short x) {} //expected-no-diagnostics 5 | -------------------------------------------------------------------------------- /test/Features/cl3-disabled-features.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -cl-std=CL3.0 %s -verify 2 | 3 | #ifdef __opencl_c_pipes 4 | #error FAIL 5 | #endif 6 | 7 | #ifdef __opencl_c_generic_address_space 8 | #error FAIL 9 | #endif 10 | 11 | #ifdef __opencl_c_device_enqueue 12 | #error FAIL 13 | #endif 14 | 15 | #ifdef __opencl_c_program_scope_global_variables 16 | #error FAIL 17 | #endif 18 | 19 | //expected-no-diagnostics 20 | -------------------------------------------------------------------------------- /test/Features/fp16-default.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -verify 2 | 3 | #ifndef cl_khr_fp16 4 | #error FAIL 5 | #endif 6 | //expected-no-diagnostics 7 | -------------------------------------------------------------------------------- /test/Features/fp16-disabled.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -fp16=0 %s -verify 2 | 3 | #ifdef cl_khr_fp16 4 | #error FAIL 5 | #endif 6 | //expected-no-diagnostics 7 | -------------------------------------------------------------------------------- /test/Features/fp64-default-cl3.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -cl-std=CL3.0 %s -verify 2 | 3 | #ifndef cl_khr_fp64 4 | #error FAIL 5 | #endif 6 | 7 | #ifndef __opencl_c_fp64 8 | #error FAIL 9 | #endif 10 | //expected-no-diagnostics 11 | -------------------------------------------------------------------------------- /test/Features/fp64-default.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -verify 2 | 3 | #ifndef cl_khr_fp64 4 | #error FAIL 5 | #endif 6 | //expected-no-diagnostics 7 | -------------------------------------------------------------------------------- /test/Features/fp64-disabled-cl3.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -cl-std=CL3.0 -fp64=0 %s -verify 2 | 3 | #ifdef cl_khr_fp64 4 | #error FAIL 5 | #endif 6 | 7 | #ifdef __opencl_c_fp64 8 | #error FAIL 9 | #endif 10 | //expected-no-diagnostics 11 | -------------------------------------------------------------------------------- /test/Features/fp64-disabled.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -fp64=0 %s -verify 2 | 3 | #ifdef cl_khr_fp64 4 | #error FAIL 5 | #endif 6 | //expected-no-diagnostics 7 | -------------------------------------------------------------------------------- /test/ImageBuiltins/get_image_channel_with_pod_arg.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | 7 | void kernel fct(global int *dst, int off, image1d_t read_only image) 8 | { 9 | *dst = get_image_channel_order(image) + off; 10 | } 11 | 12 | // CHECK: ImageArgumentInfoChannelOrderPushConstant {{.*}} %uint_2 %uint_4 %uint_4 13 | -------------------------------------------------------------------------------- /test/ImageBuiltins/image_1d_buffer_capability.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-NOT: OpCapability Sampled1D 7 | // CHECK-NOT: OpCapability Image1D 8 | // CHECK: OpCapability ImageBuffer 9 | // CHECK-NOT: OpCapability Image1D 10 | // CHECK-NOT: OpCapability Sampled1D 11 | 12 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(write_only image1d_buffer_t i, int c, float4 a) 13 | { 14 | write_imagef(i, c, a); 15 | } 16 | 17 | -------------------------------------------------------------------------------- /test/ImageBuiltins/image_1d_capability.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-NOT: OpCapability Sampled1D 7 | // CHECK: OpCapability Image1D 8 | // CHECK-NOT: OpCapability Sampled1D 9 | 10 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(write_only image1d_t i, int c, float4 a) 11 | { 12 | write_imagef(i, c, a); 13 | } 14 | 15 | -------------------------------------------------------------------------------- /test/ImageBuiltins/sampled_1d_capability.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(sampler_t s, read_only image1d_t i, float c, global float4* a) 7 | { 8 | *a = read_imagef(i, s, c); 9 | } 10 | 11 | // CHECK-NOT OpCapability Image1D 12 | // CHECK: OpCapability Sampled1D 13 | // CHECK-NOT OpCapability Image1D 14 | -------------------------------------------------------------------------------- /test/InlineFuncWithSingleCallSite/non_local_parameter.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: OpEntryPoint GLCompute [[entry:%[0-9a-zA-Z_]+]] "func_0" 7 | // CHECK: [[entry]] = OpFunction 8 | // CHECK: OpFunctionCall 9 | 10 | __attribute__((noinline)) 11 | int func_1(global int *in, int n) { return in[n]; } 12 | kernel void func_0(global int *in, global int *out, int n) { 13 | out[n] = func_1(in, n); 14 | } 15 | -------------------------------------------------------------------------------- /test/Int8/char_pod_arg.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -int8 2 | // RUN: spirv-dis -o %t.spvasm %t.spv 3 | // RUN: FileCheck %s < %t.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | kernel void foo(char c, global int* out) { 7 | *out = (int)c; 8 | } 9 | 10 | // CHECK: OpCapability Int8 11 | // CHECK: [[char:%[a-zA-Z0-9_]+]] = OpTypeInt 8 0 12 | // CHECK: [[struct:%[a-zA-Z0-9_]+]] = OpTypeStruct [[char]] 13 | // CHECK: [[block:%[a-zA-Z0-9_]+]] = OpTypeStruct [[struct]] 14 | // CHECK: [[ptr:%[a-zA-Z0-9_]+]] = OpTypePointer PushConstant [[block]] 15 | // CHECK: OpVariable [[ptr]] PushConstant 16 | -------------------------------------------------------------------------------- /test/Int8/int8_default.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis %t.spv -o %t.spvasm 3 | // RUN: FileCheck --check-prefix=ON %s < %t.spvasm 4 | // RUN: clspv %target %s -o %t2.spv -int8=0 5 | // RUN: spirv-dis %t2.spv -o %t2.spvasm 6 | // RUN: FileCheck --check-prefix=OFF %s < %t2.spvasm 7 | 8 | kernel void foo(global int* out, char a) { 9 | *out = a; 10 | } 11 | 12 | // ON: OpTypeInt 8 0 13 | // OFF-NOT: OpTypeInt 8 0 14 | -------------------------------------------------------------------------------- /test/IntegerBuiltins/abs/abs_char.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -int8 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | kernel void foo(global uchar* a, global char* b) { 7 | *a = abs(*b); 8 | } 9 | 10 | // CHECK: [[char:%[a-zA-Z0-9_]+]] = OpTypeInt 8 0 11 | // CHECK: [[ld:%[a-zA-Z0-9_]+]] = OpLoad [[char]] 12 | // CHECK: [[abs:%[a-zA-Z0-9_]+]] = OpExtInst [[char]] {{.*}} SAbs [[ld]] 13 | // CHECK: OpStore {{.*}} [[abs]] 14 | -------------------------------------------------------------------------------- /test/IntegerBuiltins/abs/abs_char2.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -int8 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | kernel void foo(global uchar2* a, global char2* b) { 7 | *a = abs(*b); 8 | } 9 | 10 | // CHECK: [[char:%[a-zA-Z0-9_]+]] = OpTypeInt 8 0 11 | // CHECK: [[char2:%[a-zA-Z0-9_]+]] = OpTypeVector [[char]] 2 12 | // CHECK: [[ld:%[a-zA-Z0-9_]+]] = OpLoad [[char2]] 13 | // CHECK: [[abs:%[a-zA-Z0-9_]+]] = OpExtInst [[char2]] {{.*}} SAbs [[ld]] 14 | // CHECK: OpStore {{.*}} [[abs]] 15 | 16 | -------------------------------------------------------------------------------- /test/IntegerBuiltins/abs/abs_char3.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -int8 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | kernel void foo(global uchar3* a, global char3* b) { 7 | *a = abs(*b); 8 | } 9 | 10 | // CHECK: [[char:%[a-zA-Z0-9_]+]] = OpTypeInt 8 0 11 | // CHECK: [[char3:%[a-zA-Z0-9_]+]] = OpTypeVector [[char]] 3 12 | // CHECK: [[ld:%[a-zA-Z0-9_]+]] = OpLoad [[char3]] 13 | // CHECK: [[abs:%[a-zA-Z0-9_]+]] = OpExtInst [[char3]] {{.*}} SAbs [[ld]] 14 | // CHECK: OpStore {{.*}} [[abs]] 15 | -------------------------------------------------------------------------------- /test/IntegerBuiltins/abs/abs_char3_novec3.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -int8 -vec3-to-vec4 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | kernel void foo(global uchar3* a, global char3* b) { 7 | *a = abs(*b); 8 | } 9 | 10 | // CHECK: [[char:%[a-zA-Z0-9_]+]] = OpTypeInt 8 0 11 | // CHECK: [[char4:%[a-zA-Z0-9_]+]] = OpTypeVector [[char]] 4 12 | // CHECK: [[ld:%[a-zA-Z0-9_]+]] = OpLoad [[char4]] 13 | // CHECK: [[abs:%[a-zA-Z0-9_]+]] = OpExtInst [[char4]] {{.*}} SAbs [[ld]] 14 | // CHECK: OpStore {{.*}} [[abs]] 15 | -------------------------------------------------------------------------------- /test/IntegerBuiltins/abs/abs_char4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -int8 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | kernel void foo(global uchar4* a, global char4* b) { 7 | *a = abs(*b); 8 | } 9 | 10 | // CHECK: [[char:%[a-zA-Z0-9_]+]] = OpTypeInt 8 0 11 | // CHECK: [[char4:%[a-zA-Z0-9_]+]] = OpTypeVector [[char]] 4 12 | // CHECK: [[ld:%[a-zA-Z0-9_]+]] = OpLoad [[char4]] 13 | // CHECK: [[abs:%[a-zA-Z0-9_]+]] = OpExtInst [[char4]] {{.*}} SAbs [[ld]] 14 | // CHECK: OpStore {{.*}} [[abs]] 15 | 16 | -------------------------------------------------------------------------------- /test/IntegerBuiltins/abs/abs_uchar.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -int8 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | kernel void foo(global uchar* a, global uchar* b) { 7 | *a = abs(*b); 8 | } 9 | 10 | // CHECK: [[char:%[a-zA-Z0-9_]+]] = OpTypeInt 8 0 11 | // CHECK: [[ld:%[a-zA-Z0-9_]+]] = OpLoad [[char]] 12 | // CHECK: OpStore {{.*}} [[ld]] 13 | 14 | -------------------------------------------------------------------------------- /test/IntegerBuiltins/abs/abs_uchar2.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -int8 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | kernel void foo(global uchar2* a, global uchar2* b) { 7 | *a = abs(*b); 8 | } 9 | 10 | // CHECK: [[char:%[a-zA-Z0-9_]+]] = OpTypeInt 8 0 11 | // CHECK: [[char2:%[a-zA-Z0-9_]+]] = OpTypeVector [[char]] 2 12 | // CHECK: [[ld:%[a-zA-Z0-9_]+]] = OpLoad [[char2]] 13 | // CHECK: OpStore {{.*}} [[ld]] 14 | 15 | 16 | -------------------------------------------------------------------------------- /test/IntegerBuiltins/abs/abs_uchar3.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -int8 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | kernel void foo(global uchar3* a, global uchar3* b) { 7 | *a = abs(*b); 8 | } 9 | 10 | // CHECK: [[char:%[a-zA-Z0-9_]+]] = OpTypeInt 8 0 11 | // CHECK: [[char3:%[a-zA-Z0-9_]+]] = OpTypeVector [[char]] 3 12 | // CHECK: [[ld:%[a-zA-Z0-9_]+]] = OpLoad [[char3]] 13 | // CHECK: OpStore {{.*}} [[ld]] 14 | 15 | 16 | -------------------------------------------------------------------------------- /test/IntegerBuiltins/abs/abs_uchar3_novec3.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -int8 -vec3-to-vec4 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | kernel void foo(global uchar3* a, global uchar3* b) { 7 | *a = abs(*b); 8 | } 9 | 10 | // CHECK: [[char:%[a-zA-Z0-9_]+]] = OpTypeInt 8 0 11 | // CHECK: [[char4:%[a-zA-Z0-9_]+]] = OpTypeVector [[char]] 4 12 | // CHECK: [[ld:%[a-zA-Z0-9_]+]] = OpLoad [[char4]] 13 | // CHECK: OpStore {{.*}} [[ld]] 14 | 15 | 16 | -------------------------------------------------------------------------------- /test/IntegerBuiltins/abs/abs_uchar4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -int8 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | kernel void foo(global uchar4* a, global uchar4* b) { 7 | *a = abs(*b); 8 | } 9 | 10 | // CHECK: [[char:%[a-zA-Z0-9_]+]] = OpTypeInt 8 0 11 | // CHECK: [[char4:%[a-zA-Z0-9_]+]] = OpTypeVector [[char]] 4 12 | // CHECK: [[ld:%[a-zA-Z0-9_]+]] = OpLoad [[char4]] 13 | // CHECK: OpStore {{.*}} [[ld]] 14 | 15 | 16 | -------------------------------------------------------------------------------- /test/IntegerBuiltins/abs/abs_uint.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[UINT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeInt 32 0 7 | // CHECK: %[[LOADB_ID:[a-zA-Z0-9_]*]] = OpLoad %[[UINT_TYPE_ID]] 8 | // CHECK: OpStore {{.*}} %[[LOADB_ID]] 9 | 10 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global uint* a, global uint* b) 11 | { 12 | *a = abs(*b); 13 | } 14 | -------------------------------------------------------------------------------- /test/IntegerBuiltins/abs/abs_uint2.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[UINT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeInt 32 0 7 | // CHECK-DAG: %[[UINT_VECTOR_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeVector %[[UINT_TYPE_ID]] 2 8 | // CHECK: %[[LOADB_ID:[a-zA-Z0-9_]*]] = OpLoad %[[UINT_VECTOR_TYPE_ID]] 9 | // CHECK: OpStore {{.*}} %[[LOADB_ID]] 10 | 11 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global uint2* a, global uint2* b) 12 | { 13 | *a = abs(*b); 14 | } 15 | -------------------------------------------------------------------------------- /test/IntegerBuiltins/abs/abs_uint3.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[UINT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeInt 32 0 7 | // CHECK-DAG: %[[UINT_VECTOR_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeVector %[[UINT_TYPE_ID]] 3 8 | // CHECK: %[[LOADB_ID:[a-zA-Z0-9_]*]] = OpLoad %[[UINT_VECTOR_TYPE_ID]] 9 | // CHECK: OpStore {{.*}} %[[LOADB_ID]] 10 | 11 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global uint3* a, global uint3* b) 12 | { 13 | *a = abs(*b); 14 | } 15 | -------------------------------------------------------------------------------- /test/IntegerBuiltins/abs/abs_uint4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[UINT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeInt 32 0 7 | // CHECK-DAG: %[[UINT_VECTOR_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeVector %[[UINT_TYPE_ID]] 4 8 | // CHECK: %[[LOADB_ID:[a-zA-Z0-9_]*]] = OpLoad %[[UINT_VECTOR_TYPE_ID]] 9 | // CHECK: OpStore {{.*}} %[[LOADB_ID]] 10 | 11 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global uint4* a, global uint4* b) 12 | { 13 | *a = abs(*b); 14 | } 15 | -------------------------------------------------------------------------------- /test/IntegerBuiltins/abs/abs_ulong.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ulong:[0-9a-zA-Z_]+]] = OpTypeInt 64 0 7 | // CHECK: %[[__original_id_16:[0-9]+]] = OpLoad %[[ulong]] 8 | // CHECK: OpStore {{.*}} %[[__original_id_16]] 9 | 10 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global ulong* a, global ulong* b) 11 | { 12 | *a = abs(*b); 13 | } 14 | 15 | -------------------------------------------------------------------------------- /test/IntegerBuiltins/abs/abs_ulong2.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ulong:[0-9a-zA-Z_]+]] = OpTypeInt 64 0 7 | // CHECK-DAG: %[[v2ulong:[0-9a-zA-Z_]+]] = OpTypeVector %[[ulong]] 2 8 | // CHECK: %[[__original_id_17:[0-9]+]] = OpLoad %[[v2ulong]] 9 | // CHECK: OpStore {{.*}} %[[__original_id_17]] 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global ulong2* a, global ulong2* b) 12 | { 13 | *a = abs(*b); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/IntegerBuiltins/abs/abs_ulong3.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ulong:[0-9a-zA-Z_]+]] = OpTypeInt 64 0 7 | // CHECK-DAG: %[[v3ulong:[0-9a-zA-Z_]+]] = OpTypeVector %[[ulong]] 3 8 | // CHECK: %[[__original_id_17:[0-9]+]] = OpLoad %[[v3ulong]] 9 | // CHECK: OpStore {{.*}} %[[__original_id_17]] 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global ulong3* a, global ulong3* b) 12 | { 13 | *a = abs(*b); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/IntegerBuiltins/abs/abs_ulong3_novec3.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -vec3-to-vec4 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ulong:[0-9a-zA-Z_]+]] = OpTypeInt 64 0 7 | // CHECK-DAG: %[[v4ulong:[0-9a-zA-Z_]+]] = OpTypeVector %[[ulong]] 4 8 | // CHECK: %[[__original_id_17:[0-9]+]] = OpLoad %[[v4ulong]] 9 | // CHECK: OpStore {{.*}} %[[__original_id_17]] 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global ulong3* a, global ulong3* b) 12 | { 13 | *a = abs(*b); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/IntegerBuiltins/abs/abs_ulong4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ulong:[0-9a-zA-Z_]+]] = OpTypeInt 64 0 7 | // CHECK-DAG: %[[v4ulong:[0-9a-zA-Z_]+]] = OpTypeVector %[[ulong]] 4 8 | // CHECK: %[[__original_id_17:[0-9]+]] = OpLoad %[[v4ulong]] 9 | // CHECK: OpStore {{.*}} %[[__original_id_17]] 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global ulong4* a, global ulong4* b) 12 | { 13 | *a = abs(*b); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/IntegerBuiltins/abs/abs_ushort.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ushort:[0-9a-zA-Z_]+]] = OpTypeInt 16 0 7 | // CHECK: %[[__original_id_16:[0-9]+]] = OpLoad %[[ushort]] 8 | // CHECK: OpStore {{.*}} %[[__original_id_16]] 9 | 10 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global ushort* a, global ushort* b) 11 | { 12 | *a = abs(*b); 13 | } 14 | 15 | -------------------------------------------------------------------------------- /test/IntegerBuiltins/abs/abs_ushort2.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ushort:[0-9a-zA-Z_]+]] = OpTypeInt 16 0 7 | // CHECK-DAG: %[[v2ushort:[0-9a-zA-Z_]+]] = OpTypeVector %[[ushort]] 2 8 | // CHECK: %[[__original_id_17:[0-9]+]] = OpLoad %[[v2ushort]] 9 | // CHECK: OpStore {{.*}} %[[__original_id_17]] 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global ushort2* a, global ushort2* b) 12 | { 13 | *a = abs(*b); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/IntegerBuiltins/abs/abs_ushort3.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ushort:[0-9a-zA-Z_]+]] = OpTypeInt 16 0 7 | // CHECK-DAG: %[[v3ushort:[0-9a-zA-Z_]+]] = OpTypeVector %[[ushort]] 3 8 | // CHECK: %[[__original_id_17:[0-9]+]] = OpLoad %[[v3ushort]] 9 | // CHECK: OpStore {{.*}} %[[__original_id_17]] 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global ushort3* a, global ushort3* b) 12 | { 13 | *a = abs(*b); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/IntegerBuiltins/abs/abs_ushort4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[ushort:[0-9a-zA-Z_]+]] = OpTypeInt 16 0 7 | // CHECK-DAG: %[[v4ushort:[0-9a-zA-Z_]+]] = OpTypeVector %[[ushort]] 4 8 | // CHECK: %[[__original_id_17:[0-9]+]] = OpLoad %[[v4ushort]] 9 | // CHECK: OpStore {{.*}} %[[__original_id_17]] 10 | 11 | kernel void __attribute__((reqd_work_group_size(1, 1, 1))) foo(global ushort4* a, global ushort4* b) 12 | { 13 | *a = abs(*b); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/IntegerBuiltins/max/max_char.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -int8 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | kernel void foo(global char* a, global char* b, global char* c) { 7 | *a = max(*b, *c); 8 | } 9 | 10 | // CHECK: [[char:%[a-zA-Z0-9_]+]] = OpTypeInt 8 0 11 | // CHECK: [[ld_b:%[a-zA-Z0-9_]+]] = OpLoad [[char]] 12 | // CHECK: [[ld_c:%[a-zA-Z0-9_]+]] = OpLoad [[char]] 13 | // CHECK: [[max:%[a-zA-Z0-9_]+]] = OpExtInst [[char]] {{.*}} SMax [[ld_b]] [[ld_c]] 14 | -------------------------------------------------------------------------------- /test/IntegerBuiltins/max/max_uchar.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -int8 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | kernel void foo(global uchar* a, global uchar* b, global uchar* c) { 7 | *a = max(*b, *c); 8 | } 9 | 10 | // CHECK: [[char:%[a-zA-Z0-9_]+]] = OpTypeInt 8 0 11 | // CHECK: [[ld_b:%[a-zA-Z0-9_]+]] = OpLoad [[char]] 12 | // CHECK: [[ld_c:%[a-zA-Z0-9_]+]] = OpLoad [[char]] 13 | // CHECK: [[max:%[a-zA-Z0-9_]+]] = OpExtInst [[char]] {{.*}} UMax [[ld_b]] [[ld_c]] 14 | 15 | -------------------------------------------------------------------------------- /test/IntegerBuiltins/popcount/int_popcount.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[UINT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeInt 32 0 7 | // CHECK: %[[LOADB_ID:[a-zA-Z0-9_]*]] = OpLoad %[[UINT_TYPE_ID]] 8 | // CHECK: %[[OP_ID:[a-zA-Z0-9_]*]] = OpBitCount %[[UINT_TYPE_ID]] %[[LOADB_ID]] 9 | // CHECK: OpStore {{.*}} %[[OP_ID]] 10 | 11 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global int* a, global int* b) 12 | { 13 | *a = popcount(*b); 14 | } 15 | -------------------------------------------------------------------------------- /test/IntegerBuiltins/popcount/uint_popcount.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[UINT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeInt 32 0 7 | // CHECK: %[[LOADB_ID:[a-zA-Z0-9_]*]] = OpLoad %[[UINT_TYPE_ID]] 8 | // CHECK: %[[OP_ID:[a-zA-Z0-9_]*]] = OpBitCount %[[UINT_TYPE_ID]] %[[LOADB_ID]] 9 | // CHECK: OpStore {{.*}} %[[OP_ID]] 10 | 11 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global uint* a, global uint* b) 12 | { 13 | *a = popcount(*b); 14 | } 15 | -------------------------------------------------------------------------------- /test/LLVMIntrinsics/bswap/bswap_i16.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt %s -o %t.ll --passes=replace-llvm-intrinsics 2 | ; RUN: FileCheck %s < %t.ll 3 | 4 | ; CHECK: [[shl:%[^ ]+]] = shl i16 %input, 8 5 | ; CHECK: [[lshr:%[^ ]+]] = lshr i16 %input, 8 6 | ; CHECK: or i16 [[shl]], [[lshr]] 7 | 8 | declare i16 @llvm.bswap.i16(i16) 9 | 10 | define dso_local spir_kernel void @kernel(i16 %input) { 11 | entry: 12 | %0 = call i16 @llvm.bswap.i16(i16 %input) 13 | ret void 14 | } 15 | -------------------------------------------------------------------------------- /test/LLVMIntrinsics/bswap/bswap_v2i16.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt %s -o %t.ll --passes=replace-llvm-intrinsics 2 | ; RUN: FileCheck %s < %t.ll 3 | 4 | ; CHECK: [[shl:%[^ ]+]] = shl <2 x i16> %input, splat (i16 8) 5 | ; CHECK: [[lshr:%[^ ]+]] = lshr <2 x i16> %input, splat (i16 8) 6 | ; CHECK: or <2 x i16> [[shl]], [[lshr]] 7 | 8 | declare <2 x i16> @llvm.bswap.v2i16(<2 x i16>) 9 | 10 | define dso_local spir_kernel void @kernel(<2 x i16> %input) { 11 | entry: 12 | %0 = call <2 x i16> @llvm.bswap.v2i16(<2 x i16> %input) 13 | ret void 14 | } 15 | -------------------------------------------------------------------------------- /test/LLVMIntrinsics/issue-1173.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %s -o %t.spv -cl-std=CLC++ -inline-entry-points -O3 2 | // RUN: spirv-dis %t.spv -o %t.spvasm 3 | // RUN: spirv-val %t.spv --target-env spv1.0 4 | 5 | struct S { int i1; }; 6 | 7 | kernel void Kernel(global void* Memory) 8 | { 9 | long a = (long) Memory; 10 | 11 | //* (int*) a = 0; // OK, address space inferred 12 | * (S*) a = {}; // Fails, address space not inferred. OK if externally optimized 13 | // * (global S*) a = {}; // OK, address space explicit 14 | } 15 | -------------------------------------------------------------------------------- /test/LLVMIntrinsics/unreachable.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv -x ir %s -o %t.spv 2 | ; RUN: spirv-val --target-env vulkan1.0 %t.spv 3 | ; RUN: spirv-dis %t.spv -o - | FileCheck %s 4 | 5 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 6 | target triple = "spir-unknown-unknown" 7 | 8 | define spir_kernel void @test() { 9 | entry: 10 | unreachable 11 | } 12 | 13 | ; CHECK: OpFunction 14 | ; CHECK-NEXT: OpLabel 15 | ; CHECK-NEXT: OpUnreachable 16 | ; CHECK-NEXT: OpFunctionEnd 17 | -------------------------------------------------------------------------------- /test/LogicalPtrToInt/compare_local_ptr.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %s -o %t.spv 2 | // RUN: spirv-val %t.spv --target-env spv1.0 3 | // RUN: spirv-dis %t.spv -o %t.spvasm 4 | 5 | // CHECK: [[uint:%[^ ]+]] = OpTypeInt 32 0 6 | // CHECK: [[uint0:%[^ ]+]] = OpConstant [[uint]] 0 7 | // CHECK: OpStore {{.*}} [[uint0]] 8 | 9 | void kernel foo(global uint *a, local uint *b) { 10 | *a = (b == NULL); 11 | } 12 | -------------------------------------------------------------------------------- /test/LongVectorLowering/Frontend/lowering_disabled_function_body.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -verify 2 | // 3 | // Test that long-vector types are rejected when the support is not enabled. 4 | 5 | kernel void test(global int* data) { 6 | float8 x; // expected-error{{vectors with more than 4 elements are not supported}} 7 | (void)x; 8 | *data = 0; 9 | } 10 | -------------------------------------------------------------------------------- /test/LongVectorLowering/Frontend/lowering_disabled_function_param_array.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -verify 2 | // 3 | // Test that long-vector types are rejected when the support is not enabled. 4 | 5 | void test(global float8 x[10]); 6 | void test(global float8 x[10]) { (void)x; } // expected-error{{vectors with more than 4 elements are not supported}} 7 | -------------------------------------------------------------------------------- /test/LongVectorLowering/Frontend/lowering_disabled_function_param_pointer.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -verify 2 | // 3 | // Test that long-vector types are rejected when the support is not enabled. 4 | 5 | void test(float8 *x); 6 | void test(float8 *x) { (void)x; } // expected-error{{vectors with more than 4 elements are not supported}} 7 | -------------------------------------------------------------------------------- /test/LongVectorLowering/Frontend/lowering_disabled_function_param_scalar.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -verify 2 | // 3 | // Test that long-vector types are rejected when the support is not enabled. 4 | 5 | void test(float8 x); 6 | void test(float8 x) { (void)x; } // expected-error{{vectors with more than 4 elements are not supported}} 7 | -------------------------------------------------------------------------------- /test/LongVectorLowering/Frontend/lowering_disabled_function_param_struct.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -verify 2 | // 3 | // Test that long-vector types are rejected when the support is not enabled. 4 | 5 | typedef struct { 6 | float8 x; 7 | } S; 8 | 9 | void test(global S *x); 10 | void test(global S *x) { (void)x; } // expected-error{{vectors with more than 4 elements are not supported}} 11 | -------------------------------------------------------------------------------- /test/LongVectorLowering/Frontend/lowering_disabled_kernel_param_pointer.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -verify 2 | // 3 | // Test that long-vector types are rejected when the support is not enabled. 4 | 5 | kernel void test(global float8* x) { // expected-error{{vectors with more than 4 elements are not supported}} 6 | (void)x; 7 | } 8 | -------------------------------------------------------------------------------- /test/LongVectorLowering/Frontend/lowering_enabled_function_param_array.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s --long-vector -verify 2 | // 3 | // Test that long-vector types are supported as parameters of non-kernel functions. 4 | // 5 | // expected-no-diagnostics 6 | 7 | void test(global float8 x[10]); 8 | void test(global float8 x[10]) { (void)x; } 9 | -------------------------------------------------------------------------------- /test/LongVectorLowering/Frontend/lowering_enabled_function_param_pointer.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s --long-vector -verify 2 | // 3 | // Test that long-vector types are supported as parameters of non-kernel functions. 4 | // 5 | // expected-no-diagnostics 6 | 7 | void test(float8 *x); 8 | void test(float8 *x) { (void)x; } 9 | -------------------------------------------------------------------------------- /test/LongVectorLowering/Frontend/lowering_enabled_function_param_scalar.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s --long-vector -verify 2 | // 3 | // Test that long-vector types are supported as parameters of non-kernel functions. 4 | // 5 | // expected-no-diagnostics 6 | 7 | void test(float8 x); 8 | void test(float8 x) { (void)x; } 9 | -------------------------------------------------------------------------------- /test/LongVectorLowering/Frontend/lowering_enabled_function_param_struct.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s --long-vector -verify 2 | // 3 | // Test that long-vector types are supported as parameters of non-kernel functions. 4 | // 5 | // expected-no-diagnostics 6 | 7 | typedef struct { 8 | float8 x; 9 | } S; 10 | 11 | void test(global S *x); 12 | void test(global S *x) { (void)x; } 13 | -------------------------------------------------------------------------------- /test/LongVectorLowering/Frontend/lowering_enabled_kernel_param_array.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s --long-vector -verify 2 | // 3 | // expected-no-diagnostics 4 | 5 | kernel void test(global float8 x[10]) { 6 | (void)x; 7 | } 8 | -------------------------------------------------------------------------------- /test/LongVectorLowering/Frontend/lowering_enabled_kernel_param_pointer.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s --long-vector -verify 2 | // 3 | // expected-no-diagnostics 4 | 5 | kernel void test(global float8* x) { 6 | (void)x; 7 | } 8 | -------------------------------------------------------------------------------- /test/LongVectorLowering/Frontend/lowering_enabled_kernel_param_scalar.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s --long-vector -verify 2 | // 3 | // expected-no-diagnostics 4 | 5 | kernel void test(float8 x) { 6 | (void)x; 7 | } 8 | -------------------------------------------------------------------------------- /test/LongVectorLowering/Frontend/lowering_enabled_kernel_param_struct.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s --long-vector -verify 2 | // 3 | // expected-no-diagnostics 4 | 5 | typedef struct { 6 | float8 x; 7 | } S; 8 | 9 | kernel void test(global S *x) { 10 | (void)x; 11 | } 12 | -------------------------------------------------------------------------------- /test/LongVectorLowering/fadd.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt --passes=long-vector-lowering %s -o %t 2 | ; RUN: FileCheck %s < %t 3 | 4 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 5 | target triple = "spir-unknown-unknown" 6 | 7 | define spir_func <8 x float> @test(<8 x float> %a, <8 x float> %b) { 8 | entry: 9 | %add = fadd <8 x float> %a, %b 10 | ret <8 x float> %add 11 | } 12 | 13 | ; CHECK: fadd 14 | ; CHECK: fadd 15 | ; CHECK: fadd 16 | ; CHECK: fadd 17 | ; CHECK: fadd 18 | ; CHECK: fadd 19 | ; CHECK: fadd 20 | ; CHECK: fadd 21 | -------------------------------------------------------------------------------- /test/LongVectorLowering/opaque_alloca.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt --passes=long-vector-lowering %s -o %t 2 | ; RUN: FileCheck %s < %t 3 | 4 | ; CHECK: alloca [8 x i32], align 32 5 | 6 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 7 | target triple = "spir-unknown-unknown" 8 | 9 | define void @test() { 10 | entry: 11 | %alloca = alloca <8 x i32>, align 32 12 | ret void 13 | } 14 | 15 | -------------------------------------------------------------------------------- /test/LongVectorLowering/opaque_constgep.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt --passes=long-vector-lowering %s -o %t 2 | ; RUN: FileCheck %s < %t 3 | 4 | ; CHECK: load [8 x i32], ptr getelementptr ([8 x i32], ptr @gv, i32 1), align 32 5 | 6 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 7 | target triple = "spir-unknown-unknown" 8 | 9 | @gv = internal global <8 x i32> zeroinitializer, align 32 10 | 11 | define void @test() { 12 | entry: 13 | %load = load <8 x i32>, ptr getelementptr (<8 x i32>, ptr @gv, i32 1), align 32 14 | ret void 15 | } 16 | 17 | -------------------------------------------------------------------------------- /test/LongVectorLowering/opaque_gep.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt --passes=long-vector-lowering %s -o %t 2 | ; RUN: FileCheck %s < %t 3 | 4 | ; CHECK: getelementptr [8 x i32], ptr %alloca, i32 0, i32 1 5 | 6 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 7 | target triple = "spir-unknown-unknown" 8 | 9 | define void @test() { 10 | entry: 11 | %alloca = alloca <8 x i32>, align 32 12 | %gep = getelementptr <8 x i32>, ptr %alloca, i32 0, i32 1 13 | ret void 14 | } 15 | -------------------------------------------------------------------------------- /test/LongVectorLowering/opaque_global_load.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt --passes=long-vector-lowering %s -o %t.ll 2 | ; RUN: FileCheck %s < %t.ll 3 | 4 | ; CHECK: [[gv:@[a-zA-Z0-9_.]+]] = internal global [8 x i32] zeroinitializer 5 | ; CHECK: load [8 x i32], ptr [[gv]] 6 | 7 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 8 | target triple = "spir-unknown-unknown" 9 | 10 | @gv = internal global <8 x i32> zeroinitializer 11 | 12 | define void @test() { 13 | entry: 14 | %ld = load <8 x i32>, ptr @gv 15 | ret void 16 | } 17 | -------------------------------------------------------------------------------- /test/LongVectorLowering/opaque_global_store.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt --passes=long-vector-lowering %s -o %t.ll 2 | ; RUN: FileCheck %s < %t.ll 3 | 4 | ; CHECK: [[gv:@[a-zA-Z0-9_.]+]] = internal global [8 x i32] undef 5 | ; CHECK: store [8 x i32] zeroinitializer, ptr [[gv]] 6 | 7 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 8 | target triple = "spir-unknown-unknown" 9 | 10 | @gv = internal global <8 x i32> undef 11 | 12 | define void @test() { 13 | entry: 14 | store <8 x i32> zeroinitializer, ptr @gv 15 | ret void 16 | } 17 | 18 | -------------------------------------------------------------------------------- /test/LongVectorLowering/opaque_load.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt --passes=long-vector-lowering %s -o %t 2 | ; RUN: FileCheck %s < %t 3 | 4 | ; CHECK: load [8 x i32], ptr %alloca, align 32 5 | 6 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 7 | target triple = "spir-unknown-unknown" 8 | 9 | define void @test() { 10 | entry: 11 | %alloca = alloca <8 x i32>, align 32 12 | %load = load <8 x i32>, ptr %alloca, align 32 13 | ret void 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/LongVectorLowering/opaque_store.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt --passes=long-vector-lowering %s -o %t 2 | ; RUN: FileCheck %s < %t 3 | 4 | ; CHECK: store [8 x i32] zeroinitializer, ptr %alloca, align 32 5 | 6 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 7 | target triple = "spir-unknown-unknown" 8 | 9 | define void @test() { 10 | entry: 11 | %alloca = alloca <8 x i32>, align 32 12 | store <8 x i32> zeroinitializer, ptr %alloca, align 32 13 | ret void 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/LongVectorLowering/phi.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s --long-vector --output-format=ll -o %t.ll 2 | // RUN: clspv-opt %t.ll --passes=long-vector-lowering -o %t.out.ll 3 | // RUN: FileCheck %s < %t.out.ll 4 | 5 | // CHECK: phi [8 x float] 6 | 7 | kernel void foo(int x, global float4 *output) { 8 | float8 one = (float8)(1.f); 9 | float8 val = (x > 0 ? one : 0.f); 10 | *output = val.lo; 11 | } 12 | 13 | -------------------------------------------------------------------------------- /test/LongVectorLowering/struct.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt --passes=long-vector-lowering %s -o %t 2 | ; RUN: FileCheck %s < %t 3 | 4 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 5 | target triple = "spir-unknown-unknown" 6 | 7 | %struct.S = type <{ <8 x i32>, i32 }> 8 | 9 | @test.s = internal addrspace(3) global [64 x %struct.S] undef, align 1 10 | 11 | ; CHECK: @test.s = internal addrspace(3) global [64 x <{ [8 x i32], i32 }>] undef, align 1 12 | -------------------------------------------------------------------------------- /test/MathBuiltins/acos/float2_acospi.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | void kernel foo(global float2* A, float2 x) 7 | { 8 | *A = acospi(x); 9 | } 10 | // CHECK-NOT: OpExtInst {{%[a-zA-Z0-9_]+}} {{%[a-zA-Z0-9_]+}} Acos 11 | -------------------------------------------------------------------------------- /test/MathBuiltins/acos/float3_acos_novec3.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -vec3-to-vec4 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-NOT: OpExtInst {{.*}} {{.*}} Acos 7 | 8 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float3* a, global float3* b) 9 | { 10 | *a = acos(*b); 11 | } 12 | -------------------------------------------------------------------------------- /test/MathBuiltins/acos/float3_acosh_novec3.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -vec3-to-vec4 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-NOT: OpExtInst {{.*}} Acosh 7 | 8 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float3* a, global float3* b) 9 | { 10 | *a = acosh(*b); 11 | } 12 | -------------------------------------------------------------------------------- /test/MathBuiltins/acos/float3_acospi.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | void kernel foo(global float3* A, float3 x) 7 | { 8 | *A = acospi(x); 9 | } 10 | // CHECK-NOT: OpExtInst {{.*}} Acos 11 | -------------------------------------------------------------------------------- /test/MathBuiltins/acos/float4_acospi.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | void kernel foo(global float4* A, float4 x) 7 | { 8 | *A = acospi(x); 9 | } 10 | // CHECK-NOT: OpExtInst {{.*}} Acos 11 | -------------------------------------------------------------------------------- /test/MathBuiltins/acos/float8_acos.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv --long-vector 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-NOT: OpExtInst {{.*}} Acos 7 | 8 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float8* a, constant float8* b) 9 | { 10 | *a = acos(*b); 11 | } 12 | -------------------------------------------------------------------------------- /test/MathBuiltins/acos/float_acospi.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | void kernel foo(global float* A, float x) 7 | { 8 | *A = acospi(x); 9 | } 10 | // CHECK-DAG: [[_float:%[a-zA-Z0-9_]+]] = OpTypeFloat 32 11 | // CHECK: [[_27:%[a-zA-Z0-9_]+]] = OpCompositeExtract [[_float]] 12 | // CHECK-NOT: OpExtInst {{%[a-zA-Z0-9_]+}} {{%[a-zA-Z0-9_]+}} Acos 13 | // CHECK: OpStore {{.*}} 14 | -------------------------------------------------------------------------------- /test/MathBuiltins/asin/float2_asinpi.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | void kernel foo(global float2* A, float2 x) 7 | { 8 | *A = asinpi(x); 9 | } 10 | // CHECK-NOT: OpExtInst {{%[a-zA-Z0-9_]+}} {{%[a-zA-Z0-9_]+}} Asin 11 | -------------------------------------------------------------------------------- /test/MathBuiltins/asin/float3_asin_novec3.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -vec3-to-vec4 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-NOT: OpExtInst {{%[a-zA-Z0-9_]+}} {{%[a-zA-Z0-9_]+}} Asin 7 | 8 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float3* a, global float3* b) 9 | { 10 | *a = asin(*b); 11 | } 12 | -------------------------------------------------------------------------------- /test/MathBuiltins/asin/float3_asinpi.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | void kernel foo(global float3* A, float3 x) 7 | { 8 | *A = asinpi(x); 9 | } 10 | // CHECK-NOT: OpExtInst {{.*}} Asin 11 | -------------------------------------------------------------------------------- /test/MathBuiltins/asin/float4_asinpi.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | void kernel foo(global float4* A, float4 x) 7 | { 8 | *A = asinpi(x); 9 | } 10 | // CHECK-NOT: OpExtInst {{%[a-zA-Z0-9_]+}} {{%[a-zA-Z0-9_]+}} Asin 11 | -------------------------------------------------------------------------------- /test/MathBuiltins/asin/float_asinpi.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | void kernel foo(global float* A, float x) 7 | { 8 | *A = asinpi(x); 9 | } 10 | // CHECK-DAG: [[_float:%[a-zA-Z0-9_]+]] = OpTypeFloat 32 11 | // CHECK: [[_27:%[a-zA-Z0-9_]+]] = OpCompositeExtract [[_float]] 12 | // CHECK-NOT: OpExtInst {{%[a-zA-Z0-9_]+}} {{%[a-zA-Z0-9_]+}} Acos 13 | // CHECK: OpStore {{.*}} 14 | -------------------------------------------------------------------------------- /test/MathBuiltins/cos/float2_cosh.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK-DAG: %[[FLOAT_VECTOR_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeVector %[[FLOAT_TYPE_ID]] 2 8 | // CHECK-COUNT-23: OpExtInst %[[FLOAT_VECTOR_TYPE_ID]] %{{.*}} Fma 9 | 10 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float2* a, global float2* b) 11 | { 12 | *a = cosh(*b); 13 | } 14 | -------------------------------------------------------------------------------- /test/MathBuiltins/cos/float3_cosh.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK-DAG: %[[FLOAT_VECTOR_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeVector %[[FLOAT_TYPE_ID]] 3 8 | // CHECK-COUNT-23: OpExtInst %[[FLOAT_VECTOR_TYPE_ID]] %{{.*}} Fma 9 | 10 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float3* a, global float3* b) 11 | { 12 | *a = cosh(*b); 13 | } 14 | -------------------------------------------------------------------------------- /test/MathBuiltins/cos/float3_cosh_novec3.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -vec3-to-vec4 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK-DAG: %[[FLOAT_VECTOR_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeVector %[[FLOAT_TYPE_ID]] 3 8 | // CHECK-COUNT-23: OpExtInst %[[FLOAT_VECTOR_TYPE_ID]] %{{.*}} Fma 9 | 10 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float3* a, global float3* b) 11 | { 12 | *a = cosh(*b); 13 | } 14 | -------------------------------------------------------------------------------- /test/MathBuiltins/cos/float3_half_cos_novec3.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -vec3-to-vec4 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK-DAG: %[[FLOAT_VECTOR_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeVector %[[FLOAT_TYPE_ID]] 4 8 | // CHECK-NOT: OpExtInst {{.*}} Cos 9 | 10 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float3* a, global float3* b) 11 | { 12 | *a = half_cos(*b); 13 | } 14 | -------------------------------------------------------------------------------- /test/MathBuiltins/cos/float_cos.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -no-inline-single 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK: %[[LOADB_ID:[a-zA-Z0-9_]*]] = OpLoad %[[FLOAT_TYPE_ID]] 8 | // CHECK: %[[OP:[a-zA-Z0-9_]*]] = OpFunctionCall %[[FLOAT_TYPE_ID]] %{{.*}} %[[LOADB_ID]] 9 | // CHECK: OpStore %{{.*}} %[[OP]] 10 | 11 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float* a, global float* b) 12 | { 13 | *a = cos(*b); 14 | } 15 | -------------------------------------------------------------------------------- /test/MathBuiltins/cos/float_cosh.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK: %[[LOADB_ID:[a-zA-Z0-9_]*]] = OpLoad %[[FLOAT_TYPE_ID]] 8 | // CHECK-COUNT-23: OpExtInst %[[FLOAT_TYPE_ID]] %{{.*}} Fma 9 | 10 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float* a, global float* b) 11 | { 12 | *a = cosh(*b); 13 | } 14 | -------------------------------------------------------------------------------- /test/MathBuiltins/cospi/cospi_half.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt --passes=replace-opencl-builtin %s -o %t.ll 2 | ; RUN: FileCheck %s < %t.ll 3 | 4 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 5 | target triple = "spir-unknown-unknown" 6 | 7 | define half @cospi_half(half %x) { 8 | entry: 9 | %call = call spir_func half @_Z5cospiDh(half %x) 10 | ret half %call 11 | } 12 | 13 | declare spir_func half @_Z5cospiDh(half) 14 | 15 | ; CHECK: [[mul:%[a-zA-Z0-9_.]+]] = fmul half %x, 0xH4248 16 | ; CHECK: [[cos:%[a-zA-Z0-9_.]+]] = call half @llvm.cos.f16(half [[mul]]) 17 | 18 | -------------------------------------------------------------------------------- /test/MathBuiltins/erf/erf_float.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %s -o %t.spv 2 | // RUN: spirv-dis %t.spv -o %t.spvasm 3 | // RUN: spirv-val %t.spv --target-env spv1.0 4 | 5 | #pragma OPENCL EXTENSION cl_khr_fp16 : enable 6 | 7 | kernel void foo(global float *s) { 8 | unsigned gid = get_global_id(0); 9 | s[gid] = erf(s[gid]); 10 | } 11 | -------------------------------------------------------------------------------- /test/MathBuiltins/erf/erf_half.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %s -o %t.spv 2 | // RUN: spirv-dis %t.spv -o %t.spvasm 3 | // RUN: spirv-val %t.spv --target-env spv1.0 4 | 5 | #pragma OPENCL EXTENSION cl_khr_fp16 : enable 6 | 7 | kernel void foo(global half *s) { 8 | unsigned gid = get_global_id(0); 9 | s[gid] = erf(s[gid]); 10 | } 11 | -------------------------------------------------------------------------------- /test/MathBuiltins/erfc/erfc_float.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %s -o %t.spv 2 | // RUN: spirv-dis %t.spv -o %t.spvasm 3 | // RUN: spirv-val %t.spv --target-env spv1.0 4 | 5 | #pragma OPENCL EXTENSION cl_khr_fp16 : enable 6 | 7 | kernel void foo(global float *s) { 8 | unsigned gid = get_global_id(0); 9 | s[gid] = erfc(s[gid]); 10 | } 11 | -------------------------------------------------------------------------------- /test/MathBuiltins/erfc/erfc_half.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %s -o %t.spv 2 | // RUN: spirv-dis %t.spv -o %t.spvasm 3 | // RUN: spirv-val %t.spv --target-env spv1.0 4 | 5 | #pragma OPENCL EXTENSION cl_khr_fp16 : enable 6 | 7 | kernel void foo(global half *s) { 8 | unsigned gid = get_global_id(0); 9 | s[gid] = erfc(s[gid]); 10 | } 11 | -------------------------------------------------------------------------------- /test/MathBuiltins/exp/float2_exp.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK-DAG: %[[FLOAT_VECTOR_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeVector %[[FLOAT_TYPE_ID]] 2 8 | // CHECK-COUNT-7: OpExtInst %[[FLOAT_VECTOR_TYPE_ID]] %{{.*}} Fma 9 | 10 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float2* a, global float2* b) 11 | { 12 | *a = exp(*b); 13 | } 14 | -------------------------------------------------------------------------------- /test/MathBuiltins/exp/float2_exp10.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK-DAG: %[[FLOAT_VECTOR_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeVector %[[FLOAT_TYPE_ID]] 2 8 | // CHECK-COUNT-6: OpExtInst %[[FLOAT_VECTOR_TYPE_ID]] %{{.*}} Fma 9 | 10 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float2* a, global float2* b) 11 | { 12 | *a = exp10(*b); 13 | } 14 | -------------------------------------------------------------------------------- /test/MathBuiltins/exp/float3_exp.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK-DAG: %[[FLOAT_VECTOR_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeVector %[[FLOAT_TYPE_ID]] 3 8 | // CHECK-COUNT-7: OpExtInst %[[FLOAT_VECTOR_TYPE_ID]] %{{.*}} Fma 9 | 10 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float3* a, global float3* b) 11 | { 12 | *a = exp(*b); 13 | } 14 | -------------------------------------------------------------------------------- /test/MathBuiltins/exp/float3_exp10.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK-DAG: %[[FLOAT_VECTOR_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeVector %[[FLOAT_TYPE_ID]] 3 8 | // CHECK-COUNT-6: OpExtInst %[[FLOAT_VECTOR_TYPE_ID]] %{{.*}} Fma 9 | 10 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float3* a, global float3* b) 11 | { 12 | *a = exp10(*b); 13 | } 14 | -------------------------------------------------------------------------------- /test/MathBuiltins/exp/float3_exp10_novec3.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -vec3-to-vec4 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK: %[[FLOAT_VECTOR_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeVector %[[FLOAT_TYPE_ID]] 4 8 | // CHECK-NOT: OpExtInst %{{.*}} Exp 9 | 10 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float3* a, global float3* b) 11 | { 12 | *a = exp10(*b); 13 | } 14 | -------------------------------------------------------------------------------- /test/MathBuiltins/exp/float3_exp_novec3.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -vec3-to-vec4 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK-DAG: %[[FLOAT_VECTOR_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeVector %[[FLOAT_TYPE_ID]] 3 8 | // CHECK-COUNT-7: OpExtInst %[[FLOAT_VECTOR_TYPE_ID]] %{{.*}} Fma 9 | 10 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float3* a, global float3* b) 11 | { 12 | *a = exp(*b); 13 | } 14 | -------------------------------------------------------------------------------- /test/MathBuiltins/exp/float4_exp.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK-DAG: %[[FLOAT_VECTOR_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeVector %[[FLOAT_TYPE_ID]] 4 8 | // CHECK-COUNT-7: OpExtInst %[[FLOAT_VECTOR_TYPE_ID]] %{{.*}} Fma 9 | 10 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float4* a, global float4* b) 11 | { 12 | *a = exp(*b); 13 | } 14 | -------------------------------------------------------------------------------- /test/MathBuiltins/exp/float4_exp10.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK-DAG: %[[FLOAT_VECTOR_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeVector %[[FLOAT_TYPE_ID]] 4 8 | // CHECK-COUNT-6: OpExtInst %[[FLOAT_VECTOR_TYPE_ID]] %{{.*}} Fma 9 | 10 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float4* a, global float4* b) 11 | { 12 | *a = exp10(*b); 13 | } 14 | -------------------------------------------------------------------------------- /test/MathBuiltins/exp/float_exp.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK: %[[LOADB_ID:[a-zA-Z0-9_]*]] = OpLoad %[[FLOAT_TYPE_ID]] 8 | // CHECK-NOT: %[[OP_ID:[a-zA-Z0-9_]*]] = OpExtInst %[[FLOAT_TYPE_ID]] %{{.*}} Exp %[[LOADB_ID]] 9 | 10 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float* a, global float* b) 11 | { 12 | *a = exp(*b); 13 | } 14 | -------------------------------------------------------------------------------- /test/MathBuiltins/exp/float_exp10.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK: %[[LOADB_ID:[a-zA-Z0-9_]*]] = OpLoad %[[FLOAT_TYPE_ID]] 8 | // CHECK-NOT: %[[OP_ID:[a-zA-Z0-9_]*]] = OpExtInst %[[FLOAT_TYPE_ID]] %{{.*}} Exp %[[LOADB_ID]] 9 | 10 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float* a, global float* b) 11 | { 12 | *a = exp10(*b); 13 | } 14 | -------------------------------------------------------------------------------- /test/MathBuiltins/exp/float_exp2.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK: %[[LOADB_ID:[a-zA-Z0-9_]*]] = OpLoad %[[FLOAT_TYPE_ID]] 8 | // CHECK-NOT: %[[OP_ID:[a-zA-Z0-9_]*]] = OpExtInst %[[FLOAT_TYPE_ID]] %{{.*}} Exp2 %[[LOADB_ID]] 9 | 10 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float* a, global float* b) 11 | { 12 | *a = exp2(*b); 13 | } 14 | -------------------------------------------------------------------------------- /test/MathBuiltins/fmod/float2_fmod.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -cl-native-math 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | kernel void foo(global float2 *A, float2 x, float2 y) { 7 | *A = fmod(x,y); 8 | } 9 | // CHECK-DAG: [[_float:%[a-zA-Z0-9_]+]] = OpTypeFloat 32 10 | // CHECK-DAG: [[_v2float:%[a-zA-Z0-9_]+]] = OpTypeVector [[_float]] 2 11 | // CHECK: [[_30:%[a-zA-Z0-9_]+]] = OpFRem [[_v2float]] 12 | // CHECK: OpStore {{.*}} [[_30]] 13 | -------------------------------------------------------------------------------- /test/MathBuiltins/fmod/float3_fmod.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -cl-native-math 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | kernel void foo(global float3 *A, float3 x, float3 y) { 7 | *A = fmod(x,y); 8 | } 9 | // CHECK-DAG: [[_float:%[a-zA-Z0-9_]+]] = OpTypeFloat 32 10 | // CHECK-DAG: [[_v3float:%[a-zA-Z0-9_]+]] = OpTypeVector [[_float]] 3 11 | // CHECK: [[_30:%[a-zA-Z0-9_]+]] = OpFRem [[_v3float]] 12 | // CHECK: OpStore {{.*}} [[_30]] 13 | -------------------------------------------------------------------------------- /test/MathBuiltins/fmod/float4_fmod.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -cl-native-math 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | kernel void foo(global float4 *A, float4 x, float4 y) { 7 | *A = fmod(x,y); 8 | } 9 | // CHECK-DAG: [[_float:%[a-zA-Z0-9_]+]] = OpTypeFloat 32 10 | // CHECK-DAG: [[_v4float:%[a-zA-Z0-9_]+]] = OpTypeVector [[_float]] 4 11 | // CHECK: [[_30:%[a-zA-Z0-9_]+]] = OpFRem [[_v4float]] 12 | // CHECK: OpStore {{.*}} [[_30]] 13 | -------------------------------------------------------------------------------- /test/MathBuiltins/fmod/float_fmod.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -cl-native-math 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | kernel void foo(global float *A, float x, float y) { 7 | *A = fmod(x,y); 8 | } 9 | // CHECK-DAG: [[_float:%[a-zA-Z0-9_]+]] = OpTypeFloat 32 10 | // CHECK: [[_29:%[a-zA-Z0-9_]+]] = OpFRem [[_float]] 11 | // CHECK: OpStore {{.*}} [[_29]] 12 | -------------------------------------------------------------------------------- /test/MathBuiltins/log/float3_log.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-NOT: OpExtInst {{.*}} Log 7 | 8 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float3* a, global float3* b) 9 | { 10 | *a = log(*b); 11 | } 12 | -------------------------------------------------------------------------------- /test/MathBuiltins/log/float3_log_novec3.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -vec3-to-vec4 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK-DAG: %[[FLOAT_VECTOR_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeVector %[[FLOAT_TYPE_ID]] 4 8 | // CHECK-NOT: OpTypeVector %[[FLOAT_TYPE_ID]] 3 9 | // CHECK-NOT: OpExtInst {{.*}} Log 10 | 11 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float3* a, global float3* b) 12 | { 13 | *a = log(*b); 14 | } 15 | -------------------------------------------------------------------------------- /test/MathBuiltins/log/float8_log.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target --long-vector %s -o %t.spv -no-inline-single 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK-COUNT-8: OpLoad %[[FLOAT_TYPE_ID]] 8 | // CHECK-COUNT-1: OpFunctionCall 9 | // CHECK-COUNT-8: OpStore 10 | 11 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float8* a, global float8* b) 12 | { 13 | *a = log(*b); 14 | } 15 | -------------------------------------------------------------------------------- /test/MathBuiltins/log/float_log.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -no-inline-single 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK: %[[LOADB_ID:[a-zA-Z0-9_]*]] = OpLoad %[[FLOAT_TYPE_ID]] 8 | // CHECK: %[[OP:[a-zA-Z0-9_]*]] = OpFunctionCall %[[FLOAT_TYPE_ID]] %{{.*}} %[[LOADB_ID]] 9 | // CHECK: OpStore {{.*}} %[[OP]] 10 | 11 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float* a, global float* b) 12 | { 13 | *a = log(*b); 14 | } 15 | -------------------------------------------------------------------------------- /test/MathBuiltins/log/float_log10.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -no-inline-single 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK: %[[LOADB_ID:[a-zA-Z0-9_]*]] = OpLoad %[[FLOAT_TYPE_ID]] 8 | // CHECK: %[[OP:[a-zA-Z0-9_]*]] = OpFunctionCall %[[FLOAT_TYPE_ID]] %{{.*}} %[[LOADB_ID]] 9 | // CHECK: OpStore {{.*}} %[[OP]] 10 | 11 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float* a, global float* b) 12 | { 13 | *a = log10(*b); 14 | } 15 | -------------------------------------------------------------------------------- /test/MathBuiltins/log/float_log2.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -no-inline-single 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK: %[[LOADB_ID:[a-zA-Z0-9_]*]] = OpLoad %[[FLOAT_TYPE_ID]] 8 | // CHECK: %[[OP:[a-zA-Z0-9_]*]] = OpFunctionCall %[[FLOAT_TYPE_ID]] %{{.*}} %[[LOADB_ID]] 9 | // CHECK: OpStore {{.*}} %[[OP]] 10 | 11 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float* a, global float* b) 12 | { 13 | *a = log2(*b); 14 | } 15 | -------------------------------------------------------------------------------- /test/MathBuiltins/pow/float8_pow.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target --long-vector %s -o %t.spv -no-inline-single 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK-COUNT-8: OpLoad %[[FLOAT_TYPE_ID]] 8 | // CHECK-COUNT-1: OpFunctionCall 9 | // CHECK-COUNT-8: OpStore 10 | 11 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float8* a, global float8* b, global float8* c) 12 | { 13 | *a = pow(*b, *c); 14 | } 15 | -------------------------------------------------------------------------------- /test/MathBuiltins/sin/float2_sinh.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK-DAG: %[[FLOAT_VECTOR_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeVector %[[FLOAT_TYPE_ID]] 2 8 | // CHECK-COUNT-23: OpExtInst %[[FLOAT_VECTOR_TYPE_ID]] %{{.*}} Fma 9 | 10 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float2* a, global float2* b) 11 | { 12 | *a = sinh(*b); 13 | } 14 | -------------------------------------------------------------------------------- /test/MathBuiltins/sin/float3_half_sin_novec3.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -vec3-to-vec4 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK-DAG: %[[FLOAT_VECTOR_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeVector %[[FLOAT_TYPE_ID]] 4 8 | // CHECK-NOT: OpExtInst {{.*}} Sin 9 | 10 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float3* a, global float3* b) 11 | { 12 | *a = half_sin(*b); 13 | } 14 | -------------------------------------------------------------------------------- /test/MathBuiltins/sin/float3_sinh.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK-DAG: %[[FLOAT_VECTOR_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeVector %[[FLOAT_TYPE_ID]] 3 8 | // CHECK-COUNT-23: OpExtInst %[[FLOAT_VECTOR_TYPE_ID]] %{{.*}} Fma 9 | 10 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float3* a, global float3* b) 11 | { 12 | *a = sinh(*b); 13 | } 14 | -------------------------------------------------------------------------------- /test/MathBuiltins/sin/float3_sinh_novec3.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -vec3-to-vec4 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK-DAG: %[[FLOAT_VECTOR_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeVector %[[FLOAT_TYPE_ID]] 3 8 | // CHECK-COUNT-23: OpExtInst %[[FLOAT_VECTOR_TYPE_ID]] %{{.*}} Fma 9 | 10 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float3* a, global float3* b) 11 | { 12 | *a = sinh(*b); 13 | } 14 | -------------------------------------------------------------------------------- /test/MathBuiltins/sin/float8_sinh.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s --long-vector -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK-NOT: %[[OP_ID:[a-zA-Z0-9_]*]] = OpExtInst %[[FLOAT_TYPE_ID]] %{{.*}} Sinh 8 | // CHECK-COUNT-184: OpExtInst %[[FLOAT_TYPE_ID]] %{{.*}} Fma 9 | // CHECK-COUNT-8: OpStore 10 | 11 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float8* a, global float8* b) 12 | { 13 | *a = sinh(*b); 14 | } 15 | -------------------------------------------------------------------------------- /test/MathBuiltins/sin/float_sin.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -no-inline-single 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK: %[[LOADB_ID:[a-zA-Z0-9_]*]] = OpLoad %[[FLOAT_TYPE_ID]] 8 | // CHECK: %[[OP:[a-zA-Z0-9_]*]] = OpFunctionCall %[[FLOAT_TYPE_ID]] %{{.*}} %[[LOADB_ID]] 9 | // CHECK: OpStore %{{.*}} %[[OP]] 10 | 11 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float* a, global float* b) 12 | { 13 | *a = sin(*b); 14 | } 15 | -------------------------------------------------------------------------------- /test/MathBuiltins/sin/float_sinh.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -no-inline-single 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK: %[[LOADB_ID:[a-zA-Z0-9_]*]] = OpLoad %[[FLOAT_TYPE_ID]] 8 | // CHECK: %[[OP:[a-zA-Z0-9_]*]] = OpFunctionCall %[[FLOAT_TYPE_ID]] %{{.*}} %[[LOADB_ID]] 9 | // CHECK: OpStore %{{.*}} %[[OP]] 10 | 11 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float* a, global float* b) 12 | { 13 | *a = sinh(*b); 14 | } 15 | -------------------------------------------------------------------------------- /test/MathBuiltins/sinpi/sinpi_half.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt --passes=replace-opencl-builtin %s -o %t.ll 2 | ; RUN: FileCheck %s < %t.ll 3 | 4 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 5 | target triple = "spir-unknown-unknown" 6 | 7 | define half @sinpi_half(half %x) { 8 | entry: 9 | %call = call spir_func half @_Z5sinpiDh(half %x) 10 | ret half %call 11 | } 12 | 13 | declare spir_func half @_Z5sinpiDh(half) 14 | 15 | ; CHECK: [[mul:%[a-zA-Z0-9_.]+]] = fmul half %x, 0xH4248 16 | ; CHECK: [[sin:%[a-zA-Z0-9_.]+]] = call half @llvm.sin.f16(half [[mul]]) 17 | 18 | -------------------------------------------------------------------------------- /test/MathBuiltins/tan/float3_half_tan_novec3.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -vec3-to-vec4 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK-DAG: %[[FLOAT_VECTOR_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeVector %[[FLOAT_TYPE_ID]] 4 8 | // CHECK-NOT: OpExtInst {{.*}} Tan 9 | 10 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float3* a, global float3* b) 11 | { 12 | *a = half_tan(*b); 13 | } 14 | -------------------------------------------------------------------------------- /test/MathBuiltins/tan/float3_tan_novec3.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -vec3-to-vec4 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK: %[[FLOAT_VECTOR_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeVector %[[FLOAT_TYPE_ID]] 4 8 | // CHECK-NOT: OpExtInst {{.*}} Tan 9 | 10 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float3* a, global float3* b) 11 | { 12 | *a = tan(*b); 13 | } 14 | -------------------------------------------------------------------------------- /test/MathBuiltins/tan/float_tan.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -no-inline-single 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[FLOAT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFloat 32 7 | // CHECK: %[[LOADB_ID:[a-zA-Z0-9_]*]] = OpLoad %[[FLOAT_TYPE_ID]] 8 | // CHECK: %[[OP:[a-zA-Z0-9_]*]] = OpFunctionCall %[[FLOAT_TYPE_ID]] %{{.*}} %[[LOADB_ID]] 9 | // CHECK: OpStore %{{.*}} %[[OP]] 10 | 11 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float* a, global float* b) 12 | { 13 | *a = tan(*b); 14 | } 15 | -------------------------------------------------------------------------------- /test/MultipleInputs/kernel.cl2: -------------------------------------------------------------------------------- 1 | void bar(global uint *dst, global uint *src); 2 | 3 | void bar(global uint *dst, global uint *src) { 4 | dst[0] = src[0]; 5 | } 6 | 7 | -------------------------------------------------------------------------------- /test/MultipleInputs/kernel.ll2: -------------------------------------------------------------------------------- 1 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 2 | target triple = "spir-unknown-unknown" 3 | 4 | define dso_local spir_func void @bar(i32 addrspace(1)* %dst, i32 addrspace(1)* %src) { 5 | entry: 6 | %0 = load i32, i32 addrspace(1)* %src, align 4 7 | store i32 %0, i32 addrspace(1)* %dst, align 4 8 | ret void 9 | } 10 | -------------------------------------------------------------------------------- /test/PhysicalStorageBuffers/physical_pointers_spir64_only.cl: -------------------------------------------------------------------------------- 1 | 2 | // Check that clspv does not allow physical storage buffers with the 'spir' 3 | // target. 4 | // RUN: not clspv %s -o %t.spv -arch=spir -physical-storage-buffers 5 | 6 | kernel void test() 7 | { 8 | } 9 | -------------------------------------------------------------------------------- /test/PointerCasts/deref_load_cast_float4_to_int2.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global int2* a, global float4* b) 7 | { 8 | *a = *((global int2*)b); 9 | } 10 | // CHECK: [[_uint:%[0-9a-zA-Z_]+]] = OpTypeInt 32 0 11 | // CHECK: [[_v2uint:%[0-9a-zA-Z_]+]] = OpTypeVector [[_uint]] 2 12 | // CHECK: [[_24:%[0-9a-zA-Z_]+]] = OpLoad [[_v2uint]] 13 | // CHECK: OpStore {{.*}} [[_24]] 14 | -------------------------------------------------------------------------------- /test/PointerCasts/deref_store_cast_int4_to_float2.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global int4* a, global float2* b) 7 | { 8 | *((global float2*)a) = *b; 9 | } 10 | // CHECK-DAG: [[_float:%[0-9a-zA-Z_]+]] = OpTypeFloat 32 11 | // CHECK-DAG: [[_v2float:%[0-9a-zA-Z_]+]] = OpTypeVector [[_float]] 2 12 | // CHECK: [[_23:%[0-9a-zA-Z_]+]] = OpLoad [[_v2float]] 13 | // CHECK: OpStore {{.*}} [[_23]] 14 | -------------------------------------------------------------------------------- /test/PointerCasts/issue-1174.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %s -o %t.spv -arch=spir64 2 | // RUN: spirv-dis %t.spv -o %t.spvasm 3 | // RUN: spirv-val %t.spv --target-env spv1.0 4 | 5 | #define ElementCount 100 6 | 7 | struct E { 8 | int i; 9 | long l; 10 | }; 11 | 12 | struct S { 13 | struct E e[ElementCount]; 14 | }; 15 | 16 | kernel void Kernel(global struct S *s) 17 | { 18 | 19 | for (int i = 0; i < ElementCount; ++i) { 20 | global struct E *e = &s->e[i]; 21 | e->l += e->i; 22 | } 23 | 24 | s->e[0].i = s->e[1].i; 25 | } 26 | -------------------------------------------------------------------------------- /test/PointerCasts/issue-1176.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %s -o %t.spv 2 | // RUN: spirv-dis %t.spv -o %t.spvasm 3 | // RUN: spirv-val %t.spv --target-env spv1.0 4 | 5 | struct E { 6 | int i1, i2, i3; 7 | }; 8 | 9 | struct S { 10 | struct E e[3]; 11 | }; 12 | 13 | kernel void Kernel0(global struct S *s) { s->e[0] = s->e[1]; } 14 | kernel void Kernel1(global struct S *s) { s->e[1] = s->e[0]; } 15 | kernel void Kernel2(global struct S *s) { s->e[1] = s->e[2]; } 16 | kernel void Kernel3(global struct S *s) { s->e[2] = s->e[1]; } 17 | -------------------------------------------------------------------------------- /test/PointerCasts/issue-1177.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %s -o %t.spv 2 | // RUN: spirv-dis %t.spv -o %t.spvasm 3 | // RUN: spirv-val %t.spv --target-env spv1.0 4 | 5 | struct E { 6 | int i1, i2, i3; 7 | }; 8 | 9 | struct S { 10 | struct E e1, e2; 11 | }; 12 | 13 | kernel void Kernel0(global struct S *s) { s->e1 = s->e2; } 14 | kernel void Kernel1(global struct S *s) { s->e2 = s->e1; } 15 | -------------------------------------------------------------------------------- /test/PointerCasts/issue-1178.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %s -o %t.spv 2 | // RUN: spirv-dis %t.spv -o %t.spvasm 3 | // RUN: spirv-val %t.spv --target-env spv1.0 4 | 5 | struct E { 6 | int i1, i2, i3; 7 | }; 8 | 9 | struct S { 10 | int i1, i2; 11 | struct E e1, e2; 12 | }; 13 | 14 | kernel void Kernel0(global struct S *s) { 15 | s->e1 = s->e2; 16 | s->i1 = 0; 17 | } 18 | 19 | kernel void Kernel1(global struct S *s) { 20 | s->e1 = s->e2; 21 | s->i2 = 0; 22 | } 23 | kernel void Kernel2(global struct S *s) { 24 | s->e1 = s->e2; 25 | s->i2 = s->i1; 26 | } 27 | -------------------------------------------------------------------------------- /test/PointerCasts/issue-1180.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt %s -o %t.ll --passes=simplify-pointer-bitcast 2 | ; RUN: FileCheck %s < %t.ll 3 | 4 | ; CHECK: [[alloca:%[^ ]+]] = alloca [32 x i8], align 1 5 | ; CHECK: getelementptr [8 x i8], ptr [[alloca]], i32 0, i32 7 6 | 7 | define dso_local spir_kernel void @kernel() { 8 | entry: 9 | %0 = alloca [4 x i64], align 8 10 | %1 = getelementptr [8 x i8], ptr %0, i32 0, i32 7 11 | store i8 0, ptr %1, align 1 12 | ret void 13 | } 14 | -------------------------------------------------------------------------------- /test/PointerCasts/issue-1184.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %s -o %t.spv 2 | // RUN: spirv-dis %t.spv -o %t.spvasm 3 | // RUN: spirv-val %t.spv --target-env spv1.0 4 | 5 | struct E { int i0, i1; }; 6 | 7 | struct S 8 | { 9 | long i; struct E e; // Fails 10 | // struct E e; long i; // OK 11 | // int i; struct E e; // OK 12 | }; 13 | 14 | kernel void Kernel(global struct S* s) 15 | { 16 | s->i = 1; 17 | s->e.i0 = 1; 18 | s->e.i1 = 1; 19 | } 20 | -------------------------------------------------------------------------------- /test/PointerCasts/issue-1196.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt %s -o %t.ll --passes=replace-pointer-bitcast 2 | ; RUN: FileCheck %s < %t.ll 3 | 4 | ; CHECK: [[alloca:%[^ ]+]] = alloca [196 x i8], align 1 5 | ; CHECK: [[gep:%[^ ]+]] = getelementptr [196 x i8], ptr [[alloca]], i32 0, i32 64 6 | ; CHECK: store i8 %val, ptr [[gep]], align 1 7 | 8 | define dso_local spir_kernel void @kernel(i8 %val) { 9 | entry: 10 | %alloca = alloca { [8 x i64], [16 x i64], i32 }, align 16 11 | %gep = getelementptr { [8 x i64], [16 x i64], i32 }, ptr %alloca, i32 0, i32 1, i32 0 12 | store i8 %val, ptr %gep, align 1 13 | ret void 14 | } 15 | -------------------------------------------------------------------------------- /test/PointerCasts/issue-1197-2.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt %s -o %t.ll --passes=simplify-pointer-bitcast 2 | ; RUN: FileCheck %s < %t.ll 3 | 4 | ; CHECK: [[alloca:%[^ ]+]] = alloca [64 x i8], align 1 5 | ; CHECK: [[gep:%[^ ]+]] = getelementptr i32, ptr [[alloca]], i32 0 6 | ; CHECK: store i32 0, ptr [[gep]], align 4 7 | 8 | define dso_local spir_kernel void @kernel() { 9 | entry: 10 | %alloca = alloca [64 x i8], align 1 11 | store i32 0, ptr %alloca, align 4 12 | ret void 13 | } 14 | -------------------------------------------------------------------------------- /test/PointerCasts/issue-1204.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt %s -o %t.ll --passes=simplify-pointer-bitcast 2 | ; RUN: FileCheck %s < %t.ll 3 | 4 | ; CHECK: getelementptr i8, ptr %md5, i32 4 5 | 6 | define dso_local spir_kernel void @kernel(ptr %md5) { 7 | entry: 8 | %arraydecay518 = getelementptr [4 x i32], ptr %md5, i32 0, i32 0 9 | %arrayidx519 = getelementptr i8, ptr %arraydecay518, i32 4 10 | ret void 11 | } 12 | -------------------------------------------------------------------------------- /test/PointerCasts/issue-1243.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt %s -o %t.ll --passes=simplify-pointer-bitcast 2 | ; RUN: FileCheck %s < %t.ll 3 | 4 | ; CHECK: [[gep:%[^ ]+]] = getelementptr <4 x i32>, ptr addrspace(1) %a, i32 %i 5 | ; CHECK: [[lshr:%[^ ]+]] = lshr i32 %i, 2 6 | ; CHECK: [[and:%[^ ]+]] = and i32 %i, 3 7 | ; CHECK: getelementptr <4 x i32>, ptr addrspace(1) %a, i32 [[lshr]], i32 [[and]] 8 | 9 | define spir_kernel void @test(ptr addrspace(1) %a, i32 %i) { 10 | entry: 11 | %0 = getelementptr <4 x i32>, ptr addrspace(1) %a, i32 %i 12 | %1 = getelementptr i32, ptr addrspace(1) %a, i32 %i 13 | ret void 14 | } 15 | -------------------------------------------------------------------------------- /test/PointerCasts/srcEQdst/load_cast_float2_to_int2.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global int2* a, global float2* b, int i) 7 | { 8 | *a = ((global int2*)b)[i]; 9 | } 10 | // CHECK: [[_uint:%[0-9a-zA-Z_]+]] = OpTypeInt 32 0 11 | // CHECK: [[_v2uint:%[0-9a-zA-Z_]+]] = OpTypeVector [[_uint]] 2 12 | // CHECK: [[_28:%[0-9a-zA-Z_]+]] = OpLoad [[_v2uint]] 13 | // CHECK: OpStore {{.*}} [[_28]] 14 | -------------------------------------------------------------------------------- /test/PointerCasts/srcEQdst/load_cast_float3_to_int3.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global int3* a, global float3* b, int i) 7 | { 8 | *a = ((global int3*)b)[i]; 9 | } 10 | // CHECK: [[_uint:%[0-9a-zA-Z_]+]] = OpTypeInt 32 0 11 | // CHECK: [[_v3uint:%[0-9a-zA-Z_]+]] = OpTypeVector [[_uint]] 3 12 | // CHECK: [[_28:%[0-9a-zA-Z_]+]] = OpLoad [[_v3uint]] 13 | // CHECK: OpStore {{.*}} [[_28]] 14 | -------------------------------------------------------------------------------- /test/PointerCasts/srcEQdst/load_cast_float3_to_uint3.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global uint3* a, global float3* b, int i) 7 | { 8 | *a = ((global uint3*)b)[i]; 9 | } 10 | // CHECK: [[_uint:%[0-9a-zA-Z_]+]] = OpTypeInt 32 0 11 | // CHECK: [[_v3uint:%[0-9a-zA-Z_]+]] = OpTypeVector [[_uint]] 3 12 | // CHECK: [[_28:%[0-9a-zA-Z_]+]] = OpLoad [[_v3uint]] 13 | // CHECK: OpStore {{.*}} [[_28]] 14 | -------------------------------------------------------------------------------- /test/PointerCasts/srcEQdst/load_cast_float4_to_int4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global int4* a, global float4* b, int i) 7 | { 8 | *a = ((global int4*)b)[i]; 9 | } 10 | // CHECK: [[_uint:%[0-9a-zA-Z_]+]] = OpTypeInt 32 0 11 | // CHECK: [[_v4uint:%[0-9a-zA-Z_]+]] = OpTypeVector [[_uint]] 4 12 | // CHECK: [[_28:%[0-9a-zA-Z_]+]] = OpLoad [[_v4uint]] 13 | // CHECK: OpStore {{.*}} [[_28]] 14 | -------------------------------------------------------------------------------- /test/PointerCasts/srcEQdst/load_cast_float_to_int.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float* a, global int* b, int i) 7 | { 8 | *b = ((global int*)a)[i]; 9 | } 10 | // CHECK: [[_uint:%[0-9a-zA-Z_]+]] = OpTypeInt 32 0 11 | // CHECK: [[_25:%[0-9a-zA-Z_]+]] = OpLoad [[_uint]] 12 | // CHECK: OpStore {{.*}} [[_25]] 13 | -------------------------------------------------------------------------------- /test/PointerCasts/srcEQdst/load_cast_int4_to_float4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global int4* a, global float4* b, int i) 7 | { 8 | *b = ((global float4*)a)[i]; 9 | } 10 | // CHECK: [[_float:%[0-9a-zA-Z_]+]] = OpTypeFloat 32 11 | // CHECK: [[_v4float:%[0-9a-zA-Z_]+]] = OpTypeVector [[_float]] 4 12 | // CHECK: [[_28:%[0-9a-zA-Z_]+]] = OpLoad [[_v4float]] 13 | // CHECK: OpStore {{.*}} [[_28]] 14 | -------------------------------------------------------------------------------- /test/PointerCasts/srcEQdst/store_cast_float2_to_int2.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float2* a, global int2* b, int i) 7 | { 8 | ((global int2*)a)[i] = *b; 9 | } 10 | // CHECK-DAG: [[_uint:%[0-9a-zA-Z_]+]] = OpTypeInt 32 0 11 | // CHECK-DAG: [[_v2uint:%[0-9a-zA-Z_]+]] = OpTypeVector [[_uint]] 2 12 | // CHECK: [[_28:%[0-9a-zA-Z_]+]] = OpLoad [[_v2uint]] 13 | // CHECK: OpStore {{.*}} [[_28]] 14 | -------------------------------------------------------------------------------- /test/PointerCasts/srcEQdst/store_cast_float3_to_int3.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global int3* a, global float3* b, int i) 7 | { 8 | ((global int3*)b)[i] = *a; 9 | } 10 | // CHECK: [[_uint:%[0-9a-zA-Z_]+]] = OpTypeInt 32 0 11 | // CHECK: [[_v3uint:%[0-9a-zA-Z_]+]] = OpTypeVector [[_uint]] 3 12 | // CHECK: [[_28:%[0-9a-zA-Z_]+]] = OpLoad [[_v3uint]] 13 | // CHECK: OpStore {{.*}} [[_28]] 14 | -------------------------------------------------------------------------------- /test/PointerCasts/srcEQdst/store_cast_float3_to_uint3.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global uint3* a, global float3* b, int i) 7 | { 8 | ((global uint3*)b)[i] = *a; 9 | } 10 | // CHECK: [[_uint:%[0-9a-zA-Z_]+]] = OpTypeInt 32 0 11 | // CHECK: [[_v3uint:%[0-9a-zA-Z_]+]] = OpTypeVector [[_uint]] 3 12 | // CHECK: [[_28:%[0-9a-zA-Z_]+]] = OpLoad [[_v3uint]] 13 | // CHECK: OpStore {{.*}} [[_28]] 14 | -------------------------------------------------------------------------------- /test/PointerCasts/srcEQdst/store_cast_float4_to_int4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global int4* a, global float4* b, int i) 7 | { 8 | ((global int4*)b)[i] = *a; 9 | } 10 | // CHECK: [[_uint:%[0-9a-zA-Z_]+]] = OpTypeInt 32 0 11 | // CHECK: [[_v4uint:%[0-9a-zA-Z_]+]] = OpTypeVector [[_uint]] 4 12 | // CHECK: [[_28:%[0-9a-zA-Z_]+]] = OpLoad [[_v4uint]] 13 | // CHECK: OpStore {{.*}} [[_28]] 14 | -------------------------------------------------------------------------------- /test/PointerCasts/srcEQdst/store_cast_float_to_int.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float* a, global int* b, int i) 7 | { 8 | ((global int*)a)[i] = *b; 9 | } 10 | // CHECK: [[_uint:%[0-9a-zA-Z_]+]] = OpTypeInt 32 0 11 | // CHECK: [[_25:%[0-9a-zA-Z_]+]] = OpLoad [[_uint]] 12 | // CHECK: OpStore {{.*}} [[_25]] 13 | -------------------------------------------------------------------------------- /test/PointerCasts/srcEQdst/store_cast_int4_to_float4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global int4* a, global float4* b, int i) 7 | { 8 | ((global float4*)a)[i] = *b; 9 | } 10 | // CHECK: [[_float:%[0-9a-zA-Z_]+]] = OpTypeFloat 32 11 | // CHECK: [[_v4float:%[0-9a-zA-Z_]+]] = OpTypeVector [[_float]] 4 12 | // CHECK: [[_load:%[0-9a-zA-Z_]+]] = OpLoad [[_v4float]] 13 | // CHECK: OpStore {{.*}} [[_load]] 14 | -------------------------------------------------------------------------------- /test/PointerCasts/srcEQdst/store_cast_int_to_float.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global int* a, global float* b, int i) 7 | { 8 | ((global float*)a)[i] = *b; 9 | } 10 | // CHECK: [[_float:%[0-9a-zA-Z_]+]] = OpTypeFloat 32 11 | // CHECK: [[_24:%[0-9a-zA-Z_]+]] = OpLoad [[_float]] 12 | // CHECK: OpStore {{.*}} [[_24]] 13 | -------------------------------------------------------------------------------- /test/PointerCasts/store-zeroinitializer.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt %s -o %t.ll --passes=replace-pointer-bitcast 2 | ; RUN: FileCheck %s < %t.ll 3 | 4 | ; CHECK-COUNT-10: store [2 x i8] zeroinitializer, ptr addrspace(1) 5 | 6 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 7 | target triple = "spir-unknown-unknown" 8 | 9 | define dso_local spir_kernel void @foo(ptr addrspace(1) %source) { 10 | entry: 11 | %0 = load [2 x i8], ptr addrspace(1) %source, align 2 12 | store [5 x i32] zeroinitializer, ptr addrspace(1) %source, align 4 13 | ret void 14 | } 15 | -------------------------------------------------------------------------------- /test/Preprocessor/LocalInclude.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: OpEntryPoint GLCompute %[[FOO_ID:[a-zA-Z0-9_]*]] "foo" 7 | // CHECK: OpExecutionMode %[[FOO_ID]] LocalSize 4 2 1 8 | 9 | #include "SomeIncludeDirectory/SomeHeader.h" 10 | -------------------------------------------------------------------------------- /test/Preprocessor/SystemInclude.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -I %S/SomeIncludeDirectory %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: OpEntryPoint GLCompute %[[FOO_ID:[a-zA-Z0-9_]*]] "foo" 7 | // CHECK: OpExecutionMode %[[FOO_ID]] LocalSize 4 2 1 8 | 9 | #include 10 | -------------------------------------------------------------------------------- /test/Preprocessor/TwoSystemIncludes.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -I %S/SomeIncludeDirectory -I %S/AnotherIncludeDirectory %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: OpEntryPoint GLCompute %[[FOO_ID:[a-zA-Z0-9_]*]] "foo" 7 | // CHECK: OpEntryPoint GLCompute %[[BAR_ID:[a-zA-Z0-9_]*]] "bar" 8 | // CHECK: OpExecutionMode %[[FOO_ID]] LocalSize 4 2 1 9 | // CHECK: OpExecutionMode %[[BAR_ID]] LocalSize 5 3 2 10 | 11 | #include 12 | 13 | #include 14 | -------------------------------------------------------------------------------- /test/Preprocessor/UserDefine.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -DUSER_SPECIFIED %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: OpEntryPoint GLCompute %[[FOO_ID:[a-zA-Z0-9_]*]] "foo" 7 | // CHECK: OpExecutionMode %[[FOO_ID]] LocalSize 4 2 1 8 | 9 | #ifdef USER_SPECIFIED 10 | void kernel __attribute__((reqd_work_group_size(4, 2, 1))) foo() 11 | { 12 | } 13 | #endif 14 | -------------------------------------------------------------------------------- /test/Preprocessor/UserDefineValue.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -DUSER_SPECIFIED=42 %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: OpEntryPoint GLCompute %[[FOO_ID:[a-zA-Z0-9_]*]] "foo" 7 | // CHECK: OpExecutionMode %[[FOO_ID]] LocalSize 4 2 42 8 | 9 | #ifdef USER_SPECIFIED 10 | void kernel __attribute__((reqd_work_group_size(4, 2, USER_SPECIFIED))) foo() 11 | { 12 | } 13 | #endif 14 | -------------------------------------------------------------------------------- /test/Preprocessor/VULKAN.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: OpEntryPoint GLCompute %[[FOO_ID:[a-zA-Z0-9_]*]] "foo" 7 | // CHECK: OpExecutionMode %[[FOO_ID]] LocalSize 100 100 100 8 | 9 | #ifdef VULKAN 10 | void kernel __attribute__((reqd_work_group_size(VULKAN, VULKAN, VULKAN))) foo() 11 | { 12 | } 13 | #endif 14 | -------------------------------------------------------------------------------- /test/Preprocessor/__FAST_RELAXED_MATH__.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -cl-fast-relaxed-math %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: OpEntryPoint GLCompute %[[FOO_ID:[a-zA-Z0-9_]*]] "foo" 7 | // CHECK: OpExecutionMode %[[FOO_ID]] LocalSize 2 3 4 8 | 9 | #ifdef __FAST_RELAXED_MATH__ 10 | void kernel __attribute__((reqd_work_group_size(2, 3, 4))) foo() 11 | { 12 | } 13 | #endif 14 | -------------------------------------------------------------------------------- /test/Preprocessor/__OPENCL_C_VERSION__.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: OpEntryPoint GLCompute %[[FOO_ID:[a-zA-Z0-9_]*]] "foo" 7 | // CHECK: OpExecutionMode %[[FOO_ID]] LocalSize 120 120 120 8 | 9 | #ifdef __OPENCL_C_VERSION__ 10 | void kernel __attribute__((reqd_work_group_size(__OPENCL_C_VERSION__, __OPENCL_C_VERSION__, __OPENCL_C_VERSION__))) foo() 11 | { 12 | } 13 | #endif 14 | -------------------------------------------------------------------------------- /test/Preprocessor/__OPENCL_VERSION__.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: OpEntryPoint GLCompute %[[FOO_ID:[a-zA-Z0-9_]*]] "foo" 7 | // CHECK: OpExecutionMode %[[FOO_ID]] LocalSize 120 120 120 8 | 9 | #ifdef __OPENCL_VERSION__ 10 | void kernel __attribute__((reqd_work_group_size(__OPENCL_VERSION__, __OPENCL_VERSION__, __OPENCL_VERSION__))) foo() 11 | { 12 | } 13 | #endif 14 | -------------------------------------------------------------------------------- /test/Printf/printf_negative.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %s -o %t.spv -enable-printf 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | kernel void test(__global int* a, __global int* b) { 7 | uint i = get_global_id(0); 8 | b[i] = a[i]; 9 | } 10 | 11 | // CHECK: %[[ReflectionImport:[0-9a-zA-Z_]+]] = OpExtInstImport "NonSemantic.ClspvReflection.5" 12 | 13 | // CHECK-NOT: OpExtInst %void %[[ReflectionImport]] PrintfBufferStorageBuffer %{{[0-9a-zA-Z_]+}} %{{[0-9a-zA-Z_]+}} %{{[0-9a-zA-Z_]+}} 14 | -------------------------------------------------------------------------------- /test/PrivatePointerPHI/invalid-loop-canonicalization.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %s -o %t.spv 2 | // RUN: spirv-dis %t.spv -o %t.spvasm 3 | // RUN: spirv-val --target-env spv1.0 %t.spv 4 | 5 | int foo(private unsigned char *tab, unsigned int stride) { 6 | int res = 0; 7 | for (int i = 0; i < 128; i++, tab += stride) { 8 | res += *tab; 9 | } 10 | return res; 11 | } 12 | 13 | void kernel k(global int *out) { 14 | private 15 | unsigned char tab[128]; 16 | out[get_global_id(0)] = foo(tab, 4); 17 | } 18 | -------------------------------------------------------------------------------- /test/ProgramScopeConstants/constant.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | constant uint b = 42; 7 | 8 | // CHECK: [[uint:%[a-zA-Z0-9_]+]] = OpTypeInt 32 0 9 | // CHECK: %[[CONSTANT_42_ID:[a-zA-Z0-9_]+]] = OpConstant [[uint]] 42 10 | // CHECK: OpStore {{.*}} %[[CONSTANT_42_ID]] 11 | 12 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global uint* a) 13 | { 14 | *a = b; 15 | } 16 | -------------------------------------------------------------------------------- /test/ProgramScopeConstants/in_storage_buffer_descriptor_map_arr_arr.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -module-constants-in-storage-buffer 2 | // RUN: clspv-reflection %t.spv -o %t.map 3 | // RUN: FileCheck -check-prefix=MAP %s < %t.map 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // Proves ConstantDataVector and ConstantArray work. 7 | 8 | __constant uint ppp[2][3] = {{1,2,3}, {5}}; 9 | 10 | kernel void foo(global uint* A, uint i) { *A = ppp[i][i]; } 11 | 12 | // MAP: constant,descriptorSet,1,binding,0,kind,buffer,hexbytes,010000000200000003000000050000000000000000000000 13 | -------------------------------------------------------------------------------- /test/ProgramScopeConstants/in_storage_buffer_descriptor_map_arr_vec3.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -module-constants-in-storage-buffer 2 | // RUN: clspv-reflection %t.spv -o %t.map 3 | // RUN: FileCheck -check-prefix=MAP %s < %t.map 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // Proves ConstantDataVector and ConstantArray work. 7 | 8 | __constant uint3 ppp[2] = {(uint3)(1,2,3), (uint3)(5)}; 9 | 10 | kernel void foo(global uint* A, uint i) { *A = ppp[i].x; } 11 | 12 | 13 | 14 | // MAP: constant,descriptorSet,1,binding,0,kind,buffer,hexbytes,0100000002000000030000000000000005000000050000000500000000000000 15 | -------------------------------------------------------------------------------- /test/PushConstant/arrays.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -verify -cluster-pod-kernel-args -pod-pushconstant -w 2 | 3 | struct A { 4 | int a[4]; 5 | }; 6 | 7 | kernel void foo(struct A a) {} //expected-error{{arrays are not supported in push constants currently}} 8 | -------------------------------------------------------------------------------- /test/PushConstant/max_size_execeed_cluster.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -verify -pod-pushconstant -cluster-pod-kernel-args -max-pushconstant-size=24 -w 2 | 3 | kernel void foo(int a, int4 b) {} //expected-error{{max push constant size exceeded}} 4 | -------------------------------------------------------------------------------- /test/PushConstant/max_size_exeeded.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -verify -pod-pushconstant -cluster-pod-kernel-args -max-pushconstant-size=8 -w 2 | 3 | kernel void foo(global int* data, int4 pod) { } //expected-error{{max push constant size exceeded}} 4 | -------------------------------------------------------------------------------- /test/Reflection/uniform_workgroup_size.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -cl-std=CLC++ -inline-entry-points -uniform-workgroup-size 2 | // RUN: spirv-dis %t.spv -o %t.spvasm 3 | // RUN: FileCheck %s < %t.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | kernel void foo(global int* out) { 7 | int gid = get_global_id(0); 8 | out[gid] = gid; 9 | } 10 | 11 | // CHECK-NOT: OpTypePointer PushConstant 12 | // CHECK-NOT: PushConstantRegionOffset 13 | 14 | -------------------------------------------------------------------------------- /test/Reflection/unused_arg.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %s -o %t.spv 2 | // RUN: spirv-dis %t.spv -o %t.spvasm 3 | // RUN: FileCheck %s < %t.spvasm 4 | // RUN: spirv-val %t.spv 5 | 6 | // CHECK: [[import:%[a-zA-Z0-9_]+]] = OpExtInstImport "NonSemantic.ClspvReflection. 7 | // CHECK-NOT: OpExtInst {{%.*}} [[import]] Argument 8 | // CHECK: OpExtInst {{%.*}} [[import]] ArgumentInfo 9 | // CHECK: OpExtInst {{%.*}} [[import]] ArgumentStorageBuffer 10 | // CHECK-NOT: OpExtInst {{%.*}} [[import]] Argument 11 | 12 | kernel void test(global int* in, global int* out) { 13 | *out = 0; 14 | } 15 | -------------------------------------------------------------------------------- /test/RemoveUnusedArguments/leverage_dra.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -no-inline-single 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | int bar(global int* x) { return *x; } 7 | void kernel foo(global int* x, global int* y) { *x = bar(y); } 8 | 9 | // CHECK-NOT: OpFunctionParameter 10 | 11 | -------------------------------------------------------------------------------- /test/RemoveUnusedArguments/remove_multiple_args.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt --passes=remove-unused-arguments %s -o %t.ll 2 | ; RUN: FileCheck %s < %t.ll 3 | 4 | ; CHECK: @bar(float [[y:%[a-zA-Z0-9_.]+]]) { 5 | ; CHECK: ret float [[y]] 6 | 7 | define float @bar(float %x, float %y, float %z) { 8 | entry: 9 | ret float %y 10 | } 11 | 12 | -------------------------------------------------------------------------------- /test/RemoveUnusedArguments/remove_unused_arg.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -no-inline-single 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | int bar(int x) { return 0; } 7 | void kernel foo(global int* x) { *x = bar(1); } 8 | 9 | // CHECK-NOT: OpFunctionParameter 10 | -------------------------------------------------------------------------------- /test/RemoveUnusedArguments/type_conversion_use.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -no-inline-single 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | __attribute__((noinline)) 7 | float bar(float x, int y, float z) { return y; } 8 | void kernel foo(global float* x) { *x = bar(1.0f, 1, 1.0f); } 9 | 10 | // CHECK: [[int:%[a-zA-Z0-9_]+]] = OpTypeInt 32 0 11 | // CHECK-NOT: OpFunctionParameter 12 | // CHECK: OpFunctionParameter [[int]] 13 | // CHECK-NOT: OpFunctionParameter 14 | 15 | -------------------------------------------------------------------------------- /test/RewritePackedStructs/packed_struct3.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt --passes=rewrite-packed-structs %s -o %t 2 | ; RUN: FileCheck %s < %t 3 | 4 | %struct = type <{ i32, float }> 5 | 6 | define spir_kernel void @test(%struct addrspace(1)* %in) { 7 | %1 = call spir_func i32 @_Z13get_global_idj(i32 0) 8 | %2 = getelementptr inbounds %struct, %struct addrspace(1)* %in, i32 %1 9 | store %struct <{ i32 2100483600, float 0.0 }>, %struct addrspace(1)* %2 10 | ret void 11 | } 12 | 13 | declare spir_func i32 @_Z13get_global_idj(i32) 14 | 15 | ; CHECK: define spir_kernel void @test(ptr addrspace(1) %in) { 16 | -------------------------------------------------------------------------------- /test/SpecializeImageTypes/no_duplicate_storage_image_type.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv --cl-std=CL2.0 --inline-entry-points 2 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 3 | 4 | kernel void foo(write_only image2d_t im) { } 5 | 6 | kernel void bar(read_write image2d_t im) { } 7 | -------------------------------------------------------------------------------- /test/SpecializeImageTypes/pointer_loop_simple.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt %s -o %t.ll --passes=specialize-image-types 2 | 3 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 4 | target triple = "spir-unknown-unknown" 5 | 6 | define spir_kernel void @test(ptr addrspace(1) %in, i32 %n) { 7 | entry: 8 | br label %loop 9 | 10 | loop: 11 | %phi = phi ptr addrspace(1) [ %in, %entry ], [ %phi, %loop ] 12 | %cmp = icmp eq i32 %n, 0 13 | br i1 %cmp, label %loop, label %exit 14 | 15 | exit: 16 | ret void 17 | } 18 | -------------------------------------------------------------------------------- /test/SpecializeImageTypes/unused.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %s -o %t.spv --cl-std=CL2.0 -inline-entry-points -cl-kernel-arg-info 2 | // RUN: spirv-val %t.spv 3 | 4 | kernel void foo(write_only image2d_t im1, read_write image2d_t im2) { 5 | write_imagef(im1, (int2)(0,0), (float4)(0.f,1.f,2.f,3.f)); 6 | } 7 | -------------------------------------------------------------------------------- /test/StripFreeze/strip_chain_freeze.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt %s -o %t.ll --passes=strip-freeze 2 | ; RUN: FileCheck %s < %t.ll 3 | 4 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 5 | target triple = "spir-unknown-unknown" 6 | 7 | ; CHECK-NOT: freeze i32 8 | ; CHECK: ret i32 %in 9 | define i32 @foo(i32 %in) { 10 | entry: 11 | %freeze1 = freeze i32 %in 12 | %freeze2 = freeze i32 %freeze1 13 | ret i32 %freeze2 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/StripFreeze/strip_single_freeze.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt %s -o %t.ll --passes=strip-freeze 2 | ; RUN: FileCheck %s < %t.ll 3 | 4 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 5 | target triple = "spir-unknown-unknown" 6 | 7 | ; CHECK-NOT: freeze i32 8 | ; CHECK: ret i32 %in 9 | define i32 @foo(i32 %in) { 10 | entry: 11 | %freeze = freeze i32 %in 12 | ret i32 %freeze 13 | } 14 | -------------------------------------------------------------------------------- /test/Structs/kernel_arg_has_pointer_in_struct.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -verify %s 2 | 3 | struct T { 4 | global int* ptr; 5 | }; 6 | 7 | kernel void foo(global struct T* t) { //expected-error{{structures may not contain pointers}} 8 | *t->ptr = 0; 9 | } 10 | -------------------------------------------------------------------------------- /test/Structs/mutual_recursion_error.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -verify %s 2 | 3 | struct T; 4 | typedef struct S { 5 | struct T* pt; // forward-declared pointer type. 6 | int a; 7 | } S; 8 | 9 | typedef struct T { 10 | S* ps; 11 | } T; 12 | 13 | kernel void foo(global S* s) { //expected-error{{recursive structures are not supported}} 14 | s->a = 1; 15 | } 16 | 17 | -------------------------------------------------------------------------------- /test/Structs/nested_pointer_error.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -verify 2 | 3 | typedef struct S { 4 | int* ptr; 5 | } S; 6 | 7 | typedef struct T { 8 | S s; 9 | } T; 10 | 11 | kernel void foo(global T* t) { //expected-error{{structures may not contain pointers}} 12 | (void)t; 13 | } 14 | -------------------------------------------------------------------------------- /test/Structs/nested_pointer_error2.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -verify 2 | 3 | typedef struct T { 4 | int* a[2]; 5 | } T; 6 | 7 | kernel void foo(global T* t) { //expected-error{{structures may not contain pointers}} 8 | (void)t; 9 | } 10 | 11 | -------------------------------------------------------------------------------- /test/Structs/ptr_in_struct.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -verify %s -w 2 | // expected-no-diagnostics 3 | 4 | struct T { 5 | global int* ptr; 6 | }; 7 | 8 | void bar(struct T* t) { 9 | *t->ptr = 42; 10 | } 11 | 12 | kernel void foo(global int* out) { 13 | struct T t; 14 | t.ptr = out; 15 | bar(&t); 16 | } 17 | -------------------------------------------------------------------------------- /test/Structs/ptr_in_struct2.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -verify %s -w 2 | // expected-no-diagnostics 3 | 4 | struct T { 5 | global int* ptr; 6 | }; 7 | 8 | struct T bar(global int* out) { 9 | struct T t; 10 | t.ptr = out; 11 | return t; 12 | } 13 | 14 | kernel void foo(global int* out) { 15 | struct T t = bar(out); 16 | *(t.ptr) = 42; 17 | } 18 | -------------------------------------------------------------------------------- /test/ThreeElementVectorLowering/invalid_vec3_gep.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt %s -o %t.ll --passes=three-element-vector-lowering 2 | ; RUN: FileCheck %s < %t.ll 3 | 4 | ; CHECK: getelementptr inbounds <4 x i32>, ptr %a, i32 2, i32 3 5 | 6 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 7 | target triple = "spir-unknown-unknown" 8 | 9 | define dso_local spir_kernel void @test1(ptr %a) { 10 | entry: 11 | %gep = getelementptr inbounds <3 x i32>, ptr %a, i32 2, i32 3 12 | ret void 13 | } 14 | -------------------------------------------------------------------------------- /test/ThreeElementVectorLowering/invalid_vec3_gep2.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt %s -o %t.ll --passes=three-element-vector-lowering 2 | ; RUN: FileCheck %s < %t.ll 3 | 4 | ; CHECK: getelementptr inbounds <4 x i32>, ptr %a, i32 2, i32 %i 5 | 6 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 7 | target triple = "spir-unknown-unknown" 8 | 9 | define dso_local spir_kernel void @test1(ptr %a, i32 %i) { 10 | entry: 11 | %gep = getelementptr inbounds <3 x i32>, ptr %a, i32 2, i32 %i 12 | ret void 13 | } 14 | -------------------------------------------------------------------------------- /test/ThreeElementVectorLowering/valid_vec3_gep.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt %s -o %t.ll --passes=three-element-vector-lowering 2 | ; RUN: FileCheck %s < %t.ll 3 | 4 | ; CHECK: getelementptr inbounds <3 x i32>, ptr %a, i32 2, i32 2 5 | 6 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 7 | target triple = "spir-unknown-unknown" 8 | 9 | define dso_local spir_kernel void @test1(ptr %a) { 10 | entry: 11 | %gep = getelementptr inbounds <3 x i32>, ptr %a, i32 2, i32 2 12 | ret void 13 | } 14 | -------------------------------------------------------------------------------- /test/UBO/bad_after_array.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -w -constant-args-ubo -verify -inline-entry-points %s 2 | 3 | struct dt { 4 | int x[2]; //expected-note{{here}} 5 | int y; 6 | } __attribute((aligned(16))); 7 | 8 | __kernel void foo(__constant struct dt* c) { } //expected-error{{clspv restriction: to satisfy UBO ArrayStride restrictions, element size must be a multiple of array alignment}} 9 | -------------------------------------------------------------------------------- /test/UBO/bad_array.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -w -constant-args-ubo -verify -inline-entry-points 2 | 3 | struct dt { 4 | int x; 5 | int y[4]; //expected-note{{here}} 6 | } __attribute((aligned(32))); 7 | 8 | __kernel void foo(__constant struct dt* c) { } //expected-error{{in an UBO, arrays must be aligned to their element alignment, rounded up to a multiple of 16}} 9 | 10 | -------------------------------------------------------------------------------- /test/UBO/bad_int_array.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -w -constant-args-ubo -verify -inline-entry-points 2 | 3 | kernel void foo(__constant int* c) { } //expected-error{{clspv restriction: to satisfy UBO ArrayStride restrictions, element size must be a multiple of array alignment}} 4 | -------------------------------------------------------------------------------- /test/UBO/bad_pod_ubo.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -w -pod-ubo -verify %s 2 | 3 | typedef struct { 4 | struct { int x[4]; int y; } x[2]; //expected-note{{here}} 5 | } data_type; 6 | 7 | __kernel void foo(__global data_type *data, data_type pod_arg) { //expected-error{{clspv restriction: to satisfy UBO ArrayStride restrictions, element size must be a multiple of array alignment}} 8 | data->x[0].x[0] = pod_arg.x[0].x[0]; 9 | } 10 | 11 | -------------------------------------------------------------------------------- /test/UBO/bad_scalar.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -w -constant-args-ubo -verify -inline-entry-points 2 | 3 | struct s { 4 | uchar x; 5 | int y; //expected-note{{here}} 6 | } __attribute((packed)) __attribute((aligned(16))); 7 | 8 | __kernel void foo(__constant struct s* arg) { } //expected-error{{scalar elements must be aligned to their size}} 9 | -------------------------------------------------------------------------------- /test/UBO/bad_ssbo_scalar.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -w -constant-args-ubo -verify -inline-entry-points 2 | 3 | struct s { 4 | uchar x; 5 | int y; //expected-note{{here}} 6 | } __attribute((packed)) __attribute((aligned(16))); 7 | 8 | __kernel void foo(__global struct s* arg) { } //expected-error{{scalar elements must be aligned to their size}} 9 | -------------------------------------------------------------------------------- /test/UBO/bad_ssbo_vec2.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -w -constant-args-ubo -verify -inline-entry-points 2 | 3 | struct s { 4 | uchar x; 5 | int2 y; //expected-note{{here}} 6 | } __attribute((packed)) __attribute((aligned(16))); 7 | 8 | __kernel void foo(__global struct s* arg) { } //expected-error{{two-component vectors must be aligned to 2 times their element size}} 9 | -------------------------------------------------------------------------------- /test/UBO/bad_ssbo_vec4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -w -constant-args-ubo -verify -inline-entry-points 2 | 3 | struct s { 4 | uchar x; 5 | int4 y; //expected-note{{here}} 6 | } __attribute((packed)) __attribute((aligned(16))); 7 | 8 | __kernel void foo(__global struct s* arg) { } //expected-error{{three- and four-component vectors must be aligned to 4 times their element size}} 9 | 10 | -------------------------------------------------------------------------------- /test/UBO/bad_struct.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -w -constant-args-ubo -verify -inline-entry-points %s 2 | 3 | struct inner { 4 | int x; 5 | }; 6 | 7 | struct outer { 8 | int x; 9 | struct inner y; //expected-note{{here}} 10 | } __attribute((aligned(32))); 11 | 12 | __kernel void foo(__constant struct outer* c) { } //expected-error{{in an UBO, structs must be aligned to their largest element alignment, rounded up to a multiple of 16 bytes}} 13 | -------------------------------------------------------------------------------- /test/UBO/bad_vec2.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -w -constant-args-ubo -verify -inline-entry-points 2 | 3 | struct s { 4 | uchar x; 5 | int2 y; //expected-note{{here}} 6 | } __attribute((packed)) __attribute((aligned(16))); 7 | 8 | __kernel void foo(__constant struct s* arg) { } //expected-error{{two-component vectors must be aligned to 2 times their element size}} 9 | -------------------------------------------------------------------------------- /test/UBO/bad_vec4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -w -constant-args-ubo -verify -inline-entry-points 2 | 3 | struct s { 4 | uchar x; 5 | int4 y; //expected-note{{here}} 6 | } __attribute((packed)) __attribute((aligned(16))); 7 | 8 | __kernel void foo(__constant struct s* arg) { } //expected-error{{three- and four-component vectors must be aligned to 4 times their element size}} 9 | 10 | -------------------------------------------------------------------------------- /test/UBO/relaxed_int_array.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -w -constant-args-ubo -verify -inline-entry-points -relaxed-ubo-layout 2 | 3 | // With -relaxed-ubo-layout specified, the ArrayStride restriction is not checked. 4 | // expected-no-diagnostics 5 | kernel void foo(__constant int* c) { } 6 | 7 | -------------------------------------------------------------------------------- /test/UndoInstCombine/extract_load_cast.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis %t.spv -o %t.spvasm 3 | // RUN: FileCheck %s < %t.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-NOT: OpTypeVector {{.*}} 6 7 | 8 | kernel void foo(global int *out) { 9 | *out = (short)get_local_size(0); 10 | } 11 | 12 | -------------------------------------------------------------------------------- /test/VaryingLocalSizes/reqd_work_group_size.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: OpEntryPoint GLCompute %[[FOO_ID:[a-zA-Z0-9_]*]] "foo" 7 | // CHECK: OpExecutionMode %[[FOO_ID]] LocalSize 42 13 5 8 | // CHECK-DAG: %[[VOID_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeVoid 9 | // CHECK-DAG: %[[FOO_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeFunction %[[VOID_TYPE_ID]] 10 | 11 | void kernel __attribute__((reqd_work_group_size(42, 13, 5))) foo() 12 | { 13 | } 14 | -------------------------------------------------------------------------------- /test/Warnings/error.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -Werror -verify 2 | 3 | kernel void foo(int arg) { } //expected-error{{unused parameter}} 4 | -------------------------------------------------------------------------------- /test/Warnings/ignored.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -w -verify 2 | 3 | kernel void foo(int arg) { } //expected-no-diagnostics 4 | -------------------------------------------------------------------------------- /test/Warnings/simple.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -verify 2 | 3 | kernel void foo(int arg) { } //expected-warning{{unused parameter}} 4 | -------------------------------------------------------------------------------- /test/WorkItemBuiltins/get_global_id-with-global-offset-dimension-4.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -global-offset %s -o %t.spv -arch=spir 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[uint:[0-9a-zA-Z_]+]] = OpTypeInt 32 0 7 | // CHECK-DAG: %[[uint_0:[0-9a-zA-Z_]+]] = OpConstant %[[uint]] 0 8 | // CHECK: OpStore {{.*}} %[[uint_0]] 9 | 10 | void kernel __attribute__((reqd_work_group_size(1,1,1))) test(global int *out) { 11 | out[0] = get_global_id(3); 12 | } 13 | 14 | -------------------------------------------------------------------------------- /test/WorkItemBuiltins/via-push-constant-enabled-but-not-used.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -work-dim -global-offset -cl-std=CL2.0 -inline-entry-points %s -o %t.spv 2 | // RUN: clspv-reflection %t.spv -o %t.dmap 3 | // RUN: FileCheck --check-prefix=DMAP %s < %t.dmap 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // DMAP-NOT: pushconstant,name,dimensions 7 | // DMAP-NOT: pushconstant,name,global_offset 8 | // DMAP-NOT: pushconstant,name,enqueued_local_size 9 | 10 | void kernel __attribute__((reqd_work_group_size(1,1,1))) test(int dummy) {} 11 | 12 | -------------------------------------------------------------------------------- /test/as_float.cl: -------------------------------------------------------------------------------- 1 | // Test for https://github.com/google/clspv/issues/166 2 | // Function declarations were missing from builtin header. 3 | 4 | // RUN: clspv %target %s -o %t.spv --spv-version=1.4 5 | // RUN: spirv-dis -o %t2.spvasm %t.spv 6 | // RUN: FileCheck %s < %t2.spvasm 7 | // RUN: spirv-val --target-env vulkan1.2 %t.spv 8 | 9 | 10 | kernel void foo(global float *A, uint a) { 11 | *A = as_float(a); 12 | } 13 | 14 | // CHECK-DAG: [[int:%[a-zA-Z0-9_]+]] = OpTypeInt 32 0 15 | // CHECK: [[ld:%[a-zA-Z0-9_]+]] = OpCompositeExtract [[int]] 16 | // CHECK: OpStore {{.*}} [[ld]] 17 | -------------------------------------------------------------------------------- /test/char4_constant.cl: -------------------------------------------------------------------------------- 1 | 2 | // Test for https://github.com/google/clspv/issues/36 3 | // A <4 x 18> constant was generated incorrectly. 4 | 5 | kernel void dup(global uchar4 *B) { 6 | *B = (uchar4)(1,128,3,4); 7 | } 8 | 9 | // RUN: clspv %target %s -o %t.spv -int8=0 10 | // RUN: spirv-dis -o %t2.spvasm %t.spv 11 | // RUN: FileCheck %s < %t2.spvasm 12 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 13 | 14 | 15 | // CHECK-DAG: [[uint:%[_a-zA-Z0-9]+]] = OpTypeInt 32 0 16 | // CHECK-DAG: [[theconst:%[_a-zA-Z0-9]+]] = OpConstant [[uint]] 25166596 17 | // CHECK-DAG: OpStore {{%[_a-zA-Z0-9]+}} [[theconst]] 18 | // CHECK-NOT: OpStore 19 | -------------------------------------------------------------------------------- /test/char4_constant_zero.cl: -------------------------------------------------------------------------------- 1 | 2 | // Test for https://github.com/google/clspv/issues/36 3 | // A <4 x 18> constant was generated incorrectly. 4 | 5 | kernel void dup(global uchar4 *B) { 6 | *B = (uchar4)(0,0,0,0); 7 | } 8 | 9 | // RUN: clspv %target %s -o %t.spv -int8=0 10 | // RUN: spirv-dis -o %t2.spvasm %t.spv 11 | // RUN: FileCheck %s < %t2.spvasm 12 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 13 | 14 | 15 | // CHECK-DAG: [[uint:%[_a-zA-Z0-9]+]] = OpTypeInt 32 0 16 | // CHECK-DAG: [[theconst:%[_a-zA-Z0-9]+]] = OpConstantNull [[uint]] 17 | // CHECK-DAG: OpStore {{%[_a-zA-Z0-9]+}} [[theconst]] 18 | // CHECK-NOT: OpStore 19 | -------------------------------------------------------------------------------- /test/clspv-opt/empty.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt %s -help > %t.out 2 | ; RUN: FileCheck %s < %t.out 3 | ; CHECK: OVERVIEW: clspv IR to IR modular optimizer 4 | ; CHECK: USAGE: clspv-opt{{.*}} [options] 5 | -------------------------------------------------------------------------------- /test/cluster_pod_args_attibutes_on_pod.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -int8 -cluster-pod-kernel-args %s -o %t.spv 2 | // RUN: clspv-reflection %t.spv -o %t.map 3 | // RUN: FileCheck %s < %t.map -check-prefix=MAP 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // MAP: kernel,test,arg,buf,argOrdinal,0,descriptorSet,0,binding,0,offset,0,argKind,buffer 7 | // MAP: kernel,test,arg,val,argOrdinal,1,offset,0,argKind,pod_pushconstant,argSize,1 8 | 9 | kernel void test(global char *buf, char val) 10 | { 11 | int tid = get_global_id(0); 12 | buf[tid] += val; 13 | } 14 | 15 | -------------------------------------------------------------------------------- /test/constant_buffer_arg_static_load_and_store.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: %[[UINT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeInt 32 0 7 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global uint* a, constant uint* b) 8 | { 9 | // CHECK: %[[LOAD_ID:[a-zA-Z0-9_]*]] = OpLoad %[[UINT_TYPE_ID]] 10 | // CHECK: OpStore {{.*}} %[[LOAD_ID]] 11 | *a = *b; 12 | } 13 | -------------------------------------------------------------------------------- /test/different_reqd_work_group_sizes.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis %t.spv -o %t.spvasm 3 | // RUN: FileCheck %s < %t.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK-DAG: OpEntryPoint GLCompute [[foo:%[a-zA-Z0-9_]+]] "foo" 7 | // CHECK-DAG: OpEntryPoint GLCompute [[bar:%[a-zA-Z0-9_]+]] "bar" 8 | // CHECK-DAG: OpExecutionMode [[foo]] LocalSize 1 2 3 9 | // CHECK-DAG: OpExecutionMode [[bar]] LocalSize 4 5 6 10 | 11 | __attribute__((reqd_work_group_size(1,2,3))) 12 | kernel void foo() { } 13 | 14 | __attribute__((reqd_work_group_size(4,5,6))) 15 | kernel void bar() { } 16 | -------------------------------------------------------------------------------- /test/emit_ir.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s --output-format=ll -o %t.ll 2 | // RUN: FileCheck %s < %t.ll 3 | 4 | // RUN: clspv %s --output-format=bc -o %t.bc 5 | // RUN: llvm-dis %t.bc -o %t.bc.ll 6 | // RUN: FileCheck %s < %t.bc.ll 7 | 8 | void kernel foo(global double *out, int in) 9 | { 10 | *out = in / 2.304; 11 | } 12 | 13 | // CHECK: target triple = "spir{{[64]*}}-unknown-unknown" 14 | // CHECK: define 15 | // CHECK-SAME: spir_kernel 16 | // CHECK-SAME: void @foo 17 | // CHECK-SAME: ptr addrspace(1){{[^%]+}}%out 18 | // CHECK-SAME: i32{{[^%]+}}%in 19 | -------------------------------------------------------------------------------- /test/fnegate.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | kernel void foo(global float* in, global float* out) { 7 | *out = -(*in); 8 | } 9 | 10 | // CHECK: [[float:%[a-zA-Z0-9_]+]] = OpTypeFloat 32 11 | // CHECK: [[ld:%[a-zA-Z0-9_]+]] = OpLoad [[float]] 12 | // CHECK: [[neg:%[a-zA-Z0-9_]+]] = OpFNegate [[float]] [[ld]] 13 | // CHECK: OpStore {{.*}} [[neg]] 14 | -------------------------------------------------------------------------------- /test/frontend-plugin-enum.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv -verify %s 2 | 3 | // Test that enums are not rejected by the frontend plugin 4 | // expected-no-diagnostics 5 | 6 | typedef enum an_enum { 7 | OPTION1 = 13, 8 | OPTION2 = 45, 9 | OPTION3 10 | } an_enum_type; 11 | 12 | void kernel test() { 13 | volatile an_enum_type myenum; 14 | (void)myenum; 15 | } 16 | -------------------------------------------------------------------------------- /test/function_call.cl: -------------------------------------------------------------------------------- 1 | // We use -O0 here because the compiler is smart enough to realise calling 2 | // a function that does nothing can be removed. 3 | // RUN: clspv %target -O0 %s -o %t.spv -no-inline-single 4 | // RUN: spirv-dis -o %t2.spvasm %t.spv 5 | // RUN: FileCheck %s < %t2.spvasm 6 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 7 | 8 | // CHECK: %[[BAR_ID:[a-zA-Z0-9_]*]] = OpFunction 9 | void bar() 10 | { 11 | } 12 | 13 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo() 14 | { 15 | // CHECK: OpFunctionCall {{.*}} %[[BAR_ID]] 16 | bar(); 17 | } 18 | -------------------------------------------------------------------------------- /test/hack_undef_composite.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv -hack-undef 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | struct a { 7 | int x; 8 | int y; 9 | float arr[5]; 10 | }; 11 | 12 | kernel void foo(global struct a* struct_out, int n) { 13 | struct a local_a; 14 | if (n == 0) { 15 | local_a.x = 0; 16 | } 17 | *struct_out = local_a; 18 | } 19 | 20 | // CHECK-NOT: OpUndef 21 | -------------------------------------------------------------------------------- /test/issue-1228.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv -inline-entry-points -g -O0 %s -o %t.spv 2 | 3 | typedef struct Baz { 4 | float x; 5 | } Baz; 6 | 7 | static void foo(Baz baz) { 8 | } 9 | 10 | __kernel void test(__global Baz *baz) { 11 | foo(baz[0]); 12 | } 13 | -------------------------------------------------------------------------------- /test/kernel-decl-dmap.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: clspv-reflection %t.spv -o %t.dmap 3 | // RUN: FileCheck %s < %t.dmap 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: kernel_decl,with_args 7 | // CHECK: kernel,with_args,arg,out,argOrdinal,0,descriptorSet,0,binding,0,offset,0,argKind,buffer 8 | 9 | void kernel with_args(global int *out) { *out = 0; } 10 | 11 | -------------------------------------------------------------------------------- /test/kernel_attributes.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %s -o %t.spv 2 | // RUN: spirv-dis %t.spv -o %t.spvasm 3 | // RUN: FileCheck %s < %t.spvasm 4 | 5 | // CHECK: [[attributes:%[^ ]+]] = OpString "__attribute__((work_group_size_hint(1, 1, 1)))__attribute__((reqd_work_group_size(1, 1, 1)))__attribute__((vec_type_hint(uchar2)))__kernel" 6 | // CHECK: OpExtInst %void {{.*}} Kernel {{.*}} {{.*}} {{.*}} {{.*}} [[attributes]] 7 | 8 | __attribute__((work_group_size_hint(1,1,1))) 9 | __attribute__((reqd_work_group_size(1,1,1))) 10 | __attribute__((vec_type_hint(uchar2))) 11 | __kernel void test_kernel(){} 12 | -------------------------------------------------------------------------------- /test/mfmt_c.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s --output-format=c -o %t.inc 2 | // RUN: FileCheck %s < %t.inc 3 | 4 | // The first three words in the header. 5 | // CHECK: {119734787, 6 | // CHECK-NEXT: 65536, 7 | // CHECK-NEXT: 1376256, 8 | // The OpReturn and OpFunctionEnd towards the end. 9 | // CHECK: 65789, 10 | // CHECK-NEXT: 65592, 11 | 12 | kernel void foo(global uint *a) {} 13 | -------------------------------------------------------------------------------- /test/opselect_constants_int_scalar.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: %[[uint:[0-9a-zA-Z_]+]] = OpTypeInt 32 0 7 | // CHECK-DAG: %[[uint_0:[0-9a-zA-Z_]+]] = OpConstant %[[uint]] 0 8 | // CHECK-DAG: %[[uint_1:[0-9a-zA-Z_]+]] = OpConstant %[[uint]] 1 9 | // CHECK: OpSelect %[[uint]] {{.*}} %[[uint_1]] %[[uint_0]] 10 | 11 | kernel void test(int A, int B, global int *dst) 12 | { 13 | *dst = A >= B; 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/opselect_constants_long_scalar.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: %[[ulong:[0-9a-zA-Z_]+]] = OpTypeInt 64 0 7 | // CHECK-DAG: %[[ulong_0:[0-9a-zA-Z_]+]] = OpConstant %[[ulong]] 0 8 | // CHECK-DAG: %[[ulong_1:[0-9a-zA-Z_]+]] = OpConstant %[[ulong]] 1 9 | // CHECK: OpSelect %[[ulong]] {{.*}} %[[ulong_1]] %[[ulong_0]] 10 | 11 | kernel void test(long A, long B, global long *dst) 12 | { 13 | *dst = A >= B; 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/opselect_constants_short_scalar.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: %[[ushort:[0-9a-zA-Z_]+]] = OpTypeInt 16 0 7 | // CHECK-DAG: %[[ushort_0:[0-9a-zA-Z_]+]] = OpConstant %[[ushort]] 0 8 | // CHECK-DAG: %[[ushort_1:[0-9a-zA-Z_]+]] = OpConstant %[[ushort]] 1 9 | // CHECK: OpSelect %[[ushort]] {{.*}} %[[ushort_1]] %[[ushort_0]] 10 | 11 | kernel void test(short A, short B, global short *dst) 12 | { 13 | *dst = A >= B; 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/prefetch.ll: -------------------------------------------------------------------------------- 1 | ; RUN: clspv-opt --passes=replace-opencl-builtin %s -o %t 2 | ; RUN: FileCheck %s < %t 3 | 4 | target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" 5 | target triple = "spir-unknown-unknown" 6 | 7 | define spir_kernel void @test(i32 addrspace(1)* %mem) local_unnamed_addr { 8 | entry: 9 | tail call spir_func void @_Z8prefetchPU3AS1Kij(i32 addrspace(1)* %mem, i32 12) 10 | ;CHECK-NOT: call spir_func void @_Z8prefetchPU3AS1Kij 11 | ret void 12 | } 13 | 14 | declare spir_func void @_Z8prefetchPU3AS1Kij(i32 addrspace(1)*, i32) local_unnamed_addr 15 | -------------------------------------------------------------------------------- /test/read_binary.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %s --output-format=bc -o %t.bc 2 | // RUN: clspv -x ir %t.bc -o %t.spv 3 | // RUN: spirv-dis -o %t.spvasm %t.spv 4 | // RUN: FileCheck %s < %t.spvasm 5 | 6 | void kernel foo(global int *out, global int *in) 7 | { 8 | *out = *in; 9 | } 10 | 11 | // CHECK: OpFunction 12 | // CHECK-NEXT: OpLabel 13 | // CHECK-NEXT: OpAccessChain 14 | // CHECK-NEXT: OpAccessChain 15 | // CHECK-NEXT: OpLoad 16 | // CHECK-NEXT: OpStore 17 | // CHECK-NEXT: OpReturn 18 | // CHECK-NEXT: OpFunctionEnd 19 | 20 | -------------------------------------------------------------------------------- /test/rounding_mode_rte.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %s -o %t.spv -rounding-mode-rte=16,32,64 2 | // RUN: spirv-dis %t.spv -o %t.spvasm 3 | // RUN: spirv-val --target-env spv1.4 %t.spv 4 | // RUN: FileCheck %s < %t.spvasm 5 | 6 | // CHECK: OpCapability RoundingModeRTE 7 | // CHECK: OpExtension "SPV_KHR_float_controls" 8 | // CHECK: OpExecutionMode {{.*}} RoundingModeRTE 16 9 | // CHECK: OpExecutionMode {{.*}} RoundingModeRTE 32 10 | // CHECK: OpExecutionMode {{.*}} RoundingModeRTE 64 11 | 12 | 13 | void kernel foo(global int *input, global float *output) 14 | { 15 | uint gid = get_global_id(0); 16 | output[gid] = input[gid]; 17 | } 18 | -------------------------------------------------------------------------------- /test/sampler.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: %[[SAMPLER_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeSampler 7 | // CHECK: %[[UINT_ARG0_POINTER_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypePointer UniformConstant %[[SAMPLER_TYPE_ID]] 8 | // CHECK: OpVariable %[[UINT_ARG0_POINTER_TYPE_ID]] UniformConstant 9 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(sampler_t s, read_only image2d_t im, global float4* out) 10 | { 11 | *out = read_imagef(im, s, (float2)(0.0,0.0)); 12 | } 13 | -------------------------------------------------------------------------------- /test/stdin.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target -o %t.spv < %s 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: OpCapability Shader 7 | // CHECK: OpMemoryModel Logical GLSL450 8 | // CHECK: OpEntryPoint GLCompute %[[FOO_ID:[a-zA-Z0-9_]*]] "foo" 9 | // CHECK: OpExecutionMode %[[FOO_ID]] LocalSize 1 1 1 10 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo() 11 | { 12 | } 13 | -------------------------------------------------------------------------------- /test/stdout.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o - > %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: OpCapability Shader 7 | // CHECK: OpMemoryModel Logical GLSL450 8 | // CHECK: OpEntryPoint GLCompute %[[FOO_ID:[a-zA-Z0-9_]*]] "foo" 9 | // CHECK: OpExecutionMode %[[FOO_ID]] LocalSize 1 1 1 10 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo() 11 | { 12 | } 13 | -------------------------------------------------------------------------------- /test/two_nop_kernels.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.0 %t.spv 5 | 6 | // CHECK: OpEntryPoint GLCompute %[[FOO_ID:[a-zA-Z0-9_]*]] "foo" 7 | // CHECK: OpEntryPoint GLCompute %[[BAR_ID:[a-zA-Z0-9_]*]] "bar" 8 | // CHECK: OpExecutionMode %[[FOO_ID]] LocalSize 1 1 1 9 | // CHECK: OpExecutionMode %[[BAR_ID]] LocalSize 1 1 1 10 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo() 11 | { 12 | } 13 | 14 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) bar() 15 | { 16 | } 17 | -------------------------------------------------------------------------------- /test/uint_arg_static_load_store.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %target %s -o %t.spv --spv-version=1.4 2 | // RUN: spirv-dis -o %t2.spvasm %t.spv 3 | // RUN: FileCheck %s < %t2.spvasm 4 | // RUN: spirv-val --target-env vulkan1.2 %t.spv 5 | 6 | // CHECK-DAG: %[[UINT_TYPE_ID:[a-zA-Z0-9_]*]] = OpTypeInt 32 0 7 | void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global uint* a, uint b) 8 | { 9 | // CHECK: %[[LOAD_ID:[a-zA-Z0-9_]*]] = OpCompositeExtract %[[UINT_TYPE_ID]] 10 | // CHECK: OpStore {{.*}} %[[LOAD_ID]] 11 | *a = b; 12 | } 13 | -------------------------------------------------------------------------------- /test/vector_subgroup_broadcast.cl: -------------------------------------------------------------------------------- 1 | // RUN: clspv %s -o %t.spv --spv-version=1.3 2 | // RUN: spirv-dis %t.spv -o %t.spvasm 3 | // RUN: FileCheck %s < %t.spvasm 4 | // RUN: spirv-val %t.spv --target-env spv1.3 5 | 6 | // CHECK: [[float:%[^ ]+]] = OpTypeFloat 32 7 | // CHECK: [[float4:%[^ ]+]] = OpTypeVector [[float]] 4 8 | // CHECK: [[load:%[^ ]+]] = OpLoad [[float4]] 9 | // CHECK: OpGroupNonUniformBroadcast [[float4]] {{.*}} [[load]] 10 | 11 | kernel void foo(global float4 *buffer) { 12 | sub_group_broadcast(*buffer, 0u); 13 | } 14 | --------------------------------------------------------------------------------