|
1 | | -; RUN: opt < %s -passes=msan -msan-instrumentation-with-call-threshold=0 -msan-eager-checks=1 -S | FileCheck %s |
| 1 | +; RUN: opt < %s -passes=msan -msan-instrumentation-with-call-threshold=0 -msan-eager-checks=1 -msan-spir-privates=0 -S | FileCheck %s |
2 | 2 |
|
3 | | -; ModuleID = 'check_call.cpp' |
4 | | -source_filename = "check_call.cpp" |
5 | 3 | target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-n8:16:32:64-G1" |
6 | 4 | target triple = "spir64-unknown-unknown" |
7 | 5 |
|
8 | | -$_ZTSZZ4mainENKUlRN4sycl3_V17handlerEE_clES2_E8MyKernel = comdat any |
9 | | - |
10 | 6 | ; CHECK: @__MsanKernelMetadata = appending dso_local local_unnamed_addr addrspace(1) global |
11 | 7 | ; CHECK-SAME: [[ATTR0:#[0-9]+]] |
12 | 8 |
|
13 | | -; Function Attrs: mustprogress norecurse nounwind sanitize_memory uwtable |
14 | | -define weak_odr dso_local spir_kernel void @_ZTSZZ4mainENKUlRN4sycl3_V17handlerEE_clES2_E8MyKernel(ptr addrspace(1) noundef align 4 %_arg_array) local_unnamed_addr #0 comdat !srcloc !85 !kernel_arg_buffer_location !86 !sycl_fixed_targets !87 { |
15 | | -; CHECK-LABEL: @_ZTSZZ4mainENKUlRN4sycl3_V17handlerEE_clES2_E8MyKernel |
| 9 | +; CHECK-NOT: _tls |
| 10 | + |
| 11 | +define spir_kernel void @MyKernel(ptr addrspace(1) noundef align 4 %_arg_array) sanitize_memory { |
| 12 | +; CHECK-LABEL: define spir_kernel void @MyKernel |
16 | 13 | entry: |
17 | | -; CHECK-NOT: @__msan_param_tls |
18 | | - %0 = load i32, ptr addrspace(1) %_arg_array, align 4, !tbaa !88 |
19 | | - %arrayidx3.i = getelementptr inbounds i8, ptr addrspace(1) %_arg_array, i64 4 |
20 | | -; CHECK: @__msan_get_shadow |
21 | | - %1 = load i32, ptr addrspace(1) %arrayidx3.i, align 4, !tbaa !88 |
22 | | - %conv.i = sext i32 %1 to i64 |
23 | | - %call.i = tail call spir_func noundef i64 @_Z3fooix(i32 noundef %0, i64 noundef %conv.i) #2 |
24 | | - %conv4.i = trunc i64 %call.i to i32 |
25 | | - store i32 %conv4.i, ptr addrspace(1) %_arg_array, align 4, !tbaa !88 |
| 14 | + %0 = load i32, ptr addrspace(1) %_arg_array, align 4 |
| 15 | + ; CHECK: %1 = ptrtoint ptr addrspace(1) %_arg_array to i64 |
| 16 | + ; CHECK-NEXT: %2 = call i64 @__msan_get_shadow(i64 %1, i32 1, ptr addrspace(2) null) |
| 17 | + ; CHECK-NEXT: %3 = inttoptr i64 %2 to ptr addrspace(1) |
| 18 | + ; CHECK-NEXT: %_msld = load i32, ptr addrspace(1) %3, align 4 |
| 19 | + ; CHECK-NEXT: call void @__msan_maybe_warning_4(i32 zeroext %_msld, i64 zeroext 0, ptr addrspace(2) null, i32 0, ptr addrspace(2) @__msan_kernel) |
| 20 | + %call = call spir_func i32 @foo(i32 %0) |
| 21 | + ; CHECK: %4 = ptrtoint ptr addrspace(1) %_arg_array to i64 |
| 22 | + ; CHECK-NEXT: %5 = call i64 @__msan_get_shadow(i64 %4, i32 1, ptr addrspace(2) null) |
| 23 | + ; CHECK-NEXT: %6 = inttoptr i64 %5 to ptr addrspace(1) |
| 24 | + ; CHECK-NEXT: store i32 0, ptr addrspace(1) %6, align 4 |
| 25 | + store i32 %call, ptr addrspace(1) %_arg_array, align 4 |
26 | 26 | ret void |
27 | 27 | } |
28 | 28 |
|
29 | | -; Function Attrs: mustprogress noinline norecurse nounwind sanitize_memory uwtable |
30 | | -define linkonce_odr dso_local spir_func noundef i64 @_Z3fooix(i32 noundef %data1, i64 noundef %data2) local_unnamed_addr #1 !srcloc !92 { |
31 | | -; CHECK-LABEL: @_Z3fooix |
| 29 | +define spir_func i32 @foo(i32 %data) sanitize_memory { |
| 30 | +; CHECK-LABEL: define spir_func i32 @foo |
32 | 31 | entry: |
33 | | - %conv = sext i32 %data1 to i64 |
34 | | - %add = add nsw i64 %data2, %conv |
35 | | - ret i64 %add |
| 32 | + ret i32 %data |
36 | 33 | } |
37 | 34 |
|
38 | 35 | ; CHECK: attributes [[ATTR0]] |
39 | 36 | ; CHECK-SAME: "sycl-device-global-size"="32" "sycl-device-image-scope" "sycl-host-access"="0" "sycl-unique-id"="_Z20__MsanKernelMetadata" |
40 | | - |
41 | | -attributes #0 = { mustprogress norecurse nounwind sanitize_memory uwtable "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "sycl-module-id"="check_call.cpp" "sycl-single-task" "uniform-work-group-size"="true" } |
42 | | -attributes #1 = { mustprogress noinline norecurse nounwind sanitize_memory uwtable "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" } |
43 | | -attributes #2 = { nounwind } |
44 | | - |
45 | | -!llvm.module.flags = !{!0, !1, !2, !3} |
46 | | -!opencl.spir.version = !{!4} |
47 | | -!spirv.Source = !{!5} |
48 | | -!sycl_aspects = !{!6, !7, !8, !9, !10, !11, !12, !13, !14, !15, !16, !17, !18, !19, !20, !21, !22, !23, !24, !25, !26, !27, !28, !29, !30, !31, !32, !33, !34, !35, !36, !37, !38, !39, !40, !41, !42, !43, !44, !45, !46, !47, !48, !49, !50, !51, !52, !53, !54, !55, !56, !57, !58, !59, !60, !61, !62, !63, !64, !65, !66, !67, !68, !69, !70, !71, !72, !73, !74, !75, !76, !77, !78, !79, !80, !81, !82, !83} |
49 | | -!llvm.ident = !{!84} |
50 | | - |
51 | | -!0 = !{i32 1, !"wchar_size", i32 4} |
52 | | -!1 = !{i32 1, !"sycl-device", i32 1} |
53 | | -!2 = !{i32 7, !"uwtable", i32 2} |
54 | | -!3 = !{i32 7, !"frame-pointer", i32 2} |
55 | | -!4 = !{i32 1, i32 2} |
56 | | -!5 = !{i32 4, i32 100000} |
57 | | -!6 = !{!"cpu", i32 1} |
58 | | -!7 = !{!"gpu", i32 2} |
59 | | -!8 = !{!"accelerator", i32 3} |
60 | | -!9 = !{!"custom", i32 4} |
61 | | -!10 = !{!"fp16", i32 5} |
62 | | -!11 = !{!"fp64", i32 6} |
63 | | -!12 = !{!"image", i32 9} |
64 | | -!13 = !{!"online_compiler", i32 10} |
65 | | -!14 = !{!"online_linker", i32 11} |
66 | | -!15 = !{!"queue_profiling", i32 12} |
67 | | -!16 = !{!"usm_device_allocations", i32 13} |
68 | | -!17 = !{!"usm_host_allocations", i32 14} |
69 | | -!18 = !{!"usm_shared_allocations", i32 15} |
70 | | -!19 = !{!"usm_system_allocations", i32 17} |
71 | | -!20 = !{!"ext_intel_pci_address", i32 18} |
72 | | -!21 = !{!"ext_intel_gpu_eu_count", i32 19} |
73 | | -!22 = !{!"ext_intel_gpu_eu_simd_width", i32 20} |
74 | | -!23 = !{!"ext_intel_gpu_slices", i32 21} |
75 | | -!24 = !{!"ext_intel_gpu_subslices_per_slice", i32 22} |
76 | | -!25 = !{!"ext_intel_gpu_eu_count_per_subslice", i32 23} |
77 | | -!26 = !{!"ext_intel_max_mem_bandwidth", i32 24} |
78 | | -!27 = !{!"ext_intel_mem_channel", i32 25} |
79 | | -!28 = !{!"usm_atomic_host_allocations", i32 26} |
80 | | -!29 = !{!"usm_atomic_shared_allocations", i32 27} |
81 | | -!30 = !{!"atomic64", i32 28} |
82 | | -!31 = !{!"ext_intel_device_info_uuid", i32 29} |
83 | | -!32 = !{!"ext_oneapi_srgb", i32 30} |
84 | | -!33 = !{!"ext_oneapi_native_assert", i32 31} |
85 | | -!34 = !{!"host_debuggable", i32 32} |
86 | | -!35 = !{!"ext_intel_gpu_hw_threads_per_eu", i32 33} |
87 | | -!36 = !{!"ext_oneapi_cuda_async_barrier", i32 34} |
88 | | -!37 = !{!"ext_intel_free_memory", i32 36} |
89 | | -!38 = !{!"ext_intel_device_id", i32 37} |
90 | | -!39 = !{!"ext_intel_memory_clock_rate", i32 38} |
91 | | -!40 = !{!"ext_intel_memory_bus_width", i32 39} |
92 | | -!41 = !{!"emulated", i32 40} |
93 | | -!42 = !{!"ext_intel_legacy_image", i32 41} |
94 | | -!43 = !{!"ext_oneapi_bindless_images", i32 42} |
95 | | -!44 = !{!"ext_oneapi_bindless_images_shared_usm", i32 43} |
96 | | -!45 = !{!"ext_oneapi_bindless_images_1d_usm", i32 44} |
97 | | -!46 = !{!"ext_oneapi_bindless_images_2d_usm", i32 45} |
98 | | -!47 = !{!"ext_oneapi_external_memory_import", i32 46} |
99 | | -!48 = !{!"ext_oneapi_external_semaphore_import", i32 48} |
100 | | -!49 = !{!"ext_oneapi_mipmap", i32 50} |
101 | | -!50 = !{!"ext_oneapi_mipmap_anisotropy", i32 51} |
102 | | -!51 = !{!"ext_oneapi_mipmap_level_reference", i32 52} |
103 | | -!52 = !{!"ext_intel_esimd", i32 53} |
104 | | -!53 = !{!"ext_oneapi_ballot_group", i32 54} |
105 | | -!54 = !{!"ext_oneapi_fixed_size_group", i32 55} |
106 | | -!55 = !{!"ext_oneapi_opportunistic_group", i32 56} |
107 | | -!56 = !{!"ext_oneapi_tangle_group", i32 57} |
108 | | -!57 = !{!"ext_intel_matrix", i32 58} |
109 | | -!58 = !{!"ext_oneapi_is_composite", i32 59} |
110 | | -!59 = !{!"ext_oneapi_is_component", i32 60} |
111 | | -!60 = !{!"ext_oneapi_graph", i32 61} |
112 | | -!61 = !{!"ext_intel_fpga_task_sequence", i32 62} |
113 | | -!62 = !{!"ext_oneapi_limited_graph", i32 63} |
114 | | -!63 = !{!"ext_oneapi_private_alloca", i32 64} |
115 | | -!64 = !{!"ext_oneapi_cubemap", i32 65} |
116 | | -!65 = !{!"ext_oneapi_cubemap_seamless_filtering", i32 66} |
117 | | -!66 = !{!"ext_oneapi_bindless_sampled_image_fetch_1d_usm", i32 67} |
118 | | -!67 = !{!"ext_oneapi_bindless_sampled_image_fetch_1d", i32 68} |
119 | | -!68 = !{!"ext_oneapi_bindless_sampled_image_fetch_2d_usm", i32 69} |
120 | | -!69 = !{!"ext_oneapi_bindless_sampled_image_fetch_2d", i32 70} |
121 | | -!70 = !{!"ext_oneapi_bindless_sampled_image_fetch_3d", i32 72} |
122 | | -!71 = !{!"ext_oneapi_queue_profiling_tag", i32 73} |
123 | | -!72 = !{!"ext_oneapi_virtual_mem", i32 74} |
124 | | -!73 = !{!"ext_oneapi_cuda_cluster_group", i32 75} |
125 | | -!74 = !{!"ext_oneapi_image_array", i32 76} |
126 | | -!75 = !{!"ext_oneapi_unique_addressing_per_dim", i32 77} |
127 | | -!76 = !{!"ext_oneapi_bindless_images_sample_1d_usm", i32 78} |
128 | | -!77 = !{!"ext_oneapi_bindless_images_sample_2d_usm", i32 79} |
129 | | -!78 = !{!"ext_oneapi_atomic16", i32 80} |
130 | | -!79 = !{!"ext_oneapi_virtual_functions", i32 81} |
131 | | -!80 = !{!"host", i32 0} |
132 | | -!81 = !{!"int64_base_atomics", i32 7} |
133 | | -!82 = !{!"int64_extended_atomics", i32 8} |
134 | | -!83 = !{!"usm_restricted_shared_allocations", i32 16} |
135 | | -!84 = !{!"clang version 20.0.0git (https://github.com/intel/llvm.git 7384106e6410c6f038b2a9d6367a32b55278c638)"} |
136 | | -!85 = !{i32 563} |
137 | | -!86 = !{i32 -1} |
138 | | -!87 = !{} |
139 | | -!88 = !{!89, !89, i64 0} |
140 | | -!89 = !{!"int", !90, i64 0} |
141 | | -!90 = !{!"omnipotent char", !91, i64 0} |
142 | | -!91 = !{!"Simple C++ TBAA"} |
143 | | -!92 = !{i32 345} |
0 commit comments