3
3
; RUN: llc -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-64
4
4
; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %}
5
5
6
- ; CHECK-64-DAG: %[[#i64:]] = OpTypeInt 64 0
7
-
6
+ ; CHECK-DAG: %[[#i64:]] = OpTypeInt 64 0
8
7
; CHECK-DAG: %[[#i8:]] = OpTypeInt 8 0
9
8
; CHECK-DAG: %[[#i32:]] = OpTypeInt 32 0
10
9
; CHECK-DAG: %[[#one:]] = OpConstant %[[#i32]] 1
14
13
; CHECK-DAG: %[[#test_arr_init:]] = OpConstantComposite %[[#i32x3]] %[[#one]] %[[#two]] %[[#three]]
15
14
; CHECK-DAG: %[[#szconst1024:]] = OpConstant %[[#i32]] 1024
16
15
; CHECK-DAG: %[[#szconst42:]] = OpConstant %[[#i8]] 42
16
+ ; CHECK-DAG: %[[#szconst123:]] = OpConstant %[[#i64]] 123
17
17
; CHECK-DAG: %[[#const_i32x3_ptr:]] = OpTypePointer UniformConstant %[[#i32x3]]
18
18
; CHECK-DAG: %[[#test_arr:]] = OpVariable %[[#const_i32x3_ptr]] UniformConstant %[[#test_arr_init]]
19
19
; CHECK-DAG: %[[#i32x3_ptr:]] = OpTypePointer Function %[[#i32x3]]
20
20
; CHECK: %[[#arr:]] = OpVariable %[[#i32x3_ptr]] Function
21
21
22
22
; CHECK-32: OpCopyMemorySized %[[#arr]] %[[#test_arr]] %[[#szconst1024]]
23
- ; CHECK-64: %[[#szconstext1024:]] = OpUConvert %[[#i64:]] %[[#szconst1024:]]
24
- ; CHECK-64: OpCopyMemorySized %[[#arr]] %[[#test_arr]] %[[#szconstext1024]]
25
-
26
23
; CHECK-32: %[[#szconstext42:]] = OpUConvert %[[#i32:]] %[[#szconst42:]]
27
24
; CHECK-32: OpCopyMemorySized %[[#arr]] %[[#test_arr]] %[[#szconstext42]]
25
+ ; CHECK-32: OpCopyMemorySized %[[#arr]] %[[#test_arr]] %[[#szconst123]]
26
+
27
+ ; If/when Backend stoped rewrite actual reg size of i8/i16/i32/i64 with i32,
28
+ ; i32 = G_TRUNC i64 would appear for the 32-bit target, switching the following
29
+ ; TODO patterns instead of the last line above.
30
+ ; TODO: %[[#szconstext123:]] = OpUConvert %[[#i32:]] %[[#szconst123:]]
31
+ ; TODO: OpCopyMemorySized %[[#arr]] %[[#test_arr]] %[[#szconst123]]
32
+
33
+ ; CHECK-64: %[[#szconstext1024:]] = OpUConvert %[[#i64:]] %[[#szconst1024:]]
34
+ ; CHECK-64: OpCopyMemorySized %[[#arr]] %[[#test_arr]] %[[#szconstext1024]]
28
35
; CHECK-64: %[[#szconstext42:]] = OpUConvert %[[#i64:]] %[[#szconst42:]]
29
36
; CHECK-64: OpCopyMemorySized %[[#arr]] %[[#test_arr]] %[[#szconstext42]]
37
+ ; CHECK-64: OpCopyMemorySized %[[#arr]] %[[#test_arr]] %[[#szconst123]]
30
38
31
39
@__const.test.arr = private unnamed_addr addrspace (2 ) constant [3 x i32 ] [i32 1 , i32 2 , i32 3 ]
32
40
@@ -36,8 +44,10 @@ entry:
36
44
%dest = bitcast ptr %arr to ptr
37
45
call void @llvm.memcpy.p0.p2.i32 (ptr align 4 %dest , ptr addrspace (2 ) align 4 @__const.test.arr , i32 1024 , i1 false )
38
46
call void @llvm.memcpy.p0.p2.i8 (ptr align 4 %dest , ptr addrspace (2 ) align 4 @__const.test.arr , i8 42 , i1 false )
47
+ call void @llvm.memcpy.p0.p2.i64 (ptr align 4 %dest , ptr addrspace (2 ) align 4 @__const.test.arr , i64 123 , i1 false )
39
48
ret void
40
49
}
41
50
42
51
declare void @llvm.memcpy.p0.p2.i32 (ptr nocapture writeonly , ptr addrspace (2 ) nocapture readonly , i32 , i1 )
43
52
declare void @llvm.memcpy.p0.p2.i8 (ptr nocapture writeonly , ptr addrspace (2 ) nocapture readonly , i8 , i1 )
53
+ declare void @llvm.memcpy.p0.p2.i64 (ptr nocapture writeonly , ptr addrspace (2 ) nocapture readonly , i64 , i1 )
0 commit comments