[clang] [flang] [llvm] [polly] [Plugins] Pass arguments to a pass plugin with -plugin-arg (PR #226773)
Alexis Engelke via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 29 05:39:07 PDT 2026
================
@@ -47,3 +49,32 @@ Expected<PassPlugin> PassPlugin::Load(const std::string &Filename) {
return P;
}
+
+Error llvm::passPluginArguments(ArrayRef<PassPluginLibraryInfo> Infos,
+ ArrayRef<std::string> Args) {
+ DenseMap<StringRef, unsigned> Index;
+ for (auto [I, Info] : enumerate(Infos))
+ Index[Info.PluginName] = I;
+ // The argument follows the first comma, so it is NUL-terminated.
+ SmallVector<SmallVector<const char *, 0>, 0> PluginArgs(Infos.size());
+ for (const std::string &Arg : Args) {
+ auto [Name, Rest] = StringRef(Arg).split(',');
+ if (!Rest.data())
+ return createStringError("expected <plugin>,<arg> in -plugin-arg=" + Arg);
+ auto It = Index.find(Name);
+ if (It == Index.end())
+ return createStringError("no pass plugin named '" + Name +
+ "' is loaded, in -plugin-arg=" + Arg);
+ PluginArgs[It->second].push_back(Rest.data());
----------------
aengelke wrote:
Please add a comment explaining why Rest is null-terminated. This seems rather sketchy but is unfortunately necessary due to cl::ParseCommandLineOptions API limitations...
https://github.com/llvm/llvm-project/pull/226773
More information about the llvm-commits
mailing list