[flang-commits] [flang] [flang][debug] Generate DISubprogramAttr for omp::TargetOp. (PR #138039)
Sergio Afonso via flang-commits
flang-commits at lists.llvm.org
Tue May 13 04:30:12 PDT 2025
================
@@ -510,8 +542,73 @@ void AddDebugInfoPass::handleFuncOp(mlir::func::FuncOp funcOp,
subTypeAttr, entities, /*annotations=*/{});
funcOp->setLoc(builder.getFusedLoc({l}, spAttr));
+ /* When we process the DeclareOp inside the OpenMP target region, all the
+ variables get the DISubprogram of the parent function of the target op as
+ the scope. In the codegen (to llvm ir), OpenMP target op results in the
+ creation of a separate function. As the variables in the debug info have
+ the DISubprogram of the parent function as the scope, the variables
+ need to be updated at codegen time to avoid verification failures.
+
+ This updating after the fact becomes more and more difficult when types
+ are dependent on local variables like in the case of variable size arrays
+ or string. We not only have to generate new variables but also new types.
+ We can avoid this problem by generating a DISubprogramAttr here for the
+ target op and make sure that all the variables inside the target region
+ get the correct scope in the first place. */
+ funcOp.walk([&](mlir::omp::TargetOp targetOp) {
+ unsigned line = getLineFromLoc(targetOp.getLoc());
+ mlir::StringAttr Name =
----------------
skatrak wrote:
Nit: Variable names here should start with lowercase. There are a few cases of this not being followed below.
https://github.com/llvm/llvm-project/pull/138039
More information about the flang-commits
mailing list