diff --git a/clang/include/clang/CIR/Dialect/IR/CIRAttrVisitor.h b/clang/include/clang/CIR/Dialect/IR/CIRAttrVisitor.h deleted file mode 100644 index 106fb3d0ed17..000000000000 --- a/clang/include/clang/CIR/Dialect/IR/CIRAttrVisitor.h +++ /dev/null @@ -1,47 +0,0 @@ -//===- CIRAttrVisitor.h - Visitor for CIR attributes ------------*- C++ -*-===// -// -// Part of the LLVM Project, 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 -// -//===----------------------------------------------------------------------===// -// -// This file defines the CirAttrVisitor interface. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_CLANG_CIR_DIALECT_IR_CIRATTRVISITOR_H -#define LLVM_CLANG_CIR_DIALECT_IR_CIRATTRVISITOR_H - -#include "clang/CIR/Dialect/IR/CIRAttrs.h" - -namespace cir { - -#define DISPATCH(NAME) return getImpl()->visitCir##NAME(cirAttr); - -template class CirAttrVisitor { -public: - RetTy visit(mlir::Attribute attr) { -#define ATTRDEF(NAME) \ - if (const auto cirAttr = mlir::dyn_cast(attr)) \ - DISPATCH(NAME); -#include "clang/CIR/Dialect/IR/CIRAttrDefsList.inc" - llvm_unreachable("unhandled attribute type"); - } - - // If the implementation chooses not to implement a certain visit - // method, fall back to the parent. -#define ATTRDEF(NAME) \ - RetTy visitCir##NAME(NAME cirAttr) { DISPATCH(Attr); } -#include "clang/CIR/Dialect/IR/CIRAttrDefsList.inc" - - RetTy visitCirAttr(mlir::Attribute attr) { return RetTy(); } - - ImplClass *getImpl() { return static_cast(this); } -}; - -#undef DISPATCH - -} // namespace cir - -#endif // LLVM_CLANG_CIR_DIALECT_IR_CIRATTRVISITOR_H diff --git a/clang/include/clang/CIR/Dialect/IR/CMakeLists.txt b/clang/include/clang/CIR/Dialect/IR/CMakeLists.txt index 014bb3d9b03c..3d43b06c6217 100644 --- a/clang/include/clang/CIR/Dialect/IR/CMakeLists.txt +++ b/clang/include/clang/CIR/Dialect/IR/CMakeLists.txt @@ -26,7 +26,6 @@ mlir_tablegen(CIROpsStructs.h.inc -gen-attrdef-decls) mlir_tablegen(CIROpsStructs.cpp.inc -gen-attrdef-defs) mlir_tablegen(CIROpsAttributes.h.inc -gen-attrdef-decls) mlir_tablegen(CIROpsAttributes.cpp.inc -gen-attrdef-defs) -mlir_tablegen(CIRAttrDefsList.inc -gen-attrdef-list) add_public_tablegen_target(MLIRCIREnumsGen) clang_tablegen(CIRBuiltinsLowering.inc -gen-cir-builtins-lowering diff --git a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp index 833d256d0404..746140c25161 100644 --- a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp +++ b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp @@ -41,7 +41,6 @@ #include "mlir/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.h" #include "mlir/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.h" #include "mlir/Target/LLVMIR/Export.h" -#include "clang/CIR/Dialect/IR/CIRAttrVisitor.h" #include "clang/CIR/Dialect/Passes.h" #include "clang/CIR/LoweringHelpers.h" #include "clang/CIR/MissingFeatures.h" @@ -52,6 +51,7 @@ #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" #include "llvm/ADT/Twine.h" +#include "llvm/ADT/TypeSwitch.h" #include "llvm/IR/DataLayout.h" #include "llvm/IR/DerivedTypes.h" #include "llvm/Support/Casting.h" @@ -426,7 +426,7 @@ emitCirAttrToMemory(mlir::Operation *parentOp, mlir::Attribute attr, } /// Switches on the type of attribute and calls the appropriate conversion. -class CirAttrToValue : public CirAttrVisitor { +class CirAttrToValue { public: CirAttrToValue(mlir::Operation *parentOp, mlir::ConversionPatternRewriter &rewriter, @@ -435,19 +435,29 @@ class CirAttrToValue : public CirAttrVisitor { : parentOp(parentOp), rewriter(rewriter), converter(converter), dataLayout(dataLayout) {} - mlir::Value visitCirIntAttr(cir::IntAttr attr); - mlir::Value visitCirFPAttr(cir::FPAttr attr); - mlir::Value visitCirConstPtrAttr(cir::ConstPtrAttr attr); - mlir::Value visitCirConstStructAttr(cir::ConstStructAttr attr); - mlir::Value visitCirConstArrayAttr(cir::ConstArrayAttr attr); - mlir::Value visitCirConstVectorAttr(cir::ConstVectorAttr attr); - mlir::Value visitCirBoolAttr(cir::BoolAttr attr); - mlir::Value visitCirZeroAttr(cir::ZeroAttr attr); - mlir::Value visitCirUndefAttr(cir::UndefAttr attr); - mlir::Value visitCirPoisonAttr(cir::PoisonAttr attr); - mlir::Value visitCirGlobalViewAttr(cir::GlobalViewAttr attr); - mlir::Value visitCirVTableAttr(cir::VTableAttr attr); - mlir::Value visitCirTypeInfoAttr(cir::TypeInfoAttr attr); + mlir::Value visit(mlir::Attribute attr) { + return llvm::TypeSwitch(attr) + .Case( + [&](auto attrT) { return visitCirAttr(attrT); }) + .Default([&](auto attrT) { return mlir::Value(); }); + } + + mlir::Value visitCirAttr(cir::IntAttr attr); + mlir::Value visitCirAttr(cir::FPAttr attr); + mlir::Value visitCirAttr(cir::ConstPtrAttr attr); + mlir::Value visitCirAttr(cir::ConstStructAttr attr); + mlir::Value visitCirAttr(cir::ConstArrayAttr attr); + mlir::Value visitCirAttr(cir::ConstVectorAttr attr); + mlir::Value visitCirAttr(cir::BoolAttr attr); + mlir::Value visitCirAttr(cir::ZeroAttr attr); + mlir::Value visitCirAttr(cir::UndefAttr attr); + mlir::Value visitCirAttr(cir::PoisonAttr attr); + mlir::Value visitCirAttr(cir::GlobalViewAttr attr); + mlir::Value visitCirAttr(cir::VTableAttr attr); + mlir::Value visitCirAttr(cir::TypeInfoAttr attr); private: mlir::Operation *parentOp; @@ -457,21 +467,21 @@ class CirAttrToValue : public CirAttrVisitor { }; /// IntAttr visitor. -mlir::Value CirAttrToValue::visitCirIntAttr(cir::IntAttr intAttr) { +mlir::Value CirAttrToValue::visitCirAttr(cir::IntAttr intAttr) { auto loc = parentOp->getLoc(); return rewriter.create( loc, converter->convertType(intAttr.getType()), intAttr.getValue()); } /// BoolAttr visitor. -mlir::Value CirAttrToValue::visitCirBoolAttr(cir::BoolAttr boolAttr) { +mlir::Value CirAttrToValue::visitCirAttr(cir::BoolAttr boolAttr) { auto loc = parentOp->getLoc(); return rewriter.create( loc, converter->convertType(boolAttr.getType()), boolAttr.getValue()); } /// ConstPtrAttr visitor. -mlir::Value CirAttrToValue::visitCirConstPtrAttr(cir::ConstPtrAttr ptrAttr) { +mlir::Value CirAttrToValue::visitCirAttr(cir::ConstPtrAttr ptrAttr) { auto loc = parentOp->getLoc(); if (ptrAttr.isNullValue()) { return rewriter.create( @@ -486,36 +496,35 @@ mlir::Value CirAttrToValue::visitCirConstPtrAttr(cir::ConstPtrAttr ptrAttr) { } /// FPAttr visitor. -mlir::Value CirAttrToValue::visitCirFPAttr(cir::FPAttr fltAttr) { +mlir::Value CirAttrToValue::visitCirAttr(cir::FPAttr fltAttr) { auto loc = parentOp->getLoc(); return rewriter.create( loc, converter->convertType(fltAttr.getType()), fltAttr.getValue()); } /// ZeroAttr visitor. -mlir::Value CirAttrToValue::visitCirZeroAttr(cir::ZeroAttr zeroAttr) { +mlir::Value CirAttrToValue::visitCirAttr(cir::ZeroAttr zeroAttr) { auto loc = parentOp->getLoc(); return rewriter.create( loc, converter->convertType(zeroAttr.getType())); } /// UndefAttr visitor. -mlir::Value CirAttrToValue::visitCirUndefAttr(cir::UndefAttr undefAttr) { +mlir::Value CirAttrToValue::visitCirAttr(cir::UndefAttr undefAttr) { auto loc = parentOp->getLoc(); return rewriter.create( loc, converter->convertType(undefAttr.getType())); } /// PoisonAttr visitor. -mlir::Value CirAttrToValue::visitCirPoisonAttr(cir::PoisonAttr poisonAttr) { +mlir::Value CirAttrToValue::visitCirAttr(cir::PoisonAttr poisonAttr) { auto loc = parentOp->getLoc(); return rewriter.create( loc, converter->convertType(poisonAttr.getType())); } /// ConstStruct visitor. -mlir::Value -CirAttrToValue::visitCirConstStructAttr(cir::ConstStructAttr constStruct) { +mlir::Value CirAttrToValue::visitCirAttr(cir::ConstStructAttr constStruct) { auto llvmTy = converter->convertType(constStruct.getType()); auto loc = parentOp->getLoc(); mlir::Value result = rewriter.create(loc, llvmTy); @@ -531,7 +540,7 @@ CirAttrToValue::visitCirConstStructAttr(cir::ConstStructAttr constStruct) { } // VTableAttr visitor. -mlir::Value CirAttrToValue::visitCirVTableAttr(cir::VTableAttr vtableArr) { +mlir::Value CirAttrToValue::visitCirAttr(cir::VTableAttr vtableArr) { auto llvmTy = converter->convertType(vtableArr.getType()); auto loc = parentOp->getLoc(); mlir::Value result = rewriter.create(loc, llvmTy); @@ -545,8 +554,7 @@ mlir::Value CirAttrToValue::visitCirVTableAttr(cir::VTableAttr vtableArr) { } // TypeInfoAttr visitor. -mlir::Value -CirAttrToValue::visitCirTypeInfoAttr(cir::TypeInfoAttr typeinfoArr) { +mlir::Value CirAttrToValue::visitCirAttr(cir::TypeInfoAttr typeinfoArr) { auto llvmTy = converter->convertType(typeinfoArr.getType()); auto loc = parentOp->getLoc(); mlir::Value result = rewriter.create(loc, llvmTy); @@ -560,8 +568,7 @@ CirAttrToValue::visitCirTypeInfoAttr(cir::TypeInfoAttr typeinfoArr) { } // ConstArrayAttr visitor -mlir::Value -CirAttrToValue::visitCirConstArrayAttr(cir::ConstArrayAttr constArr) { +mlir::Value CirAttrToValue::visitCirAttr(cir::ConstArrayAttr constArr) { auto llvmTy = converter->convertType(constArr.getType()); auto loc = parentOp->getLoc(); mlir::Value result; @@ -604,8 +611,7 @@ CirAttrToValue::visitCirConstArrayAttr(cir::ConstArrayAttr constArr) { } // ConstVectorAttr visitor. -mlir::Value -CirAttrToValue::visitCirConstVectorAttr(cir::ConstVectorAttr constVec) { +mlir::Value CirAttrToValue::visitCirAttr(cir::ConstVectorAttr constVec) { auto llvmTy = converter->convertType(constVec.getType()); auto loc = parentOp->getLoc(); SmallVector mlirValues; @@ -630,8 +636,7 @@ CirAttrToValue::visitCirConstVectorAttr(cir::ConstVectorAttr constVec) { } // GlobalViewAttr visitor. -mlir::Value -CirAttrToValue::visitCirGlobalViewAttr(cir::GlobalViewAttr globalAttr) { +mlir::Value CirAttrToValue::visitCirAttr(cir::GlobalViewAttr globalAttr) { auto module = parentOp->getParentOfType(); mlir::Type sourceType; unsigned sourceAddrSpace = 0; diff --git a/mlir/test/mlir-tblgen/attrdefs.td b/mlir/test/mlir-tblgen/attrdefs.td index e911f70e4358..35d2c49619ee 100644 --- a/mlir/test/mlir-tblgen/attrdefs.td +++ b/mlir/test/mlir-tblgen/attrdefs.td @@ -1,6 +1,5 @@ // RUN: mlir-tblgen -gen-attrdef-decls -I %S/../../include %s | FileCheck %s --check-prefix=DECL // RUN: mlir-tblgen -gen-attrdef-defs -I %S/../../include %s | FileCheck %s --check-prefix=DEF -// RUN: mlir-tblgen -gen-attrdef-list -I %S/../../include %s | FileCheck %s --check-prefix=LIST include "mlir/IR/AttrTypeBase.td" include "mlir/IR/OpBase.td" @@ -20,13 +19,6 @@ include "mlir/IR/OpBase.td" // DEF: ::test::CompoundAAttr, // DEF: ::test::SingleParameterAttr -// LIST: ATTRDEF(IndexAttr) -// LIST: ATTRDEF(SimpleAAttr) -// LIST: ATTRDEF(CompoundAAttr) -// LIST: ATTRDEF(SingleParameterAttr) - -// LIST: #undef ATTRDEF - // DEF-LABEL: ::mlir::OptionalParseResult generatedAttributeParser( // DEF-SAME: ::mlir::AsmParser &parser, // DEF-SAME: ::llvm::StringRef *mnemonic, ::mlir::Type type, diff --git a/mlir/tools/mlir-tblgen/AttrOrTypeDefGen.cpp b/mlir/tools/mlir-tblgen/AttrOrTypeDefGen.cpp index 4f0100fa67cd..3f47c981d6f8 100644 --- a/mlir/tools/mlir-tblgen/AttrOrTypeDefGen.cpp +++ b/mlir/tools/mlir-tblgen/AttrOrTypeDefGen.cpp @@ -1026,23 +1026,6 @@ bool DefGenerator::emitDefs(StringRef selectedDialect) { return false; } -bool DefGenerator::emitList(StringRef selectedDialect) { - emitSourceFileHeader(("List of " + defType + "Def Definitions").str(), os); - - SmallVector defs; - collectAllDefs(selectedDialect, defRecords, defs); - if (defs.empty()) - return false; - - auto interleaveFn = [&](const AttrOrTypeDef &def) { - os << defType.upper() << "DEF(" << def.getCppClassName() << ")"; - }; - llvm::interleave(defs, os, interleaveFn, "\n"); - os << "\n\n"; - os << "#undef " << defType.upper() << "DEF" << "\n"; - return false; -} - //===----------------------------------------------------------------------===// // Type Constraints //===----------------------------------------------------------------------===// @@ -1117,12 +1100,6 @@ static mlir::GenRegistration AttrDefGenerator generator(records, os); return generator.emitDecls(attrDialect); }); -static mlir::GenRegistration - genAttrList("gen-attrdef-list", "Generate an AttrDef list", - [](const RecordKeeper &records, raw_ostream &os) { - AttrDefGenerator generator(records, os); - return generator.emitList(attrDialect); - }); //===----------------------------------------------------------------------===// // TypeDef