brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.4 KiB · ac01d49 Raw
120 lines · cpp
1//===- PassGenTest.cpp - TableGen PassGen Tests ---------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "mlir/Pass/Pass.h"10#include "llvm/ADT/STLExtras.h"11 12#include "gmock/gmock.h"13 14static std::unique_ptr<mlir::Pass>15createTestPassWithCustomConstructor(int v = 0);16 17#define GEN_PASS_DECL18#define GEN_PASS_REGISTRATION19#include "PassGenTest.h.inc"20 21#define GEN_PASS_DEF_TESTPASS22#define GEN_PASS_DEF_TESTPASSWITHOPTIONS23#define GEN_PASS_DEF_TESTPASSWITHCUSTOMCONSTRUCTOR24#include "PassGenTest.h.inc"25 26struct TestPass : public impl::TestPassBase<TestPass> {27  using TestPassBase::TestPassBase;28 29  void runOnOperation() override {}30 31  std::unique_ptr<mlir::Pass> clone() const {32    return TestPassBase<TestPass>::clone();33  }34};35 36TEST(PassGenTest, defaultGeneratedConstructor) {37  std::unique_ptr<mlir::Pass> pass = createTestPass();38  EXPECT_TRUE(pass.get() != nullptr);39}40 41TEST(PassGenTest, PassClone) {42  mlir::MLIRContext context;43 44  const auto unwrap = [](const std::unique_ptr<mlir::Pass> &pass) {45    return static_cast<const TestPass *>(pass.get());46  };47 48  const auto origPass = createTestPass();49  const auto clonePass = unwrap(origPass)->clone();50 51  EXPECT_TRUE(clonePass.get() != nullptr);52  EXPECT_TRUE(origPass.get() != clonePass.get());53}54 55struct TestPassWithOptions56    : public impl::TestPassWithOptionsBase<TestPassWithOptions> {57  using TestPassWithOptionsBase::TestPassWithOptionsBase;58 59  void runOnOperation() override {}60 61  std::unique_ptr<mlir::Pass> clone() const {62    return TestPassWithOptionsBase<TestPassWithOptions>::clone();63  }64 65  int getTestOption() const { return testOption; }66 67  llvm::ArrayRef<int64_t> getTestListOption() const { return testListOption; }68};69 70TEST(PassGenTest, PassOptions) {71  mlir::MLIRContext context;72 73  TestPassWithOptionsOptions options;74  options.testOption = 57;75 76  options.testListOption = {1, 2};77 78  const auto unwrap = [](const std::unique_ptr<mlir::Pass> &pass) {79    return static_cast<const TestPassWithOptions *>(pass.get());80  };81 82  const auto pass = createTestPassWithOptions(options);83 84  EXPECT_EQ(unwrap(pass)->getTestOption(), 57);85  EXPECT_EQ(unwrap(pass)->getTestListOption()[0], 1);86  EXPECT_EQ(unwrap(pass)->getTestListOption()[1], 2);87}88 89struct TestPassWithCustomConstructor90    : public impl::TestPassWithCustomConstructorBase<91          TestPassWithCustomConstructor> {92  explicit TestPassWithCustomConstructor(int v) : extraVal(v) {}93 94  void runOnOperation() override {}95 96  std::unique_ptr<mlir::Pass> clone() const {97    return TestPassWithCustomConstructorBase<98        TestPassWithCustomConstructor>::clone();99  }100 101  unsigned int extraVal = 23;102};103 104std::unique_ptr<mlir::Pass> createTestPassWithCustomConstructor(int v) {105  return std::make_unique<TestPassWithCustomConstructor>(v);106}107 108TEST(PassGenTest, PassCloneWithCustomConstructor) {109  mlir::MLIRContext context;110 111  const auto unwrap = [](const std::unique_ptr<mlir::Pass> &pass) {112    return static_cast<const TestPassWithCustomConstructor *>(pass.get());113  };114 115  const auto origPass = createTestPassWithCustomConstructor(10);116  const auto clonePass = unwrap(origPass)->clone();117 118  EXPECT_EQ(unwrap(origPass)->extraVal, unwrap(clonePass)->extraVal);119}120