18508a63bSEmilio Cota //===- X86VectorToLLVMIRTranslation.cpp - Translate X86Vector to LLVM IR---===//
28508a63bSEmilio Cota //
38508a63bSEmilio Cota // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
48508a63bSEmilio Cota // See https://llvm.org/LICENSE.txt for license information.
58508a63bSEmilio Cota // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
68508a63bSEmilio Cota //
78508a63bSEmilio Cota //===----------------------------------------------------------------------===//
88508a63bSEmilio Cota //
98508a63bSEmilio Cota // This file implements a translation between the MLIR X86Vector dialect and
108508a63bSEmilio Cota // LLVM IR.
118508a63bSEmilio Cota //
128508a63bSEmilio Cota //===----------------------------------------------------------------------===//
138508a63bSEmilio Cota 
148508a63bSEmilio Cota #include "mlir/Target/LLVMIR/Dialect/X86Vector/X86VectorToLLVMIRTranslation.h"
158508a63bSEmilio Cota #include "mlir/Dialect/X86Vector/X86VectorDialect.h"
168508a63bSEmilio Cota #include "mlir/IR/Operation.h"
178508a63bSEmilio Cota #include "mlir/Target/LLVMIR/ModuleTranslation.h"
188508a63bSEmilio Cota 
198508a63bSEmilio Cota #include "llvm/IR/IRBuilder.h"
208508a63bSEmilio Cota #include "llvm/IR/IntrinsicsX86.h"
218508a63bSEmilio Cota 
228508a63bSEmilio Cota using namespace mlir;
238508a63bSEmilio Cota using namespace mlir::LLVM;
248508a63bSEmilio Cota 
258508a63bSEmilio Cota namespace {
268508a63bSEmilio Cota /// Implementation of the dialect interface that converts operations belonging
278508a63bSEmilio Cota /// to the X86Vector dialect to LLVM IR.
288508a63bSEmilio Cota class X86VectorDialectLLVMIRTranslationInterface
298508a63bSEmilio Cota     : public LLVMTranslationDialectInterface {
308508a63bSEmilio Cota public:
318508a63bSEmilio Cota   using LLVMTranslationDialectInterface::LLVMTranslationDialectInterface;
328508a63bSEmilio Cota 
338508a63bSEmilio Cota   /// Translates the given operation to LLVM IR using the provided IR builder
348508a63bSEmilio Cota   /// and saving the state in `moduleTranslation`.
358508a63bSEmilio Cota   LogicalResult
convertOperation(Operation * op,llvm::IRBuilderBase & builder,LLVM::ModuleTranslation & moduleTranslation) const368508a63bSEmilio Cota   convertOperation(Operation *op, llvm::IRBuilderBase &builder,
378508a63bSEmilio Cota                    LLVM::ModuleTranslation &moduleTranslation) const final {
388508a63bSEmilio Cota     Operation &opInst = *op;
398508a63bSEmilio Cota #include "mlir/Dialect/X86Vector/X86VectorConversions.inc"
408508a63bSEmilio Cota 
418508a63bSEmilio Cota     return failure();
428508a63bSEmilio Cota   }
438508a63bSEmilio Cota };
44be0a7e9fSMehdi Amini } // namespace
458508a63bSEmilio Cota 
registerX86VectorDialectTranslation(DialectRegistry & registry)468508a63bSEmilio Cota void mlir::registerX86VectorDialectTranslation(DialectRegistry &registry) {
478508a63bSEmilio Cota   registry.insert<x86vector::X86VectorDialect>();
48*77eee579SRiver Riddle   registry.addExtension(
49*77eee579SRiver Riddle       +[](MLIRContext *ctx, x86vector::X86VectorDialect *dialect) {
50*77eee579SRiver Riddle         dialect->addInterfaces<X86VectorDialectLLVMIRTranslationInterface>();
51*77eee579SRiver Riddle       });
528508a63bSEmilio Cota }
538508a63bSEmilio Cota 
registerX86VectorDialectTranslation(MLIRContext & context)548508a63bSEmilio Cota void mlir::registerX86VectorDialectTranslation(MLIRContext &context) {
558508a63bSEmilio Cota   DialectRegistry registry;
568508a63bSEmilio Cota   registerX86VectorDialectTranslation(registry);
578508a63bSEmilio Cota   context.appendDialectRegistry(registry);
588508a63bSEmilio Cota }
59