brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.7 KiB · cbf273b Raw
161 lines · plain
1// RUN: mlir-translate -mlir-to-llvmir %s | FileCheck %s2 3module attributes {dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry<"dlti.alloca_memory_space", 5 : ui32>>, llvm.target_triple = "amdgcn-amd-amdhsa", omp.is_gpu = true, omp.is_target_device = true} {4 5  omp.private {type = private} @i32_privatizer : i326 7  llvm.func @test_nested_target_in_parallel(%arg0: !llvm.ptr) {8    omp.parallel {9    %0 = llvm.mlir.constant(4 : index) : i6410    %1 = llvm.mlir.constant(1 : index) : i6411    %4 = omp.map.bounds   lower_bound(%1 : i64) upper_bound(%0 : i64) stride(%1 : i64) start_idx(%1 : i64)12    %mapv1 = omp.map.info var_ptr(%arg0 : !llvm.ptr, !llvm.array<10 x i32>)   map_clauses(tofrom) capture(ByRef) bounds(%4) -> !llvm.ptr {name = ""}13    omp.target map_entries(%mapv1 -> %map_arg : !llvm.ptr) {14      omp.terminator15    }16      omp.terminator17    }18    llvm.return19  }20 21// CHECK-LABEL: define void @test_nested_target_in_parallel({{.*}}) {22// CHECK-NEXT:    br label %omp.parallel.fake.region23// CHECK:       omp.parallel.fake.region:24// CHECK-NEXT:    br label %omp.region.cont25// CHECK:       omp.region.cont:26// CHECK-NEXT:    ret void27// CHECK-NEXT:  }28 29  llvm.func @test_nested_target_in_wsloop(%arg0: !llvm.ptr) {30    %8 = llvm.mlir.constant(1 : i64) : i6431    %9 = llvm.alloca %8 x i32 {bindc_name = "i"} : (i64) -> !llvm.ptr<5>32    %ascast = llvm.addrspacecast %9 : !llvm.ptr<5> to !llvm.ptr33    %16 = llvm.mlir.constant(10 : i32) : i3234    %17 = llvm.mlir.constant(1 : i32) : i3235    omp.wsloop private(@i32_privatizer %ascast -> %loop_arg : !llvm.ptr) {36      omp.loop_nest (%arg1) : i32 = (%17) to (%16) inclusive step (%17) {37        llvm.store %arg1, %loop_arg : i32, !llvm.ptr38        %0 = llvm.mlir.constant(4 : index) : i6439        %1 = llvm.mlir.constant(1 : index) : i6440        %4 = omp.map.bounds   lower_bound(%1 : i64) upper_bound(%0 : i64) stride(%1 : i64) start_idx(%1 : i64)41        %mapv1 = omp.map.info var_ptr(%arg0 : !llvm.ptr, !llvm.array<10 x i32>)   map_clauses(tofrom) capture(ByRef) bounds(%4) -> !llvm.ptr {name = ""}42        omp.target map_entries(%mapv1 -> %map_arg : !llvm.ptr) {43          omp.terminator44        }45        omp.yield46      }47    }48    llvm.return49  }50 51// CHECK-LABEL: define void @test_nested_target_in_wsloop(ptr %0) {52// CHECK-NEXT:    %{{.*}} = alloca i32, i64 1, align 4, addrspace(5)53// CHECK-NEXT:    %{{.*}} = addrspacecast ptr addrspace(5) %{{.*}} to ptr54// CHECK-NEXT:    br label %omp.wsloop.fake.region55// CHECK:       omp.wsloop.fake.region:56// CHECK-NEXT:    br label %omp.loop_nest.fake.region57// CHECK:       omp.loop_nest.fake.region:58// CHECK-NEXT:    store i32 poison, ptr %{{.*}}59// CHECK-NEXT:    br label %omp.region.cont160// CHECK:       omp.region.cont1:61// CHECK-NEXT:    br label %omp.region.cont62// CHECK:       omp.region.cont:63// CHECK-NEXT:    ret void64// CHECK-NEXT:  }65 66  llvm.func @test_nested_target_in_parallel_with_private(%arg0: !llvm.ptr) {67    %8 = llvm.mlir.constant(1 : i64) : i6468    %9 = llvm.alloca %8 x i32 {bindc_name = "i"} : (i64) -> !llvm.ptr<5>69    %ascast = llvm.addrspacecast %9 : !llvm.ptr<5> to !llvm.ptr70    omp.parallel private(@i32_privatizer %ascast -> %i_priv_arg : !llvm.ptr) {71        %1 = llvm.mlir.constant(1 : index) : i6472        // Use the private clause from omp.parallel to make sure block arguments73        // are handled.74        %i_val = llvm.load %i_priv_arg : !llvm.ptr -> i6475        %4 = omp.map.bounds   lower_bound(%1 : i64) upper_bound(%i_val : i64) stride(%1 : i64) start_idx(%1 : i64)76        %mapv1 = omp.map.info var_ptr(%arg0 : !llvm.ptr, !llvm.array<10 x i32>)   map_clauses(tofrom) capture(ByRef) bounds(%4) -> !llvm.ptr {name = ""}77        omp.target map_entries(%mapv1 -> %map_arg : !llvm.ptr) {78          omp.terminator79        }80        omp.terminator81    }82    llvm.return83  }84 85  llvm.func @test_nested_target_in_task_with_private(%arg0: !llvm.ptr) {86    %8 = llvm.mlir.constant(1 : i64) : i6487    %9 = llvm.alloca %8 x i32 {bindc_name = "i"} : (i64) -> !llvm.ptr<5>88    %ascast = llvm.addrspacecast %9 : !llvm.ptr<5> to !llvm.ptr89    omp.task private(@i32_privatizer %ascast -> %i_priv_arg : !llvm.ptr) {90        %1 = llvm.mlir.constant(1 : index) : i6491        // Use the private clause from omp.task to make sure block arguments92        // are handled.93        %i_val = llvm.load %i_priv_arg : !llvm.ptr -> i6494        %4 = omp.map.bounds   lower_bound(%1 : i64) upper_bound(%i_val : i64) stride(%1 : i64) start_idx(%1 : i64)95        %mapv1 = omp.map.info var_ptr(%arg0 : !llvm.ptr, !llvm.array<10 x i32>)   map_clauses(tofrom) capture(ByRef) bounds(%4) -> !llvm.ptr {name = ""}96        omp.target map_entries(%mapv1 -> %map_arg : !llvm.ptr) {97          omp.terminator98        }99        omp.terminator100    }101    llvm.return102  }103 104  llvm.func @test_target_and_atomic_update(%x: !llvm.ptr, %expr : i32) {105    omp.target {106      omp.terminator107    }108 109    omp.atomic.update %x : !llvm.ptr {110    ^bb0(%xval: i32):111      %newval = llvm.add %xval, %expr : i32112      omp.yield(%newval : i32)113    }114 115    llvm.return116  }117 118// CHECK-LABEL: define void @test_nested_target_in_parallel_with_private({{.*}}) {119// CHECK:        br label %omp.parallel.fake.region120// CHECK:       omp.parallel.fake.region:121// CHECK:         br label %omp.region.cont122// CHECK:       omp.region.cont:123// CHECK-NEXT:    ret void124// CHECK-NEXT:  }125 126// CHECK-LABEL: define {{.*}} amdgpu_kernel void @__omp_offloading_{{.*}}_nested_target_in_parallel_{{.*}} {127// CHECK:         call i32 @__kmpc_target_init128// CHECK:       user_code.entry:129// CHECK:         call void @__kmpc_target_deinit()130// CHECK:         ret void131// CHECK:       }132 133// CHECK-LABEL: define {{.*}} amdgpu_kernel void @__omp_offloading_{{.*}}_test_nested_target_in_wsloop_{{.*}} {134// CHECK:         call i32 @__kmpc_target_init135// CHECK:       user_code.entry:136// CHECK:         call void @__kmpc_target_deinit()137// CHECK:         ret void138// CHECK:       }139 140// CHECK-LABEL: define {{.*}} amdgpu_kernel void @__omp_offloading_{{.*}}_test_nested_target_in_parallel_with_private_{{.*}} {141// CHECK:         call i32 @__kmpc_target_init142// CHECK:       user_code.entry:143// CHECK:         call void @__kmpc_target_deinit()144// CHECK:         ret void145// CHECK:       }146 147// CHECK-LABEL: define {{.*}} amdgpu_kernel void @__omp_offloading_{{.*}}_test_nested_target_in_task_with_private_{{.*}} {148// CHECK:         call i32 @__kmpc_target_init149// CHECK:       user_code.entry:150// CHECK:         call void @__kmpc_target_deinit()151// CHECK:         ret void152// CHECK:       }153 154// CHECK-LABEL: define {{.*}} amdgpu_kernel void @__omp_offloading_{{.*}}_test_target_and_atomic_update_{{.*}} {155// CHECK:         call i32 @__kmpc_target_init156// CHECK:       user_code.entry:157// CHECK:         call void @__kmpc_target_deinit()158// CHECK:         ret void159// CHECK:       }160}161