|
| 1 | +;=========================== begin_copyright_notice ============================ |
| 2 | +; |
| 3 | +; Copyright (C) 2023 Intel Corporation |
| 4 | +; |
| 5 | +; This software and the related documents are Intel copyrighted materials, |
| 6 | +; and your use of them is governed by the express license under which they were |
| 7 | +; provided to you ("License"). Unless the License provides otherwise, |
| 8 | +; you may not use, modify, copy, publish, distribute, disclose or transmit this |
| 9 | +; software or the related documents without Intel's prior written permission. |
| 10 | +; |
| 11 | +; This software and the related documents are provided as is, with no express or |
| 12 | +; implied warranties, other than those that are expressly stated in the License. |
| 13 | +; |
| 14 | +;============================ end_copyright_notice ============================= |
| 15 | + |
| 16 | +; Check alwaysinline attribute is added to following functions: |
| 17 | +; 1. function that is returning an image type and its' users, e.g. _ZN4sycl3_V13ext6oneapi12experimental6detail31convert_handle_to_sampled_imageI14ocl_image3d_roNS3_17spirv_handle_typeEEEDaT0_ |
| 18 | + |
| 19 | +; RUN: igc_opt --typed-pointers -igc-process-func-attributes -S %s -o - | FileCheck %s |
| 20 | + |
| 21 | +; CHECK: define internal spir_func void @_ZZZ4mainENKUlRN4sycl3_V17handlerEE_clES2_ENKUlNS0_7nd_itemILi3EEEE_clES5_() [[MD0:#[0-9]+]] |
| 22 | +; CHECK: define internal spir_func void @_ZN4sycl3_V13ext6oneapi12experimental10read_imageINS0_3vecIfLi4EEES6_S6_EET_RKNS3_20sampled_image_handleERKT1_({{.*}}) [[MD0]] |
| 23 | +; CHECK: define internal spir_func {{.*}} @_ZN4sycl3_V13ext6oneapi12experimental6detail31convert_handle_to_sampled_imageI14ocl_image3d_roNS3_17spirv_handle_typeEEEDaT0_({{.*}}) [[MD1:#[0-9]+]] |
| 24 | +; CHECK: define internal spir_func void @_ZL19__invoke__ImageReadIN4sycl3_V13vecIfLi4EEE32__spirv_SampledImage__image3d_roS3_ET_T0_T1_({{.*}}) [[MD1]] |
| 25 | +; CHECK: define internal spir_func {{.*}} @_Z25__spirv_ImageRead_Rfloat4PU3AS140__spirv_SampledImage__void_2_0_0_0_0_0_0Dv4_f({{.*}}) [[MD2:#[0-9]+]] |
| 26 | +; CHECK: attributes [[MD0]] = {{.*}} noinline |
| 27 | +; CHECK: attributes [[MD1]] = {{.*}} alwaysinline |
| 28 | +; CHECK: attributes [[MD2]] = {{.*}} alwaysinline |
| 29 | + |
| 30 | +target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v16:16:16-v24:32:32-v32:32:32-v48:64:64-v64:64:64-v96:128:128-v128:128:128-v192:256:256-v256:256:256-v512:512:512-v1024:1024:1024-n8:16:32" |
| 31 | +target triple = "spir64-unknown-unknown" |
| 32 | + |
| 33 | +%"class.sycl::_V1::vec" = type { <4 x float> } |
| 34 | +%"struct.sycl::_V1::ext::oneapi::experimental::sampled_image_handle" = type { %"struct.sycl::_V1::ext::oneapi::experimental::spirv_handle_type" } |
| 35 | +%"struct.sycl::_V1::ext::oneapi::experimental::spirv_handle_type" = type { i64, i64 } |
| 36 | +%spirv.SampledImage._void_2_0_0_0_0_0_0 = type opaque |
| 37 | +%spirv.Image._void_2_0_0_0_0_0_0 = type opaque |
| 38 | +%spirv.Sampler = type opaque |
| 39 | + |
| 40 | +; Function Attrs: noinline nounwind optnone |
| 41 | +define internal spir_func void @_ZZZ4mainENKUlRN4sycl3_V17handlerEE_clES2_ENKUlNS0_7nd_itemILi3EEEE_clES5_() #0 { |
| 42 | +entry: |
| 43 | + call spir_func void @_ZN4sycl3_V13ext6oneapi12experimental10read_imageINS0_3vecIfLi4EEES6_S6_EET_RKNS3_20sampled_image_handleERKT1_(%"class.sycl::_V1::vec" addrspace(4)* noalias align 16 null, %"struct.sycl::_V1::ext::oneapi::experimental::sampled_image_handle" addrspace(4)* align 8 null, %"class.sycl::_V1::vec" addrspace(4)* align 16 null) |
| 44 | + ret void |
| 45 | +} |
| 46 | + |
| 47 | +; Function Attrs: noinline nounwind optnone |
| 48 | +define weak_odr spir_func void @_ZN4sycl3_V13ext6oneapi12experimental10read_imageINS0_3vecIfLi4EEES6_S6_EET_RKNS3_20sampled_image_handleERKT1_(%"class.sycl::_V1::vec" addrspace(4)* noalias align 16 %agg.result, %"struct.sycl::_V1::ext::oneapi::experimental::sampled_image_handle" addrspace(4)* align 8 dereferenceable(16) %imageHandle, %"class.sycl::_V1::vec" addrspace(4)* align 16 dereferenceable(16) %coords) #0 { |
| 49 | +entry: |
| 50 | + %call = call spir_func %spirv.SampledImage._void_2_0_0_0_0_0_0 addrspace(1)* @_ZN4sycl3_V13ext6oneapi12experimental6detail31convert_handle_to_sampled_imageI14ocl_image3d_roNS3_17spirv_handle_typeEEEDaT0_(%"struct.sycl::_V1::ext::oneapi::experimental::spirv_handle_type"* byval(%"struct.sycl::_V1::ext::oneapi::experimental::spirv_handle_type") align 8 null) #0 |
| 51 | + call spir_func void @_ZL19__invoke__ImageReadIN4sycl3_V13vecIfLi4EEE32__spirv_SampledImage__image3d_roS3_ET_T0_T1_(%"class.sycl::_V1::vec" addrspace(4)* noalias align 16 %agg.result, %spirv.SampledImage._void_2_0_0_0_0_0_0 addrspace(1)* %call, %"class.sycl::_V1::vec"* byval(%"class.sycl::_V1::vec") align 16 null) #0 |
| 52 | + ret void |
| 53 | +} |
| 54 | + |
| 55 | +; Function Attrs: noinline nounwind optnone |
| 56 | +define linkonce_odr spir_func %spirv.SampledImage._void_2_0_0_0_0_0_0 addrspace(1)* @_ZN4sycl3_V13ext6oneapi12experimental6detail31convert_handle_to_sampled_imageI14ocl_image3d_roNS3_17spirv_handle_typeEEEDaT0_(%"struct.sycl::_V1::ext::oneapi::experimental::spirv_handle_type"* byval(%"struct.sycl::_V1::ext::oneapi::experimental::spirv_handle_type") align 8 %raw_handle) #0 { |
| 57 | +entry: |
| 58 | + %retval = alloca %spirv.SampledImage._void_2_0_0_0_0_0_0 addrspace(1)*, align 8 |
| 59 | + %retval.ascast = addrspacecast %spirv.SampledImage._void_2_0_0_0_0_0_0 addrspace(1)** %retval to %spirv.SampledImage._void_2_0_0_0_0_0_0 addrspace(1)* addrspace(4)* |
| 60 | + %raw_handle.ascast = addrspacecast %"struct.sycl::_V1::ext::oneapi::experimental::spirv_handle_type"* %raw_handle to %"struct.sycl::_V1::ext::oneapi::experimental::spirv_handle_type" addrspace(4)* |
| 61 | + %image = getelementptr inbounds %"struct.sycl::_V1::ext::oneapi::experimental::spirv_handle_type", %"struct.sycl::_V1::ext::oneapi::experimental::spirv_handle_type" addrspace(4)* %raw_handle.ascast, i32 0, i32 0 |
| 62 | + %0 = load i64, i64 addrspace(4)* %image, align 8 |
| 63 | + %call = call spir_func %spirv.Image._void_2_0_0_0_0_0_0 addrspace(1)* @_Z76__spirv_ConvertHandleToImageINTEL_RPU3AS133__spirv_Image__void_2_0_0_0_0_0_0m(i64 %0) |
| 64 | + %sampler = getelementptr inbounds %"struct.sycl::_V1::ext::oneapi::experimental::spirv_handle_type", %"struct.sycl::_V1::ext::oneapi::experimental::spirv_handle_type" addrspace(4)* %raw_handle.ascast, i32 0, i32 1 |
| 65 | + %1 = load i64, i64 addrspace(4)* %sampler, align 8 |
| 66 | + %call1 = call spir_func %spirv.Sampler addrspace(2)* @_Z35__spirv_ConvertHandleToSamplerINTELm(i64 %1) |
| 67 | + %call2 = call spir_func %spirv.SampledImage._void_2_0_0_0_0_0_0 addrspace(1)* @_Z20__spirv_SampledImagePU3AS133__spirv_Image__void_2_0_0_0_0_0_0PU3AS215__spirv_Sampler(%spirv.Image._void_2_0_0_0_0_0_0 addrspace(1)* %call, %spirv.Sampler addrspace(2)* %call1) |
| 68 | + ret %spirv.SampledImage._void_2_0_0_0_0_0_0 addrspace(1)* %call2 |
| 69 | +} |
| 70 | + |
| 71 | +; Function Attrs: noinline nounwind optnone |
| 72 | +define hidden spir_func void @_ZL19__invoke__ImageReadIN4sycl3_V13vecIfLi4EEE32__spirv_SampledImage__image3d_roS3_ET_T0_T1_(%"class.sycl::_V1::vec" addrspace(4)* noalias align 16 %agg.result, %spirv.SampledImage._void_2_0_0_0_0_0_0 addrspace(1)* %Img, %"class.sycl::_V1::vec"* byval(%"class.sycl::_V1::vec") align 16 %Coords) #0 { |
| 73 | +entry: |
| 74 | + %call1 = call spir_func <4 x float> @_Z25__spirv_ImageRead_Rfloat4PU3AS140__spirv_SampledImage__void_2_0_0_0_0_0_0Dv4_f(%spirv.SampledImage._void_2_0_0_0_0_0_0 addrspace(1)* %Img, <4 x float> zeroinitializer) |
| 75 | + ret void |
| 76 | +} |
| 77 | + |
| 78 | +; Function Attrs: convergent |
| 79 | +define dso_local spir_func <4 x float> @_Z25__spirv_ImageRead_Rfloat4PU3AS140__spirv_SampledImage__void_2_0_0_0_0_0_0Dv4_f(%spirv.SampledImage._void_2_0_0_0_0_0_0 addrspace(1)* %Image, <4 x float> %Coordinate) #1 { |
| 80 | +entry: |
| 81 | + %0 = bitcast %spirv.SampledImage._void_2_0_0_0_0_0_0 addrspace(1)* %Image to i8 addrspace(1)* |
| 82 | + %call.i.i = tail call spir_func i64 @__builtin_IB_get_image(i8 addrspace(1)* %0) |
| 83 | + %call1.i.i = tail call spir_func i64 @__builtin_IB_get_sampler(i8 addrspace(1)* %0) |
| 84 | + %conv2.i.i = trunc i64 %call1.i.i to i32 |
| 85 | + %call3.i.i = tail call spir_func i32 @__builtin_IB_get_snap_wa_reqd(i32 %conv2.i.i) |
| 86 | + %call19.i.i = tail call spir_func <4 x float> @__builtin_IB_OCL_3d_sample_l(i32 0, i32 %conv2.i.i, <4 x float> zeroinitializer, float 0.000000e+00) |
| 87 | + ret <4 x float> %call19.i.i |
| 88 | +} |
| 89 | + |
| 90 | +declare spir_func %spirv.SampledImage._void_2_0_0_0_0_0_0 addrspace(1)* @_Z20__spirv_SampledImagePU3AS133__spirv_Image__void_2_0_0_0_0_0_0PU3AS215__spirv_Sampler(%spirv.Image._void_2_0_0_0_0_0_0 addrspace(1)*, %spirv.Sampler addrspace(2)*) |
| 91 | + |
| 92 | +declare spir_func %spirv.Sampler addrspace(2)* @_Z35__spirv_ConvertHandleToSamplerINTELm(i64) |
| 93 | + |
| 94 | +declare spir_func %spirv.Image._void_2_0_0_0_0_0_0 addrspace(1)* @_Z76__spirv_ConvertHandleToImageINTEL_RPU3AS133__spirv_Image__void_2_0_0_0_0_0_0m(i64) |
| 95 | + |
| 96 | +declare spir_func i64 @__builtin_IB_get_image(i8 addrspace(1)*) |
| 97 | + |
| 98 | +declare spir_func i64 @__builtin_IB_get_sampler(i8 addrspace(1)*) |
| 99 | + |
| 100 | +declare spir_func i32 @__builtin_IB_get_snap_wa_reqd(i32) |
| 101 | + |
| 102 | +declare spir_func <4 x float> @__builtin_IB_OCL_3d_sample_l(i32, i32, <4 x float>, float) |
| 103 | + |
| 104 | +attributes #0 = { noinline nounwind optnone } |
| 105 | +attributes #1 = { convergent } |
| 106 | + |
| 107 | +!spirv.MemoryModel = !{!0} |
| 108 | +!spirv.Source = !{!1} |
| 109 | +!spirv.Generator = !{!2} |
| 110 | +!igc.functions = !{!3} |
| 111 | +!IGCMetadata = !{!4} |
| 112 | +!opencl.ocl.version = !{!5} |
| 113 | +!opencl.spir.version = !{!5} |
| 114 | + |
| 115 | +!0 = !{i32 2, i32 2} |
| 116 | +!1 = !{i32 4, i32 100000} |
| 117 | +!2 = !{i16 6, i16 14} |
| 118 | +!3 = distinct !{null, null} |
| 119 | +!4 = !{!"ModuleMD"} |
| 120 | +!5 = !{i32 2, i32 0} |
0 commit comments