brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · 0ed1dc7 Raw
71 lines · plain
1; RUN: llc -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV2; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown %s -o - -filetype=obj | spirv-val %}3 4; TODO(#60133): Requires updates following opaque pointer migration.5; XFAIL: *6 7;; Check 'LLVM ==> SPIR-V' conversion of extractvalue/insertvalue.8 9%struct.arr = type { [7 x float] }10%struct.st = type { %struct.inner }11%struct.inner = type { float }12 13; CHECK-SPIRV:     %[[#float_ty:]] = OpTypeFloat 3214; CHECK-SPIRV:     %[[#int_ty:]] = OpTypeInt 3215; CHECK-SPIRV:     %[[#arr_size:]] = OpConstant %[[#int_ty]] 716; CHECK-SPIRV:     %[[#array_ty:]] = OpTypeArray %[[#float_ty]] %[[#arr_size]]17; CHECK-SPIRV:     %[[#struct_ty:]] = OpTypeStruct %[[#array_ty]]18; CHECK-SPIRV:     %[[#struct_ptr_ty:]] = OpTypePointer CrossWorkgroup %[[#struct_ty]]19; CHECK-SPIRV:     %[[#array_ptr_ty:]] = OpTypePointer CrossWorkgroup %[[#array_ty]]20; CHECK-SPIRV:     %[[#struct1_in_ty:]] = OpTypeStruct %[[#float_ty]]21; CHECK-SPIRV:     %[[#struct1_ty:]] = OpTypeStruct %[[#struct1_in_ty]]22; CHECK-SPIRV:     %[[#struct1_ptr_ty:]] = OpTypePointer CrossWorkgroup %[[#struct1_ty]]23; CHECK-SPIRV:     %[[#struct1_in_ptr_ty:]] = OpTypePointer CrossWorkgroup %[[#struct1_in_ty]]24; CHECK-SPIRV-NOT: OpConstant %{{.*}} 225; CHECK-SPIRV-NOT: OpConstant %{{.*}} 426; CHECK-SPIRV-NOT: OpConstant %{{.*}} 527 28; CHECK-SPIRV-LABEL:  OpFunction29; CHECK-SPIRV-NEXT:   %[[#object:]] = OpFunctionParameter %[[#struct_ptr_ty]]30; CHECK-SPIRV:        %[[#store_ptr:]] = OpInBoundsPtrAccessChain %[[#array_ptr_ty]] %[[#object]] %[[#]] %[[#]]31; CHECK-SPIRV:        %[[#extracted_array:]] = OpLoad %[[#array_ty]] %[[#store_ptr]] Aligned 432; CHECK-SPIRV:        %[[#elem_4:]] = OpCompositeExtract %[[#float_ty]] %[[#extracted_array]] 433; CHECK-SPIRV:        %[[#elem_2:]] = OpCompositeExtract %[[#float_ty]] %[[#extracted_array]] 234; CHECK-SPIRV:        %[[#add:]] = OpFAdd %[[#float_ty]] %[[#elem_4]] %[[#elem_2]]35; CHECK-SPIRV:        %[[#inserted_array:]] = OpCompositeInsert %[[#array_ty]] %[[#add]] %[[#extracted_array]] 536; CHECK-SPIRV:        OpStore %[[#store_ptr]] %[[#inserted_array]]37; CHECK-SPIRV-LABEL:  OpFunctionEnd38 39define spir_func void @array_test(%struct.arr addrspace(1)* %object) {40entry:41  %0 = getelementptr inbounds %struct.arr, %struct.arr addrspace(1)* %object, i32 0, i32 042  %1 = load [7 x float], [7 x float] addrspace(1)* %0, align 443  %2 = extractvalue [7 x float] %1, 444  %3 = extractvalue [7 x float] %1, 245  %4 = fadd float %2, %346  %5 = insertvalue [7 x float] %1, float %4, 547  store [7 x float] %5, [7 x float] addrspace(1)* %048  ret void49}50 51; CHECK-SPIRV-LABEL:  OpFunction52; CHECK-SPIRV-NEXT:   %[[#object:]] = OpFunctionParameter %[[#struct1_ptr_ty]]53; CHECK-SPIRV:        %[[#store1_ptr:]] = OpInBoundsPtrAccessChain %[[#struct1_in_ptr_ty]] %[[#object]] %[[#]] %[[#]]54; CHECK-SPIRV:        %[[#extracted_struct:]] = OpLoad %[[#struct1_in_ty]] %[[#store1_ptr]] Aligned 455; CHECK-SPIRV:        %[[#elem:]] = OpCompositeExtract %[[#float_ty]] %[[#extracted_struct]] 056; CHECK-SPIRV:        %[[#add:]] = OpFAdd %[[#float_ty]] %[[#elem]] %[[#]]57; CHECK-SPIRV:        %[[#inserted_struct:]] = OpCompositeInsert %[[#struct1_in_ty]] %[[#add]] %[[#extracted_struct]] 058; CHECK-SPIRV:        OpStore %[[#store1_ptr]] %[[#inserted_struct]]59; CHECK-SPIRV-LABEL:  OpFunctionEnd60 61define spir_func void @struct_test(%struct.st addrspace(1)* %object) {62entry:63  %0 = getelementptr inbounds %struct.st, %struct.st addrspace(1)* %object, i32 0, i32 064  %1 = load %struct.inner, %struct.inner addrspace(1)* %0, align 465  %2 = extractvalue %struct.inner %1, 066  %3 = fadd float %2, 1.000000e+0067  %4 = insertvalue %struct.inner %1, float %3, 068  store %struct.inner %4, %struct.inner addrspace(1)* %069  ret void70}71