llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-mlir-affine @llvm/pr-subscribers-mlir Author: Jeff Niu (Mogball) <details> <summary>Changes</summary> Shard the test dialect by 4. This patch also reorganizes the manually-written op hooks into `TestOpDefs.cpp` and format custom directive parser and printers into `TestFormatUtils`, adds missing comment blocks, and moves around where generated source files are included for types, attributes, enums, etc. In my case, the compilation time of the test dialect drops from >60s to ~10s. --- Patch is 158.78 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/89424.diff 43 Files Affected: - (modified) mlir/test/lib/Analysis/DataFlow/TestDenseBackwardDataFlowAnalysis.cpp (+1) - (modified) mlir/test/lib/Analysis/DataFlow/TestDenseForwardDataFlowAnalysis.cpp (+1) - (modified) mlir/test/lib/Conversion/FuncToLLVM/TestConvertCallOp.cpp (+1) - (modified) mlir/test/lib/Conversion/OneToNTypeConversion/TestOneToNTypeConversionPass.cpp (+1) - (modified) mlir/test/lib/Dialect/Affine/TestReifyValueBounds.cpp (+1) - (modified) mlir/test/lib/Dialect/DLTI/TestDataLayoutQuery.cpp (+1-1) - (modified) mlir/test/lib/Dialect/Func/TestDecomposeCallGraphTypes.cpp (+1) - (modified) mlir/test/lib/Dialect/Test/CMakeLists.txt (+7-2) - (modified) mlir/test/lib/Dialect/Test/TestAttributes.cpp (+2-1) - (modified) mlir/test/lib/Dialect/Test/TestDialect.cpp (+151-1300) - (modified) mlir/test/lib/Dialect/Test/TestDialect.h (+6-44) - (modified) mlir/test/lib/Dialect/Test/TestDialectInterfaces.cpp (+1) - (added) mlir/test/lib/Dialect/Test/TestFormatUtils.cpp (+377) - (added) mlir/test/lib/Dialect/Test/TestFormatUtils.h (+211) - (modified) mlir/test/lib/Dialect/Test/TestFromLLVMIRTranslation.cpp (+1) - (modified) mlir/test/lib/Dialect/Test/TestInterfaces.cpp (+2) - (modified) mlir/test/lib/Dialect/Test/TestInterfaces.h (+2) - (added) mlir/test/lib/Dialect/Test/TestOpDefs.cpp (+1161) - (added) mlir/test/lib/Dialect/Test/TestOps.cpp (+17) - (added) mlir/test/lib/Dialect/Test/TestOps.h (+149) - (modified) mlir/test/lib/Dialect/Test/TestOpsSyntax.cpp (+1) - (modified) mlir/test/lib/Dialect/Test/TestPatterns.cpp (+1) - (modified) mlir/test/lib/Dialect/Test/TestToLLVMIRTranslation.cpp (+1) - (modified) mlir/test/lib/Dialect/Test/TestTraits.cpp (+1-1) - (modified) mlir/test/lib/Dialect/Test/TestTypes.cpp (+1) - (modified) mlir/test/lib/Dialect/Test/TestTypes.h (+3-3) - (modified) mlir/test/lib/IR/TestBytecodeRoundtrip.cpp (+1) - (modified) mlir/test/lib/IR/TestClone.cpp (+1-1) - (modified) mlir/test/lib/IR/TestSideEffects.cpp (+1-1) - (modified) mlir/test/lib/IR/TestSymbolUses.cpp (+1-1) - (modified) mlir/test/lib/IR/TestTypes.cpp (+1) - (modified) mlir/test/lib/IR/TestVisitorsGeneric.cpp (+1-1) - (modified) mlir/test/lib/Pass/TestPassManager.cpp (+1) - (modified) mlir/test/lib/Transforms/TestInlining.cpp (+1) - (modified) mlir/test/lib/Transforms/TestMakeIsolatedFromAbove.cpp (+1) - (modified) mlir/unittests/IR/AdaptorTest.cpp (+1) - (modified) mlir/unittests/IR/IRMapping.cpp (+1) - (modified) mlir/unittests/IR/InterfaceAttachmentTest.cpp (+1) - (modified) mlir/unittests/IR/InterfaceTest.cpp (+1) - (modified) mlir/unittests/IR/OperationSupportTest.cpp (+1) - (modified) mlir/unittests/IR/PatternMatchTest.cpp (+1) - (modified) mlir/unittests/TableGen/OpBuildGen.cpp (+1) - (modified) utils/bazel/llvm-project-overlay/mlir/test/BUILD.bazel (+18-9) ``````````diff diff --git a/mlir/test/lib/Analysis/DataFlow/TestDenseBackwardDataFlowAnalysis.cpp b/mlir/test/lib/Analysis/DataFlow/TestDenseBackwardDataFlowAnalysis.cpp index ca052392f2f5f2..65592a5c5d698b 100644 --- a/mlir/test/lib/Analysis/DataFlow/TestDenseBackwardDataFlowAnalysis.cpp +++ b/mlir/test/lib/Analysis/DataFlow/TestDenseBackwardDataFlowAnalysis.cpp @@ -12,6 +12,7 @@ #include "TestDenseDataFlowAnalysis.h" #include "TestDialect.h" +#include "TestOps.h" #include "mlir/Analysis/DataFlow/ConstantPropagationAnalysis.h" #include "mlir/Analysis/DataFlow/DeadCodeAnalysis.h" #include "mlir/Analysis/DataFlow/DenseAnalysis.h" diff --git a/mlir/test/lib/Analysis/DataFlow/TestDenseForwardDataFlowAnalysis.cpp b/mlir/test/lib/Analysis/DataFlow/TestDenseForwardDataFlowAnalysis.cpp index 29480f5ad63ee0..3f9ce2dc0bc50a 100644 --- a/mlir/test/lib/Analysis/DataFlow/TestDenseForwardDataFlowAnalysis.cpp +++ b/mlir/test/lib/Analysis/DataFlow/TestDenseForwardDataFlowAnalysis.cpp @@ -12,6 +12,7 @@ #include "TestDenseDataFlowAnalysis.h" #include "TestDialect.h" +#include "TestOps.h" #include "mlir/Analysis/DataFlow/ConstantPropagationAnalysis.h" #include "mlir/Analysis/DataFlow/DeadCodeAnalysis.h" #include "mlir/Analysis/DataFlow/DenseAnalysis.h" diff --git a/mlir/test/lib/Conversion/FuncToLLVM/TestConvertCallOp.cpp b/mlir/test/lib/Conversion/FuncToLLVM/TestConvertCallOp.cpp index 5e17779660f392..f878a262512ee8 100644 --- a/mlir/test/lib/Conversion/FuncToLLVM/TestConvertCallOp.cpp +++ b/mlir/test/lib/Conversion/FuncToLLVM/TestConvertCallOp.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// #include "TestDialect.h" +#include "TestOps.h" #include "TestTypes.h" #include "mlir/Conversion/FuncToLLVM/ConvertFuncToLLVM.h" #include "mlir/Conversion/LLVMCommon/Pattern.h" diff --git a/mlir/test/lib/Conversion/OneToNTypeConversion/TestOneToNTypeConversionPass.cpp b/mlir/test/lib/Conversion/OneToNTypeConversion/TestOneToNTypeConversionPass.cpp index 3c4067b35d8e5b..cc1af59c5e15bb 100644 --- a/mlir/test/lib/Conversion/OneToNTypeConversion/TestOneToNTypeConversionPass.cpp +++ b/mlir/test/lib/Conversion/OneToNTypeConversion/TestOneToNTypeConversionPass.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// #include "TestDialect.h" +#include "TestOps.h" #include "mlir/Dialect/Func/Transforms/OneToNFuncConversions.h" #include "mlir/Dialect/SCF/Transforms/Patterns.h" #include "mlir/Pass/Pass.h" diff --git a/mlir/test/lib/Dialect/Affine/TestReifyValueBounds.cpp b/mlir/test/lib/Dialect/Affine/TestReifyValueBounds.cpp index b098a5a23fd316..34513cd418e4c2 100644 --- a/mlir/test/lib/Dialect/Affine/TestReifyValueBounds.cpp +++ b/mlir/test/lib/Dialect/Affine/TestReifyValueBounds.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// #include "TestDialect.h" +#include "TestOps.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/IR/ValueBoundsOpInterfaceImpl.h" #include "mlir/Dialect/Affine/Transforms/Transforms.h" diff --git a/mlir/test/lib/Dialect/DLTI/TestDataLayoutQuery.cpp b/mlir/test/lib/Dialect/DLTI/TestDataLayoutQuery.cpp index 84f45b31603192..56f309f150ca5d 100644 --- a/mlir/test/lib/Dialect/DLTI/TestDataLayoutQuery.cpp +++ b/mlir/test/lib/Dialect/DLTI/TestDataLayoutQuery.cpp @@ -6,7 +6,7 @@ // //===----------------------------------------------------------------------===// -#include "TestDialect.h" +#include "TestOps.h" #include "mlir/Analysis/DataLayoutAnalysis.h" #include "mlir/Dialect/DLTI/DLTI.h" #include "mlir/IR/BuiltinAttributes.h" diff --git a/mlir/test/lib/Dialect/Func/TestDecomposeCallGraphTypes.cpp b/mlir/test/lib/Dialect/Func/TestDecomposeCallGraphTypes.cpp index 10aba733bd5696..0d7dce2240f4cb 100644 --- a/mlir/test/lib/Dialect/Func/TestDecomposeCallGraphTypes.cpp +++ b/mlir/test/lib/Dialect/Func/TestDecomposeCallGraphTypes.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// #include "TestDialect.h" +#include "TestOps.h" #include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/Func/Transforms/DecomposeCallGraphTypes.h" #include "mlir/IR/Builders.h" diff --git a/mlir/test/lib/Dialect/Test/CMakeLists.txt b/mlir/test/lib/Dialect/Test/CMakeLists.txt index d246c0492a3bd5..fab89378093326 100644 --- a/mlir/test/lib/Dialect/Test/CMakeLists.txt +++ b/mlir/test/lib/Dialect/Test/CMakeLists.txt @@ -31,8 +31,6 @@ mlir_tablegen(TestOpEnums.cpp.inc -gen-enum-defs) add_public_tablegen_target(MLIRTestEnumDefIncGen) set(LLVM_TARGET_DEFINITIONS TestOps.td) -mlir_tablegen(TestOps.h.inc -gen-op-decls) -mlir_tablegen(TestOps.cpp.inc -gen-op-defs) mlir_tablegen(TestOpsDialect.h.inc -gen-dialect-decls -dialect=test) mlir_tablegen(TestOpsDialect.cpp.inc -gen-dialect-defs -dialect=test) mlir_tablegen(TestPatterns.inc -gen-rewriters) @@ -43,16 +41,22 @@ mlir_tablegen(TestOpsSyntax.h.inc -gen-op-decls) mlir_tablegen(TestOpsSyntax.cpp.inc -gen-op-defs) add_public_tablegen_target(MLIRTestOpsSyntaxIncGen) +add_sharded_ops(TestOps 20) + # Exclude tests from libMLIR.so add_mlir_library(MLIRTestDialect TestAttributes.cpp TestDialect.cpp + TestFormatUtils.cpp TestInterfaces.cpp + TestOpDefs.cpp + TestOps.cpp TestPatterns.cpp TestTraits.cpp TestTypes.cpp TestOpsSyntax.cpp TestDialectInterfaces.cpp + ${SHARDED_SRCS} EXCLUDE_FROM_LIBMLIR @@ -63,6 +67,7 @@ add_mlir_library(MLIRTestDialect MLIRTestTypeDefIncGen MLIRTestOpsIncGen MLIRTestOpsSyntaxIncGen + MLIRTestOpsShardGen LINK_LIBS PUBLIC MLIRControlFlowInterfaces diff --git a/mlir/test/lib/Dialect/Test/TestAttributes.cpp b/mlir/test/lib/Dialect/Test/TestAttributes.cpp index d41d495c38e553..2cc051e664beec 100644 --- a/mlir/test/lib/Dialect/Test/TestAttributes.cpp +++ b/mlir/test/lib/Dialect/Test/TestAttributes.cpp @@ -19,6 +19,7 @@ #include "mlir/IR/Types.h" #include "mlir/Support/LogicalResult.h" #include "llvm/ADT/Hashing.h" +#include "llvm/ADT/StringExtras.h" #include "llvm/ADT/TypeSwitch.h" #include "llvm/ADT/bit.h" #include "llvm/Support/ErrorHandling.h" @@ -244,7 +245,7 @@ static void printConditionalAlias(AsmPrinter &p, StringAttr value) { //===----------------------------------------------------------------------===// #include "TestAttrInterfaces.cpp.inc" - +#include "TestOpEnums.cpp.inc" #define GET_ATTRDEF_CLASSES #include "TestAttrDefs.cpp.inc" diff --git a/mlir/test/lib/Dialect/Test/TestDialect.cpp b/mlir/test/lib/Dialect/Test/TestDialect.cpp index a23ed89c4b04d1..21c46fc807aaa8 100644 --- a/mlir/test/lib/Dialect/Test/TestDialect.cpp +++ b/mlir/test/lib/Dialect/Test/TestDialect.cpp @@ -7,8 +7,7 @@ //===----------------------------------------------------------------------===// #include "TestDialect.h" -#include "TestAttributes.h" -#include "TestInterfaces.h" +#include "TestOps.h" #include "TestTypes.h" #include "mlir/Bytecode/BytecodeImplementation.h" #include "mlir/Dialect/Arith/IR/Arith.h" @@ -39,17 +38,85 @@ #include "llvm/Support/Base64.h" #include "llvm/Support/Casting.h" +#include "mlir/Dialect/Arith/IR/Arith.h" +#include "mlir/Dialect/DLTI/DLTI.h" +#include "mlir/Interfaces/FoldInterfaces.h" +#include "mlir/Reducer/ReductionPatternInterface.h" +#include "mlir/Transforms/InliningUtils.h" #include <cstdint> #include <numeric> #include <optional> -// Include this before the using namespace lines below to -// test that we don't have namespace dependencies. +// Include this before the using namespace lines below to test that we don't +// have namespace dependencies. #include "TestOpsDialect.cpp.inc" using namespace mlir; using namespace test; +//===----------------------------------------------------------------------===// +// PropertiesWithCustomPrint +//===----------------------------------------------------------------------===// + +LogicalResult +test::setPropertiesFromAttribute(PropertiesWithCustomPrint &prop, + Attribute attr, + function_ref<InFlightDiagnostic()> emitError) { + DictionaryAttr dict = dyn_cast<DictionaryAttr>(attr); + if (!dict) { + emitError() << "expected DictionaryAttr to set TestProperties"; + return failure(); + } + auto label = dict.getAs<mlir::StringAttr>("label"); + if (!label) { + emitError() << "expected StringAttr for key `label`"; + return failure(); + } + auto valueAttr = dict.getAs<IntegerAttr>("value"); + if (!valueAttr) { + emitError() << "expected IntegerAttr for key `value`"; + return failure(); + } + + prop.label = std::make_shared<std::string>(label.getValue()); + prop.value = valueAttr.getValue().getSExtValue(); + return success(); +} + +DictionaryAttr +test::getPropertiesAsAttribute(MLIRContext *ctx, + const PropertiesWithCustomPrint &prop) { + SmallVector<NamedAttribute> attrs; + Builder b{ctx}; + attrs.push_back(b.getNamedAttr("label", b.getStringAttr(*prop.label))); + attrs.push_back(b.getNamedAttr("value", b.getI32IntegerAttr(prop.value))); + return b.getDictionaryAttr(attrs); +} + +llvm::hash_code test::computeHash(const PropertiesWithCustomPrint &prop) { + return llvm::hash_combine(prop.value, StringRef(*prop.label)); +} + +void test::customPrintProperties(OpAsmPrinter &p, + const PropertiesWithCustomPrint &prop) { + p.printKeywordOrString(*prop.label); + p << " is " << prop.value; +} + +ParseResult test::customParseProperties(OpAsmParser &parser, + PropertiesWithCustomPrint &prop) { + std::string label; + if (parser.parseKeywordOrString(&label) || parser.parseKeyword("is") || + parser.parseInteger(prop.value)) + return failure(); + prop.label = std::make_shared<std::string>(std::move(label)); + return success(); +} + +//===----------------------------------------------------------------------===// +// MyPropStruct +//===----------------------------------------------------------------------===// + Attribute MyPropStruct::asAttribute(MLIRContext *ctx) const { return StringAttr::get(ctx, content); } @@ -70,8 +137,8 @@ llvm::hash_code MyPropStruct::hash() const { return hash_value(StringRef(content)); } -static LogicalResult readFromMlirBytecode(DialectBytecodeReader &reader, - MyPropStruct &prop) { +LogicalResult test::readFromMlirBytecode(DialectBytecodeReader &reader, + MyPropStruct &prop) { StringRef str; if (failed(reader.readString(str))) return failure(); @@ -79,13 +146,71 @@ static LogicalResult readFromMlirBytecode(DialectBytecodeReader &reader, return success(); } -static void writeToMlirBytecode(::mlir::DialectBytecodeWriter &writer, - MyPropStruct &prop) { +void test::writeToMlirBytecode(DialectBytecodeWriter &writer, + MyPropStruct &prop) { writer.writeOwnedString(prop.content); } -static LogicalResult readFromMlirBytecode(DialectBytecodeReader &reader, - MutableArrayRef<int64_t> prop) { +//===----------------------------------------------------------------------===// +// VersionedProperties +//===----------------------------------------------------------------------===// + +LogicalResult +test::setPropertiesFromAttribute(VersionedProperties &prop, Attribute attr, + function_ref<InFlightDiagnostic()> emitError) { + DictionaryAttr dict = dyn_cast<DictionaryAttr>(attr); + if (!dict) { + emitError() << "expected DictionaryAttr to set VersionedProperties"; + return failure(); + } + auto value1Attr = dict.getAs<IntegerAttr>("value1"); + if (!value1Attr) { + emitError() << "expected IntegerAttr for key `value1`"; + return failure(); + } + auto value2Attr = dict.getAs<IntegerAttr>("value2"); + if (!value2Attr) { + emitError() << "expected IntegerAttr for key `value2`"; + return failure(); + } + + prop.value1 = value1Attr.getValue().getSExtValue(); + prop.value2 = value2Attr.getValue().getSExtValue(); + return success(); +} + +DictionaryAttr test::getPropertiesAsAttribute(MLIRContext *ctx, + const VersionedProperties &prop) { + SmallVector<NamedAttribute> attrs; + Builder b{ctx}; + attrs.push_back(b.getNamedAttr("value1", b.getI32IntegerAttr(prop.value1))); + attrs.push_back(b.getNamedAttr("value2", b.getI32IntegerAttr(prop.value2))); + return b.getDictionaryAttr(attrs); +} + +llvm::hash_code test::computeHash(const VersionedProperties &prop) { + return llvm::hash_combine(prop.value1, prop.value2); +} + +void test::customPrintProperties(OpAsmPrinter &p, + const VersionedProperties &prop) { + p << prop.value1 << " | " << prop.value2; +} + +ParseResult test::customParseProperties(OpAsmParser &parser, + VersionedProperties &prop) { + if (parser.parseInteger(prop.value1) || parser.parseVerticalBar() || + parser.parseInteger(prop.value2)) + return failure(); + return success(); +} + +//===----------------------------------------------------------------------===// +// Bytecode Support +//===----------------------------------------------------------------------===// + +LogicalResult test::readFromMlirBytecode(DialectBytecodeReader &reader, + MutableArrayRef<int64_t> prop) { uint64_t size; if (failed(reader.readVarInt(size))) return failure(); @@ -101,45 +226,13 @@ static LogicalResult readFromMlirBytecode(DialectBytecodeReader &reader, return success(); } -static void writeToMlirBytecode(::mlir::DialectBytecodeWriter &writer, - ArrayRef<int64_t> prop) { +void test::writeToMlirBytecode(DialectBytecodeWriter &writer, + ArrayRef<int64_t> prop) { writer.writeVarInt(prop.size()); for (auto elt : prop) writer.writeVarInt(elt); } -static LogicalResult -setPropertiesFromAttribute(PropertiesWithCustomPrint &prop, Attribute attr, - function_ref<InFlightDiagnostic()> emitError); -static DictionaryAttr -getPropertiesAsAttribute(MLIRContext *ctx, - const PropertiesWithCustomPrint &prop); -static llvm::hash_code computeHash(const PropertiesWithCustomPrint &prop); -static void customPrintProperties(OpAsmPrinter &p, - const PropertiesWithCustomPrint &prop); -static ParseResult customParseProperties(OpAsmParser &parser, - PropertiesWithCustomPrint &prop); -static LogicalResult -setPropertiesFromAttribute(VersionedProperties &prop, Attribute attr, - function_ref<InFlightDiagnostic()> emitError); -static DictionaryAttr getPropertiesAsAttribute(MLIRContext *ctx, - const VersionedProperties &prop); -static llvm::hash_code computeHash(const VersionedProperties &prop); -static void customPrintProperties(OpAsmPrinter &p, - const VersionedProperties &prop); -static ParseResult customParseProperties(OpAsmParser &parser, - VersionedProperties &prop); -static ParseResult -parseSwitchCases(OpAsmParser &p, DenseI64ArrayAttr &cases, - SmallVectorImpl<std::unique_ptr<Region>> &caseRegions); - -static void printSwitchCases(OpAsmPrinter &p, Operation *op, - DenseI64ArrayAttr cases, RegionRange caseRegions); - -void test::registerTestDialect(DialectRegistry ®istry) { - registry.insert<TestDialect>(); -} - //===----------------------------------------------------------------------===// // Dynamic operations //===----------------------------------------------------------------------===// @@ -196,9 +289,20 @@ getDynamicCustomParserPrinterOp(TestDialect *dialect) { // TestDialect //===----------------------------------------------------------------------===// -static void testSideEffectOpGetEffect( +void test::registerTestDialect(DialectRegistry ®istry) { + registry.insert<TestDialect>(); +} + +void test::testSideEffectOpGetEffect( Operation *op, - SmallVectorImpl<SideEffects::EffectInstance<TestEffects::Effect>> &effects); + SmallVectorImpl<SideEffects::EffectInstance<TestEffects::Effect>> + &effects) { + auto effectsAttr = op->getAttrOfType<AffineMapAttr>("effect_parameter"); + if (!effectsAttr) + return; + + effects.emplace_back(TestEffects::Concrete::get(), effectsAttr); +} // This is the implementation of a dialect fallback for `TestEffectOpInterface`. struct TestOpEffectInterfaceFallback @@ -228,6 +332,7 @@ void TestDialect::initialize() { >(); registerOpsSyntax(); addOperations<ManualCppOpWithFold>(); + registerTestDialectOperations(this); registerDynamicOp(getDynamicGenericOp(this)); registerDynamicOp(getDynamicOneOperandTwoResultsOp(this)); registerDynamicOp(getDynamicCustomParserPrinterOp(this)); @@ -318,57 +423,6 @@ TestDialect::getOperationPrinter(Operation *op) const { return {}; } -//===----------------------------------------------------------------------===// -// TypedAttrOp -//===----------------------------------------------------------------------===// - -/// Parse an attribute with a given type. -static ParseResult parseAttrElideType(AsmParser &parser, TypeAttr type, - Attribute &attr) { - return parser.parseAttribute(attr, type.getValue()); -} - -/// Print an attribute without its type. -static void printAttrElideType(AsmPrinter &printer, Operation *op, - TypeAttr type, Attribute attr) { - printer.printAttributeWithoutType(attr); -} - -//===----------------------------------------------------------------------===// -// TestBranchOp -//===----------------------------------------------------------------------===// - -SuccessorOperands TestBranchOp::getSuccessorOperands(unsigned index) { - assert(index == 0 && "invalid successor index"); - return SuccessorOperands(getTargetOperandsMutable()); -} - -//===----------------------------------------------------------------------===// -// TestProducingBranchOp -//===----------------------------------------------------------------------===// - -SuccessorOperands TestProducingBranchOp::getSuccessorOperands(unsigned index) { - assert(index <= 1 && "invalid successor index"); - if (index == 1) - return SuccessorOperands(getFirstOperandsMutable()); - return SuccessorOperands(getSecondOperandsMutable()); -} - -//===----------------------------------------------------------------------===// -// TestProducingBranchOp -//===----------------------------------------------------------------------===// - -SuccessorOperands TestInternalBranchOp::getSuccessorOperands(unsigned index) { - assert(index <= 1 && "invalid successor index"); - if (index == 0) - return SuccessorOperands(0, getSuccessOperandsMutable()); - return SuccessorOperands(1, getErrorOperandsMutable()); -} - -//===----------------------------------------------------------------------===// -// TestDialectCanonicalizerOp -//===----------------------------------------------------------------------===// - static LogicalResult dialectCanonicalizationPattern(TestDialectCanonicalizerOp op, PatternRewriter &rewriter) { @@ -381,1206 +435,3 @@ void TestDialect::getCanonicalizationPatterns( RewritePatternSet &results) const { results.add(&dialectCanonicalizationPattern); } - -//===----------------------------------------------------------------------===// -// TestCallOp -//===----------------------------------------------------------------------===// - -LogicalResult TestCallOp::verifySymbolUses(SymbolTableCollection &symbolTable) { - // Check that the callee attribute was specified. - auto fnAttr = (*this)->getAttrOfType<FlatSymbolRefAttr>("callee"); - if (!fnAttr) - return emitOpError("requires a 'callee' symbol reference attribute"); - if (!symbolTable.lookupNearestSymbolFrom<FunctionOpInterface>(*this, fnAttr)) - return emitOpError() << "'" << fnAttr.getValue() - << "' does not reference a valid function"; - return success(); -} -... [truncated] `````````` </details> https://github.com/llvm/llvm-project/pull/89424 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits