xref: /llvm-project/mlir/test/lib/Dialect/ControlFlow/TestAssert.cpp (revision 325b58d59f0073c364b29d6e125b809c76484a16)
1*325b58d5SMatthias Springer //===- TestAssert.cpp - Test cf.assert Lowering  ----------------*- c++ -*-===//
2*325b58d5SMatthias Springer //
3*325b58d5SMatthias Springer // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*325b58d5SMatthias Springer // See https://llvm.org/LICENSE.txt for license information.
5*325b58d5SMatthias Springer // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*325b58d5SMatthias Springer //
7*325b58d5SMatthias Springer //===----------------------------------------------------------------------===//
8*325b58d5SMatthias Springer //
9*325b58d5SMatthias Springer // This file implements a pass for integration testing of wide integer
10*325b58d5SMatthias Springer // emulation patterns. Applies conversion patterns only to functions whose
11*325b58d5SMatthias Springer // names start with a specified prefix.
12*325b58d5SMatthias Springer //
13*325b58d5SMatthias Springer //===----------------------------------------------------------------------===//
14*325b58d5SMatthias Springer 
15*325b58d5SMatthias Springer #include "mlir/Conversion/ControlFlowToLLVM/ControlFlowToLLVM.h"
16*325b58d5SMatthias Springer #include "mlir/Conversion/LLVMCommon/ConversionTarget.h"
17*325b58d5SMatthias Springer #include "mlir/Conversion/LLVMCommon/TypeConverter.h"
18*325b58d5SMatthias Springer #include "mlir/Dialect/ControlFlow/IR/ControlFlow.h"
19*325b58d5SMatthias Springer #include "mlir/Dialect/LLVMIR/LLVMDialect.h"
20*325b58d5SMatthias Springer #include "mlir/Pass/Pass.h"
21*325b58d5SMatthias Springer #include "mlir/Transforms/DialectConversion.h"
22*325b58d5SMatthias Springer 
23*325b58d5SMatthias Springer using namespace mlir;
24*325b58d5SMatthias Springer 
25*325b58d5SMatthias Springer namespace {
26*325b58d5SMatthias Springer struct TestAssertPass
27*325b58d5SMatthias Springer     : public PassWrapper<TestAssertPass, OperationPass<ModuleOp>> {
MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID__anon18aae7aa0111::TestAssertPass28*325b58d5SMatthias Springer   MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(TestAssertPass)
29*325b58d5SMatthias Springer 
30*325b58d5SMatthias Springer   void getDependentDialects(DialectRegistry &registry) const override {
31*325b58d5SMatthias Springer     registry.insert<cf::ControlFlowDialect, LLVM::LLVMDialect>();
32*325b58d5SMatthias Springer   }
getArgument__anon18aae7aa0111::TestAssertPass33*325b58d5SMatthias Springer   StringRef getArgument() const final { return "test-cf-assert"; }
getDescription__anon18aae7aa0111::TestAssertPass34*325b58d5SMatthias Springer   StringRef getDescription() const final {
35*325b58d5SMatthias Springer     return "Function pass to test cf.assert lowering to LLVM without abort";
36*325b58d5SMatthias Springer   }
37*325b58d5SMatthias Springer 
runOnOperation__anon18aae7aa0111::TestAssertPass38*325b58d5SMatthias Springer   void runOnOperation() override {
39*325b58d5SMatthias Springer     LLVMConversionTarget target(getContext());
40*325b58d5SMatthias Springer     RewritePatternSet patterns(&getContext());
41*325b58d5SMatthias Springer 
42*325b58d5SMatthias Springer     LLVMTypeConverter converter(&getContext());
43*325b58d5SMatthias Springer     mlir::cf::populateAssertToLLVMConversionPattern(converter, patterns,
44*325b58d5SMatthias Springer                                                     /*abortOnFailure=*/false);
45*325b58d5SMatthias Springer 
46*325b58d5SMatthias Springer     if (failed(applyPartialConversion(getOperation(), target,
47*325b58d5SMatthias Springer                                       std::move(patterns))))
48*325b58d5SMatthias Springer       signalPassFailure();
49*325b58d5SMatthias Springer   }
50*325b58d5SMatthias Springer };
51*325b58d5SMatthias Springer } // namespace
52*325b58d5SMatthias Springer 
53*325b58d5SMatthias Springer namespace mlir::test {
registerTestCfAssertPass()54*325b58d5SMatthias Springer void registerTestCfAssertPass() { PassRegistration<TestAssertPass>(); }
55*325b58d5SMatthias Springer } // namespace mlir::test
56