142d801d4SVyacheslav Levytskyy; RUN: llc -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-32 242d801d4SVyacheslav Levytskyy; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown %s -o - -filetype=obj | spirv-val %} 342d801d4SVyacheslav Levytskyy; RUN: llc -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-64 442d801d4SVyacheslav Levytskyy; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %} 542d801d4SVyacheslav Levytskyy 6*89d12556SVyacheslav Levytskyy; CHECK-DAG: %[[#i64:]] = OpTypeInt 64 0 742d801d4SVyacheslav Levytskyy; CHECK-DAG: %[[#i8:]] = OpTypeInt 8 0 842d801d4SVyacheslav Levytskyy; CHECK-DAG: %[[#i32:]] = OpTypeInt 32 0 942d801d4SVyacheslav Levytskyy; CHECK-DAG: %[[#one:]] = OpConstant %[[#i32]] 1 1042d801d4SVyacheslav Levytskyy; CHECK-DAG: %[[#two:]] = OpConstant %[[#i32]] 2 1142d801d4SVyacheslav Levytskyy; CHECK-DAG: %[[#three:]] = OpConstant %[[#i32]] 3 1242d801d4SVyacheslav Levytskyy; CHECK-DAG: %[[#i32x3:]] = OpTypeArray %[[#i32]] %[[#three]] 1342d801d4SVyacheslav Levytskyy; CHECK-DAG: %[[#test_arr_init:]] = OpConstantComposite %[[#i32x3]] %[[#one]] %[[#two]] %[[#three]] 1442d801d4SVyacheslav Levytskyy; CHECK-DAG: %[[#szconst1024:]] = OpConstant %[[#i32]] 1024 1542d801d4SVyacheslav Levytskyy; CHECK-DAG: %[[#szconst42:]] = OpConstant %[[#i8]] 42 16*89d12556SVyacheslav Levytskyy; CHECK-DAG: %[[#szconst123:]] = OpConstant %[[#i64]] 123 1742d801d4SVyacheslav Levytskyy; CHECK-DAG: %[[#const_i32x3_ptr:]] = OpTypePointer UniformConstant %[[#i32x3]] 1842d801d4SVyacheslav Levytskyy; CHECK-DAG: %[[#test_arr:]] = OpVariable %[[#const_i32x3_ptr]] UniformConstant %[[#test_arr_init]] 1942d801d4SVyacheslav Levytskyy; CHECK-DAG: %[[#i32x3_ptr:]] = OpTypePointer Function %[[#i32x3]] 2042d801d4SVyacheslav Levytskyy; CHECK: %[[#arr:]] = OpVariable %[[#i32x3_ptr]] Function 2142d801d4SVyacheslav Levytskyy 2242d801d4SVyacheslav Levytskyy; CHECK-32: OpCopyMemorySized %[[#arr]] %[[#test_arr]] %[[#szconst1024]] 2342d801d4SVyacheslav Levytskyy; CHECK-32: %[[#szconstext42:]] = OpUConvert %[[#i32:]] %[[#szconst42:]] 2442d801d4SVyacheslav Levytskyy; CHECK-32: OpCopyMemorySized %[[#arr]] %[[#test_arr]] %[[#szconstext42]] 25*89d12556SVyacheslav Levytskyy; CHECK-32: OpCopyMemorySized %[[#arr]] %[[#test_arr]] %[[#szconst123]] 26*89d12556SVyacheslav Levytskyy 27*89d12556SVyacheslav Levytskyy; If/when Backend stoped rewrite actual reg size of i8/i16/i32/i64 with i32, 28*89d12556SVyacheslav Levytskyy; i32 = G_TRUNC i64 would appear for the 32-bit target, switching the following 29*89d12556SVyacheslav Levytskyy; TODO patterns instead of the last line above. 30*89d12556SVyacheslav Levytskyy; TODO: %[[#szconstext123:]] = OpUConvert %[[#i32:]] %[[#szconst123:]] 31*89d12556SVyacheslav Levytskyy; TODO: OpCopyMemorySized %[[#arr]] %[[#test_arr]] %[[#szconst123]] 32*89d12556SVyacheslav Levytskyy 33*89d12556SVyacheslav Levytskyy; CHECK-64: %[[#szconstext1024:]] = OpUConvert %[[#i64:]] %[[#szconst1024:]] 34*89d12556SVyacheslav Levytskyy; CHECK-64: OpCopyMemorySized %[[#arr]] %[[#test_arr]] %[[#szconstext1024]] 3542d801d4SVyacheslav Levytskyy; CHECK-64: %[[#szconstext42:]] = OpUConvert %[[#i64:]] %[[#szconst42:]] 3642d801d4SVyacheslav Levytskyy; CHECK-64: OpCopyMemorySized %[[#arr]] %[[#test_arr]] %[[#szconstext42]] 37*89d12556SVyacheslav Levytskyy; CHECK-64: OpCopyMemorySized %[[#arr]] %[[#test_arr]] %[[#szconst123]] 3842d801d4SVyacheslav Levytskyy 3942d801d4SVyacheslav Levytskyy@__const.test.arr = private unnamed_addr addrspace(2) constant [3 x i32] [i32 1, i32 2, i32 3] 4042d801d4SVyacheslav Levytskyy 4142d801d4SVyacheslav Levytskyydefine spir_func void @test() { 4242d801d4SVyacheslav Levytskyyentry: 4342d801d4SVyacheslav Levytskyy %arr = alloca [3 x i32], align 4 4442d801d4SVyacheslav Levytskyy %dest = bitcast ptr %arr to ptr 4542d801d4SVyacheslav Levytskyy call void @llvm.memcpy.p0.p2.i32(ptr align 4 %dest, ptr addrspace(2) align 4 @__const.test.arr, i32 1024, i1 false) 4642d801d4SVyacheslav Levytskyy call void @llvm.memcpy.p0.p2.i8(ptr align 4 %dest, ptr addrspace(2) align 4 @__const.test.arr, i8 42, i1 false) 47*89d12556SVyacheslav Levytskyy call void @llvm.memcpy.p0.p2.i64(ptr align 4 %dest, ptr addrspace(2) align 4 @__const.test.arr, i64 123, i1 false) 4842d801d4SVyacheslav Levytskyy ret void 4942d801d4SVyacheslav Levytskyy} 5042d801d4SVyacheslav Levytskyy 5142d801d4SVyacheslav Levytskyydeclare void @llvm.memcpy.p0.p2.i32(ptr nocapture writeonly, ptr addrspace(2) nocapture readonly, i32, i1) 5242d801d4SVyacheslav Levytskyydeclare void @llvm.memcpy.p0.p2.i8(ptr nocapture writeonly, ptr addrspace(2) nocapture readonly, i8, i1) 53*89d12556SVyacheslav Levytskyydeclare void @llvm.memcpy.p0.p2.i64(ptr nocapture writeonly, ptr addrspace(2) nocapture readonly, i64, i1) 54