1+ ;=========================== begin_copyright_notice ============================
2+ ;
3+ ; Copyright (C) 2025 Intel Corporation
4+ ;
5+ ; SPDX-License-Identifier: MIT
6+ ;
7+ ;============================ end_copyright_notice =============================
8+ ;
9+ ; RUN: igc_opt --typed-pointers --igc-constant-coalescing -dce -S < %s | FileCheck %s
10+
11+
12+ define void @test_sext_zext (i32 addrspace (2 )* %ca , i16 %offset ) {
13+ ; CHECK-LABEL: @test_sext_zext
14+ ; CHECK: [[S1:%.*]] = sext i16 %offset to i32
15+ ; CHECK: [[Z1:%.*]] = zext i16 %offset to i32
16+ ; CHECK: [[Z2:%.*]] = add i32 [[Z1]], 4
17+ ; CHECK: [[PTR:%.*]] = ptrtoint i32 addrspace(2)* %ca to i32
18+ ; CHECK: [[I1:%.*]] = add i32 [[PTR]], [[S1]]
19+ ; CHECK: [[I2:%.*]] = add i32 [[PTR]], [[Z2]]
20+ ; CHECK: [[PTR1:%.*]] = inttoptr i32 {{%.*}} to <1 x i32> addrspace(2)*
21+ ; CHECK: {{%.*}} = load <1 x i32>, <1 x i32> addrspace(2)* [[PTR1]], align 4
22+ ; CHECK: [[PTR2:%.*]] = inttoptr i32 {{%.*}} to <1 x i32> addrspace(2)*
23+ ; CHECK: {{%.*}} = load <1 x i32>, <1 x i32> addrspace(2)* [[PTR2]], align 4
24+ %s1 = sext i16 %offset to i32
25+ %z1 = zext i16 %offset to i32
26+ %z2 = add i32 %z1 , 4
27+ %p1 = ptrtoint i32 addrspace (2 )* %ca to i32
28+ %i1 = add i32 %p1 , %s1
29+ %i2 = add i32 %p1 , %z2
30+ %a1 = inttoptr i32 %i1 to i32 addrspace (2 )*
31+ %a2 = inttoptr i32 %i2 to i32 addrspace (2 )*
32+ %1 = load i32 , i32 addrspace (2 )* %a2 , align 4
33+ %2 = load i32 , i32 addrspace (2 )* %a1 , align 4
34+ call void @use.i32 (i32 %1 )
35+ call void @use.i32 (i32 %2 )
36+ ret void
37+ }
38+
39+ define void @test_zext_coalescing (i32 addrspace (2 )* %ca , i16 %offset ) {
40+ ; CHECK-LABEL: @test_zext_coalescing
41+ ; CHECK: {{%.*}} = load <2 x i32>, <2 x i32> addrspace(2)* {{%.*}}, align 4
42+ ; CHECK-NOT: load
43+ %z1 = zext i16 %offset to i32
44+ %z2 = add i32 %z1 , 4
45+ %p1 = ptrtoint i32 addrspace (2 )* %ca to i32
46+ %i1 = add i32 %p1 , %z1
47+ %i2 = add i32 %p1 , %z2
48+ %a1 = inttoptr i32 %i1 to i32 addrspace (2 )*
49+ %a2 = inttoptr i32 %i2 to i32 addrspace (2 )*
50+ %1 = load i32 , i32 addrspace (2 )* %a2 , align 4
51+ %2 = load i32 , i32 addrspace (2 )* %a1 , align 4
52+ call void @use.i32 (i32 %1 )
53+ call void @use.i32 (i32 %2 )
54+ ret void
55+ }
56+
57+ declare void @use.i32 (i32 )
58+
59+ !igc.functions = !{!0 , !4 }
60+ !0 = !{void (i32 addrspace (2 )*, i16 )* @test_sext_zext , !1 }
61+ !1 = !{!2 , !3 }
62+ !2 = !{!"function_type" , i32 0 }
63+ !3 = !{!"implicit_arg_desc" }
64+ !4 = !{void (i32 addrspace (2 )*, i16 )* @test_zext_coalescing , !1 }
0 commit comments