[llvm] [mlir] [OMPIRBuilder] Don't use invalid debug loc in declare mapper function. (PR #148263)
Abid Qadeer via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 11 10:28:28 PDT 2025
https://github.com/abidh created https://github.com/llvm/llvm-project/pull/148263
This is similar to https://github.com/llvm/llvm-project/pull/147950 but for declare mapper function.
>From 93cdf76fcdbb731d7409073ea8db33659881a00a Mon Sep 17 00:00:00 2001
From: Abid Qadeer <haqadeer at amd.com>
Date: Fri, 11 Jul 2025 18:23:14 +0100
Subject: [PATCH] [OMPIRBuilder] Don't use invalid debug loc in declare mapper
function.
This is similar to https://github.com/llvm/llvm-project/pull/147950 but
for declare mapper function.
---
llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp | 4 +-
.../omptarget-debug-declare-mapper.mlir | 47 +++++++++++++++++++
2 files changed, 49 insertions(+), 2 deletions(-)
create mode 100644 mlir/test/Target/LLVMIR/omptarget-debug-declare-mapper.mlir
diff --git a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
index 170224616ac64..6069006420257 100644
--- a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
+++ b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
@@ -8319,8 +8319,9 @@ Expected<Function *> OpenMPIRBuilder::emitUserDefinedMapper(
// Start the mapper function code generation.
BasicBlock *EntryBB = BasicBlock::Create(M.getContext(), "entry", MapperFn);
- auto SavedIP = Builder.saveIP();
+ IRBuilder<>::InsertPointGuard IPG(Builder);
Builder.SetInsertPoint(EntryBB);
+ Builder.SetCurrentDebugLocation(llvm::DebugLoc());
Value *MapperHandle = MapperFn->getArg(0);
Value *BaseIn = MapperFn->getArg(1);
@@ -8506,7 +8507,6 @@ Expected<Function *> OpenMPIRBuilder::emitUserDefinedMapper(
emitBlock(DoneBB, MapperFn, /*IsFinished=*/true);
Builder.CreateRetVoid();
- Builder.restoreIP(SavedIP);
return MapperFn;
}
diff --git a/mlir/test/Target/LLVMIR/omptarget-debug-declare-mapper.mlir b/mlir/test/Target/LLVMIR/omptarget-debug-declare-mapper.mlir
new file mode 100644
index 0000000000000..56a5c8119863a
--- /dev/null
+++ b/mlir/test/Target/LLVMIR/omptarget-debug-declare-mapper.mlir
@@ -0,0 +1,47 @@
+// RUN: mlir-translate -mlir-to-llvmir %s | FileCheck %s
+
+module attributes {omp.target_triples = ["amdgcn-amd-amdhsa"]} {
+ omp.declare_mapper @_QQFmy_testmy_mapper : !llvm.struct<"_QFmy_testTmy_type", (i32)> {
+ ^bb0(%arg0: !llvm.ptr):
+ %0 = llvm.mlir.constant(0 : i32) : i32
+ %1 = llvm.getelementptr %arg0[0, 0] : (!llvm.ptr) -> !llvm.ptr, !llvm.struct<"_QFmy_testTmy_type", (i32)>
+ %2 = omp.map.info var_ptr(%1 : !llvm.ptr, i32) map_clauses(tofrom) capture(ByRef) -> !llvm.ptr {name = "var%data"}
+ %3 = omp.map.info var_ptr(%arg0 : !llvm.ptr, !llvm.struct<"_QFmy_testTmy_type", (i32)>) map_clauses(tofrom) capture(ByRef) members(%2 : [0] : !llvm.ptr) -> !llvm.ptr {name = "var", partial_map = true}
+ omp.declare_mapper.info map_entries(%3, %2 : !llvm.ptr, !llvm.ptr)
+ }
+
+ llvm.func @_QPopenmp_target_data_mapper() {
+ %0 = llvm.mlir.constant(1 : i64) : i64
+ %1 = llvm.alloca %0 x !llvm.struct<"_QFmy_testTmy_type", (i32)> {bindc_name = "a"} : (i64) -> !llvm.ptr
+ %2 = omp.map.info var_ptr(%1 : !llvm.ptr, !llvm.struct<"_QFmy_testTmy_type", (i32)>) map_clauses(tofrom) capture(ByRef) mapper(@_QQFmy_testmy_mapper) -> !llvm.ptr {name = "a"}
+ omp.target_data map_entries(%2 : !llvm.ptr) {
+ %3 = llvm.mlir.constant(10 : i32) : i32
+ %4 = llvm.getelementptr %1[0, 0] : (!llvm.ptr) -> !llvm.ptr, !llvm.struct<"_QFmy_testTmy_type", (i32)>
+ llvm.store %3, %4 : i32, !llvm.ptr
+ omp.terminator
+ }
+ llvm.return
+ } loc(#loc12)
+} loc(#loc)
+
+#loc = loc("test.f90":4:18)
+#loc1 = loc("test.f90":4:18)
+
+#di_file = #llvm.di_file<"test.f90" in "">
+#di_null_type = #llvm.di_null_type
+#di_compile_unit = #llvm.di_compile_unit<id = distinct[0]<>,
+ sourceLanguage = DW_LANG_Fortran95, file = #di_file, producer = "flang",
+ isOptimized = false, emissionKind = LineTablesOnly>
+#di_subroutine_type = #llvm.di_subroutine_type<
+ callingConvention = DW_CC_program, types = #di_null_type>
+#di_subprogram = #llvm.di_subprogram<id = distinct[1]<>,
+ compileUnit = #di_compile_unit, scope = #di_file, name = "main",
+ file = #di_file, subprogramFlags = "Definition|MainSubprogram",
+ type = #di_subroutine_type>
+
+#loc12 = loc(fused<#di_subprogram>[#loc1])
+
+// CHECK: define internal void @{{.*}}omp_mapper{{.*}}_QQFmy_testmy_mapper
+// CHECK-NOT: !dbg
+// CHECK: }
+
More information about the llvm-commits
mailing list