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