6
6
; RUN: spirv-val %t.spv
7
7
; RUN: llvm-dis < %t.rev.bc | FileCheck %s --check-prefix=CHECK-LLVM
8
8
9
+ ; CHECK-SPIRV: Decorate [[#NonConstMemset:]] LinkageAttributes "spirv.llvm_memset_p3i8_i32"
9
10
; CHECK-SPIRV: TypeInt [[Int8:[0-9]+]] 8 0
10
11
; CHECK-SPIRV: Constant {{[0-9]+}} [[Lenmemset21:[0-9]+]] 4
11
12
; CHECK-SPIRV: Constant {{[0-9]+}} [[Lenmemset0:[0-9]+]] 12
19
20
; CHECK-SPIRV: Variable {{[0-9]+}} [[Val:[0-9]+]] 0 [[Init]]
20
21
; CHECK-SPIRV: 7 ConstantComposite [[Int8x4]] [[InitComp:[0-9]+]] [[Const21]] [[Const21]] [[Const21]] [[Const21]]
21
22
; CHECK-SPIRV: Variable {{[0-9]+}} [[ValComp:[0-9]+]] 0 [[InitComp]]
23
+ ; CHECK-SPIRV: ConstantFalse [[#]] [[#False:]]
22
24
23
25
; CHECK-SPIRV: Bitcast [[Int8Ptr]] [[Target:[0-9]+]] {{[0-9]+}}
24
26
; CHECK-SPIRV: Bitcast [[Int8PtrConst]] [[Source:[0-9]+]] [[Val]]
27
29
; CHECK-SPIRV: Bitcast [[Int8PtrConst]] [[SourceComp:[0-9]+]] [[ValComp]]
28
30
; CHECK-SPIRV: CopyMemorySized {{[0-9]+}} [[SourceComp]] [[Lenmemset21]] 2 4
29
31
32
+ ; CHECK-SPIRV: FunctionCall [[#]] [[#]] [[#NonConstMemset]] [[#]] [[#]] [[#]] [[#False]]
33
+
34
+ ; CHECK-SPIRV: Function [[#]] [[#NonConstMemset]]
35
+ ; CHECK-SPIRV: FunctionParameter [[#]] [[#Dest:]]
36
+ ; CHECK-SPIRV: FunctionParameter [[#]] [[#Value:]]
37
+ ; CHECK-SPIRV: FunctionParameter [[#]] [[#Len:]]
38
+ ; CHECK-SPIRV: FunctionParameter [[#]] [[#Volatile:]]
39
+
40
+ ; CHECK-SPIRV: Label [[#Entry:]]
41
+ ; CHECK-SPIRV: IEqual [[#]] [[#IsZeroLen:]] [[#Zero:]] [[#Len]]
42
+ ; CHECK-SPIRV: BranchConditional [[#IsZeroLen]] [[#End:]] [[#WhileBody:]]
43
+
44
+ ; CHECK-SPIRV: Label [[#WhileBody]]
45
+ ; CHECK-SPIRV: Phi [[#]] [[#Offset:]] [[#Zero]] [[#Entry]] [[#OffsetInc:]] [[#WhileBody]]
46
+ ; CHECK-SPIRV: InBoundsPtrAccessChain [[#]] [[#Ptr:]] [[#Dest]] [[#Offset]]
47
+ ; CHECK-SPIRV: Store [[#Ptr]] [[#Value]] 2 1
48
+ ; CHECK-SPIRV: IAdd [[#]] [[#OffsetInc]] [[#Offset]] [[#One:]]
49
+ ; CHECK-SPIRV: ULessThan [[#]] [[#NotEnd:]] [[#OffsetInc]] [[#Len]]
50
+ ; CHECK-SPIRV: BranchConditional [[#NotEnd]] [[#WhileBody]] [[#End]]
51
+
52
+ ; CHECK-SPIRV: Label [[#End]]
53
+ ; CHECK-SPIRV: Return
54
+
55
+ ; CHECK-SPIRV: FunctionEnd
56
+
30
57
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-n8:16:32:64"
31
58
target triple = "spir"
32
59
@@ -36,14 +63,34 @@ target triple = "spir"
36
63
; CHECK-LLVM: internal unnamed_addr addrspace(2) constant [4 x i8] c"\15\15\15\15"
37
64
38
65
; Function Attrs: nounwind
39
- define spir_func void @_Z5foo11v (%struct.S1 addrspace (4 )* noalias nocapture sret %agg.result ) #0 {
66
+ define spir_func void @_Z5foo11v (%struct.S1 addrspace (4 )* noalias nocapture sret %agg.result , i32 %s1 , i64 %s2 , i8 %v ) #0 {
40
67
%x = alloca [4 x i8 ]
41
68
%x.bc = bitcast [4 x i8 ]* %x to i8*
42
69
%1 = bitcast %struct.S1 addrspace (4 )* %agg.result to i8 addrspace (4 )*
43
70
tail call void @llvm.memset.p4i8.i32 (i8 addrspace (4 )* align 4 %1 , i8 0 , i32 12 , i1 false )
44
71
; CHECK-LLVM: call void @llvm.memset.p4i8.i32(i8 addrspace(4)* align 4 %1, i8 0, i32 12, i1 false)
45
72
tail call void @llvm.memset.p0i8.i32 (i8* align 4 %x.bc , i8 21 , i32 4 , i1 false )
46
73
; CHECK-LLVM: call void @llvm.memcpy.p0i8.p2i8.i32(i8* align 4 %x.bc, i8 addrspace(2)* align 4 %3, i32 4, i1 false)
74
+
75
+ ; non-const value
76
+ tail call void @llvm.memset.p0i8.i32 (i8* align 4 %x.bc , i8 %v , i32 3 , i1 false )
77
+ ; CHECK-LLVM: call void @llvm.memset.p0i8.i32(i8* %x.bc, i8 %v, i32 3, i1 false)
78
+
79
+ ; non-const value and size
80
+ tail call void @llvm.memset.p0i8.i32 (i8* align 4 %x.bc , i8 %v , i32 %s1 , i1 false )
81
+ ; CHECK-LLVM: call void @llvm.memset.p0i8.i32(i8* %x.bc, i8 %v, i32 %s1, i1 false)
82
+
83
+ ; Address spaces, non-const value and size
84
+ %a = addrspacecast i8 addrspace (4 )* %1 to i8 addrspace (3 )*
85
+ tail call void @llvm.memset.p3i8.i32 (i8 addrspace (3 )* align 4 %a , i8 %v , i32 %s1 , i1 false )
86
+ ; CHECK-LLVM: call void @llvm.memset.p3i8.i32(i8 addrspace(3)* %a, i8 %v, i32 %s1, i1 false)
87
+ %b = addrspacecast i8 addrspace (4 )* %1 to i8 addrspace (1 )*
88
+ tail call void @llvm.memset.p1i8.i64 (i8 addrspace (1 )* align 4 %b , i8 %v , i64 %s2 , i1 false )
89
+ ; CHECK-LLVM: call void @llvm.memset.p1i8.i64(i8 addrspace(1)* %b, i8 %v, i64 %s2, i1 false)
90
+
91
+ ; Volatile
92
+ tail call void @llvm.memset.p1i8.i64 (i8 addrspace (1 )* align 4 %b , i8 %v , i64 %s2 , i1 true )
93
+ ; CHECK-LLVM: call void @llvm.memset.p1i8.i64(i8 addrspace(1)* %b, i8 %v, i64 %s2, i1 true)
47
94
ret void
48
95
}
49
96
@@ -53,6 +100,12 @@ declare void @llvm.memset.p4i8.i32(i8 addrspace(4)* nocapture, i8, i32, i1) #1
53
100
; Function Attrs: nounwind
54
101
declare void @llvm.memset.p0i8.i32 (i8* nocapture , i8 , i32 , i1 ) #1
55
102
103
+ ; Function Attrs: nounwind
104
+ declare void @llvm.memset.p3i8.i32 (i8 addrspace (3 )*, i8 , i32 , i1 ) #1
105
+
106
+ ; Function Attrs: nounwind
107
+ declare void @llvm.memset.p1i8.i64 (i8 addrspace (1 )*, i8 , i64 , i1 ) #1
108
+
56
109
attributes #0 = { nounwind "less-precise-fpmad" ="false" "no-frame-pointer-elim" ="false" "no-infs-fp-math" ="false" "no-nans-fp-math" ="false" "no-realign-stack" "stack-protector-buffer-size" ="8" "unsafe-fp-math" ="false" "use-soft-float" ="false" }
57
110
attributes #1 = { nounwind }
58
111
0 commit comments