[Mlir-commits] [mlir] fd0d6da - [OMPIRBuilder] Don't use invalid debug loc in declare mapper function. (#148263)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Wed Aug 19 02:57:57 PDT 2026


Author: Abid Qadeer
Date: 2026-08-19T10:57:52+01:00
New Revision: fd0d6daca9600bb3512a673ac08b86e82cbd7ccf

URL: https://github.com/llvm/llvm-project/commit/fd0d6daca9600bb3512a673ac08b86e82cbd7ccf
DIFF: https://github.com/llvm/llvm-project/commit/fd0d6daca9600bb3512a673ac08b86e82cbd7ccf.diff

LOG: [OMPIRBuilder] Don't use invalid debug loc in declare mapper function. (#148263)

This is similar to https://github.com/llvm/llvm-project/pull/147950 but
for declare mapper function.

Added: 
    mlir/test/Target/LLVMIR/omptarget-debug-declare-mapper.mlir

Modified: 
    llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
index 24d8169ffd663..1c5f84c65ddd5 100644
--- a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
+++ b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
@@ -10596,8 +10596,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);
@@ -10911,7 +10912,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..b6eb1f33c9daf
--- /dev/null
+++ b/mlir/test/Target/LLVMIR/omptarget-debug-declare-mapper.mlir
@@ -0,0 +1,50 @@
+// 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)
+
+#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>[#loc])
+
+// The mapper function has no debug info of its own, so none of its
+// instructions may carry a debug location belonging to another function.
+
+// CHECK-LABEL: define internal void @{{.*}}omp_mapper{{.*}}_QQFmy_testmy_mapper
+// CHECK-NOT: !dbg
+// CHECK: ret void{{$}}
+// CHECK-NEXT: }
+


        


More information about the Mlir-commits mailing list