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 Cotavoid mlir::registerX86VectorDialectTranslation(DialectRegistry ®istry) { 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 Cotavoid mlir::registerX86VectorDialectTranslation(MLIRContext &context) { 558508a63bSEmilio Cota DialectRegistry registry; 568508a63bSEmilio Cota registerX86VectorDialectTranslation(registry); 578508a63bSEmilio Cota context.appendDialectRegistry(registry); 588508a63bSEmilio Cota } 59