https://github.com/aadeshps-mcw updated https://github.com/llvm/llvm-project/pull/153549
>From ef9d20bdcdac96043893ac9078e6e152d540d88f Mon Sep 17 00:00:00 2001 From: Aadesh PremKumar <aadesh.premku...@multicorewareinc.com> Date: Thu, 14 Aug 2025 10:45:13 +0530 Subject: [PATCH 1/2] --Added test for SPV_INTEL_device_side_avc_motion_estimation, --SPV_INTEL_fast_math_mode,SPV_KHR_bfloat16,SPV_KHR_untyped_pointers extensions. --These are marked as Xfail, because they are not yet implemented --- .../subgroup_avc_intel_generic.cl | 152 ++++++++++++++++++ .../subgroup_avc_intel_not_builtin.ll.ll | 12 ++ .../subgroup_avc_intel_types.ll | 48 ++++++ .../subgroup_avc_intel_wrappers.ll.ll | 86 ++++++++++ .../fp_contract_reassoc_fast_mode.ll | 35 ++++ .../extensions/SPV_KHR_bfloat16/bfloat16.ll | 20 +++ .../SPV_KHR_bfloat16/bfloat16_dot.ll | 22 +++ .../cooperative_matrix_bfloat16.ll | 25 +++ .../SPV_KHR_untyped_pointers/globals.ll | 48 ++++++ .../SPV_KHR_untyped_pointers/infinite-phi.ll | 35 ++++ .../SPV_KHR_untyped_pointers/read_image.ll | 51 ++++++ .../SPV_KHR_untyped_pointers/store.ll | 47 ++++++ .../untyped_ptr_access_chain.ll | 26 +++ .../untyped_ptr_type.ll | 24 +++ 14 files changed, 631 insertions(+) create mode 100644 llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_device_side_avc_motion_estimation/subgroup_avc_intel_generic.cl create mode 100644 llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_device_side_avc_motion_estimation/subgroup_avc_intel_not_builtin.ll.ll create mode 100644 llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_device_side_avc_motion_estimation/subgroup_avc_intel_types.ll create mode 100644 llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_device_side_avc_motion_estimation/subgroup_avc_intel_wrappers.ll.ll create mode 100644 llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_fast_math_mode/fp_contract_reassoc_fast_mode.ll create mode 100644 llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_bfloat16/bfloat16.ll create mode 100644 llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_bfloat16/bfloat16_dot.ll create mode 100644 llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_bfloat16/cooperative_matrix_bfloat16.ll create mode 100644 llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_untyped_pointers/globals.ll create mode 100644 llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_untyped_pointers/infinite-phi.ll create mode 100644 llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_untyped_pointers/read_image.ll create mode 100644 llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_untyped_pointers/store.ll create mode 100644 llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_untyped_pointers/untyped_ptr_access_chain.ll create mode 100644 llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_untyped_pointers/untyped_ptr_type.ll diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_device_side_avc_motion_estimation/subgroup_avc_intel_generic.cl b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_device_side_avc_motion_estimation/subgroup_avc_intel_generic.cl new file mode 100644 index 0000000000000..5dc1c98f23ac1 --- /dev/null +++ b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_device_side_avc_motion_estimation/subgroup_avc_intel_generic.cl @@ -0,0 +1,152 @@ +; RUN: clang -cc1 -O1 -triple spirv64-unknown-unknown -cl-std=CL2.0 -finclude-default-header -emit-llvm %s -o %t.ll +; RUN: llc -O0 -verify-machineinstrs -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_INTEL_device_side_avc_motion_estimation %t.ll -o - | FileCheck %s +; XFAIL: * + +void foo(intel_sub_group_avc_ime_payload_t ime_payload, + intel_sub_group_avc_ime_result_single_reference_streamout_t sstreamout, + intel_sub_group_avc_ime_result_dual_reference_streamout_t dstreamout, + intel_sub_group_avc_ime_result_t ime_result, + intel_sub_group_avc_mce_result_t mce_result, + intel_sub_group_avc_ref_payload_t ref_payload, + intel_sub_group_avc_sic_payload_t sic_payload, + intel_sub_group_avc_sic_result_t sic_result, + intel_sub_group_avc_mce_payload_t mce_payload) { + intel_sub_group_avc_mce_get_default_inter_base_multi_reference_penalty(0, 0); + intel_sub_group_avc_mce_get_default_inter_shape_penalty(0, 0); + intel_sub_group_avc_mce_get_default_intra_luma_shape_penalty(0, 0); + intel_sub_group_avc_mce_get_default_inter_motion_vector_cost_table(0, 0); + intel_sub_group_avc_mce_get_default_inter_direction_penalty(0, 0); + intel_sub_group_avc_mce_get_default_intra_luma_mode_penalty(0, 0); + + intel_sub_group_avc_ime_initialize(0, 0, 0); + intel_sub_group_avc_ime_set_single_reference(0, 0, ime_payload); + intel_sub_group_avc_ime_set_dual_reference(0, 0, 0, ime_payload); + intel_sub_group_avc_ime_ref_window_size(0, 0); + intel_sub_group_avc_ime_ref_window_size(0, 0); + intel_sub_group_avc_ime_adjust_ref_offset(0, 0, 0, 0); + intel_sub_group_avc_ime_set_max_motion_vector_count(0, ime_payload); + + intel_sub_group_avc_ime_get_single_reference_streamin(sstreamout); + intel_sub_group_avc_ime_get_dual_reference_streamin(dstreamout); + intel_sub_group_avc_ime_get_border_reached(0i, ime_result); + intel_sub_group_avc_ime_get_streamout_major_shape_distortions(sstreamout, 0); + intel_sub_group_avc_ime_get_streamout_major_shape_distortions(dstreamout, 0, 0); + intel_sub_group_avc_ime_get_streamout_major_shape_motion_vectors(sstreamout, 0); + intel_sub_group_avc_ime_get_streamout_major_shape_motion_vectors(dstreamout, 0, 0); + intel_sub_group_avc_ime_get_streamout_major_shape_reference_ids(sstreamout, 0); + intel_sub_group_avc_ime_get_streamout_major_shape_reference_ids(dstreamout, 0, 0); + + intel_sub_group_avc_ime_set_dual_reference(0, 0, 0, ime_payload); + intel_sub_group_avc_ime_set_weighted_sad(0, ime_payload); + intel_sub_group_avc_ime_set_early_search_termination_threshold(0, ime_payload); + + intel_sub_group_avc_fme_initialize(0, 0, 0, 0, 0, 0, 0); + intel_sub_group_avc_bme_initialize(0, 0, 0, 0, 0, 0, 0, 0); + intel_sub_group_avc_ref_set_bidirectional_mix_disable(ref_payload); + + intel_sub_group_avc_sic_initialize(0); + intel_sub_group_avc_sic_configure_ipe(0, 0, 0, 0, 0, 0, 0, sic_payload); + intel_sub_group_avc_sic_configure_ipe(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, sic_payload); + intel_sub_group_avc_sic_configure_skc(0, 0, 0, 0, 0, sic_payload); + intel_sub_group_avc_sic_set_skc_forward_transform_enable(0, sic_payload); + intel_sub_group_avc_sic_set_block_based_raw_skip_sad(0, sic_payload); + intel_sub_group_avc_sic_set_intra_luma_shape_penalty(0, sic_payload); + intel_sub_group_avc_sic_set_intra_luma_mode_cost_function(0, 0, 0, + sic_payload); + intel_sub_group_avc_sic_set_intra_chroma_mode_cost_function(0, sic_payload); + intel_sub_group_avc_sic_get_best_ipe_luma_distortion(sic_result); + intel_sub_group_avc_sic_get_motion_vector_mask(0, 0); + + intel_sub_group_avc_mce_set_source_interlaced_field_polarity(0, mce_payload); + intel_sub_group_avc_mce_set_single_reference_interlaced_field_polarity( + 0, mce_payload); + intel_sub_group_avc_mce_set_dual_reference_interlaced_field_polarities( + 0, 0, mce_payload); + intel_sub_group_avc_mce_set_inter_base_multi_reference_penalty(0, + mce_payload); + intel_sub_group_avc_mce_set_inter_shape_penalty(0, mce_payload); + intel_sub_group_avc_mce_set_inter_direction_penalty(0, mce_payload); + intel_sub_group_avc_mce_set_motion_vector_cost_function(0, 0, 0, mce_payload); + intel_sub_group_avc_mce_get_inter_reference_interlaced_field_polarities( + 0, 0, mce_result); +} + +CHECK-DAG: OpCapability Groups +CHECK-DAG: OpCapability SubgroupAvcMotionEstimationINTEL +CHECK-DAG: OpCapability SubgroupAvcMotionEstimationIntraINTEL +CHECK-DAG: OpCapability SubgroupAvcMotionEstimationChromaINTEL +CHECK-DAG: OpExtension "SPV_INTEL_device_side_avc_motion_estimation" + +CHECK: %[[#ImePayloadTy:]] = OpTypeAvcImePayloadINTEL +CHECK: %[[#ImeSRefOutTy:]] = OpTypeAvcImeResultSingleReferenceStreamoutINTEL +CHECK: %[[#ImeDRefOutTy:]] = OpTypeAvcImeResultDualReferenceStreamoutINTEL +CHECK: %[[#ImeResultTy:]] = OpTypeAvcImeResultINTEL +CHECK: %[[#MceResultTy:]] = OpTypeAvcMceResultINTEL +CHECK: %[[#RefPayloadTy:]] = OpTypeAvcRefPayloadINTEL +CHECK: %[[#SicPayloadTy:]] = OpTypeAvcSicPayloadINTEL +CHECK: %[[#SicResultTy:]] = OpTypeAvcSicResultINTEL +CHECK: %[[#McePayloadTy:]] = OpTypeAvcMcePayloadINTEL +CHECK: %[[#ImeSRefInTy:]] = OpTypeAvcImeSingleReferenceStreaminINTEL +CHECK: %[[#ImeDRefInTy:]] = OpTypeAvcImeDualReferenceStreaminINTEL + +CHECK: %[[#ImePayload:]] = OpFunctionParameter %[[#ImePayloadTy]] +CHECK: %[[#ImeSRefOut:]] = OpFunctionParameter %[[#ImeSRefOutTy]] +CHECK: %[[#ImeDRefOut:]] = OpFunctionParameter %[[#ImeDRefOutTy]] +CHECK: %[[#ImeResult:]] = OpFunctionParameter %[[#ImeResultTy]] +CHECK: %[[#MceResult:]] = OpFunctionParameter %[[#MceResultTy]] +CHECK: %[[#RefPayload:]] = OpFunctionParameter %[[#RefPayloadTy]] +CHECK: %[[#SicPayload:]] = OpFunctionParameter %[[#SicPayloadTy]] +CHECK: %[[#SicResult:]] = OpFunctionParameter %[[#SicResultTy]] +CHECK: %[[#McePayload:]] = OpFunctionParameter %[[#McePayloadTy]] + +CHECK: OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL +CHECK: OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL +CHECK: OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL +CHECK: OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL +CHECK: OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL +CHECK: OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL + +CHECK: OpSubgroupAvcImeInitializeINTEL %[[#ImePayloadTy]] +CHECK: OpSubgroupAvcImeSetSingleReferenceINTEL %[[#ImePayloadTy]] {{.*}} %[[#ImePayload]] +CHECK: OpSubgroupAvcImeSetDualReferenceINTEL %[[#ImePayloadTy]] {{.*}} %[[#ImePayload]] +CHECK: OpSubgroupAvcImeRefWindowSizeINTEL +CHECK: OpSubgroupAvcImeRefWindowSizeINTEL +CHECK: OpSubgroupAvcImeAdjustRefOffsetINTEL +CHECK: OpSubgroupAvcImeSetMaxMotionVectorCountINTEL %[[#ImePayloadTy]] {{.*}} %[[#ImePayload]] +CHECK: OpSubgroupAvcImeGetSingleReferenceStreaminINTEL %[[#ImeSRefInTy]]{{.*}}%[[#ImeSRefOut]] +CHECK: OpSubgroupAvcImeGetDualReferenceStreaminINTEL %[[#ImeDRefInTy]]{{.*}}%[[#ImeDRefOut]] +CHECK: OpSubgroupAvcImeGetBorderReachedINTEL {{.*}} %[[#ImeResult]] +CHECK: OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL {{.*}} %[[#ImeSRefOut]] +CHECK: OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL {{.*}} %[[#ImeDRefOut]] +CHECK: OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL {{.*}} %[[#ImeSRefOut]] +CHECK: OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL {{.*}} %[[#ImeDRefOut]] +CHECK: OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL {{.*}} %[[#ImeSRefOut]] +CHECK: OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL {{.*}} %[[#ImeDRefOut]] +CHECK: OpSubgroupAvcImeSetDualReferenceINTEL %[[#ImePayloadTy]] {{.*}} %[[#ImePayload]] +CHECK: OpSubgroupAvcImeSetWeightedSadINTEL %[[#ImePayloadTy]] {{.*}} %[[#ImePayload]] +CHECK: OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL %[[#ImePayloadTy]] {{.*}} %[[#ImePayload]] +CHECK: OpSubgroupAvcFmeInitializeINTEL %[[#RefPayloadTy]] +CHECK: OpSubgroupAvcBmeInitializeINTEL %[[#RefPayloadTy]] + +CHECK: OpSubgroupAvcRefSetBidirectionalMixDisableINTEL %[[#RefPayloadTy]]{{.*}}%[[#RefPayload]] + +CHECK: OpSubgroupAvcSicInitializeINTEL %[[#SicPayloadTy]] +CHECK: OpSubgroupAvcSicConfigureIpeLumaINTEL %[[#SicPayloadTy]] {{.*}} %[[#SicPayload]] +CHECK: OpSubgroupAvcSicConfigureIpeLumaChromaINTEL %[[#SicPayloadTy]] {{.*}} %[[#SicPayload]] +CHECK: OpSubgroupAvcSicConfigureSkcINTEL %[[#SicPayloadTy]] {{.*}} %[[#SicPayload]] +CHECK: OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL %[[#SicPayloadTy]] {{.*}} %[[#SicPayload]] +CHECK: OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL %[[#SicPayloadTy]] {{.*}} %[[#SicPayload]] +CHECK: OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL %[[#SicPayloadTy]] {{.*}} %[[#SicPayload]] +CHECK: OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL %[[#SicPayloadTy]] {{.*}} %[[#SicPayload]] +CHECK: OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL %[[#SicPayloadTy]] {{.*}} %[[#SicPayload]] +CHECK: OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL {{.*}} %[[#SicResult]] +CHECK: OpSubgroupAvcSicGetMotionVectorMaskINTEL + +CHECK: OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL %[[#McePayloadTy]] {{.*}} %[[#McePayload]] +CHECK: OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL %[[#McePayloadTy]] {{.*}} %[[#McePayload]] +CHECK: OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL %[[#McePayloadTy]] {{.*}} %[[#McePayload]] +CHECK: OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL %[[#McePayloadTy]] {{.*}} %[[#McePayload]] +CHECK: OpSubgroupAvcMceSetInterShapePenaltyINTEL %[[#McePayloadTy]] {{.*}} %[[#McePayload]] +CHECK: OpSubgroupAvcMceSetInterDirectionPenaltyINTEL %[[#McePayloadTy]] {{.*}} %[[#McePayload]] +CHECK: OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL %[[#McePayloadTy]] {{.*}} %[[#McePayload]] +CHECK: OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL {{.*}} %[[#MceResult]] diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_device_side_avc_motion_estimation/subgroup_avc_intel_not_builtin.ll.ll b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_device_side_avc_motion_estimation/subgroup_avc_intel_not_builtin.ll.ll new file mode 100644 index 0000000000000..857de8d597653 --- /dev/null +++ b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_device_side_avc_motion_estimation/subgroup_avc_intel_not_builtin.ll.ll @@ -0,0 +1,12 @@ +; RUN: llc -O0 -verify-machineinstrs -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_INTEL_device_side_avc_motion_estimation %s -o - | FileCheck %s +; XFAIL: * + +; CHECK: OpName %[[#Name:]] "_Z31intel_sub_group_avc_mce_ime_boo" +; CHECK: %[[#]] = OpFunctionCall %[[#]] %[[#Name]] + +define spir_func void @foo() { +entry: + call spir_func void @_Z31intel_sub_group_avc_mce_ime_boo() + ret void +} +declare spir_func void @_Z31intel_sub_group_avc_mce_ime_boo() diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_device_side_avc_motion_estimation/subgroup_avc_intel_types.ll b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_device_side_avc_motion_estimation/subgroup_avc_intel_types.ll new file mode 100644 index 0000000000000..23ff84ed0e13e --- /dev/null +++ b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_device_side_avc_motion_estimation/subgroup_avc_intel_types.ll @@ -0,0 +1,48 @@ +; RUN:llc -O0 -verify-machineinstrs -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_INTEL_device_side_avc_motion_estimation %s -o - | FileCheck %s +; XFAIL: * + +; CHECK: OpCapability Groups +; CHECK: OpCapability SubgroupAvcMotionEstimationINTEL +; CHECK: OpExtension "SPV_INTEL_device_side_avc_motion_estimation" + +; CHECK: OpTypeAvcMcePayloadINTEL +; CHECK: %[[#IME_PAYLOAD:]] = OpTypeAvcImePayloadINTEL +; CHECK: %[[#REF_PAYLOAD:]] = OpTypeAvcRefPayloadINTEL +; CHECK: %[[#SIC_PAYLOAD:]] = OpTypeAvcSicPayloadINTEL +; CHECK: OpTypeAvcMceResultINTEL +; CHECK: %[[#IME_RESULT:]] = OpTypeAvcImeResultINTEL +; CHECK: %[[#REF_RESULT:]] = OpTypeAvcRefResultINTEL +; CHECK: %[[#SIC_RESULT:]] = OpTypeAvcSicResultINTEL +; CHECK: %[[#SSTREAMOUT:]] = OpTypeAvcImeResultSingleReferenceStreamoutINTEL +; CHECK: %[[#DSTREAMOUT:]] = OpTypeAvcImeResultDualReferenceStreamoutINTEL +; CHECK: %[[#SSTREAMIN:]] = OpTypeAvcImeSingleReferenceStreaminINTEL +; CHECK: %[[#DSTREAMIN:]] = OpTypeAvcImeDualReferenceStreaminINTEL + +define spir_func void @foo() { +entry: + %payload_mce = alloca target("spirv.AvcMcePayloadINTEL"), align 4 + %payload_ime = alloca target("spirv.AvcImePayloadINTEL"), align 4 + %payload_ref = alloca target("spirv.AvcRefPayloadINTEL"), align 4 + %payload_sic = alloca target("spirv.AvcSicPayloadINTEL"), align 4 + %result_mce = alloca target("spirv.AvcMceResultINTEL"), align 4 + %result_ime = alloca target("spirv.AvcImeResultINTEL"), align 4 + %result_ref = alloca target("spirv.AvcRefResultINTEL"), align 4 + %result_sic = alloca target("spirv.AvcSicResultINTEL"), align 4 + %sstreamout = alloca target("spirv.AvcImeResultSingleReferenceStreamoutINTEL"), align 4 + %dstreamout = alloca target("spirv.AvcImeResultDualReferenceStreamoutINTEL"), align 4 + %sstreamin = alloca target("spirv.AvcImeSingleReferenceStreaminINTEL"), align 4 + %dstreamin = alloca target("spirv.AvcImeDualReferenceStreaminINTEL"), align 4 + store target("spirv.AvcMcePayloadINTEL") zeroinitializer, ptr %payload_mce, align 4 + store target("spirv.AvcImePayloadINTEL") zeroinitializer, ptr %payload_ime, align 4 + store target("spirv.AvcRefPayloadINTEL") zeroinitializer, ptr %payload_ref, align 4 + store target("spirv.AvcSicPayloadINTEL") zeroinitializer, ptr %payload_sic, align 4 + store target("spirv.AvcMceResultINTEL") zeroinitializer, ptr %result_mce, align 4 + store target("spirv.AvcImeResultINTEL") zeroinitializer, ptr %result_ime, align 4 + store target("spirv.AvcRefResultINTEL") zeroinitializer, ptr %result_ref, align 4 + store target("spirv.AvcSicResultINTEL") zeroinitializer, ptr %result_sic, align 4 + store target("spirv.AvcImeResultSingleReferenceStreamoutINTEL") zeroinitializer, ptr %sstreamout, align 4 + store target("spirv.AvcImeResultDualReferenceStreamoutINTEL") zeroinitializer, ptr %dstreamout, align 4 + store target("spirv.AvcImeSingleReferenceStreaminINTEL") zeroinitializer, ptr %sstreamin, align 4 + store target("spirv.AvcImeDualReferenceStreaminINTEL") zeroinitializer, ptr %dstreamin, align 4 + ret void +} diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_device_side_avc_motion_estimation/subgroup_avc_intel_wrappers.ll.ll b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_device_side_avc_motion_estimation/subgroup_avc_intel_wrappers.ll.ll new file mode 100644 index 0000000000000..2ee4d4731c5e4 --- /dev/null +++ b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_device_side_avc_motion_estimation/subgroup_avc_intel_wrappers.ll.ll @@ -0,0 +1,86 @@ +; RUN: llc -O0 -verify-machineinstrs -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_INTEL_device_side_avc_motion_estimation %s -o - | FileCheck %s +; XFAIL: * + +; CHECK: OpCapability Groups +; CHECK: OpCapability SubgroupAvcMotionEstimationINTEL +; CHECK: OpExtension "SPV_INTEL_device_side_avc_motion_estimation" + +; CHECK-DAG: %[[#ImePayloadTy:]] = OpTypeAvcImePayloadINTEL +; CHECK-DAG: %[[#ImeResultTy:]] = OpTypeAvcImeResultINTEL +; CHECK-DAG: %[[#RefPayloadTy:]] = OpTypeAvcRefPayloadINTEL +; CHECK-DAG: %[[#RefResultTy:]] = OpTypeAvcRefResultINTEL +; CHECK-DAG: %[[#SicPayloadTy:]] = OpTypeAvcSicPayloadINTEL +; CHECK-DAG: %[[#SicResultTy:]] = OpTypeAvcSicResultINTEL +; CHECK-DAG: %[[#McePayloadTy:]] = OpTypeAvcMcePayloadINTEL +; CHECK-DAG: %[[#MceResultTy:]] = OpTypeAvcMceResultINTEL + +define spir_func void @test() #0 { +entry: + %ime_payload = alloca target("spirv.AvcImePayloadINTEL"), align 8 + %ime_result = alloca target("spirv.AvcImeResultINTEL"), align 8 + %ref_payload = alloca target("spirv.AvcRefPayloadINTEL"), align 8 + %ref_result = alloca target("spirv.AvcRefResultINTEL"), align 8 + %sic_payload = alloca target("spirv.AvcSicPayloadINTEL"), align 8 + %sic_result = alloca target("spirv.AvcSicResultINTEL"), align 8 + +; CHECK: %[[#ImePayload:]] = OpLoad %[[#ImePayloadTy]] +; CHECK: %[[#ImeResult:]] = OpLoad %[[#ImeResultTy]] +; CHECK: %[[#RefPayload:]] = OpLoad %[[#RefPayloadTy]] +; CHECK: %[[#RefResult:]] = OpLoad %[[#RefResultTy]] +; CHECK: %[[#SicPayload:]] = OpLoad %[[#SicPayloadTy]] +; CHECK: %[[#SicResult:]] = OpLoad %[[#SicResultTy]] + + %0 = load target("spirv.AvcImePayloadINTEL"), target("spirv.AvcImePayloadINTEL")* %ime_payload, align 8 + %1 = load target("spirv.AvcImeResultINTEL"), target("spirv.AvcImeResultINTEL")* %ime_result, align 8 + %2 = load target("spirv.AvcRefPayloadINTEL"), target("spirv.AvcRefPayloadINTEL")* %ref_payload, align 8 + %3 = load target("spirv.AvcRefResultINTEL"), target("spirv.AvcRefResultINTEL")* %ref_result, align 8 + %4 = load target("spirv.AvcSicPayloadINTEL"), target("spirv.AvcSicPayloadINTEL")* %sic_payload, align 8 + %5 = load target("spirv.AvcSicResultINTEL"), target("spirv.AvcSicResultINTEL")* %sic_result, align 8 + +; CHECK: %[[#ImeMcePayloadConv:]] = OpSubgroupAvcImeConvertToMcePayloadINTEL +; CHECK-SAME: %[[#McePayloadTy]] %[[#ImePayload]] +; CHECK: %[[#McePayloadRet0:]] = OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL +; CHECK-SAME: %[[#McePayloadTy]] {{.*}} %[[#ImeMcePayloadConv]] +; CHECK: OpSubgroupAvcMceConvertToImePayloadINTEL +; CHECK-SAME: %[[#ImePayloadTy]] %[[#McePayloadRet0]] + %call0 = call spir_func target("spirv.AvcImePayloadINTEL") @_Z62intel_sub_group_avc_ime_set_inter_base_multi_reference_penaltyh37ocl_intel_sub_group_avc_ime_payload_t(i8 zeroext 0, target("spirv.AvcImePayloadINTEL") %0) #2 + +; CHECK: %[[#ImeMceResultConv:]] = OpSubgroupAvcImeConvertToMceResultINTEL +; CHECK-SAME: %[[#MceResultTy]] %[[#ImeResult]] +; CHECK: OpSubgroupAvcMceGetMotionVectorsINTEL {{.*}} %[[#ImeMceResultConv]] + %call1 = call spir_func i64 @_Z42intel_sub_group_avc_ime_get_motion_vectors36ocl_intel_sub_group_avc_ime_result_t(target("spirv.AvcImeResultINTEL") %1) #2 + +; CHECK: %[[#RefMcePayloadConv:]] = OpSubgroupAvcRefConvertToMcePayloadINTEL +; CHECK-SAME: %[[#McePayloadTy]] %[[#RefPayload]] +; CHECK: %[[#McePayloadRet1:]] = OpSubgroupAvcMceSetInterShapePenaltyINTEL +; CHECK-SAME: %[[#McePayloadTy]] {{.*}} %[[#RefMcePayloadConv]] +; CHECK: OpSubgroupAvcMceConvertToRefPayloadINTEL +; CHECK-SAME: %[[#RefPayloadTy]] %[[#McePayloadRet1]] + %call2 = call spir_func target("spirv.AvcRefPayloadINTEL") @_Z47intel_sub_group_avc_ref_set_inter_shape_penaltym37ocl_intel_sub_group_avc_ref_payload_t(i64 0, target("spirv.AvcRefPayloadINTEL") %2) #2 + +; CHECK: %[[#RefMceResultConv:]] = OpSubgroupAvcRefConvertToMceResultINTEL +; CHECK-SAME: %[[#MceResultTy]] %[[#RefResult]] +; CHECK: OpSubgroupAvcMceGetInterDistortionsINTEL {{.*}} %[[#RefMceResultConv]] + %call3 = call spir_func zeroext i16 @_Z45intel_sub_group_avc_ref_get_inter_distortions36ocl_intel_sub_group_avc_ref_result_t(target("spirv.AvcRefResultINTEL") %3) #2 + +; CHECK: %[[#SicMcePayloadConv:]] = OpSubgroupAvcSicConvertToMcePayloadINTEL +; CHECK-SAME: %[[#McePayloadTy]] %[[#SicPayload]] +; CHECK: %[[#McePayloadRet2:]] = OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL +; CHECK-SAME: %[[#McePayloadTy]] {{.*}} %[[#SicMcePayloadConv]] +; CHECK: OpSubgroupAvcMceConvertToSicPayloadINTEL +; CHECK-SAME: %[[#SicPayloadTy]] %[[#McePayloadRet2]] + %call4 = call spir_func target("spirv.AvcSicPayloadINTEL") @_Z55intel_sub_group_avc_sic_set_motion_vector_cost_functionmDv2_jh37ocl_intel_sub_group_avc_sic_payload_t(i64 0, <2 x i32> zeroinitializer, i8 zeroext 0, target("spirv.AvcSicPayloadINTEL") %4) #2 + +; CHECK: %[[#SicMceResultConv:]] = OpSubgroupAvcSicConvertToMceResultINTEL +; CHECK-SAME: %[[#MceResultTy]] %[[#SicResult]] +; CHECK: OpSubgroupAvcMceGetInterDistortionsINTEL {{.*}} %[[#SicMceResultConv]] + %call5 = call spir_func zeroext i16 @_Z45intel_sub_group_avc_sic_get_inter_distortions36ocl_intel_sub_group_avc_sic_result_t(target("spirv.AvcSicResultINTEL") %5) #2 + ret void +} + +declare spir_func target("spirv.AvcImePayloadINTEL") @_Z62intel_sub_group_avc_ime_set_inter_base_multi_reference_penaltyh37ocl_intel_sub_group_avc_ime_payload_t(i8 zeroext, target("spirv.AvcImePayloadINTEL")) #1 +declare spir_func i64 @_Z42intel_sub_group_avc_ime_get_motion_vectors36ocl_intel_sub_group_avc_ime_result_t(target("spirv.AvcImeResultINTEL")) #1 +declare spir_func target("spirv.AvcRefPayloadINTEL") @_Z47intel_sub_group_avc_ref_set_inter_shape_penaltym37ocl_intel_sub_group_avc_ref_payload_t(i64, target("spirv.AvcRefPayloadINTEL")) #1 +declare spir_func zeroext i16 @_Z45intel_sub_group_avc_ref_get_inter_distortions36ocl_intel_sub_group_avc_ref_result_t(target("spirv.AvcRefResultINTEL")) #1 +declare spir_func target("spirv.AvcSicPayloadINTEL") @_Z55intel_sub_group_avc_sic_set_motion_vector_cost_functionmDv2_jh37ocl_intel_sub_group_avc_sic_payload_t(i64, <2 x i32>, i8 zeroext, target("spirv.AvcSicPayloadINTEL")) #1 +declare spir_func zeroext i16 @_Z45intel_sub_group_avc_sic_get_inter_distortions36ocl_intel_sub_group_avc_sic_result_t(target("spirv.AvcSicResultINTEL")) #1 diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_fast_math_mode/fp_contract_reassoc_fast_mode.ll b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_fast_math_mode/fp_contract_reassoc_fast_mode.ll new file mode 100644 index 0000000000000..b44f8281e4564 --- /dev/null +++ b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_fast_math_mode/fp_contract_reassoc_fast_mode.ll @@ -0,0 +1,35 @@ +; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-EXT-OFF +; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_INTEL_fp_fast_math_mode %s -o - | FileCheck %s --check-prefix=CHECK-EXT-ON +; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_INTEL_fp_fast_math_mode %s -o - -filetype=obj | spirv-val %} +; XFAIL: * + +; CHECK-EXT-ON: OpCapability FPFastMathModeINTEL +; CHECK-EXT-ON: SPV_INTEL_fp_fast_math_mode +; CHECK-EXT-ON: OpName %[[#mul:]] "mul" +; CHECK-EXT-ON: OpName %[[#sub:]] "sub" +; CHECK-EXT-ON: OpDecorate %[[#mu:]] FPFastMathMode AllowContract +; CHECK-EXT-ON: OpDecorate %[[#su:]] FPFastMathMode AllowReassoc + +; CHECK-EXT-OFF-NOT: OpCapability FPFastMathModeINTEL +; CHECK-EXT-OFF-NOT: SPV_INTEL_fp_fast_math_mode +; CHECK-EXT-OFF: OpName %[[#mul:]] "mul" +; CHECK-EXT-OFF: OpName %[[#sub:]] "sub" +; CHECK-EXT-OFF-NOT: 4 Decorate %[[#mul]] FPFastMathMode AllowContract +; CHECK-EXT-OFF-NOT: 4 Decorate %[[#sub]] FPFastMathMode AllowReassoc + +define spir_kernel void @test(float %a, float %b) { +entry: + %a.addr = alloca float, align 4 + %b.addr = alloca float, align 4 + store float %a, ptr %a.addr, align 4 + store float %b, ptr %b.addr, align 4 + %0 = load float, ptr %a.addr, align 4 + %1 = load float, ptr %a.addr, align 4 + %mul = fmul contract float %0, %1 + store float %mul, ptr %b.addr, align 4 + %2 = load float, ptr %b.addr, align 4 + %3 = load float, ptr %b.addr, align 4 + %sub = fsub reassoc float %2, %3 + store float %sub, ptr %b.addr, align 4 + ret void +} diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_bfloat16/bfloat16.ll b/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_bfloat16/bfloat16.ll new file mode 100644 index 0000000000000..f9230cebac704 --- /dev/null +++ b/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_bfloat16/bfloat16.ll @@ -0,0 +1,20 @@ +; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_KHR_bfloat16 %s -o - | FileCheck %s +; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_KHR_bfloat16 %s -o - -filetype=obj | spirv-val %} +; XFAIL: * +; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-ERROR + +; CHECK-ERROR: BFloat16TypeKHR requires the following SPIR-V extension: SPV_KHR_subgroup_rotate + +; CHECK-DAG: OpCapability BFloat16TypeKHR +; CHECK-DAG: OpExtension "SPV_KHR_bfloat16" +; CHECK: %[[#BFLOAT:]] = OpTypeFloat 16 0 +; CHECK: %[[#]] = OpTypeVector %[[#BFLOAT]] 2 + +define spir_kernel void @test() { +entry: + %addr1 = alloca bfloat + %addr2 = alloca <2 x bfloat> + %data1 = load bfloat, ptr %addr1 + %data2 = load <2 x bfloat>, ptr %addr2 + ret void +} diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_bfloat16/bfloat16_dot.ll b/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_bfloat16/bfloat16_dot.ll new file mode 100644 index 0000000000000..337eda538c196 --- /dev/null +++ b/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_bfloat16/bfloat16_dot.ll @@ -0,0 +1,22 @@ +; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_KHR_bfloat16 %s -o - | FileCheck %s +; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_KHR_bfloat16 %s -o - -filetype=obj | spirv-val %} +; XFAIL: * + +; CHECK-SPIRV-DAG: OpCapability BFloat16TypeKHR +; CHECK-SPIRV-DAG: OpCapability BFloat16DotProductKHR +; CHECK-SPIRV-DAG: OpExtension "SPV_KHR_bfloat16" +; CHECK-SPIRV: %[[#BFLOAT:]] = OpTypeFloat 16 0 +; CHECK-SPIRV: %[[#]] = OpTypeVector %[[#BFLOAT]] 2 +; CHECK-SPIRV: OpDot + +declare spir_func bfloat @_Z3dotDv2_u6__bf16Dv2_S_(<2 x bfloat>, <2 x bfloat>) + +define spir_kernel void @test() { +entry: + %addrA = alloca <2 x bfloat> + %addrB = alloca <2 x bfloat> + %dataA = load <2 x bfloat>, ptr %addrA + %dataB = load <2 x bfloat>, ptr %addrB + %call = call spir_func bfloat @_Z3dotDv2_u6__bf16Dv2_S_(<2 x bfloat> %dataA, <2 x bfloat> %dataB) + ret void +} diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_bfloat16/cooperative_matrix_bfloat16.ll b/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_bfloat16/cooperative_matrix_bfloat16.ll new file mode 100644 index 0000000000000..6dd8fb7f0e83e --- /dev/null +++ b/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_bfloat16/cooperative_matrix_bfloat16.ll @@ -0,0 +1,25 @@ +; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_KHR_cooperative_matrix,+SPV_KHR_bfloat16 %s -o - | FileCheck %s +; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_KHR_cooperative_matrix,+SPV_KHR_bfloat16 %s -o - -filetype=obj | spirv-val %} +; XFAIL: * + +; CHECK-SPIRV-DAG: OpCapability CooperativeMatrixKHR +; CHECK-SPIRV-DAG: OpCapability BFloat16TypeKHR +; CHECK-SPIRV-DAG: OpCapability BFloat16CooperativeMatrixKHR +; CHECK-SPIRV-DAG: OpExtension "SPV_KHR_cooperative_matrix" +; CHECK-SPIRV-DAG: OpExtension "SPV_KHR_bfloat16" + +; CHECK-SPIRV-DAG: %[[#BFloatTy:]] = OpTypeFloat 16 0 +; CHECK-SPIRV-DAG: %[[#Int32Ty:]]= OpTypeInt 32 0 +; CHECK-SPIRV-DAG: %[[#Const12:]] = OpConstant %[[#Int32Ty]] 12 +; CHECK-SPIRV-DAG: %[[#Const3:]] = OpConstant %[[#Int32Ty]] 3 +; CHECK-SPIRV-DAG: %[[#Const2:]] = OpConstant %[[#Int32Ty]] 2 +; CHECK-SPIRV-DAG: %[[#MatTy:]] = OpTypeCooperativeMatrixKHR %[[#BFloatTy]] %[[#Const3]] %[[#Const12]] %[[#Const12]] %[[#Const2]] +; CHECK-SPIRV-DAG: %[[#]] = OpConstant %[[#BFloatTy]] 16256 +; CHECK-SPIRV: %[[#]] = OpCompositeConstruct %[[#MatTy]] + +declare spir_func target("spirv.CooperativeMatrixKHR", bfloat, 3, 12, 12, 2) @_Z26__spirv_CompositeConstructu6__bf16(bfloat) + +define spir_kernel void @test() { + %mat = call spir_func target("spirv.CooperativeMatrixKHR", bfloat, 3, 12, 12, 2) @_Z26__spirv_CompositeConstructu6__bf16(bfloat 1.0) + ret void +} diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_untyped_pointers/globals.ll b/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_untyped_pointers/globals.ll new file mode 100644 index 0000000000000..5d2e44c8b760e --- /dev/null +++ b/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_untyped_pointers/globals.ll @@ -0,0 +1,48 @@ +; This test validated untyped access chain and its use in SpecConstantOp. +; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_KHR_untyped_pointers %s -o - | FileCheck %s +; TODO: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_KHR_untyped_pointers %s -o - -filetype=obj | spirv-val %} + +; TODO: enable back once spirv-tools are updated and allow untyped access chain as OpSpecConstantOp operand. +; XFAIL: * + +; CHECK-DAG: %[[#I16:]] = OpTypeInt 16 0 +; CHECK-DAG: %[[#I32:]] = OpTypeInt 32 0 +; CHECK-DAG: %[[#I64:]] = OpTypeInt 64 0 +; CHECK-DAG: %[[#CONST0:]] = OpConstant %[[#I16]] 0 +; CHECK-DAG: %[[#CONST2:]] = OpConstant %[[#I32]] 2 +; CHECK-DAG: %[[#CONST3:]] = OpConstant %[[#I32]] 3 +; CHECK-DAG: %[[#CONST4:]] = OpConstant %[[#I32]] 4 +; CHECK-DAG: %[[#CONST0_I64:]] = OpConstant %[[#I64]] 0 +; CHECK-DAG: %[[#CONST1_I64:]] = OpConstant %[[#I64]] 1 +; CHECK-DAG: %[[#CONST2_I64:]] = OpConstant %[[#I64]] 2 +; CHECK-DAG: %[[#CONST3_I64:]] = OpConstant %[[#I64]] 3 + +; CHECK-DAG: %[[#PTRTY:]] = OpTypeUntypedPointerKHR 5 +; CHECK-DAG: %[[#LOCALPTRTY:]] = OpTypeUntypedPointerKHR 4 +; CHECK-DAG: %[[#ARRAYTY:]] = OpTypeArray %[[#PTRTY]] %[[#CONST2]] +; CHECK-DAG: %[[#ARRAYPTRTY:]] = OpTypePointer 5 %[[#ARRAYTY]] +; CHECK-DAG: %[[#ARRAY1TY:]] = OpTypeArray %[[#I32]] %[[#CONST4]] +; CHECK-DAG: %[[#ARRAY2TY:]] = OpTypeArray %[[#ARRAY1TY]] %[[#CONST3]] +; CHECK-DAG: %[[#ARRAY3TY:]] = OpTypeArray %[[#ARRAY2TY]] %[[#CONST2]] +; CHECK-DAG: %[[#ARRAY3PTRTY:]] = OpTypePointer 5 %[[#ARRAY3TY]] +; CHECK: %[[#VARA:]] = OpUntypedVariableKHR %[[#PTRTY]] 5 %[[#I16]] %[[#CONST0]] +; CHECK: %[[#VARB:]] = OpUntypedVariableKHR %[[#PTRTY]] 5 %[[#I32]] +; CHECK: %[[#VARC:]] = OpUntypedVariableKHR %[[#PTRTY]] 5 %[[#PTRTY]] %[[#VARA]] +; CHECK: %[[#VARD:]] = OpUntypedVariableKHR %[[#LOCALPTRTY]] 4 %[[#PTRTY]] +; CHECK: %[[#VARE:]] = OpVariable %[[#ARRAYPTRTY]] 5 +; CHECK: %[[#VARF:]] = OpVariable %[[#ARRAY3PTRTY]] 5 +; CHECK: %[[#SPECCONST:]] = OpSpecConstantOp %[[#PTRTY]] 4424 %[[#ARRAY3TY]] %[[#VARF]] %[[#CONST0_I64]] %[[#CONST1_I64]] %[[#CONST2_I64]] %[[#CONST3_I64]] +; CHECK: %[[#VARG:]] = OpUntypedVariableKHR %[[#PTRTY]] 5 %[[#PTRTY]] %[[#SPECCONST]] + +@a = addrspace(1) global i16 0 +@b = external addrspace(1) global i32 +@c = addrspace(1) global ptr addrspace(1) @a +@d = external addrspace(3) global ptr addrspace(1) +@e = addrspace(1) global [2 x ptr addrspace(1)] [ptr addrspace(1) @a, ptr addrspace(1) @b] +@f = addrspace(1) global [2 x [3 x [4 x i32]]] [[3 x [4 x i32]] [[4 x i32] [i32 1, i32 2, i32 3, i32 4], [4 x i32] [i32 1, i32 2, i32 3, i32 4], [4 x i32] [i32 1, i32 2, i32 3, i32 4]], [3 x [4 x i32]] [[4 x i32] [i32 1, i32 2, i32 3, i32 4], [4 x i32] [i32 1, i32 2, i32 3, i32 4], [4 x i32] [i32 1, i32 2, i32 3, i32 4]]] +@g = addrspace(1) global ptr addrspace(1) getelementptr inbounds ([2 x [3 x [4 x i32]]], ptr addrspace(1) @f, i64 0, i64 1, i64 2, i64 3) + +define spir_func void @foo() { +entry: + ret void +} diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_untyped_pointers/infinite-phi.ll b/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_untyped_pointers/infinite-phi.ll new file mode 100644 index 0000000000000..0ee2f2a5277a2 --- /dev/null +++ b/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_untyped_pointers/infinite-phi.ll @@ -0,0 +1,35 @@ +; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_KHR_untyped_pointers %s -o - | FileCheck %s +; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_KHR_untyped_pointers %s -o - -filetype=obj | spirv-val %} +; XFAIL: * + +; CHECK-DAG: [[#I32:]] = OpTypeInt 32 0 +; CHECK-DAG: [[#VOID:]] = OpTypeVoid +; CHECK-DAG: [[#FN_BAR_TY:]] = OpTypeFunction [[#I32]] [[#I32]] +; CHECK-DAG: [[#FN_FOO_TY:]] = OpTypeFunction [[#VOID]] [[#I32]] + +; CHECK-DAG: [[#BAR:]] = OpFunction [[#I32]] None [[#FN_BAR_TY]] +; CHECK-DAG: OpFunctionEnd + +; CHECK-DAG: [[#FOO:]] = OpFunction [[#VOID]] None [[#FN_FOO_TY]] +; CHECK: [[#PARAM_X:]] = OpFunctionParameter [[#I32]] +; CHECK: [[#CALL1:]] = OpFunctionCall [[#I32]] [[#BAR]] [[#PARAM_X]] +; CHECK: OpReturn +; CHECK: OpFunctionEnd + +define spir_kernel void @foo() { +entry: + %iptr = alloca i32, align 4 + %fptr = alloca float, align 4 + br label %loop + +loop: + %ptr1 = phi ptr [%ptr2, %loop], [%iptr, %entry] + %ptr2 = phi ptr [%ptr1, %loop], [%fptr, %entry] + %cond = phi i32 [0, %entry], [%cond.next, %loop] + %cond.next = add i32 %cond, 1 + %cmp = icmp slt i32 %cond.next, 150 + br i1 %cmp, label %exit, label %loop + +exit: + ret void +} diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_untyped_pointers/read_image.ll b/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_untyped_pointers/read_image.ll new file mode 100644 index 0000000000000..e294269b1b35e --- /dev/null +++ b/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_untyped_pointers/read_image.ll @@ -0,0 +1,51 @@ +; Check that untyped pointers extension does not affect the translation of images. + +; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_KHR_untyped_pointers %s -o - | FileCheck %s +; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_KHR_untyped_pointers %s -o - -filetype=obj | spirv-val %} +; XFAIL: * + +; CHECK-DAG: [[#I32:]] = OpTypeInt 32 0 +; CHECK-DAG: [[#IMAGETY:]] = OpTypeImage [[#I32]] 2 0 0 0 0 0 0 +; CHECK-DAG: [[#IVEC:]] = OpTypeVector [[#I32]] [[#]] +; CHECK-DAG: [[#F32:]] = OpTypeFloat 32 +; CHECK-DAG: [[#FVEC:]] = OpTypeVector [[#F32]] [[#]] + +; CHECK: [[#IMAGE0:]] = OpLoad [[#IMAGETY]] [[#]] +; CHECK: [[#COORD0:]] = OpLoad [[#IVEC]] [[#]] +; CHECK: [[#]] = OpImageRead [[#IVEC]] [[#IMAGE0]] [[#COORD0]] 8192 + +; CHECK: [[#IMAGE1:]] = OpLoad [[#IMAGETY]] [[#]] +; CHECK: [[#COORD1:]] = OpLoad [[#IVEC]] [[#]] +; CHECK: [[#]] = OpImageRead [[#FVEC]] [[#IMAGE1]] [[#COORD1]] + +define dso_local spir_kernel void @kernelA(target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0) %input) { +entry: + %input.addr = alloca target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0), align 8 + %c = alloca <4 x i32>, align 16 + %.compoundliteral = alloca <4 x i32>, align 16 + store target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0) %input, ptr %input.addr, align 8 + %0 = load target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0), ptr %input.addr, align 8 + store <4 x i32> zeroinitializer, ptr %.compoundliteral, align 16 + %1 = load <4 x i32>, ptr %.compoundliteral, align 16 + %call = call spir_func <4 x i32> @_Z12read_imageui14ocl_image3d_roDv4_i(target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0) %0, <4 x i32> noundef %1) + store <4 x i32> %call, ptr %c, align 16 + ret void +} + +declare spir_func <4 x i32> @_Z12read_imageui14ocl_image3d_roDv4_i(target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0), <4 x i32> noundef) + +define dso_local spir_kernel void @kernelB(target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0) %input) { +entry: + %input.addr = alloca target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0), align 8 + %f = alloca <4 x float>, align 16 + %.compoundliteral = alloca <4 x i32>, align 16 + store target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0) %input, ptr %input.addr, align 8 + %0 = load target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0), ptr %input.addr, align 8 + store <4 x i32> zeroinitializer, ptr %.compoundliteral, align 16 + %1 = load <4 x i32>, ptr %.compoundliteral, align 16 + %call = call spir_func <4 x float> @_Z11read_imagef14ocl_image3d_roDv4_i(target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0) %0, <4 x i32> noundef %1) + store <4 x float> %call, ptr %f, align 16 + ret void +} + +declare spir_func <4 x float> @_Z11read_imagef14ocl_image3d_roDv4_i(target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0), <4 x i32> noundef) diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_untyped_pointers/store.ll b/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_untyped_pointers/store.ll new file mode 100644 index 0000000000000..0ffc8f6eed88b --- /dev/null +++ b/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_untyped_pointers/store.ll @@ -0,0 +1,47 @@ +; This test checks translation of function parameter which is untyped pointer. +; Lately, when we do support untyped variables, this one could be used to check +; "full" forward and reverse translation of opaque pointers. + +; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_KHR_untyped_pointers %s -o - | FileCheck %s +; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_KHR_untyped_pointers %s -o - -filetype=obj | spirv-val %} +; XFAIL: * + +; CHECK: Capability [[#]] = OpCapability UntypedPointersKHR +; CHECK: Extension [[#]] = OpExtension "SPV_KHR_untyped_pointers" + +; CHECK-DAG: [[#IntTy:]] = OpTypeInt 32 0 +; CHECK-DAG: [[#Constant0:]] = OpConstant [[#IntTy]] 0 +; CHECK-DAG: [[#Constant42:]] = OpConstant [[#IntTy]] 42 +; CHECK-DAG: [[#UntypedPtrTy:]] = OpTypeUntypedPointerKHR 5 +; CHECK-DAG: [[#UntypedPtrTyFunc:]] = OpTypeUntypedPointerKHR 7 + +; CHECK: [[#FuncParam:]] = OpFunctionParameter [[#UntypedPtrTy]] +; CHECK: [[#VarBId:]] = OpUntypedVariableKHR [[#UntypedPtrTyFunc]] 7 [[#UntypedPtrTy]] +; CHECK: OpStore [[#VarBId]] [[#FuncParam]] 2 4 +; CHECK: [[#LoadId:]] = OpLoad [[#UntypedPtrTy]] [[#VarBId]] 2 4 +; CHECK: OpStore [[#LoadId]] [[#Constant0]] 2 4 + +; CHECK: [[#FuncParam0:]] = OpFunctionParameter [[#UntypedPtrTy]] +; CHECK: [[#FuncParam1:]] = OpFunctionParameter [[#UntypedPtrTy]] +; CHECK: [[#VarCId:]] = OpUntypedVariableKHR [[#UntypedPtrTyFunc]] 7 [[#IntTy]] +; CHECK: OpStore [[#VarCId]] [[#Constant42]] 2 4 +; CHECK: [[#LoadId:]] = OpLoad [[#IntTy]] [[#FuncParam1]] 2 4 +; CHECK: OpStore [[#FuncParam0]] [[#LoadId]] 2 4 + +define spir_func void @foo(ptr addrspace(1) %a) { +entry: + %b = alloca ptr addrspace(1), align 4 + store ptr addrspace(1) %a, ptr %b, align 4 + %0 = load ptr addrspace(1), ptr %b, align 4 + store i32 0, ptr addrspace(1) %0, align 4 + ret void +} + +define dso_local void @boo(ptr addrspace(1) %0, ptr addrspace(1) %1) { +entry: + %c = alloca i32, align 4 + store i32 42, ptr %c, align 4 + %2 = load i32, ptr addrspace(1) %1, align 4 + store i32 %2, ptr addrspace(1) %0, align 4 + ret void +} diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_untyped_pointers/untyped_ptr_access_chain.ll b/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_untyped_pointers/untyped_ptr_access_chain.ll new file mode 100644 index 0000000000000..d599cb08ae468 --- /dev/null +++ b/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_untyped_pointers/untyped_ptr_access_chain.ll @@ -0,0 +1,26 @@ +; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_KHR_untyped_pointers %s -o - | FileCheck %s +; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_KHR_untyped_pointers %s -o - -filetype=obj | spirv-val %} +; XFAIL: * + +; CHECK-SPIRV: OpCapability UntypedPointersKHR +; CHECK-SPIRV: OpExtension "SPV_KHR_untyped_pointers" + +; CHECK-SPIRV: OpTypeInt [[#IntTy:]] 32 +; CHECK-SPIRV: OpConstant [[#IntTy]] [[#Const0:]] 0 +; CHECK-SPIRV: OpConstant [[#IntTy]] [[#Const1:]] 1 +; CHECK-SPIRV: OpTypeUntypedPointerKHR [[#UntypedPtrTy:]] 7 +; CHECK-SPIRV: OpTypeStruct [[#StructTy:]] [[#IntTy]] [[#IntTy]] +; CHECK-SPIRV: OpUntypedVariableKHR [[#UntypedPtrTy]] [[#StructVarId:]] 7 [[#StructTy]] +; CHECK-SPIRV: OpUntypedInBoundsPtrAccessChainKHR [[#UntypedPtrTy]] [[#PtrAccessId:]] [[#StructTy]] [[#StructVarId]] [[#Const0]] [[#Const1]] + +%struct.Example = type { i32, i32 } + +define spir_func void @test(i32 noundef %0) { + %2 = alloca i32, align 4 + %3 = alloca %struct.Example, align 4 + store i32 %0, ptr %2, align 4 + %4 = load i32, ptr %2, align 4 + %5 = getelementptr inbounds nuw %struct.Example, ptr %3, i32 0, i32 1 + store i32 %4, ptr %5, align 4 + ret void +} diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_untyped_pointers/untyped_ptr_type.ll b/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_untyped_pointers/untyped_ptr_type.ll new file mode 100644 index 0000000000000..3ec2e9807e59b --- /dev/null +++ b/llvm/test/CodeGen/SPIRV/extensions/SPV_KHR_untyped_pointers/untyped_ptr_type.ll @@ -0,0 +1,24 @@ +; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_KHR_untyped_pointers %s -o - | FileCheck %s +; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_KHR_untyped_pointers %s -o - -filetype=obj | spirv-val %} +; XFAIL: * + +; CHECK: [[#cap_untyped_ptr:]] = OpCapability UntypedPointersKHR +; CHECK: [[#ext_untyped_ptr:]] = OpExtension "SPV_KHR_untyped_pointers" +; CHECK-DAG: [[#void_ty:]] = OpTypeVoid +; CHECK-DAG: [[#untyped_ptr_ty:]] = OpTypeUntypedPointerKHR 7 +; CHECK-DAG: [[#func_ty:]] = OpTypeFunction [[#untyped_ptr_ty]] [[#untyped_ptr_ty]] + +; CHECK: [[#process_func:]] = OpFunction [[#untyped_ptr_ty]] None [[#func_ty]] +; CHECK: OpFunctionParameter [[#untyped_ptr_ty]] +; CHECK: [[#main_func:]] = OpFunction [[#untyped_ptr_ty]] None [[#func_ty]] +; CHECK: [[#param:]] = OpFunctionParameter [[#untyped_ptr_ty]] +; CHECK: [[#call_res:]] = OpFunctionCall [[#untyped_ptr_ty]] [[#process_func]] [[#param]] +; CHECK: OpReturnValue [[#call_res]] + +declare ptr @processPointer(ptr) + +define ptr @example(ptr %arg) { +entry: + %result = call ptr @processPointer(ptr %arg) + ret ptr %result +} >From 87146ff72b81ef0fb5b507de90be0be7f396c4e1 Mon Sep 17 00:00:00 2001 From: Aadesh PremKumar <aadesh.premku...@multicorewareinc.com> Date: Thu, 14 Aug 2025 17:18:06 +0530 Subject: [PATCH 2/2] --Moved the test for the generic AVC motion estimation from LLVM to Clang. --- .../test/CodeGenOpenCL}/subgroup_avc_intel_generic.cl | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_device_side_avc_motion_estimation => clang/test/CodeGenOpenCL}/subgroup_avc_intel_generic.cl (100%) diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_device_side_avc_motion_estimation/subgroup_avc_intel_generic.cl b/clang/test/CodeGenOpenCL/subgroup_avc_intel_generic.cl similarity index 100% rename from llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_device_side_avc_motion_estimation/subgroup_avc_intel_generic.cl rename to clang/test/CodeGenOpenCL/subgroup_avc_intel_generic.cl _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits