Skip to content

Commit 69239c9

Browse files
committed
Simplify and remove tablegen fine grained tracking
1 parent 17bad5a commit 69239c9

File tree

5 files changed

+14
-174
lines changed

5 files changed

+14
-174
lines changed

mlir/include/mlir/Dialect/LLVMIR/CMakeLists.txt

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -81,29 +81,3 @@ mlir_tablegen(VCIXConversions.inc -gen-llvmir-conversions)
8181
mlir_tablegen(VCIXOpsAttributes.h.inc -gen-attrdef-decls -attrdefs-dialect=vcix)
8282
mlir_tablegen(VCIXOpsAttributes.cpp.inc -gen-attrdef-defs -attrdefs-dialect=vcix)
8383
add_public_tablegen_target(MLIRVCIXConversionsIncGen)
84-
85-
# FIXME: Should emit extra file with intrinsics_gen if MLIR is enabled? Or maybe find
86-
# a better way to get the path for Intrinsics.td?
87-
set(LLVM_TARGET_DEFINITIONS ../../../../../llvm/include/llvm/IR/Intrinsics.td)
88-
89-
mlir_tablegen(LLVMUnregisteredLLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics)
90-
mlir_tablegen(LLVMUnregisteredAArch64LLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=aarch64)
91-
mlir_tablegen(LLVMUnregisteredAMDGPULLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=amdgcn)
92-
mlir_tablegen(LLVMUnregisteredARMLLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=arm)
93-
mlir_tablegen(LLVMUnregisteredBPFLLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=bpf)
94-
mlir_tablegen(LLVMUnregisteredDirectXLLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=dx)
95-
mlir_tablegen(LLVMUnregisteredHexagonLLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=hexagon)
96-
mlir_tablegen(LLVMUnregisteredLoongArchLLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=loongarch)
97-
mlir_tablegen(LLVMUnregisteredMipsLLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=mips)
98-
mlir_tablegen(LLVMUnregisteredNVPTXLLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=nvvm)
99-
mlir_tablegen(LLVMUnregisteredPowerPCLLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=ppc)
100-
mlir_tablegen(LLVMUnregisteredR600LLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=r600)
101-
mlir_tablegen(LLVMUnregisteredRISCVLLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=riscv)
102-
mlir_tablegen(LLVMUnregisteredSPIRVLLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=spv)
103-
mlir_tablegen(LLVMUnregisteredS390LLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=s390)
104-
mlir_tablegen(LLVMUnregisteredWebAssemblyLLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=wasm)
105-
mlir_tablegen(LLVMUnregisteredX86LLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=x86)
106-
mlir_tablegen(LLVMUnregisteredXCoreLLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=xcore)
107-
mlir_tablegen(LLVMUnregisteredVELLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=ve)
108-
109-
add_public_tablegen_target(MLIRLLVMIntrinsicUnregisteredIncGen)

mlir/include/mlir/Target/LLVMIR/LLVMImportInterface.h

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,9 @@ class LLVMImportDialectInterface
7474
/// returns the list of supported intrinsic identifiers.
7575
virtual ArrayRef<unsigned> getSupportedIntrinsics() const { return {}; }
7676

77-
/// Returns the list of LLVM IR intrinsic identifiers that are unsupported
78-
/// but dialects might have a generic way to represent them.
79-
virtual ArrayRef<unsigned> getUnregisteredIntrinsics() const { return {}; }
77+
/// Whether dialect have a generic way to represent unsupported intrinsics
78+
/// (i.e. as oposed to supported ones aboves).
79+
virtual bool getUnregisteredIntrinsics() const { return false; }
8080

8181
/// Hook for derived dialect interfaces to publish the supported instructions.
8282
/// As every LLVM IR instruction has a unique integer identifier, the function
@@ -143,15 +143,18 @@ class LLVMImportInterface
143143
// Add a mapping for all supported intrinsic identifiers.
144144
for (unsigned id : iface.getSupportedIntrinsics())
145145
intrinsicToDialect[id] = iface.getDialect();
146-
// Add a mapping for all unregistered intrinsic identifiers.
147-
for (unsigned id : iface.getUnregisteredIntrinsics())
148-
unregisteredIntrinscToDialect[id] = iface.getDialect();
149146
// Add a mapping for all supported instruction identifiers.
150147
for (unsigned id : iface.getSupportedInstructions())
151148
instructionToDialect[id] = &iface;
152149
// Add a mapping for all supported metadata kinds.
153150
for (unsigned kind : iface.getSupportedMetadata(llvmContext))
154151
metadataToDialect[kind].push_back(iface.getDialect());
152+
153+
// There can be only one dialect dealing with unregistered
154+
// intrinsics, the last one to support the interface is the
155+
// one to be used.
156+
if (iface.getUnregisteredIntrinsics())
157+
unregisteredIntrinscToDialect = iface.getDialect();
155158
}
156159

