brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.7 KiB · 15dfb6d Raw
114 lines · plain
1// RUN: mlir-translate -mlir-to-llvmir -split-input-file %s | FileCheck %s2 3omp.private {type = private} @i_privatizer : i324 5// CHECK-LABEL: test_loop_var_privatization()6//                Original (non-privatized) allocation for `i`.7// CHECK:         %{{.*}} = alloca i32, i64 1, align 48// CHECK:         %[[DUMMY:.*]] = alloca float, i64 1, align 49// CHECK:         %[[PRIV_I:.*]] = alloca i32, align 410// CHECK:         br label %[[LATE_ALLOC:.*]]11 12// CHECK:     [[LATE_ALLOC]]:13// CHECK:         br label %[[AFTER_ALLOC:.*]]14 15// CHECK:       [[AFTER_ALLOC]]:16// CHECK:         br label %[[ENTRY:.*]]17 18// CHECK:       [[ENTRY]]:19// CHECK:         br label %[[OMP_SIMD_REGION:.*]]20 21// CHECK:       [[OMP_SIMD_REGION]]:22// CHECK:         br label %[[OMP_LOOP_PREHEADER:.*]]23 24// CHECK:       [[OMP_LOOP_PREHEADER]]:25// CHECK:         br label %[[OMP_LOOP_HEADER:.*]]26 27// CHECK:       [[OMP_LOOP_HEADER]]:28// CHECK:         %[[OMP_LOOP_IV:.*]] = phi i32 [ 0, %[[OMP_LOOP_PREHEADER]] ], [ %[[OMP_LOOP_NEXT:.*]], %[[OMP_LOOP_INC:.*]] ]29// CHECK:         br label %[[OMP_LOOP_COND:.*]]30 31// CHECK:       [[OMP_LOOP_COND]]:32// CHECK:         %[[OMP_LOOP_CMP:.*]] = icmp ult i32 %[[OMP_LOOP_IV]], 1033// CHECK:         br i1 %[[OMP_LOOP_CMP]], label %[[OMP_LOOP_BODY:.*]], label %[[OMP_LOOP_EXIT:.*]]34 35// CHECK:       [[OMP_LOOP_BODY]]:36// CHECK:         %[[IV_UPDATE:.*]] = mul i32 %[[OMP_LOOP_IV]], 137// CHECK:         %[[IV_UPDATE_2:.*]] = add i32 %[[IV_UPDATE]], 138// CHECK:         br label %[[OMP_LOOP_NEST_REGION:.*]]39 40// CHECK:       [[OMP_LOOP_NEST_REGION]]:41// CHECK:         store i32 %[[IV_UPDATE_2]], ptr %[[PRIV_I]], align 442// CHECK:         %[[DUMMY_VAL:.*]] = load float, ptr %[[DUMMY]], align 443// CHECK:         %[[PRIV_I_VAL:.*]] = load i32, ptr %[[PRIV_I]], align 444// CHECK:         %[[PRIV_I_VAL_FLT:.*]] = sitofp i32 %[[PRIV_I_VAL]] to float45// CHECK:         %[[DUMMY_VAL_UPDATE:.*]] = fadd {{.*}} float %[[DUMMY_VAL]], %[[PRIV_I_VAL_FLT]]46// CHECK:         store float %[[DUMMY_VAL_UPDATE]], ptr %[[DUMMY]], align 4, !llvm.access.group !147// CHECK:        br label %[[OMP_REGION_CONT:.*]]48 49// CHECK:      [[OMP_REGION_CONT]]:50// CHECK:        br label %[[OMP_LOOP_INC:.*]]51 52// CHECK:      [[OMP_LOOP_INC]]:53// CHECK:        %[[OMP_LOOP_NEXT:.*]] = add nuw i32 %[[OMP_LOOP_IV]], 154// CHECK:        br label %[[OMP_LOOP_HEADER]]55 56// CHECK:      [[OMP_LOOP_EXIT]]:57 58 59llvm.func @test_loop_var_privatization() attributes {fir.internal_name = "_QPtest_private_clause"} {60  %0 = llvm.mlir.constant(1 : i64) : i6461  %1 = llvm.alloca %0 x i32 {bindc_name = "i"} : (i64) -> !llvm.ptr62  %3 = llvm.alloca %0 x f32 {bindc_name = "dummy"} : (i64) -> !llvm.ptr63  %4 = llvm.mlir.constant(10 : i32) : i3264  %5 = llvm.mlir.constant(1 : i32) : i3265  omp.simd private(@i_privatizer %1 -> %arg0 : !llvm.ptr) {66    omp.loop_nest (%arg1) : i32 = (%5) to (%4) inclusive step (%5) {67      llvm.store %arg1, %arg0 : i32, !llvm.ptr68      %8 = llvm.load %3 : !llvm.ptr -> f3269      %9 = llvm.load %arg0 : !llvm.ptr -> i3270      %10 = llvm.sitofp %9 : i32 to f3271      %11 = llvm.fadd %8, %10 {fastmathFlags = #llvm.fastmath<contract>} : f3272      llvm.store %11, %3 : f32, !llvm.ptr73      omp.yield74    }75  }76  llvm.return77}78 79omp.private {type = private} @dummy_privatizer : f3280 81// CHECK-LABEL: test_private_clause()82//                Original (non-privatized) allocation for `i`.83// CHECK:         %{{.*}} = alloca i32, i64 1, align 484//                Original (non-privatized) allocation for `dummy`.85// CHECK:         %{{.*}} = alloca float, i64 1, align 486// CHECK:         %[[PRIV_DUMMY:.*]] = alloca float, align 487// CHECK:         %[[PRIV_I:.*]] = alloca i32, align 488 89// CHECK:       omp.loop_nest.region:90// CHECK-NOT:     br label91// CHECK:         store i32 %{{.*}}, ptr %[[PRIV_I]], align 492// CHECK:        %{{.*}} = load float, ptr %[[PRIV_DUMMY]], align 493// CHECK:        store float %{{.*}}, ptr %[[PRIV_DUMMY]], align 494 95llvm.func @test_private_clause() attributes {fir.internal_name = "_QPtest_private_clause"} {96  %0 = llvm.mlir.constant(1 : i64) : i6497  %1 = llvm.alloca %0 x i32 {bindc_name = "i"} : (i64) -> !llvm.ptr98  %3 = llvm.alloca %0 x f32 {bindc_name = "dummy"} : (i64) -> !llvm.ptr99  %4 = llvm.mlir.constant(10 : i32) : i32100  %5 = llvm.mlir.constant(1 : i32) : i32101  omp.simd private(@dummy_privatizer %3 -> %arg0, @i_privatizer %1 -> %arg1 : !llvm.ptr, !llvm.ptr) {102    omp.loop_nest (%arg2) : i32 = (%5) to (%4) inclusive step (%5) {103      llvm.store %arg2, %arg1 : i32, !llvm.ptr104      %8 = llvm.load %arg0 : !llvm.ptr -> f32105      %9 = llvm.load %arg1 : !llvm.ptr -> i32106      %10 = llvm.sitofp %9 : i32 to f32107      %11 = llvm.fadd %8, %10 {fastmathFlags = #llvm.fastmath<contract>} : f32108      llvm.store %11, %arg0 : f32, !llvm.ptr109      omp.yield110    }111  }112  llvm.return113}114