17
17
; CHECK-SPIRV: Bitcast [[i8Ty]] [[tmp3:[0-9]+]] [[mem]]
18
18
; CHECK-SPIRV: LifetimeStop [[tmp3]] [[size]]
19
19
20
+ ; CHECK-SPIRV: GenericCastToPtr {{[0-9]+}} [[out:[0-9]+]]
21
+ ; CHECK-SPIRV: Variable {{[0-9]+}} [[mem:[0-9]+]] 7
22
+ ; CHECK-SPIRV: Bitcast [[i8Ty:[0-9]+]] [[tmp0:[0-9]+]] [[mem]]
23
+ ; CHECK-SPIRV: LifetimeStart [[tmp0]] [[size:[0-9]+]]
24
+ ; CHECK-SPIRV: Bitcast [[i8Ty]] [[tmp1:[0-9]+]] [[mem]]
25
+ ; CHECK-SPIRV: CopyMemorySized [[tmp1]] {{[0-9]+}} {{[0-9]+}}
26
+ ; CHECK-SPIRV: Bitcast [[i8Ty]] [[tmp2:[0-9]+]] [[mem]]
27
+ ; CHECK-SPIRV: CopyMemorySized [[out]] [[tmp2]] {{[0-9]+}}
28
+ ; CHECK-SPIRV: Bitcast [[i8Ty]] [[tmp3:[0-9]+]] [[mem]]
29
+ ; CHECK-SPIRV: LifetimeStop [[tmp3]] [[size]]
30
+
20
31
; CHECK-LLVM-NOT: llvm.memmove
21
32
33
+ ; CHECK-LLVM-LABEL: @test_struct
22
34
; CHECK-LLVM: [[local:%[0-9]+]] = alloca %struct.SomeStruct
23
35
; CHECK-LLVM: [[tmp1:%[0-9]+]] = bitcast %struct.SomeStruct* [[local]] to [[type:i[0-9]+\*]]
24
36
; CHECK-LLVM: call void @llvm.lifetime.start.p0i8({{i[0-9]+}} {{-?[0-9]+}}, [[type]] [[tmp1]])
25
37
; CHECK-LLVM: [[tmp2:%[0-9]+]] = bitcast %struct.SomeStruct* [[local]] to [[type]]
26
- ; CHECK-LLVM: call void @llvm.memcpy
27
- ; CHECK-LLVM: ([[type]] align 64 [[tmp2]],
28
- ; CHECK-LLVM: {{i[0-9]+}} [[size:[0-9]+]]
38
+ ; CHECK-LLVM: call void @llvm.memcpy.p0i8.p1i8.i32
39
+ ; CHECK-LLVM-SAME : ([[type]] align 64 [[tmp2]],
40
+ ; CHECK-LLVM-SAME : {{i[0-9]+}} [[size:[0-9]+]]
29
41
; CHECK-LLVM: [[tmp3:%[0-9]+]] = bitcast %struct.SomeStruct* [[local]] to [[type]]
30
- ; CHECK-LLVM: call void @llvm.memcpy
31
- ; CHECK-LLVM: , [[type]] align 64 [[tmp3]], {{i[0-9]+}} [[size]]
42
+ ; CHECK-LLVM: call void @llvm.memcpy.p1i8.p0i8.i32
43
+ ; CHECK-LLVM-SAME: , [[type]] align 64 [[tmp3]], {{i[0-9]+}} [[size]]
44
+ ; CHECK-LLVM: [[tmp4:%[0-9]+]] = bitcast %struct.SomeStruct* [[local]] to [[type]]
45
+ ; CHECK-LLVM: call void @llvm.lifetime.end.p0i8({{i[0-9]+}} {{-?[0-9]+}}, [[type]] [[tmp4]])
46
+
47
+ ; CHECK-LLVM-LABEL: @copy_struct
48
+ ; CHECK-LLVM: [[out:%[0-9]+]] = addrspacecast i8 addrspace(4)* %2 to i8 addrspace(1)*
49
+ ; CHECK-LLVM: [[local:%[0-9]+]] = alloca %struct.SomeStruct
50
+ ; CHECK-LLVM: [[tmp1:%[0-9]+]] = bitcast %struct.SomeStruct* [[local]] to [[type:i[0-9]+\*]]
51
+ ; CHECK-LLVM: call void @llvm.lifetime.start.p0i8({{i[0-9]+}} {{-?[0-9]+}}, [[type]] [[tmp1]])
52
+ ; CHECK-LLVM: [[tmp2:%[0-9]+]] = bitcast %struct.SomeStruct* [[local]] to [[type]]
53
+ ; CHECK-LLVM: call void @llvm.memcpy.p0i8.p1i8.i32
54
+ ; CHECK-LLVM-SAME: ([[type]] align 64 [[tmp2]],
55
+ ; CHECK-LLVM-SAME: {{i[0-9]+}} [[size:[0-9]+]]
56
+ ; CHECK-LLVM: [[tmp3:%[0-9]+]] = bitcast %struct.SomeStruct* [[local]] to [[type]]
57
+ ; CHECK-LLVM: call void @llvm.memcpy.p1i8.p0i8.i32
58
+ ; CHECK-LLVM-SAME: align 64 [[out]]
59
+ ; CHECK-LLVM-SAME: , [[type]] align 64 [[tmp3]], {{i[0-9]+}} [[size]]
32
60
; CHECK-LLVM: [[tmp4:%[0-9]+]] = bitcast %struct.SomeStruct* [[local]] to [[type]]
33
61
; CHECK-LLVM: call void @llvm.lifetime.end.p0i8({{i[0-9]+}} {{-?[0-9]+}}, [[type]] [[tmp4]])
34
62
@@ -45,6 +73,14 @@ define spir_kernel void @test_struct(%struct.SomeStruct addrspace(1)* nocapture
45
73
ret void
46
74
}
47
75
76
+ define spir_func void @copy_struct (%struct.SomeStruct addrspace (1 )* nocapture readonly %in , %struct.SomeStruct addrspace (4 )* nocapture %out ) {
77
+ %1 = bitcast %struct.SomeStruct addrspace (1 )* %in to i8 addrspace (1 )*
78
+ %2 = bitcast %struct.SomeStruct addrspace (4 )* %out to i8 addrspace (4 )*
79
+ %3 = addrspacecast i8 addrspace (4 )* %2 to i8 addrspace (1 )*
80
+ call void @llvm.memmove.p1i8.p1i8.i32 (i8 addrspace (1 )* align 64 %3 , i8 addrspace (1 )* align 64 %1 , i32 68 , i1 false )
81
+ ret void
82
+ }
83
+
48
84
; Function Attrs: nounwind
49
85
declare void @llvm.memmove.p1i8.p1i8.i32 (i8 addrspace (1 )* nocapture , i8 addrspace (1 )* nocapture readonly , i32 , i1 ) #1
50
86
0 commit comments