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 ®istry) 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 Springervoid registerTestCfAssertPass() { PassRegistration<TestAssertPass>(); } 55*325b58d5SMatthias Springer } // namespace mlir::test 56