brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · db76974 Raw
56 lines · cpp
1//===- TestAssert.cpp - Test cf.assert Lowering  ----------------*- c++ -*-===//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// This file implements a pass for integration testing of wide integer10// emulation patterns. Applies conversion patterns only to functions whose11// names start with a specified prefix.12//13//===----------------------------------------------------------------------===//14 15#include "mlir/Conversion/ControlFlowToLLVM/ControlFlowToLLVM.h"16#include "mlir/Conversion/LLVMCommon/ConversionTarget.h"17#include "mlir/Conversion/LLVMCommon/TypeConverter.h"18#include "mlir/Dialect/ControlFlow/IR/ControlFlow.h"19#include "mlir/Dialect/LLVMIR/LLVMDialect.h"20#include "mlir/Pass/Pass.h"21#include "mlir/Transforms/DialectConversion.h"22 23using namespace mlir;24 25namespace {26struct TestAssertPass27    : public PassWrapper<TestAssertPass, OperationPass<ModuleOp>> {28  MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(TestAssertPass)29 30  void getDependentDialects(DialectRegistry &registry) const override {31    registry.insert<cf::ControlFlowDialect, LLVM::LLVMDialect>();32  }33  StringRef getArgument() const final { return "test-cf-assert"; }34  StringRef getDescription() const final {35    return "Function pass to test cf.assert lowering to LLVM without abort";36  }37 38  void runOnOperation() override {39    LLVMConversionTarget target(getContext());40    RewritePatternSet patterns(&getContext());41 42    LLVMTypeConverter converter(&getContext());43    mlir::cf::populateAssertToLLVMConversionPattern(converter, patterns,44                                                    /*abortOnFailure=*/false);45 46    if (failed(applyPartialConversion(getOperation(), target,47                                      std::move(patterns))))48      signalPassFailure();49  }50};51} // namespace52 53namespace mlir::test {54void registerTestCfAssertPass() { PassRegistration<TestAssertPass>(); }55} // namespace mlir::test56