[flang-commits] [flang] 62cc6b0 - [flang][fir] Add support to mangle/deconstruct namelist group name
Valentin Clement via flang-commits
flang-commits at lists.llvm.org
Fri Sep 24 13:11:12 PDT 2021
Author: Valentin Clement
Date: 2021-09-24T22:10:39+02:00
New Revision: 62cc6b0da2912d770c125fc9ea0949f3a7b75fb9
URL: https://github.com/llvm/llvm-project/commit/62cc6b0da2912d770c125fc9ea0949f3a7b75fb9
DIFF: https://github.com/llvm/llvm-project/commit/62cc6b0da2912d770c125fc9ea0949f3a7b75fb9.diff
LOG: [flang][fir] Add support to mangle/deconstruct namelist group name
Add support to create unique name for namelist group and be able to
deconstruct them.
This patch is part of the upstreaming effort from fir-dev branch.
Reviewed By: jeanPerier
Differential Revision: https://reviews.llvm.org/D110331
Co-authored-by: Jean Perier <jperier at nvidia.com>
Co-authored-by: Eric Schweitz <eschweitz at nvidia.com>
Added:
Modified:
flang/include/flang/Optimizer/Support/InternalNames.h
flang/lib/Lower/Mangler.cpp
flang/lib/Optimizer/Support/InternalNames.cpp
flang/unittests/Optimizer/InternalNamesTest.cpp
Removed:
################################################################################
diff --git a/flang/include/flang/Optimizer/Support/InternalNames.h b/flang/include/flang/Optimizer/Support/InternalNames.h
index fa98cc2a8e490..36e3ed093ca42 100644
--- a/flang/include/flang/Optimizer/Support/InternalNames.h
+++ b/flang/include/flang/Optimizer/Support/InternalNames.h
@@ -41,7 +41,8 @@ struct NameUniquer {
INTRINSIC_TYPE_DESC,
PROCEDURE,
TYPE_DESC,
- VARIABLE
+ VARIABLE,
+ NAMELIST_GROUP
};
/// Components of an unparsed unique name
@@ -112,6 +113,11 @@ struct NameUniquer {
llvm::Optional<llvm::StringRef> host,
llvm::StringRef name);
+ /// Unique a namelist group name
+ static std::string doNamelistGroup(llvm::ArrayRef<llvm::StringRef> modules,
+ llvm::Optional<llvm::StringRef> host,
+ llvm::StringRef name);
+
/// Entry point for the PROGRAM (called by the runtime)
/// Can be overridden with the `--main-entry-name=<name>` option.
static llvm::StringRef doProgramEntry();
diff --git a/flang/lib/Lower/Mangler.cpp b/flang/lib/Lower/Mangler.cpp
index 07d9e63e04232..f74afc5b53dce 100644
--- a/flang/lib/Lower/Mangler.cpp
+++ b/flang/lib/Lower/Mangler.cpp
@@ -114,6 +114,12 @@ Fortran::lower::mangle::mangleName(const Fortran::semantics::Symbol &symbol,
symbolName);
return fir::NameUniquer::doVariable(modNames, optHost, symbolName);
},
+ [&](const Fortran::semantics::NamelistDetails &) {
+ auto modNames = moduleNames(ultimateSymbol);
+ auto optHost = hostName(ultimateSymbol);
+ return fir::NameUniquer::doNamelistGroup(modNames, optHost,
+ symbolName);
+ },
[&](const Fortran::semantics::CommonBlockDetails &) {
return fir::NameUniquer::doCommonBlock(symbolName);
},
diff --git a/flang/lib/Optimizer/Support/InternalNames.cpp b/flang/lib/Optimizer/Support/InternalNames.cpp
index a7493d7494fee..bd281638e443c 100644
--- a/flang/lib/Optimizer/Support/InternalNames.cpp
+++ b/flang/lib/Optimizer/Support/InternalNames.cpp
@@ -205,6 +205,15 @@ fir::NameUniquer::doVariable(llvm::ArrayRef<llvm::StringRef> modules,
return result.append(toLower(name));
}
+std::string
+fir::NameUniquer::doNamelistGroup(llvm::ArrayRef<llvm::StringRef> modules,
+ llvm::Optional<llvm::StringRef> host,
+ llvm::StringRef name) {
+ std::string result = prefix();
+ result.append(doModulesHost(modules, host)).append("G");
+ return result.append(toLower(name));
+}
+
llvm::StringRef fir::NameUniquer::doProgramEntry() {
if (mainEntryName.size())
return mainEntryName;
@@ -279,6 +288,10 @@ fir::NameUniquer::deconstruct(llvm::StringRef uniq) {
else
kinds.push_back(readInt(uniq, i, i + 1, end));
break;
+ case 'G':
+ nk = NameKind::NAMELIST_GROUP;
+ name = readName(uniq, i, i + 1, end);
+ break;
default:
assert(false && "unknown uniquing code");
diff --git a/flang/unittests/Optimizer/InternalNamesTest.cpp b/flang/unittests/Optimizer/InternalNamesTest.cpp
index 831d7997e3f82..ca26cf95ab4a7 100644
--- a/flang/unittests/Optimizer/InternalNamesTest.cpp
+++ b/flang/unittests/Optimizer/InternalNamesTest.cpp
@@ -162,6 +162,12 @@ TEST(InternalNamesTest, doProgramEntry) {
ASSERT_EQ(actual.str(), expectedMangledName);
}
+TEST(InternalNamesTest, doNamelistGroup) {
+ std::string actual = NameUniquer::doNamelistGroup({"mod1"}, {}, "nlg");
+ std::string expectedMangledName = "_QMmod1Gnlg";
+ ASSERT_EQ(actual, expectedMangledName);
+}
+
TEST(InternalNamesTest, deconstructTest) {
std::pair actual = NameUniquer::deconstruct("_QBhello");
auto expectedNameKind = NameUniquer::NameKind::COMMON;
@@ -208,6 +214,11 @@ TEST(InternalNamesTest, complexdeconstructTest) {
expectedNameKind = NameKind::DISPATCH_TABLE;
expectedComponents = {{}, {}, "t", {}};
validateDeconstructedName(actual, expectedNameKind, expectedComponents);
+
+ actual = NameUniquer::deconstruct("_QFmstartGmpitop");
+ expectedNameKind = NameKind::NAMELIST_GROUP;
+ expectedComponents = {{}, {"mstart"}, "mpitop", {}};
+ validateDeconstructedName(actual, expectedNameKind, expectedComponents);
}
// main() from gtest_main
More information about the flang-commits
mailing list