Files
clang-p2996/mlir/unittests/Pass/PassPipelineParserTest.cpp
River Riddle 0998637e6f [mlir] Add a parsePassPipeline overload that returns a new pass manager
This overload parses a pipeline string that contains the anchor operation type, and returns an OpPassManager
corresponding to the provided pipeline. This is useful for various situations, such as dynamic pass pipelines
which are not anchored within a parent pass pipeline.

fixes #52813

Differential Revision: https://reviews.llvm.org/D116525
2022-01-12 14:54:30 -08:00

46 lines
1.5 KiB
C++

//===- PassPipelineParserTest.cpp - Pass Parser unit tests ----------------===//
//
// 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
//
//===----------------------------------------------------------------------===//
#include "mlir/IR/Builders.h"
#include "mlir/IR/BuiltinOps.h"
#include "mlir/Pass/Pass.h"
#include "mlir/Pass/PassManager.h"
#include "mlir/Pass/PassRegistry.h"
#include "llvm/Support/raw_ostream.h"
#include "gtest/gtest.h"
#include <memory>
using namespace mlir;
using namespace mlir::detail;
namespace {
TEST(PassPipelineParserTest, InvalidOpAnchor) {
// Helper functor used to parse a pipeline and check that it results in the
// provided error message.
auto checkParseFailure = [](StringRef pipeline, StringRef expectedErrorMsg) {
std::string errorMsg;
{
llvm::raw_string_ostream os(errorMsg);
FailureOr<OpPassManager> result = parsePassPipeline(pipeline, os);
EXPECT_TRUE(failed(result));
}
EXPECT_TRUE(StringRef(errorMsg).contains(expectedErrorMsg));
};
// Handle parse errors when the anchor is incorrectly structured.
StringRef anchorErrorMsg =
"expected pass pipeline to be wrapped with the anchor operation type";
checkParseFailure("module", anchorErrorMsg);
checkParseFailure("()", anchorErrorMsg);
checkParseFailure("module(", anchorErrorMsg);
checkParseFailure("module)", anchorErrorMsg);
}
} // namespace