brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.7 KiB · df60615 Raw
98 lines · plain
1// RUN: mlir-translate -mlir-to-llvmir %s | FileCheck %s2 3module attributes {dlti.dl_spec = #dlti.dl_spec<"dlti.alloca_memory_space" = 5 : ui64, "dlti.global_memory_space" = 1 : ui64>, llvm.target_triple = "amdgcn-amd-amdhsa", omp.is_gpu = true, omp.is_target_device = true} {4  omp.private {type = private} @_QFfooEi_private_i32 : i325  omp.declare_reduction @add_reduction_byref_box_heap_f32 : !llvm.ptr attributes {byref_element_type = f32} alloc {6    %0 = llvm.mlir.constant(1 : i64) : i647    %1 = llvm.alloca %0 x !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8)> : (i64) -> !llvm.ptr<5>8    %2 = llvm.addrspacecast %1 : !llvm.ptr<5> to !llvm.ptr9    omp.yield(%2 : !llvm.ptr)10  } init {11  ^bb0(%arg0: !llvm.ptr, %arg1: !llvm.ptr):12    omp.yield(%arg1 : !llvm.ptr)13  } combiner {14  ^bb0(%arg0: !llvm.ptr, %arg1: !llvm.ptr):15    %0 = llvm.mlir.constant(1 : i32) : i3216    %1 = llvm.alloca %0 x !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8)> {alignment = 8 : i64} : (i32) -> !llvm.ptr<5>17    %2 = llvm.addrspacecast %1 : !llvm.ptr<5> to !llvm.ptr18    %3 = llvm.mlir.constant(1 : i32) : i3219    %4 = llvm.alloca %3 x !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8)> {alignment = 8 : i64} : (i32) -> !llvm.ptr<5>20    %5 = llvm.addrspacecast %4 : !llvm.ptr<5> to !llvm.ptr21    %6 = llvm.mlir.constant(24 : i32) : i3222    "llvm.intr.memcpy"(%5, %arg0, %6) <{isVolatile = false}> : (!llvm.ptr, !llvm.ptr, i32) -> ()23    %7 = llvm.mlir.constant(24 : i32) : i3224    "llvm.intr.memcpy"(%2, %arg1, %7) <{isVolatile = false}> : (!llvm.ptr, !llvm.ptr, i32) -> ()25    %8 = llvm.getelementptr %5[0, 0] : (!llvm.ptr) -> !llvm.ptr, !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8)>26    %9 = llvm.load %8 : !llvm.ptr -> !llvm.ptr27    %10 = llvm.getelementptr %2[0, 0] : (!llvm.ptr) -> !llvm.ptr, !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8)>28    %11 = llvm.load %10 : !llvm.ptr -> !llvm.ptr29    %12 = llvm.load %9 : !llvm.ptr -> f3230    %13 = llvm.load %11 : !llvm.ptr -> f3231    %14 = llvm.fadd %12, %13 {fastmathFlags = #llvm.fastmath<contract>} : f3232    llvm.store %14, %9 : f32, !llvm.ptr33    omp.yield(%arg0 : !llvm.ptr)34  } data_ptr_ptr {35  ^bb0(%arg0: !llvm.ptr):36    %0 = llvm.getelementptr %arg0[0, 0] : (!llvm.ptr) -> !llvm.ptr, !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8)>37    omp.yield(%0 : !llvm.ptr)38  }39 40  llvm.func @foo_() {41    %0 = llvm.mlir.constant(1 : i64) : i6442    %4 = llvm.alloca %0 x i1 : (i64) -> !llvm.ptr<5>43    %5 = llvm.addrspacecast %4 : !llvm.ptr<5> to !llvm.ptr44    %8 = llvm.getelementptr %5[0, 0] : (!llvm.ptr) -> !llvm.ptr, !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8)>45    %9 = omp.map.info var_ptr(%5 : !llvm.ptr, f32) map_clauses(implicit, tofrom) capture(ByRef) var_ptr_ptr(%8 : !llvm.ptr) -> !llvm.ptr {name = ""}46    %10 = omp.map.info var_ptr(%5 : !llvm.ptr, !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8)>) map_clauses(always, implicit, descriptor, to) capture(ByRef) members(%9 : [0] : !llvm.ptr) -> !llvm.ptr {name = "scalar_alloc"}47    omp.target map_entries(%10 -> %arg0 : !llvm.ptr) {48      %13 = llvm.mlir.constant(1000 : i32) : i3249      %14 = llvm.mlir.constant(1 : i32) : i3250      omp.parallel {51        omp.wsloop reduction(byref @add_reduction_byref_box_heap_f32 %arg0 -> %arg4 : !llvm.ptr) {52          omp.loop_nest (%arg5) : i32 = (%14) to (%13) inclusive step (%14) {53            omp.yield54          }55        }56        omp.terminator57      }58      omp.terminator59    }60    llvm.return61  }62}63 64// CHECK: define {{.*}} @_omp_reduction_shuffle_and_reduce_func({{.*}}) {{.*}} {65// CHECK:   %[[REMOTE_RED_LIST:.omp.reduction.remote_reduce_list]] = alloca [1 x ptr], align 8, addrspace(5)66// CHECK:   %[[RED_ELEM:.omp.reduction.element]] = alloca { ptr, i64, i32, i8, i8, i8, i8 }, align 8, addrspace(5)67// CHECK:   %[[RED_ELEM_1:.*]] = addrspacecast ptr addrspace(5) %[[RED_ELEM]] to ptr68 69// CHECK:   %[[SHUFFLE_ELEM:.*]] = alloca float, align 4, addrspace(5)70// CHECK:   %[[REMOTE_RED_LIST_ASCAST:.*]] = addrspacecast ptr addrspace(5) %[[REMOTE_RED_LIST]] to ptr71 72// CHECK:   %[[REMOTE_RED_LIST_ELEM0:.*]] = getelementptr inbounds [1 x ptr], ptr %[[REMOTE_RED_LIST_ASCAST]], i64 0, i64 073 74// CHECK:   %[[SHUFFLE_ELEM_ASCAST:.*]] = addrspacecast ptr addrspace(5) %[[SHUFFLE_ELEM]] to ptr75// CHECK:   %[[SHUFFLE_RES:.*]] = call i32 @__kmpc_shuffle_int32({{.*}})76// CHECK:   store i32 %[[SHUFFLE_RES]], ptr %[[SHUFFLE_ELEM_ASCAST]], align 477 78// CHECK:   %[[RED_ELEM_ASCAST:.*]] = addrspacecast ptr addrspace(5) %[[RED_ELEM]] to ptr79// CHECK:   %[[RED_ALLOC_PTR:.*]] = getelementptr { ptr, i64, i32, i8, i8, i8, i8 }, ptr %[[RED_ELEM_ASCAST]], i32 0, i32 080// CHECK:   %[[SHUFFLE_ELEM_ASCAST:.*]] = addrspacecast ptr addrspace(5) %[[SHUFFLE_ELEM]] to ptr81// CHECK:   store ptr %[[SHUFFLE_ELEM_ASCAST]], ptr %[[RED_ALLOC_PTR]], align 882// CHECK:   store ptr %[[RED_ELEM_1]], ptr %[[REMOTE_RED_LIST_ELEM0]], align 883// CHECK: }84 85// CHECK: define {{.*}} @_omp_reduction_inter_warp_copy_func({{.*}}) {{.*}} {86// CHECK:   %[[WARP_MASTER_CMP:.*]] = icmp eq i32 %nvptx_lane_id, 087// CHECK:   br i1 %[[WARP_MASTER_CMP]], label %[[WARP_MASTER_BB:.*]], label %{{.*}}88 89// CHECK: [[WARP_MASTER_BB]]:90// CHECK:   %[[WARP_RESULT_PTR:.*]] = getelementptr inbounds [1 x ptr], ptr %{{.*}}, i64 0, i64 091// CHECK:   %[[WARP_RESULT:.*]] = load ptr, ptr %[[WARP_RESULT_PTR]], align 892// CHECK:   %[[ALLOC_MEM_PTR:.*]] = getelementptr { ptr, i64, i32, i8, i8, i8, i8 }, ptr %[[WARP_RESULT]], i32 0, i32 093// CHECK:   %[[ALLOC_MEM:.*]] = load ptr, ptr %[[ALLOC_MEM_PTR]], align 894// CHECK:   %[[WARP_TRANSFER_SLOT:.*]] = getelementptr inbounds [32 x i32], ptr addrspace(3) @__openmp_nvptx_data_transfer_temporary_storage, i64 0, i32 %nvptx_warp_id95// CHECK:   %[[WARP_RED_RES:.*]] = load i32, ptr %[[ALLOC_MEM]], align 496// CHECK:   store volatile i32 %[[WARP_RED_RES]], ptr addrspace(3) %[[WARP_TRANSFER_SLOT]], align 497// CHECK: }98