1+ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
12;=========================== begin_copyright_notice ============================
23;
3- ; Copyright (C) 2022 Intel Corporation
4+ ; Copyright (C) 2024 Intel Corporation
45;
56; SPDX-License-Identifier: MIT
67;
78;============================ end_copyright_notice =============================
89
9- ; RUN: igc_opt %s -S -o - -opt-reduce-pass | FileCheck %s
10- ; UNSUPPORTED: khronos-translator
10+ ; RUN: igc_opt %s --opaque-pointers - S -o - -opt-reduce-pass | FileCheck %s
11+ ; REQUIRES: llvm-14-plus
1112
12- declare spir_func <3 x i64 > @__builtin_spirv_BuiltInGlobalSize ()
13- declare spir_func <3 x i64 > @__builtin_spirv_BuiltInGlobalOffset ()
14- declare spir_func <3 x i64 > @__builtin_spirv_BuiltInGlobalInvocationId ()
15- declare spir_func i32 @__builtin_spirv_OpGroupIMulKHR_i32_i32_i32 (i32 , i32 , i32 )
13+ declare spir_func <3 x i64 > @__spirv_BuiltInGlobalSize ()
14+ declare spir_func <3 x i64 > @__spirv_BuiltInGlobalOffset ()
15+ declare spir_func <3 x i64 > @__spirv_BuiltInGlobalInvocationId ()
16+ declare spir_func i32 @__spirv_GroupIMulKHR_i32_i32_i32 (i32 , i32 , i32 )
1617
1718define spir_kernel void @kernel1 (i32 addrspace (1 )* %arg0 , i32 addrspace (1 )* %arg1 ) {
18- %size = call spir_func <3 x i64 > @__builtin_spirv_BuiltInGlobalSize ()
19+ %size = call spir_func <3 x i64 > @__spirv_BuiltInGlobalSize ()
1920 %size1 = extractelement <3 x i64 > %size , i32 1
2021 %size0 = extractelement <3 x i64 > %size , i32 0
21- %id = call spir_func <3 x i64 > @__builtin_spirv_BuiltInGlobalInvocationId ()
22+ %id = call spir_func <3 x i64 > @__spirv_BuiltInGlobalInvocationId ()
2223 %id2 = extractelement <3 x i64 > %id , i32 2
2324 %id1 = extractelement <3 x i64 > %id , i32 1
2425 %id0 = extractelement <3 x i64 > %id , i32 0
25- %offset = call spir_func <3 x i64 > @__builtin_spirv_BuiltInGlobalOffset ()
26+ %offset = call spir_func <3 x i64 > @__spirv_BuiltInGlobalOffset ()
2627 %offset2 = extractelement <3 x i64 > %offset , i32 2
2728 %offset1 = extractelement <3 x i64 > %offset , i32 1
2829 %offset0 = extractelement <3 x i64 > %offset , i32 0
@@ -36,12 +37,12 @@ define spir_kernel void @kernel1(i32 addrspace(1)* %arg0, i32 addrspace(1)* %arg
3637 %gep0 = getelementptr inbounds i32 , i32 addrspace (1 )* %arg0 , i64 %add1
3738 %addr0 = addrspacecast i32 addrspace (1 )* %gep0 to i32 addrspace (4 )*
3839 %ld = load i32 , i32 addrspace (4 )* %addr0 , align 4
39- %red = call spir_func i32 @__builtin_spirv_OpGroupIMulKHR_i32_i32_i32 (i32 2 , i32 0 , i32 %ld )
40+ %red = call spir_func i32 @__spirv_GroupIMulKHR_i32_i32_i32 (i32 2 , i32 0 , i32 %ld )
4041 %cnd = icmp eq i64 %add1 , 0
4142 %tof = sitofp i32 %red to float
4243 ; This pass optimized only reduce instruction
4344 ;
44- ; CHECK: [[LD:%.*]] = load i32, i32 addrspace(4)* {{.*}}, align 4
45+ ; CHECK: [[LD:%.*]] = load i32, ptr addrspace(4) {{.*}}, align 4
4546 ; CHECK: [[TMP1:%.*]] = call spir_func i32 @__builtin_IB_WorkGroupReduce_WI0_IMulKHR_i32(i32 [[LD]])
4647 ; CHECK: [[TOF:%.*]] = sitofp i32 [[TMP1]] to float
4748 %fadd0 = fadd float %tof , 1 .000000e+02
@@ -54,15 +55,15 @@ define spir_kernel void @kernel1(i32 addrspace(1)* %arg0, i32 addrspace(1)* %arg
5455}
5556
5657
57- declare spir_func i32 @__builtin_spirv_OpGroupIAdd_i32_i32_i32 (i32 , i32 , i32 )
58- declare spir_func <3 x i64 > @__builtin_spirv_BuiltInLocalInvocationId ()
59- declare spir_func <3 x i64 > @__builtin_spirv_BuiltInWorkgroupSize ()
58+ declare spir_func i32 @__spirv_GroupIAdd_i32_i32_i32 (i32 , i32 , i32 )
59+ declare spir_func <3 x i64 > @__spirv_BuiltInLocalInvocationId ()
60+ declare spir_func <3 x i64 > @__spirv_BuiltInWorkgroupSize ()
6061
6162define spir_kernel void @kernel2 (i32 addrspace (1 )* %arg0 , i32 addrspace (1 )* %arg1 ) {
62- %size = call spir_func <3 x i64 > @__builtin_spirv_BuiltInWorkgroupSize ()
63+ %size = call spir_func <3 x i64 > @__spirv_BuiltInWorkgroupSize ()
6364 %size1 = extractelement <3 x i64 > %size , i32 1
6465 %size0 = extractelement <3 x i64 > %size , i32 0
65- %lid = call spir_func <3 x i64 > @__builtin_spirv_BuiltInLocalInvocationId ()
66+ %lid = call spir_func <3 x i64 > @__spirv_BuiltInLocalInvocationId ()
6667 %lid2 = extractelement <3 x i64 > %lid , i32 2
6768 %lid1 = extractelement <3 x i64 > %lid , i32 1
6869 %lid0 = extractelement <3 x i64 > %lid , i32 0
@@ -73,18 +74,17 @@ define spir_kernel void @kernel2(i32 addrspace(1)* %arg0, i32 addrspace(1)* %arg
7374 %gep0 = getelementptr inbounds i32 , i32 addrspace (1 )* %arg0 , i64 %add1
7475 %addr0 = addrspacecast i32 addrspace (1 )* %gep0 to i32 addrspace (4 )*
7576 %ld0 = load i32 , i32 addrspace (4 )* %addr0 , align 4
76- %red = call spir_func i32 @__builtin_spirv_OpGroupIAdd_i32_i32_i32 (i32 2 , i32 0 , i32 %ld0 )
77+ %red = call spir_func i32 @__spirv_GroupIAdd_i32_i32_i32 (i32 2 , i32 0 , i32 %ld0 )
7778 %cnd = icmp eq i64 %add1 , 0
7879 %add2 = add nsw i32 %red , 100
7980 ; This pass optimized only reduce instruction
8081 ;
81- ; CHECK: [[LD0:%.*]] = load i32, i32 addrspace(4)* {{.*}}, align
82+ ; CHECK: [[LD0:%.*]] = load i32, ptr addrspace(4) {{.*}}, align 4
8283 ; CHECK: [[TMP1:%.*]] = call spir_func i32 @__builtin_IB_WorkGroupReduce_WI0_IAdd_i32(i32 [[LD0]])
83- ; CHECK: [[ADD2:%.*]] = add nsw i32 [[TMP1:%.* ]], 100
84+ ; CHECK: [[ADD2:%.*]] = add nsw i32 [[TMP1]], 100
8485 %sel = select i1 %cnd , i32 %add2 , i32 0
8586 %gep1 = getelementptr inbounds i32 , i32 addrspace (1 )* %arg1 , i64 %add1
8687 %addr1 = addrspacecast i32 addrspace (1 )* %gep1 to i32 addrspace (4 )*
8788 store i32 %sel , i32 addrspace (4 )* %addr1 , align 4
8889 ret void
8990}
90-
0 commit comments