157160
return success();
@@ -173,7 +176,7 @@ class LLVMImportInterface
173176
// No specialized (supported) intrinsics, attempt to generate a generic
174177
// version via llvm.call_intrinsic (if available).
175178
if (!dialect)
176-
dialect = unregisteredIntrinscToDialect.lookup(intrinId);
179+
dialect = unregisteredIntrinscToDialect;
177180

178181
if (!dialect)
179182
return failure();
@@ -248,7 +251,7 @@ class LLVMImportInterface
248251
DenseMap<unsigned, SmallVector<Dialect *, 1>> metadataToDialect;
249252

250253
/// Unregistered generic and target independent intrinsics.
251-
DenseMap<unsigned, Dialect *> unregisteredIntrinscToDialect;
254+
Dialect *unregisteredIntrinscToDialect = nullptr;
252255
};
253256

254257
} // namespace mlir

mlir/lib/Dialect/LLVMIR/CMakeLists.txt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,6 @@ add_mlir_dialect_library(MLIRLLVMDialect
1717
MLIRLLVMTypesIncGen
1818
MLIRLLVMIntrinsicOpsIncGen
1919
MLIRLLVMInterfacesIncGen
20-
MLIRLLVMConversionsIncGen
21-
MLIRLLVMIntrinsicConversionsIncGen
22-
MLIRLLVMIntrinsicUnregisteredIncGen
2320
MLIROpenMPOpsIncGen
2421
intrinsics_gen
2522

mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMIRToLLVMTranslation.cpp

Lines changed: 3 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -24,24 +24,6 @@
2424
#include "llvm/IR/InlineAsm.h"
2525
#include "llvm/IR/Instructions.h"
2626
#include "llvm/IR/IntrinsicInst.h"
27-
#include "llvm/IR/IntrinsicsAArch64.h"
28-
#include "llvm/IR/IntrinsicsAMDGPU.h"
29-
#include "llvm/IR/IntrinsicsARM.h"
30-
#include "llvm/IR/IntrinsicsBPF.h"
31-
#include "llvm/IR/IntrinsicsDirectX.h"
32-
#include "llvm/IR/IntrinsicsHexagon.h"
33-
#include "llvm/IR/IntrinsicsLoongArch.h"
34-
#include "llvm/IR/IntrinsicsMips.h"
35-
#include "llvm/IR/IntrinsicsNVPTX.h"
36-
#include "llvm/IR/IntrinsicsPowerPC.h"
37-
#include "llvm/IR/IntrinsicsR600.h"
38-
#include "llvm/IR/IntrinsicsRISCV.h"
39-
#include "llvm/IR/IntrinsicsS390.h"
40-
#include "llvm/IR/IntrinsicsSPIRV.h"
41-
#include "llvm/IR/IntrinsicsVE.h"
42-
#include "llvm/IR/IntrinsicsWebAssembly.h"
43-
#include "llvm/IR/IntrinsicsX86.h"
44-
#include "llvm/IR/IntrinsicsXCore.h"
4527
#include "llvm/Support/ModRef.h"
4628

4729
using namespace mlir;
@@ -74,70 +56,14 @@ static ArrayRef<unsigned> getSupportedIntrinsicsImpl() {
7456
return convertibleIntrinsics;
7557
}
7658

77-
/// Returns true if the LLVM IR intrinsic is convertible to llvm.intrinsic_call
78-
/// Returns false otherwise.
79-
static bool isConvertibleUnregisteredIntrinsic(llvm::Intrinsic::ID id) {
80-
static const DenseSet<unsigned> convertibleTargetIntrinsics = {
81-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredAArch64LLVMIRIntrinsics.inc"
82-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredAMDGPULLVMIRIntrinsics.inc"
83-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredARMLLVMIRIntrinsics.inc"
84-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredBPFLLVMIRIntrinsics.inc"
85-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredDirectXLLVMIRIntrinsics.inc"
86-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredHexagonLLVMIRIntrinsics.inc"
87-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredLLVMIRIntrinsics.inc"
88-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredLoongArchLLVMIRIntrinsics.inc"
89-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredMipsLLVMIRIntrinsics.inc"
90-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredNVPTXLLVMIRIntrinsics.inc"
91-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredPowerPCLLVMIRIntrinsics.inc"
92-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredR600LLVMIRIntrinsics.inc"
93-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredRISCVLLVMIRIntrinsics.inc"
94-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredS390LLVMIRIntrinsics.inc"
95-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredSPIRVLLVMIRIntrinsics.inc"
96-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredVELLVMIRIntrinsics.inc"
97-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredWebAssemblyLLVMIRIntrinsics.inc"
98-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredX86LLVMIRIntrinsics.inc"
99-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredXCoreLLVMIRIntrinsics.inc"
100-
};
101-
return convertibleTargetIntrinsics.contains(id);
102-
}
103-
104-
/// Returns the list of LLVM IR intrinsic identifiers that are not registered
105-
/// by any dialect but can be convertible to llvm.intrinsic_call operation.
106-
static ArrayRef<unsigned> getUnregisteredIntrinsicsImpl() {
107-
static const SmallVector<unsigned> convertibleTargetIntrinsics = {
108-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredAArch64LLVMIRIntrinsics.inc"
109-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredAMDGPULLVMIRIntrinsics.inc"
110-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredARMLLVMIRIntrinsics.inc"
111-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredBPFLLVMIRIntrinsics.inc"
112-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredDirectXLLVMIRIntrinsics.inc"
113-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredHexagonLLVMIRIntrinsics.inc"
114-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredLLVMIRIntrinsics.inc"
115-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredLoongArchLLVMIRIntrinsics.inc"
116-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredMipsLLVMIRIntrinsics.inc"
117-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredNVPTXLLVMIRIntrinsics.inc"
118-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredPowerPCLLVMIRIntrinsics.inc"
119-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredR600LLVMIRIntrinsics.inc"
120-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredRISCVLLVMIRIntrinsics.inc"
121-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredS390LLVMIRIntrinsics.inc"
122-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredSPIRVLLVMIRIntrinsics.inc"
123-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredVELLVMIRIntrinsics.inc"
124-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredWebAssemblyLLVMIRIntrinsics.inc"
125-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredX86LLVMIRIntrinsics.inc"
126-
#include "mlir/Dialect/LLVMIR/LLVMUnregisteredXCoreLLVMIRIntrinsics.inc"
127-
};
128-
return convertibleTargetIntrinsics;
129-
}
130-
13159
/// Converts the LLVM intrinsic to a generic LLVM intrinsic call using
13260
/// llvm.intrinsic_call. Returns failure otherwise.
13361
static LogicalResult
13462
convertUnregisteredIntrinsicImpl(OpBuilder &odsBuilder, llvm::CallInst *inst,
13563
LLVM::ModuleImport &moduleImport) {
136-
llvm::Intrinsic::ID intrinsicID = inst->getIntrinsicID();
13764
StringRef intrinName = inst->getCalledFunction()->getName();
13865

13966
// Sanity check the intrinsic ID.
140-
assert(isConvertibleUnregisteredIntrinsic(intrinsicID));
14167
SmallVector<llvm::Value *> args(inst->args());
14268
ArrayRef<llvm::Value *> llvmOperands(args);
14369

@@ -192,7 +118,7 @@ static LogicalResult convertIntrinsicImpl(OpBuilder &odsBuilder,
192118
llvmOpBundles.push_back(inst->getOperandBundleAt(i));
193119

194120
#include "mlir/Dialect/LLVMIR/LLVMIntrinsicFromLLVMIRConversions.inc"
195-
} else if (isConvertibleUnregisteredIntrinsic(intrinsicID)) {
121+
} else if (intrinsicID != llvm::Intrinsic::not_intrinsic) {
196122
return convertUnregisteredIntrinsicImpl(odsBuilder, inst, moduleImport);
197123
}
198124

@@ -541,11 +467,8 @@ class LLVMDialectLLVMIRImportInterface : public LLVMImportDialectInterface {
541467
return getSupportedIntrinsicsImpl();
542468
}
543469

544-
/// Returns the list of LLVM IR intrinsic identifiers that are unsupported
545-
/// by existing dialects by are convertible to generic llvm.call_intrinsic.
546-
ArrayRef<unsigned> getUnregisteredIntrinsics() const final {
547-
return getUnregisteredIntrinsicsImpl();
548-
}
470+
/// Cnvertible to generic llvm.call_intrinsic.
471+
bool getUnregisteredIntrinsics() const final { return true; }
549472

550473
/// Returns the list of LLVM IR metadata kinds that are convertible to MLIR
551474
/// LLVM dialect attributes.

mlir/tools/mlir-tblgen/LLVMIRConversionGen.cpp

Lines changed: 0 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
#include "llvm/ADT/Sequence.h"
2020
#include "llvm/ADT/StringExtras.h"
2121
#include "llvm/ADT/Twine.h"
22-
#include "llvm/Support/CommandLine.h"
2322
#include "llvm/Support/FormatVariadic.h"
2423
#include "llvm/Support/raw_ostream.h"
2524
#include "llvm/TableGen/Error.h"
@@ -565,46 +564,6 @@ static bool emitConvertibleIntrinsics(const RecordKeeper &records,
565564
return false;
566565
}
567566

568-
static void emitOneUnregisteredIntrinsic(const Record &record, raw_ostream &os,
569-
StringRef targetName) {
570-
StringRef targetPrefix = record.getValueAsString("TargetPrefix");
571-
572-
// Not interested in target specific intrinsics in the generic namespace.
573-
if (targetName.empty() && !targetPrefix.empty())
574-
return;
575-
576-
// Skip unknown targets.
577-
if (!targetName.empty() && targetPrefix != targetName)
578-
return;
579-
580-
StringRef defName = record.getName();
581-
ArrayRef<SMLoc> defLoc = record.getLoc();
582-
583-
// Sanity check the input.
584-
if (!defName.starts_with("int_"))
585-
PrintFatalError(defLoc,
586-
"Intrinsic '" + defName + "' does not start with 'int_'!");
587-
588-
StringRef enumName = defName.substr(4);
589-
590-
os << "llvm::Intrinsic::";
591-
if (!targetName.empty())
592-
os << StringRef(targetName).upper() << "Intrinsics::";
593-
os << enumName << ",\n";
594-
}
595-
596-
// Emit the list of LLVM IR intrinsics enums, both target and generic. Those
597-
// are used for LLVMImporter's convenience when looking at intrinsics while
598-
// being up-to-date with new additions to LLVM.
599-
static bool emitUnregisteredIntrinsics(const RecordKeeper &records,
600-
raw_ostream &os, StringRef targetName) {
601-
602-
for (const Record *def : records.getAllDerivedDefinitions("Intrinsic"))
603-
emitOneUnregisteredIntrinsic(*def, os, targetName);
604-
605-
return false;
606-
}
607-
608567
static mlir::GenRegistration
609568
genLLVMIRConversions("gen-llvmir-conversions",
610569
"Generate LLVM IR conversions", emitBuilders);
@@ -631,19 +590,3 @@ static mlir::GenRegistration genConvertibleLLVMIRIntrinsics(
631590
"gen-convertible-llvmir-intrinsics",
632591
"Generate list of convertible LLVM IR intrinsics",
633592
emitConvertibleIntrinsics);
634-
635-
static llvm::cl::OptionCategory
636-
genUnregIntrinsicCat("Options for -gen-unregistered-llvmir-intrinsics");
637-
static llvm::cl::opt<std::string> unregIntrinsicPrefix(
638-
"intrinsic-prefix",
639-
cl::desc("Specify target to generate intrinsic information"),
640-
cl::value_desc("target prefix"), cl::cat(genUnregIntrinsicCat));
641-
642-
static mlir::GenRegistration genUnregisteredLLVMIRIntrinsics(
643-
"gen-unregistered-llvmir-intrinsics",
644-
"Generate enum list of target specific or generic intrinsics according to "
645-
"enums defined in LLVM by other tablegen backends",
646-
[](const RecordKeeper &records, raw_ostream &os) {
647-
return emitUnregisteredIntrinsics(records, os,
648-
unregIntrinsicPrefix.getValue());
649-
});

0 commit comments

Comments
 (0)