1// RUN: mlir-translate -mlir-to-llvmir %s | FileCheck %s 2 3// This tests check that target code nested inside a target data region which 4// has only use_device_ptr mapping corectly generates code on the device pass. 5 6// CHECK: define weak_odr protected amdgpu_kernel void @__omp_offloading{{.*}}main_ 7// CHECK-NEXT: entry: 8// CHECK-NEXT: %[[VAL_3:.*]] = alloca ptr, align 8 9// CHECK-NEXT: store ptr %[[VAL_4:.*]], ptr %[[VAL_3]], align 8 10// CHECK-NEXT: %[[VAL_5:.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_{{.*}}_kernel_environment, ptr %[[VAL_6:.*]]) 11// CHECK-NEXT: %[[VAL_7:.*]] = icmp eq i32 %[[VAL_5]], -1 12// CHECK-NEXT: br i1 %[[VAL_7]], label %[[VAL_8:.*]], label %[[VAL_9:.*]] 13// CHECK: user_code.entry: ; preds = %[[VAL_10:.*]] 14// CHECK-NEXT: %[[VAL_11:.*]] = load ptr, ptr %[[VAL_3]], align 8 15// CHECK-NEXT: br label %[[AFTER_ALLOC:.*]] 16 17// CHECK: [[AFTER_ALLOC]]: 18// CHECK-NEXT: br label %[[VAL_12:.*]] 19 20// CHECK: [[VAL_12]]: 21// CHECK-NEXT: br label %[[TARGET_REG_ENTRY:.*]] 22 23// CHECK: [[TARGET_REG_ENTRY]]: ; preds = %[[VAL_12]] 24// CHECK-NEXT: %[[VAL_13:.*]] = load ptr, ptr %[[VAL_11]], align 8 25// CHECK-NEXT: store i32 999, ptr %[[VAL_13]], align 4 26// CHECK-NEXT: br label %[[VAL_14:.*]] 27module attributes {llvm.target_triple = "amdgcn-amd-amdhsa", omp.is_target_device = true } { 28 llvm.func @_QQmain() attributes {fir.bindc_name = "main"} { 29 %0 = llvm.mlir.constant(1 : i64) : i64 30 %a = llvm.alloca %0 x !llvm.ptr : (i64) -> !llvm.ptr 31 %map = omp.map.info var_ptr(%a : !llvm.ptr, !llvm.ptr) map_clauses(tofrom) capture(ByRef) -> !llvm.ptr {name = ""} 32 omp.target_data use_device_ptr(%map -> %arg0 : !llvm.ptr) { 33 %map1 = omp.map.info var_ptr(%arg0 : !llvm.ptr, !llvm.ptr) map_clauses(tofrom) capture(ByRef) -> !llvm.ptr {name = ""} 34 omp.target map_entries(%map1 -> %arg1 : !llvm.ptr){ 35 %1 = llvm.mlir.constant(999 : i32) : i32 36 %2 = llvm.load %arg1 : !llvm.ptr -> !llvm.ptr 37 llvm.store %1, %2 : i32, !llvm.ptr 38 omp.terminator 39 } 40 omp.terminator 41 } 42 llvm.return 43 } 44} 45