brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.4 KiB · 51b7664 Raw
87 lines · plain
1; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s2; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %}3 4; CHECK-SPIRV-NOT: llvm.memmove5 6; CHECK-DAG: %[[#Int8:]] = OpTypeInt 8 07; CHECK-DAG: %[[#Int32:]] = OpTypeInt 32 08; CHECK-DAG: %[[#Int64:]] = OpTypeInt 64 09; CHECK-DAG: %[[#Ptr_CrossWG_8:]] = OpTypePointer CrossWorkgroup %[[#Int8]]10; CHECK-DAG: %[[#Ptr_Generic_32:]] = OpTypePointer Generic %[[#Int32]]11; CHECK-DAG: %[[#Const_64:]] = OpConstant %[[#Int32]] 6412; CHECK-DAG: %[[#Const_36:]] = OpConstant %[[#Int32]] 3613; CHECK-DAG: %[[#Const_30:]] = OpConstant %[[#Int32]] 3014; CHECK-DAG: %[[#Const_32_64:]] = OpConstant %[[#Int64]] 3215 16; CHECK: %[[#Param1:]] = OpFunctionParameter %[[#Ptr_CrossWG_8]]17; CHECK: %[[#Param2:]] = OpFunctionParameter %[[#Ptr_CrossWG_8]]18; CHECK: %[[#Size1:]] = OpUConvert %[[#Int64]] %[[#Const_64]]19; CHECK: OpCopyMemorySized %[[#Param2]] %[[#Param1]] %[[#Size1]] Aligned 6420 21; CHECK: %[[#Src:]] = OpFunctionParameter %[[#Ptr_CrossWG_8]]22; CHECK: %[[#CastDst2:]] = OpGenericCastToPtr %[[#Ptr_CrossWG_8]] %[[#GenPtr:]]23; CHECK: %[[#Size2:]] = OpUConvert %[[#Int64]] %[[#Const_36]]24; CHECK: OpCopyMemorySized %[[#CastDst2]] %[[#Src]] %[[#Size2]] Aligned 6425 26; CHECK: %[[#Param1:]] = OpFunctionParameter %[[#Ptr_CrossWG_8]]27; CHECK: %[[#Param2:]] = OpFunctionParameter %[[#Ptr_CrossWG_8]]28; CHECK: %[[#Size3:]] = OpUConvert %[[#Int64]] %[[#Const_30]]29; CHECK: OpCopyMemorySized %[[#Param2]] %[[#Param1]] %[[#Size3]] Aligned 130 31; CHECK: %[[#Phi:]] = OpPhi %[[#Ptr_Generic_32]] %[[#Op1:]] %[[#Lbl1:]] %[[#Op2:]] %[[#Lbl2:]]32; CHECK: %[[#Cast:]] = OpPtrCastToGeneric %[[#]] %[[#]]33; CHECK: OpCopyMemorySized %[[#Cast]] %[[#Phi]] %[[#Const_32_64]] Aligned 834 35%struct.SomeStruct = type { <16 x float>, i32, [60 x i8] }36%class.kfunc = type <{ i32, i32, i32, [4 x i8] }>37 38@InvocIndex = external local_unnamed_addr addrspace(1) constant i64, align 839@"func_object1" = internal addrspace(3) global %class.kfunc zeroinitializer, align 840 41define spir_kernel void @test_full_move(%struct.SomeStruct addrspace(1)* captures(none) readonly %in, %struct.SomeStruct addrspace(1)* captures(none) %out) {42  %1 = bitcast %struct.SomeStruct addrspace(1)* %in to i8 addrspace(1)*43  %2 = bitcast %struct.SomeStruct addrspace(1)* %out to i8 addrspace(1)*44  call void @llvm.memmove.p1i8.p1i8.i32(i8 addrspace(1)* align 64 %2, i8 addrspace(1)* align 64 %1, i32 64, i1 false)45  ret void46}47 48define spir_kernel void @test_partial_move(%struct.SomeStruct addrspace(1)* captures(none) readonly %in, %struct.SomeStruct addrspace(4)* captures(none) %out) {49  %1 = bitcast %struct.SomeStruct addrspace(1)* %in to i8 addrspace(1)*50  %2 = bitcast %struct.SomeStruct addrspace(4)* %out to i8 addrspace(4)*51  %3 = addrspacecast i8 addrspace(4)* %2 to i8 addrspace(1)*52  call void @llvm.memmove.p1i8.p1i8.i32(i8 addrspace(1)* align 64 %3, i8 addrspace(1)* align 64 %1, i32 36, i1 false)53  ret void54}55 56define spir_kernel void @test_array(i8 addrspace(1)* %in, i8 addrspace(1)* %out) {57  call void @llvm.memmove.p1i8.p1i8.i32(i8 addrspace(1)* %out, i8 addrspace(1)* %in, i32 30, i1 false)58  ret void59}60 61define weak_odr dso_local spir_kernel void @test_phi() local_unnamed_addr {62entry:63  %0 = alloca i32, align 864  %1 = addrspacecast i32* %0 to i32 addrspace(4)*65  %2 = load i64, i64 addrspace(1)* @InvocIndex, align 866  %cmp = icmp eq i64 %2, 067  br i1 %cmp, label %leader, label %entry.merge_crit_edge68 69entry.merge_crit_edge:                            ; preds = %entry70  %3 = bitcast i32 addrspace(4)* %1 to i8 addrspace(4)*71  br label %merge72 73leader:                                           ; preds = %entry74  %4 = bitcast i32 addrspace(4)* %1 to i8 addrspace(4)*75  br label %merge76 77merge:                                            ; preds = %entry.merge_crit_edge, %leader78  %phi = phi i8 addrspace(4)* [ %3, %entry.merge_crit_edge ], [ %4, %leader ]79  %5 = addrspacecast i8 addrspace(3)* bitcast (%class.kfunc addrspace(3)* @"func_object1" to i8 addrspace(3)*) to i8 addrspace(4)*80  call void @llvm.memmove.p4i8.p4i8.i64(i8 addrspace(4)* align 8 dereferenceable(32) %5, i8 addrspace(4)* align 8 dereferenceable(32) %phi, i64 32, i1 false)81  ret void82}83 84declare void @llvm.memmove.p4i8.p4i8.i64(i8 addrspace(4)* captures(none) writeonly, i8 addrspace(4)* captures(none) readonly, i64, i1 immarg)85 86declare void @llvm.memmove.p1i8.p1i8.i32(i8 addrspace(1)* captures(none), i8 addrspace(1)* captures(none) readonly, i32, i1)87