@@ -66,7 +66,9 @@ kernel void ker(global Mat3X3 *in, global Mat4X4 *out) {
66
66
}
67
67
68
68
// X86-LABEL: define{{.*}} void @foo_large(ptr noalias sret(%struct.Mat64X64) align 4 %agg.result, ptr noundef byval(%struct.Mat32X32) align 4 %in)
69
- // AMDGCN-LABEL: define{{.*}} void @foo_large(ptr addrspace(5) noalias sret(%struct.Mat64X64) align 4 %agg.result, ptr addrspace(5) noundef byval(%struct.Mat32X32) align 4 %in)
69
+ // AMDGCN-LABEL: define{{.*}} void @foo_large(ptr addrspace(5) noalias sret(%struct.Mat64X64) align 4 %agg.result, ptr addrspace(5) noundef byref(%struct.Mat32X32) align 4 %{{.*}}
70
+ // AMDGCN: %in = alloca %struct.Mat32X32, align 4, addrspace(5)
71
+ // AMDGCN-NEXT: call void @llvm.memcpy.p5.p5.i64(ptr addrspace(5) align 4 %in, ptr addrspace(5) align 4 %{{.*}}, i64 4096, i1 false)
70
72
Mat64X64 __attribute__((noinline )) foo_large (Mat32X32 in ) {
71
73
Mat64X64 out ;
72
74
return out ;
@@ -88,7 +90,9 @@ void FuncOneMember(struct StructOneMember u) {
88
90
u .x = (int2 )(0 , 0 );
89
91
}
90
92
91
- // AMDGCN-LABEL: define{{.*}} void @FuncOneLargeMember(ptr addrspace(5) noundef byval(%struct.LargeStructOneMember) align 8 %u)
93
+ // AMDGCN-LABEL: define{{.*}} void @FuncOneLargeMember(ptr addrspace(5) noundef byref(%struct.LargeStructOneMember) align 8 %{{.*}}
94
+ // AMDGCN: %u = alloca %struct.LargeStructOneMember, align 8, addrspace(5)
95
+ // AMDGCN: call void @llvm.memcpy.p5.p5.i64(ptr addrspace(5) align 8 %u, ptr addrspace(5) align 8 %{{.*}}, i64 800, i1 false)
92
96
// AMDGCN-NOT: addrspacecast
93
97
// AMDGCN: store <2 x i32> %{{.*}}, ptr addrspace(5)
94
98
void FuncOneLargeMember (struct LargeStructOneMember u ) {
@@ -98,7 +102,7 @@ void FuncOneLargeMember(struct LargeStructOneMember u) {
98
102
// AMDGCN20-LABEL: define{{.*}} void @test_indirect_arg_globl()
99
103
// AMDGCN20: %[[byval_temp:.*]] = alloca %struct.LargeStructOneMember, align 8, addrspace(5)
100
104
// AMDGCN20: call void @llvm.memcpy.p5.p1.i64(ptr addrspace(5) align 8 %[[byval_temp]], ptr addrspace(1) align 8 @g_s, i64 800, i1 false)
101
- // AMDGCN20: call void @FuncOneLargeMember(ptr addrspace(5) noundef byval (%struct.LargeStructOneMember) align 8 %[[byval_temp]])
105
+ // AMDGCN20: call void @FuncOneLargeMember(ptr addrspace(5) noundef byref (%struct.LargeStructOneMember) align 8 %[[byval_temp]])
102
106
#if (__OPENCL_C_VERSION__ == 200 ) || (__OPENCL_C_VERSION__ >= 300 && defined(__opencl_c_program_scope_global_variables ))
103
107
void test_indirect_arg_globl (void ) {
104
108
FuncOneLargeMember (g_s );
@@ -108,7 +112,7 @@ void test_indirect_arg_globl(void) {
108
112
// AMDGCN-LABEL: define{{.*}} amdgpu_kernel void @test_indirect_arg_local()
109
113
// AMDGCN: %[[byval_temp:.*]] = alloca %struct.LargeStructOneMember, align 8, addrspace(5)
110
114
// AMDGCN: call void @llvm.memcpy.p5.p3.i64(ptr addrspace(5) align 8 %[[byval_temp]], ptr addrspace(3) align 8 @test_indirect_arg_local.l_s, i64 800, i1 false)
111
- // AMDGCN: call void @FuncOneLargeMember(ptr addrspace(5) noundef byval (%struct.LargeStructOneMember) align 8 %[[byval_temp]])
115
+ // AMDGCN: call void @FuncOneLargeMember(ptr addrspace(5) noundef byref (%struct.LargeStructOneMember) align 8 %[[byval_temp]])
112
116
kernel void test_indirect_arg_local (void ) {
113
117
local struct LargeStructOneMember l_s ;
114
118
FuncOneLargeMember (l_s );
@@ -117,7 +121,7 @@ kernel void test_indirect_arg_local(void) {
117
121
// AMDGCN-LABEL: define{{.*}} void @test_indirect_arg_private()
118
122
// AMDGCN: %[[p_s:.*]] = alloca %struct.LargeStructOneMember, align 8, addrspace(5)
119
123
// AMDGCN-NOT: @llvm.memcpy
120
- // AMDGCN-NEXT: call void @FuncOneLargeMember(ptr addrspace(5) noundef byval (%struct.LargeStructOneMember) align 8 %[[p_s]])
124
+ // AMDGCN-NEXT: call void @FuncOneLargeMember(ptr addrspace(5) noundef byref (%struct.LargeStructOneMember) align 8 %[[p_s]])
121
125
void test_indirect_arg_private (void ) {
122
126
struct LargeStructOneMember p_s ;
123
127
FuncOneLargeMember (p_s );
@@ -142,7 +146,7 @@ kernel void KernelOneMemberSpir(global struct StructOneMember* u) {
142
146
// AMDGCN-LABEL: define{{.*}} amdgpu_kernel void @KernelLargeOneMember(
143
147
// AMDGCN: %[[U:.*]] = alloca %struct.LargeStructOneMember, align 8, addrspace(5)
144
148
// AMDGCN: store %struct.LargeStructOneMember %u.coerce, ptr addrspace(5) %[[U]], align 8
145
- // AMDGCN: call void @FuncOneLargeMember(ptr addrspace(5) noundef byval (%struct.LargeStructOneMember) align 8 %[[U]])
149
+ // AMDGCN: call void @FuncOneLargeMember(ptr addrspace(5) noundef byref (%struct.LargeStructOneMember) align 8 %[[U]])
146
150
kernel void KernelLargeOneMember (struct LargeStructOneMember u ) {
147
151
FuncOneLargeMember (u );
148
152
}
@@ -152,7 +156,10 @@ void FuncTwoMember(struct StructTwoMember u) {
152
156
u .y = (int2 )(0 , 0 );
153
157
}
154
158
155
- // AMDGCN-LABEL: define{{.*}} void @FuncLargeTwoMember(ptr addrspace(5) noundef byval(%struct.LargeStructTwoMember) align 8 %u)
159
+ // AMDGCN-LABEL: define dso_local void @FuncLargeTwoMember
160
+ // AMDGCN-SAME: (ptr addrspace(5) noundef byref([[STRUCT_LARGESTRUCTTWOMEMBER:%.*]]) align 8 [[TMP0:%.*]])
161
+ // AMDGCN: %[[U:.*]] = alloca %struct.LargeStructTwoMember, align 8, addrspace(5)
162
+ // AMDGCN: call void @llvm.memcpy.p5.p5.i64(ptr addrspace(5) align 8 %[[U]], ptr addrspace(5) align 8 [[TMP0]], i64 480, i1 false)
156
163
void FuncLargeTwoMember (struct LargeStructTwoMember u ) {
157
164
u .y [0 ] = (int2 )(0 , 0 );
158
165
}
@@ -171,7 +178,7 @@ kernel void KernelTwoMember(struct StructTwoMember u) {
171
178
// AMDGCN-SAME: (%struct.LargeStructTwoMember %[[u_coerce:.*]])
172
179
// AMDGCN: %[[u:.*]] = alloca %struct.LargeStructTwoMember, align 8, addrspace(5)
173
180
// AMDGCN: store %struct.LargeStructTwoMember %[[u_coerce]], ptr addrspace(5) %[[u]]
174
- // AMDGCN: call void @FuncLargeTwoMember(ptr addrspace(5) noundef byval (%struct.LargeStructTwoMember) align 8 %[[u]])
181
+ // AMDGCN: call void @FuncLargeTwoMember(ptr addrspace(5) noundef byref (%struct.LargeStructTwoMember) align 8 %[[u]])
175
182
kernel void KernelLargeTwoMember (struct LargeStructTwoMember u ) {
176
183
FuncLargeTwoMember (u );
177
184
}
0 commit comments