After the recent re-factoring of the driver code (https://reviews.llvm.org/D125007), `ExecuteAction` was renamed as `executeAction`. This patch updates the examples in Flang accordingly. If you set `FLANG_BUILD_EXAMPLES` to `On` when building Flang, then the refactoring from D125007 would have caused build failures for you. This patch fixes that. This is fairly straightforward and fixes buildbot failures, so I'm sending this without a review.
72 lines
2.3 KiB
C++
72 lines
2.3 KiB
C++
//===-- examples/flang-omp-report-plugin/flang-omp-report.cpp -------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
// This plugin parses a Fortran source file and generates a YAML report with
|
|
// all the OpenMP constructs and clauses and which line they're located on.
|
|
//
|
|
// The plugin may be invoked as:
|
|
// ./bin/flang-new -fc1 -load lib/flangOmpReport.so -plugin flang-omp-report
|
|
// -fopenmp
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "FlangOmpReportVisitor.h"
|
|
|
|
#include "flang/Frontend/FrontendActions.h"
|
|
#include "flang/Frontend/FrontendPluginRegistry.h"
|
|
#include "flang/Parser/dump-parse-tree.h"
|
|
#include "llvm/Support/YAMLParser.h"
|
|
#include "llvm/Support/YAMLTraits.h"
|
|
|
|
using namespace Fortran::frontend;
|
|
using namespace Fortran::parser;
|
|
|
|
LLVM_YAML_IS_SEQUENCE_VECTOR(LogRecord)
|
|
LLVM_YAML_IS_SEQUENCE_VECTOR(ClauseInfo)
|
|
namespace llvm {
|
|
namespace yaml {
|
|
using llvm::yaml::IO;
|
|
using llvm::yaml::MappingTraits;
|
|
template <> struct MappingTraits<ClauseInfo> {
|
|
static void mapping(IO &io, ClauseInfo &info) {
|
|
io.mapRequired("clause", info.clause);
|
|
io.mapRequired("details", info.clauseDetails);
|
|
}
|
|
};
|
|
template <> struct MappingTraits<LogRecord> {
|
|
static void mapping(IO &io, LogRecord &info) {
|
|
io.mapRequired("file", info.file);
|
|
io.mapRequired("line", info.line);
|
|
io.mapRequired("construct", info.construct);
|
|
io.mapRequired("clauses", info.clauses);
|
|
}
|
|
};
|
|
} // namespace yaml
|
|
} // namespace llvm
|
|
|
|
class FlangOmpReport : public PluginParseTreeAction {
|
|
void executeAction() override {
|
|
// Prepare the parse tree and the visitor
|
|
Parsing &parsing = getParsing();
|
|
OpenMPCounterVisitor visitor;
|
|
visitor.parsing = &parsing;
|
|
|
|
// Walk the parse tree
|
|
Walk(parsing.parseTree(), visitor);
|
|
|
|
// Dump the output
|
|
std::unique_ptr<llvm::raw_pwrite_stream> OS{
|
|
createOutputFile(/*extension=*/"yaml")};
|
|
llvm::yaml::Output yout(*OS);
|
|
|
|
yout << visitor.constructClauses;
|
|
}
|
|
};
|
|
|
|
static FrontendPluginRegistry::Add<FlangOmpReport> X("flang-omp-report",
|
|
"Generate a YAML summary of OpenMP constructs and clauses");
|