brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · ef118e0 Raw
95 lines · plain
1// Test code-gen for `omp.distribute` ops with delayed privatizers (i.e. using2// `omp.private` ops).3 4// RUN: mlir-translate -mlir-to-llvmir -split-input-file %s | FileCheck %s5 6omp.private {type = private} @_QFEi_private_i32 : i327omp.private {type = private} @_QFEpriv_val_dist_private_f32 : f328 9llvm.func @_QQmain() {10  %0 = llvm.mlir.constant(1 : i64) : i6411  %1 = llvm.alloca %0 x f32 {bindc_name = "priv_val_dist"} : (i64) -> !llvm.ptr12  %3 = llvm.alloca %0 x i32 {bindc_name = "i"} : (i64) -> !llvm.ptr13  %4 = llvm.mlir.constant(3.140000e+00 : f32) : f3214  %5 = llvm.mlir.constant(1000 : i32) : i3215  %6 = llvm.mlir.constant(1 : i32) : i3216 17  omp.teams {18    omp.distribute private(@_QFEpriv_val_dist_private_f32 %1 -> %arg0, @_QFEi_private_i32 %3 -> %arg1 : !llvm.ptr, !llvm.ptr) {19      omp.loop_nest (%arg2) : i32 = (%6) to (%5) inclusive step (%6) {20        llvm.store %arg2, %arg1 : i32, !llvm.ptr21        llvm.store %4, %arg0 : f32, !llvm.ptr22        omp.yield23      }24    }25    omp.terminator26  }27 28  llvm.return29}30 31// CHECK-LABEL: define void @_QQmain() {32// CHECK:         call void {{.*}} @__kmpc_fork_teams(ptr @{{.*}}, i32 0, ptr @[[TEAMS_FUNC:.*]])33// CHECK-NEXT:    br label %teams.exit34// CHECK:       }35 36// CHECK:       define internal void @[[TEAMS_FUNC]]({{.*}}) {37// CHECK:         %[[PRIV_VAR_ALLOC:.*]] = alloca float, align 438// CHECK:         %[[IV_ALLOC:.*]] = alloca i32, align 439 40// CHECK:       omp.loop_nest.region:41// CHECK-NEXT:    store i32 %{{.*}}, ptr %[[IV_ALLOC]], align 442// CHECK-NEXT:    store float 0x40091EB860000000, ptr %[[PRIV_VAR_ALLOC]], align 443// CHECK:       }44 45// -----46 47llvm.func @foo_free(!llvm.ptr)48 49omp.private {type = firstprivate} @_QFEpriv_val_dist_firstprivate_f32 : f32 copy {50^bb0(%arg0: !llvm.ptr, %arg1: !llvm.ptr):51  %0 = llvm.load %arg0 : !llvm.ptr -> f3252  llvm.store %0, %arg1 : f32, !llvm.ptr53  omp.yield(%arg1 : !llvm.ptr)54} dealloc {55  ^bb0(%arg0: !llvm.ptr):56    llvm.call @foo_free(%arg0) : (!llvm.ptr) -> ()57    omp.yield58}59 60llvm.func @_QQmain() {61  %0 = llvm.mlir.constant(1 : i64) : i6462  %1 = llvm.alloca %0 x f32 {bindc_name = "priv_val_dist"} : (i64) -> !llvm.ptr63  %4 = llvm.mlir.constant(3.140000e+00 : f32) : f3264  %6 = llvm.mlir.constant(1 : i32) : i3265  omp.distribute private(@_QFEpriv_val_dist_firstprivate_f32 %1 -> %arg0 : !llvm.ptr) {66    omp.loop_nest (%arg2) : i32 = (%6) to (%6) inclusive step (%6) {67      llvm.store %4, %arg0 : f32, !llvm.ptr68      omp.yield69    }70  }71  llvm.return72}73 74// CHECK-LABEL: define void @_QQmain() {75// CHECK:         %[[SHARED_VAR_ALLOC:.*]] = alloca float, i64 1, align 476 77// CHECK:       distribute.alloca:78// CHECK:         %[[PRIV_VAR_ALLOC:.*]] = alloca float, align 479 80// CHECK:       omp.private.copy:81// CHECK-NEXT:    %[[SHARED_VAR_VAL:.*]] = load float, ptr %[[SHARED_VAR_ALLOC]], align 482// CHECK-NEXT:    store float %[[SHARED_VAR_VAL]], ptr %[[PRIV_VAR_ALLOC]], align 483 84// CHECK:       omp.loop_nest.region:85// CHECK-NEXT:    store float 0x40091EB860000000, ptr %[[PRIV_VAR_ALLOC]], align 486 87// CHECK:       omp_loop.after:88// CHECK-NEXT:    br label %omp.region.cont89 90// CHECK:       omp.region.cont:91// CHECK-NEXT:   call void @foo_free(ptr %[[PRIV_VAR_ALLOC]])92// CHECK:       }93 94 95