@@ -7,8 +7,8 @@ target triple = "amdgcn-amd-amdhsa"
7
7
8
8
; This test checks that the pass works with multiple entry points.
9
9
10
- declare i32 addrspace (5 )* @llvm.amdgcn.implicit.offset ()
11
- ; CHECK-NOT: declare i32 addrspace(5)* @llvm.amdgcn.implicit.offset()
10
+ declare ptr addrspace (5 ) @llvm.amdgcn.implicit.offset ()
11
+ ; CHECK-NOT: declare ptr addrspace(5) @llvm.amdgcn.implicit.offset()
12
12
13
13
; This function is a kernel entry point that does not use global offset. It will
14
14
; not get a clone with a global offset parameter.
@@ -19,93 +19,91 @@ entry:
19
19
}
20
20
21
21
define weak_odr dso_local i64 @_ZTS15common_function () {
22
- ; CHECK: define weak_odr dso_local i64 @_ZTS15common_function(i32 addrspace(5)* %0) {
23
- %1 = tail call i32 addrspace (5 )* @llvm.amdgcn.implicit.offset ()
24
- ; CHECK-NOT: tail call i32 addrspace(5)* @llvm.amdgcn.implicit.offset()
25
- ; CHECK: %2 = getelementptr inbounds i32, i32 addrspace(5)* %0, i64 2
26
- %2 = getelementptr inbounds i32 , i32 addrspace (5 )* %1 , i64 2
27
- %3 = load i32 , i32 addrspace (5 )* %2 , align 4
22
+ ; CHECK: define weak_odr dso_local i64 @_ZTS15common_function(ptr addrspace(5) %0) {
23
+ %1 = tail call ptr addrspace (5 ) @llvm.amdgcn.implicit.offset ()
24
+ ; CHECK-NOT: tail call ptr addrspace(5) @llvm.amdgcn.implicit.offset()
25
+ ; CHECK: %2 = getelementptr inbounds i32, ptr addrspace(5) %0, i64 2
26
+ %2 = getelementptr inbounds i32 , ptr addrspace (5 ) %1 , i64 2
27
+ %3 = load i32 , ptr addrspace (5 ) %2 , align 4
28
28
%4 = zext i32 %3 to i64
29
29
ret i64 %4
30
30
}
31
31
32
32
define weak_odr dso_local i64 @_ZTS14first_function () {
33
- ; CHECK: define weak_odr dso_local i64 @_ZTS14first_function(i32 addrspace(5)* %0) {
33
+ ; CHECK: define weak_odr dso_local i64 @_ZTS14first_function(ptr addrspace(5) %0) {
34
34
%1 = call i64 @_ZTS15common_function ()
35
- ; CHECK: %2 = call i64 @_ZTS15common_function(i32 addrspace(5)* %0)
35
+ ; CHECK: %2 = call i64 @_ZTS15common_function(ptr addrspace(5) %0)
36
36
ret i64 %1
37
37
}
38
38
39
39
; Function Attrs: noinline
40
40
define weak_odr dso_local void @_ZTS12first_kernel () {
41
41
entry:
42
42
; CHECK: %0 = alloca [3 x i32], align 4
43
- ; CHECK: %1 = bitcast [3 x i32] addrspace(5)* %0 to i8 addrspace(5)*
44
- ; CHECK: call void @llvm.memset.p5i8.i64(i8 addrspace(5)* nonnull align 4 dereferenceable(12) %1, i8 0, i64 12, i1 false)
45
- ; CHECK: %2 = getelementptr inbounds [3 x i32], [3 x i32] addrspace(5)* %0, i32 0, i32 0
43
+ ; CHECK: call void @llvm.memset.p5.i64(ptr addrspace(5) nonnull align 4 dereferenceable(12) %0, i8 0, i64 12, i1 false)
44
+ ; CHECK: %1 = getelementptr inbounds [3 x i32], ptr addrspace(5) %0, i32 0, i32 0
46
45
%0 = call i64 @_ZTS14first_function ()
47
- ; CHECK: %3 = call i64 @_ZTS14first_function(i32 addrspace(5)* %2 )
46
+ ; CHECK: %2 = call i64 @_ZTS14first_function(ptr addrspace(5) %1 )
48
47
ret void
49
48
}
50
49
51
- ; CHECK: define weak_odr dso_local void @_ZTS12first_kernel_with_offset([3 x i32]* byref([3 x i32]) %0) {
50
+ ; CHECK: define weak_odr dso_local void @_ZTS12first_kernel_with_offset(ptr byref([3 x i32]) %0) {
52
51
; CHECK: entry:
53
52
; CHECK: %1 = alloca [3 x i32], align 4, addrspace(5)
54
- ; CHECK: %2 = bitcast [3 x i32] addrspace(5)* %1 to i32 addrspace(5)*
55
- ; CHECK: call void @llvm.memcpy.p5i8.p4i8 .i64(i8 addrspace(5)* align 4 %4, i8 addrspace(4)* align 1 %3 , i64 12, i1 false)
56
- ; CHECK: %5 = call i64 @_ZTS14first_function(i32 addrspace(5)* %2 )
53
+ ; CHECK: %2 = addrspacecast ptr %0 to ptr addrspace(4)
54
+ ; CHECK: call void @llvm.memcpy.p5.p4 .i64(ptr addrspace(5) align 4 %1, ptr addrspace(4) align 1 %2 , i64 12, i1 false)
55
+ ; CHECK: %3 = call i64 @_ZTS14first_function(ptr addrspace(5) %1 )
57
56
; CHECK: ret void
58
57
; CHECK: }
59
58
60
59
define weak_odr dso_local i64 @_ZTS15second_function () {
61
- ; CHECK: define weak_odr dso_local i64 @_ZTS15second_function(i32 addrspace(5)* %0) {
60
+ ; CHECK: define weak_odr dso_local i64 @_ZTS15second_function(ptr addrspace(5) %0) {
62
61
%1 = call i64 @_ZTS15common_function ()
63
- ; CHECK: %2 = call i64 @_ZTS15common_function(i32 addrspace(5)* %0)
62
+ ; CHECK: %2 = call i64 @_ZTS15common_function(ptr addrspace(5) %0)
64
63
ret i64 %1
65
64
}
66
65
67
66
; Function Attrs: noinline
68
67
define weak_odr dso_local void @_ZTS13second_kernel () {
69
68
entry:
70
69
; CHECK: %0 = alloca [3 x i32], align 4
71
- ; CHECK: %1 = bitcast [3 x i32] addrspace(5)* %0 to i8 addrspace(5)*
72
- ; CHECK: call void @llvm.memset.p5i8.i64(i8 addrspace(5)* nonnull align 4 dereferenceable(12) %1, i8 0, i64 12, i1 false)
73
- ; CHECK: %2 = getelementptr inbounds [3 x i32], [3 x i32] addrspace(5)* %0, i32 0, i32 0
70
+ ; CHECK: call void @llvm.memset.p5.i64(ptr addrspace(5) nonnull align 4 dereferenceable(12) %0, i8 0, i64 12, i1 false)
71
+ ; CHECK: %1 = getelementptr inbounds [3 x i32], ptr addrspace(5) %0, i32 0, i32 0
74
72
%0 = call i64 @_ZTS15second_function ()
75
- ; CHECK: %3 = call i64 @_ZTS15second_function(i32 addrspace(5)* %2 )
73
+ ; CHECK: %2 = call i64 @_ZTS15second_function(ptr addrspace(5) %1 )
76
74
ret void
77
75
}
78
76
79
- ; CHECK: define weak_odr dso_local void @_ZTS13second_kernel_with_offset([3 x i32]* byref([3 x i32]) %0) {
77
+ ; CHECK: define weak_odr dso_local void @_ZTS13second_kernel_with_offset(ptr byref([3 x i32]) %0) {
80
78
; CHECK: entry:
81
79
; CHECK: %1 = alloca [3 x i32], align 4, addrspace(5)
82
- ; CHECK: %2 = bitcast [3 x i32] addrspace(5)* %1 to i32 addrspace(5)*
83
- ; CHEKC : call void @llvm.memcpy.p5i8.p4i8 .i64(i8 addrspace(5)* align 4 %4, i8 addrspace(4)* align 1 %3 , i64 12, i1 false)
84
- ; CHECK: %5 = call i64 @_ZTS15second_function(i32 addrspace(5)* %2 )
80
+ ; CHECK: %2 = addrspacecast ptr %0 to ptr addrspace(4)
81
+ ; CHECK : call void @llvm.memcpy.p5.p4 .i64(ptr addrspace(5) align 4 %1, ptr addrspace(4) align 1 %2 , i64 12, i1 false)
82
+ ; CHECK: %3 = call i64 @_ZTS15second_function(ptr addrspace(5) %1 )
85
83
; CHECK: ret void
86
84
; CHECK: }
87
85
88
86
; This function doesn't get called by a kernel entry point.
89
87
define weak_odr dso_local i64 @_ZTS15no_entry_point () {
90
- ; CHECK: define weak_odr dso_local i64 @_ZTS15no_entry_point(i32 addrspace(5)* %0) {
91
- %1 = tail call i32 addrspace (5 )* @llvm.amdgcn.implicit.offset ()
92
- ; CHECK-NOT: tail call i32 addrspace(5)* @llvm.amdgcn.implicit.offset()
93
- %2 = getelementptr inbounds i32 , i32 addrspace (5 )* %1 , i64 2
94
- ; CHECK: %2 = getelementptr inbounds i32, i32 addrspace(5)* %0, i64 2
95
- %3 = load i32 , i32 addrspace (5 )* %2 , align 4
88
+ ; CHECK: define weak_odr dso_local i64 @_ZTS15no_entry_point(ptr addrspace(5) %0) {
89
+ %1 = tail call ptr addrspace (5 ) @llvm.amdgcn.implicit.offset ()
90
+ ; CHECK-NOT: tail call ptr addrspace(5) @llvm.amdgcn.implicit.offset()
91
+ %2 = getelementptr inbounds i32 , ptr addrspace (5 ) %1 , i64 2
92
+ ; CHECK: %2 = getelementptr inbounds i32, ptr addrspace(5) %0, i64 2
93
+ %3 = load i32 , ptr addrspace (5 ) %2 , align 4
96
94
%4 = zext i32 %3 to i64
97
95
ret i64 %4
98
96
}
99
97
100
98
!amdgcn.annotations = !{!0 , !1 , !2 , !1 , !3 , !3 , !3 , !3 , !4 , !4 , !3 , !5 , !6 }
101
99
; CHECK: !amdgcn.annotations = !{!0, !1, !2, !1, !3, !3, !3, !3, !4, !4, !3, !5, !6, !7, !8}
102
100
103
- !0 = distinct !{void ()* @_ZTS12first_kernel , !"kernel" , i32 1 }
101
+ !0 = distinct !{ptr @_ZTS12first_kernel , !"kernel" , i32 1 }
104
102
!1 = !{null , !"align" , i32 8 }
105
103
!2 = !{null , !"align" , i32 8 , !"align" , i32 65544 , !"align" , i32 131080 }
106
104
!3 = !{null , !"align" , i32 16 }
107
105
!4 = !{null , !"align" , i32 16 , !"align" , i32 65552 , !"align" , i32 131088 }
108
- !5 = distinct !{void ()* @_ZTS13second_kernel , !"kernel" , i32 1 }
109
- !6 = distinct !{void ()* @_ZTS12third_kernel , !"kernel" , i32 1 }
110
- ; CHECK: !7 = !{void ([3 x i32]*)* @_ZTS13second_kernel_with_offset, !"kernel", i32 1}
111
- ; CHECK: !8 = !{void ([3 x i32]*)* @_ZTS12first_kernel_with_offset, !"kernel", i32 1}
106
+ !5 = distinct !{ptr @_ZTS13second_kernel , !"kernel" , i32 1 }
107
+ !6 = distinct !{ptr @_ZTS12third_kernel , !"kernel" , i32 1 }
108
+ ; CHECK: !7 = !{ptr @_ZTS13second_kernel_with_offset, !"kernel", i32 1}
109
+ ; CHECK: !8 = !{ptr @_ZTS12first_kernel_with_offset, !"kernel", i32 1}
0 commit comments