Skip to content

[CIR][NFC] Replace CIR attr visitor base class with a type switch #1330

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Feb 11, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 0 additions & 47 deletions clang/include/clang/CIR/Dialect/IR/CIRAttrVisitor.h

This file was deleted.

1 change: 0 additions & 1 deletion clang/include/clang/CIR/Dialect/IR/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
71 changes: 38 additions & 33 deletions clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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"
Expand Down Expand Up @@ -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<CirAttrToValue, mlir::Value> {
class CirAttrToValue {
public:
CirAttrToValue(mlir::Operation *parentOp,
mlir::ConversionPatternRewriter &rewriter,
Expand All @@ -435,19 +435,29 @@ class CirAttrToValue : public CirAttrVisitor<CirAttrToValue, mlir::Value> {
: 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<mlir::Attribute, mlir::Value>(attr)
.Case<cir::IntAttr, cir::FPAttr, cir::ConstPtrAttr,
cir::ConstStructAttr, cir::ConstArrayAttr, cir::ConstVectorAttr,
cir::BoolAttr, cir::ZeroAttr, cir::UndefAttr, cir::PoisonAttr,
cir::GlobalViewAttr, cir::VTableAttr, cir::TypeInfoAttr>(
[&](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;
Expand All @@ -457,21 +467,21 @@ class CirAttrToValue : public CirAttrVisitor<CirAttrToValue, mlir::Value> {
};

/// IntAttr visitor.
mlir::Value CirAttrToValue::visitCirIntAttr(cir::IntAttr intAttr) {
mlir::Value CirAttrToValue::visitCirAttr(cir::IntAttr intAttr) {
auto loc = parentOp->getLoc();
return rewriter.create<mlir::LLVM::ConstantOp>(
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<mlir::LLVM::ConstantOp>(
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<mlir::LLVM::ZeroOp>(
Expand All @@ -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<mlir::LLVM::ConstantOp>(
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<mlir::LLVM::ZeroOp>(
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<mlir::LLVM::UndefOp>(
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<mlir::LLVM::PoisonOp>(
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<mlir::LLVM::UndefOp>(loc, llvmTy);
Expand All @@ -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<mlir::LLVM::UndefOp>(loc, llvmTy);
Expand All @@ -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<mlir::LLVM::UndefOp>(loc, llvmTy);
Expand All @@ -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;
Expand Down Expand Up @@ -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<mlir::Attribute> mlirValues;
Expand All @@ -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::ModuleOp>();
mlir::Type sourceType;
unsigned sourceAddrSpace = 0;
Expand Down
8 changes: 0 additions & 8 deletions mlir/test/mlir-tblgen/attrdefs.td
Original file line number Diff line number Diff line change
@@ -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"
Expand All @@ -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,
Expand Down
23 changes: 0 additions & 23 deletions mlir/tools/mlir-tblgen/AttrOrTypeDefGen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<AttrOrTypeDef, 16> 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
//===----------------------------------------------------------------------===//
Expand Down Expand Up @@ -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
Expand Down