1//===- LegalizeForLLVMExport.cpp - Prepare AMX for LLVM translation ----===//
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-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "mlir/Dialect/AMX/Transforms.h"
10
11#include "mlir/Conversion/ConvertToLLVM/ToLLVMInterface.h"
12#include "mlir/Conversion/LLVMCommon/ConversionTarget.h"
13#include "mlir/Conversion/LLVMCommon/Pattern.h"
14#include "mlir/Dialect/AMX/AMXDialect.h"
15#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
16#include "mlir/IR/BuiltinOps.h"
17#include "mlir/IR/PatternMatch.h"
18
19using namespace mlir;
20using namespace mlir::amx;
21
22namespace {
23
24/// Generic one-to-one conversion of simply mappable operations into calls
25/// to their respective LLVM intrinsics.
26struct AMXIntrinsicOpConversion
27 : public OpInterfaceConversionPattern<amx::AMXIntrinsicOp> {
28 using OpInterfaceConversionPattern<
29 amx::AMXIntrinsicOp>::OpInterfaceConversionPattern;
30
31 AMXIntrinsicOpConversion(const LLVMTypeConverter &typeConverter,
32 PatternBenefit benefit = 1)
33 : OpInterfaceConversionPattern(typeConverter, &typeConverter.getContext(),
34 benefit),
35 typeConverter(typeConverter) {}
36
37 LogicalResult
38 matchAndRewrite(amx::AMXIntrinsicOp op, ArrayRef<Value> operands,
39 ConversionPatternRewriter &rewriter) const override {
40 return LLVM::detail::intrinsicRewrite(
41 op: op, intrinsic: rewriter.getStringAttr(bytes: op.getIntrinsicName()),
42 operands: op.getIntrinsicOperands(operands, typeConverter, rewriter),
43 typeConverter, rewriter);
44 }
45
46private:
47 const LLVMTypeConverter &typeConverter;
48};
49
50} // namespace
51
52void mlir::populateAMXLegalizeForLLVMExportPatterns(
53 LLVMTypeConverter &converter, RewritePatternSet &patterns) {
54 patterns.add<AMXIntrinsicOpConversion>(arg&: converter);
55 converter.addConversion(callback: [&](amx::TileType type) {
56 return LLVM::LLVMX86AMXType::get(&converter.getContext());
57 });
58}
59
60void mlir::configureAMXLegalizeForExportTarget(LLVMConversionTarget &target) {
61 target.addIllegalDialect<AMXDialect>();
62}
63

Provided by KDAB

Privacy Policy
Learn to use CMake with our Intro Training
Find out more

source code of mlir/lib/Dialect/AMX/Transforms/LegalizeForLLVMExport.cpp