blob: c57db63f2c99219f1f357c03796bfb31b7a9ceff [file] [log] [blame]
// Copyright 2020 The IREE Authors
//
// Licensed 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 "iree/compiler/Dialect/Util/IR/UtilOps.h"
#include "iree/compiler/Dialect/VM/IR/VMOps.h"
#include "mlir/Transforms/DialectConversion.h"
namespace mlir {
namespace iree_compiler {
class StatusCheckOkOpConversion
: public OpConversionPattern<IREE::Util::StatusCheckOkOp> {
public:
StatusCheckOkOpConversion(MLIRContext *context, TypeConverter &typeConverter)
: OpConversionPattern(context) {}
LogicalResult matchAndRewrite(
IREE::Util::StatusCheckOkOp op, llvm::ArrayRef<Value> newOperands,
ConversionPatternRewriter &rewriter) const override {
IREE::Util::StatusCheckOkOp::Adaptor operands(newOperands);
// If status value is non-zero, fail.
rewriter.replaceOpWithNewOp<IREE::VM::CondFailOp>(
op, operands.status(), op.message().getValueOr(""));
return success();
}
};
void populateUtilStatusToVMPatterns(MLIRContext *context,
ConversionTarget &conversionTarget,
TypeConverter &typeConverter,
OwningRewritePatternList &patterns) {
conversionTarget.addIllegalOp<IREE::Util::StatusCheckOkOp>();
patterns.insert<StatusCheckOkOpConversion>(context, typeConverter);
}
} // namespace iree_compiler
} // namespace mlir