diff options
Diffstat (limited to 'mlir/unittests')
-rw-r--r-- | mlir/unittests/Conversion/PDLToPDLInterp/RootOrderingTest.cpp | 2 | ||||
-rw-r--r-- | mlir/unittests/Dialect/OpenACC/OpenACCOpsTest.cpp | 126 | ||||
-rw-r--r-- | mlir/unittests/Dialect/SCF/LoopLikeSCFOpsTest.cpp | 44 | ||||
-rw-r--r-- | mlir/unittests/Dialect/SMT/QuantifierTest.cpp | 36 | ||||
-rw-r--r-- | mlir/unittests/Dialect/SPIRV/SerializationTest.cpp | 12 | ||||
-rw-r--r-- | mlir/unittests/ExecutionEngine/CMakeLists.txt | 3 | ||||
-rw-r--r-- | mlir/unittests/IR/AttributeTest.cpp | 31 | ||||
-rw-r--r-- | mlir/unittests/IR/IRMapping.cpp | 8 | ||||
-rw-r--r-- | mlir/unittests/IR/InterfaceAttachmentTest.cpp | 18 | ||||
-rw-r--r-- | mlir/unittests/IR/InterfaceTest.cpp | 16 | ||||
-rw-r--r-- | mlir/unittests/IR/OperationSupportTest.cpp | 12 | ||||
-rw-r--r-- | mlir/unittests/IR/SymbolTableTest.cpp | 34 | ||||
-rw-r--r-- | mlir/unittests/TableGen/OpBuildGen.cpp | 113 | ||||
-rw-r--r-- | mlir/unittests/Target/LLVM/CMakeLists.txt | 6 |
14 files changed, 256 insertions, 205 deletions
diff --git a/mlir/unittests/Conversion/PDLToPDLInterp/RootOrderingTest.cpp b/mlir/unittests/Conversion/PDLToPDLInterp/RootOrderingTest.cpp index f82ece0..020c0fe 100644 --- a/mlir/unittests/Conversion/PDLToPDLInterp/RootOrderingTest.cpp +++ b/mlir/unittests/Conversion/PDLToPDLInterp/RootOrderingTest.cpp @@ -41,7 +41,7 @@ protected: builder.setInsertionPointToStart(&block); for (int i = 0; i < 4; ++i) // Ops will be deleted when `block` is destroyed. - v[i] = builder.create<ConstantIntOp>(builder.getUnknownLoc(), i, 32); + v[i] = ConstantIntOp::create(builder, builder.getUnknownLoc(), i, 32); } /// Checks that optimal branching on graph has the given cost and diff --git a/mlir/unittests/Dialect/OpenACC/OpenACCOpsTest.cpp b/mlir/unittests/Dialect/OpenACC/OpenACCOpsTest.cpp index 836efdb..6ac9a87 100644 --- a/mlir/unittests/Dialect/OpenACC/OpenACCOpsTest.cpp +++ b/mlir/unittests/Dialect/OpenACC/OpenACCOpsTest.cpp @@ -45,7 +45,7 @@ protected: template <typename Op> void testAsyncOnly(OpBuilder &b, MLIRContext &context, Location loc, llvm::SmallVector<DeviceType> &dtypes) { - OwningOpRef<Op> op = b.create<Op>(loc, TypeRange{}, ValueRange{}); + OwningOpRef<Op> op = Op::create(b, loc, TypeRange{}, ValueRange{}); EXPECT_FALSE(op->hasAsyncOnly()); for (auto d : dtypes) EXPECT_FALSE(op->hasAsyncOnly(d)); @@ -82,12 +82,12 @@ void testAsyncOnlyDataEntry(OpBuilder &b, MLIRContext &context, Location loc, llvm::SmallVector<DeviceType> &dtypes) { auto memrefTy = MemRefType::get({}, b.getI32Type()); OwningOpRef<memref::AllocaOp> varPtrOp = - b.create<memref::AllocaOp>(loc, memrefTy); + memref::AllocaOp::create(b, loc, memrefTy); TypedValue<PointerLikeType> varPtr = cast<TypedValue<PointerLikeType>>(varPtrOp->getResult()); - OwningOpRef<Op> op = b.create<Op>(loc, varPtr, - /*structured=*/true, /*implicit=*/true); + OwningOpRef<Op> op = Op::create(b, loc, varPtr, + /*structured=*/true, /*implicit=*/true); EXPECT_FALSE(op->hasAsyncOnly()); for (auto d : dtypes) @@ -128,7 +128,7 @@ TEST_F(OpenACCOpsTest, asyncOnlyTestDataEntry) { template <typename Op> void testAsyncValue(OpBuilder &b, MLIRContext &context, Location loc, llvm::SmallVector<DeviceType> &dtypes) { - OwningOpRef<Op> op = b.create<Op>(loc, TypeRange{}, ValueRange{}); + OwningOpRef<Op> op = Op::create(b, loc, TypeRange{}, ValueRange{}); mlir::Value empty; EXPECT_EQ(op->getAsyncValue(), empty); @@ -136,7 +136,7 @@ void testAsyncValue(OpBuilder &b, MLIRContext &context, Location loc, EXPECT_EQ(op->getAsyncValue(d), empty); OwningOpRef<arith::ConstantIndexOp> val = - b.create<arith::ConstantIndexOp>(loc, 1); + arith::ConstantIndexOp::create(b, loc, 1); auto dtypeNvidia = DeviceTypeAttr::get(&context, DeviceType::Nvidia); op->setAsyncOperandsDeviceTypeAttr(b.getArrayAttr({dtypeNvidia})); op->getAsyncOperandsMutable().assign(val->getResult()); @@ -158,12 +158,12 @@ void testAsyncValueDataEntry(OpBuilder &b, MLIRContext &context, Location loc, llvm::SmallVector<DeviceType> &dtypes) { auto memrefTy = MemRefType::get({}, b.getI32Type()); OwningOpRef<memref::AllocaOp> varPtrOp = - b.create<memref::AllocaOp>(loc, memrefTy); + memref::AllocaOp::create(b, loc, memrefTy); TypedValue<PointerLikeType> varPtr = cast<TypedValue<PointerLikeType>>(varPtrOp->getResult()); - OwningOpRef<Op> op = b.create<Op>(loc, varPtr, - /*structured=*/true, /*implicit=*/true); + OwningOpRef<Op> op = Op::create(b, loc, varPtr, + /*structured=*/true, /*implicit=*/true); mlir::Value empty; EXPECT_EQ(op->getAsyncValue(), empty); @@ -171,7 +171,7 @@ void testAsyncValueDataEntry(OpBuilder &b, MLIRContext &context, Location loc, EXPECT_EQ(op->getAsyncValue(d), empty); OwningOpRef<arith::ConstantIndexOp> val = - b.create<arith::ConstantIndexOp>(loc, 1); + arith::ConstantIndexOp::create(b, loc, 1); auto dtypeNvidia = DeviceTypeAttr::get(&context, DeviceType::Nvidia); op->setAsyncOperandsDeviceTypeAttr(b.getArrayAttr({dtypeNvidia})); op->getAsyncOperandsMutable().assign(val->getResult()); @@ -197,13 +197,13 @@ template <typename Op> void testNumGangsValues(OpBuilder &b, MLIRContext &context, Location loc, llvm::SmallVector<DeviceType> &dtypes, llvm::SmallVector<DeviceType> &dtypesWithoutNone) { - OwningOpRef<Op> op = b.create<Op>(loc, TypeRange{}, ValueRange{}); + OwningOpRef<Op> op = Op::create(b, loc, TypeRange{}, ValueRange{}); EXPECT_EQ(op->getNumGangsValues().begin(), op->getNumGangsValues().end()); OwningOpRef<arith::ConstantIndexOp> val1 = - b.create<arith::ConstantIndexOp>(loc, 1); + arith::ConstantIndexOp::create(b, loc, 1); OwningOpRef<arith::ConstantIndexOp> val2 = - b.create<arith::ConstantIndexOp>(loc, 4); + arith::ConstantIndexOp::create(b, loc, 4); auto dtypeNone = DeviceTypeAttr::get(&context, DeviceType::None); op->getNumGangsMutable().assign(val1->getResult()); op->setNumGangsDeviceTypeAttr(b.getArrayAttr({dtypeNone})); @@ -264,7 +264,7 @@ TEST_F(OpenACCOpsTest, numGangsValuesTest) { template <typename Op> void testVectorLength(OpBuilder &b, MLIRContext &context, Location loc, llvm::SmallVector<DeviceType> &dtypes) { - OwningOpRef<Op> op = b.create<Op>(loc, TypeRange{}, ValueRange{}); + OwningOpRef<Op> op = Op::create(b, loc, TypeRange{}, ValueRange{}); mlir::Value empty; EXPECT_EQ(op->getVectorLengthValue(), empty); @@ -272,7 +272,7 @@ void testVectorLength(OpBuilder &b, MLIRContext &context, Location loc, EXPECT_EQ(op->getVectorLengthValue(d), empty); OwningOpRef<arith::ConstantIndexOp> val = - b.create<arith::ConstantIndexOp>(loc, 1); + arith::ConstantIndexOp::create(b, loc, 1); auto dtypeNvidia = DeviceTypeAttr::get(&context, DeviceType::Nvidia); op->setVectorLengthDeviceTypeAttr(b.getArrayAttr({dtypeNvidia})); op->getVectorLengthMutable().assign(val->getResult()); @@ -292,7 +292,7 @@ template <typename Op> void testWaitOnly(OpBuilder &b, MLIRContext &context, Location loc, llvm::SmallVector<DeviceType> &dtypes, llvm::SmallVector<DeviceType> &dtypesWithoutNone) { - OwningOpRef<Op> op = b.create<Op>(loc, TypeRange{}, ValueRange{}); + OwningOpRef<Op> op = Op::create(b, loc, TypeRange{}, ValueRange{}); EXPECT_FALSE(op->hasWaitOnly()); for (auto d : dtypes) EXPECT_FALSE(op->hasWaitOnly(d)); @@ -332,15 +332,15 @@ template <typename Op> void testWaitValues(OpBuilder &b, MLIRContext &context, Location loc, llvm::SmallVector<DeviceType> &dtypes, llvm::SmallVector<DeviceType> &dtypesWithoutNone) { - OwningOpRef<Op> op = b.create<Op>(loc, TypeRange{}, ValueRange{}); + OwningOpRef<Op> op = Op::create(b, loc, TypeRange{}, ValueRange{}); EXPECT_EQ(op->getWaitValues().begin(), op->getWaitValues().end()); OwningOpRef<arith::ConstantIndexOp> val1 = - b.create<arith::ConstantIndexOp>(loc, 1); + arith::ConstantIndexOp::create(b, loc, 1); OwningOpRef<arith::ConstantIndexOp> val2 = - b.create<arith::ConstantIndexOp>(loc, 4); + arith::ConstantIndexOp::create(b, loc, 4); OwningOpRef<arith::ConstantIndexOp> val3 = - b.create<arith::ConstantIndexOp>(loc, 5); + arith::ConstantIndexOp::create(b, loc, 5); auto dtypeNone = DeviceTypeAttr::get(&context, DeviceType::None); op->getWaitOperandsMutable().assign(val1->getResult()); op->setWaitOperandsDeviceTypeAttr(b.getArrayAttr({dtypeNone})); @@ -426,7 +426,7 @@ TEST_F(OpenACCOpsTest, waitValuesTest) { } TEST_F(OpenACCOpsTest, loopOpGangVectorWorkerTest) { - OwningOpRef<LoopOp> op = b.create<LoopOp>(loc, TypeRange{}, ValueRange{}); + OwningOpRef<LoopOp> op = LoopOp::create(b, loc, TypeRange{}, ValueRange{}); EXPECT_FALSE(op->hasGang()); EXPECT_FALSE(op->hasVector()); EXPECT_FALSE(op->hasWorker()); @@ -473,7 +473,7 @@ TEST_F(OpenACCOpsTest, loopOpGangVectorWorkerTest) { TEST_F(OpenACCOpsTest, routineOpTest) { OwningOpRef<RoutineOp> op = - b.create<RoutineOp>(loc, TypeRange{}, ValueRange{}); + RoutineOp::create(b, loc, TypeRange{}, ValueRange{}); EXPECT_FALSE(op->hasSeq()); EXPECT_FALSE(op->hasVector()); @@ -564,12 +564,12 @@ void testShortDataEntryOpBuilders(OpBuilder &b, MLIRContext &context, Location loc, DataClause dataClause) { auto memrefTy = MemRefType::get({}, b.getI32Type()); OwningOpRef<memref::AllocaOp> varPtrOp = - b.create<memref::AllocaOp>(loc, memrefTy); + memref::AllocaOp::create(b, loc, memrefTy); TypedValue<PointerLikeType> varPtr = cast<TypedValue<PointerLikeType>>(varPtrOp->getResult()); - OwningOpRef<Op> op = b.create<Op>(loc, varPtr, - /*structured=*/true, /*implicit=*/true); + OwningOpRef<Op> op = Op::create(b, loc, varPtr, + /*structured=*/true, /*implicit=*/true); EXPECT_EQ(op->getVarPtr(), varPtr); EXPECT_EQ(op->getType(), memrefTy); @@ -579,24 +579,24 @@ void testShortDataEntryOpBuilders(OpBuilder &b, MLIRContext &context, EXPECT_TRUE(op->getBounds().empty()); EXPECT_FALSE(op->getVarPtrPtr()); - OwningOpRef<Op> op2 = b.create<Op>(loc, varPtr, - /*structured=*/false, /*implicit=*/false); + OwningOpRef<Op> op2 = Op::create(b, loc, varPtr, + /*structured=*/false, /*implicit=*/false); EXPECT_FALSE(op2->getImplicit()); EXPECT_FALSE(op2->getStructured()); OwningOpRef<arith::ConstantIndexOp> extent = - b.create<arith::ConstantIndexOp>(loc, 1); + arith::ConstantIndexOp::create(b, loc, 1); OwningOpRef<DataBoundsOp> bounds = - b.create<DataBoundsOp>(loc, extent->getResult()); + DataBoundsOp::create(b, loc, extent->getResult()); OwningOpRef<Op> opWithBounds = - b.create<Op>(loc, varPtr, - /*structured=*/true, /*implicit=*/true, bounds->getResult()); + Op::create(b, loc, varPtr, + /*structured=*/true, /*implicit=*/true, bounds->getResult()); EXPECT_FALSE(opWithBounds->getBounds().empty()); EXPECT_EQ(opWithBounds->getBounds().back(), bounds->getResult()); OwningOpRef<Op> opWithName = - b.create<Op>(loc, varPtr, - /*structured=*/true, /*implicit=*/true, "varName"); + Op::create(b, loc, varPtr, + /*structured=*/true, /*implicit=*/true, "varName"); EXPECT_EQ(opWithName->getNameAttr().str(), "varName"); } @@ -637,17 +637,17 @@ void testShortDataExitOpBuilders(OpBuilder &b, MLIRContext &context, Location loc, DataClause dataClause) { auto memrefTy = MemRefType::get({}, b.getI32Type()); OwningOpRef<memref::AllocaOp> varPtrOp = - b.create<memref::AllocaOp>(loc, memrefTy); + memref::AllocaOp::create(b, loc, memrefTy); TypedValue<PointerLikeType> varPtr = cast<TypedValue<PointerLikeType>>(varPtrOp->getResult()); - OwningOpRef<GetDevicePtrOp> accPtrOp = b.create<GetDevicePtrOp>( - loc, varPtr, /*structured=*/true, /*implicit=*/true); + OwningOpRef<GetDevicePtrOp> accPtrOp = GetDevicePtrOp::create( + b, loc, varPtr, /*structured=*/true, /*implicit=*/true); TypedValue<PointerLikeType> accPtr = cast<TypedValue<PointerLikeType>>(accPtrOp->getResult()); - OwningOpRef<Op> op = b.create<Op>(loc, accPtr, varPtr, - /*structured=*/true, /*implicit=*/true); + OwningOpRef<Op> op = Op::create(b, loc, accPtr, varPtr, + /*structured=*/true, /*implicit=*/true); EXPECT_EQ(op->getVarPtr(), varPtr); EXPECT_EQ(op->getAccPtr(), accPtr); @@ -656,24 +656,24 @@ void testShortDataExitOpBuilders(OpBuilder &b, MLIRContext &context, EXPECT_TRUE(op->getStructured()); EXPECT_TRUE(op->getBounds().empty()); - OwningOpRef<Op> op2 = b.create<Op>(loc, accPtr, varPtr, - /*structured=*/false, /*implicit=*/false); + OwningOpRef<Op> op2 = Op::create(b, loc, accPtr, varPtr, + /*structured=*/false, /*implicit=*/false); EXPECT_FALSE(op2->getImplicit()); EXPECT_FALSE(op2->getStructured()); OwningOpRef<arith::ConstantIndexOp> extent = - b.create<arith::ConstantIndexOp>(loc, 1); + arith::ConstantIndexOp::create(b, loc, 1); OwningOpRef<DataBoundsOp> bounds = - b.create<DataBoundsOp>(loc, extent->getResult()); + DataBoundsOp::create(b, loc, extent->getResult()); OwningOpRef<Op> opWithBounds = - b.create<Op>(loc, accPtr, varPtr, - /*structured=*/true, /*implicit=*/true, bounds->getResult()); + Op::create(b, loc, accPtr, varPtr, + /*structured=*/true, /*implicit=*/true, bounds->getResult()); EXPECT_FALSE(opWithBounds->getBounds().empty()); EXPECT_EQ(opWithBounds->getBounds().back(), bounds->getResult()); OwningOpRef<Op> opWithName = - b.create<Op>(loc, accPtr, varPtr, - /*structured=*/true, /*implicit=*/true, "varName"); + Op::create(b, loc, accPtr, varPtr, + /*structured=*/true, /*implicit=*/true, "varName"); EXPECT_EQ(opWithName->getNameAttr().str(), "varName"); } @@ -689,17 +689,17 @@ void testShortDataExitNoVarPtrOpBuilders(OpBuilder &b, MLIRContext &context, Location loc, DataClause dataClause) { auto memrefTy = MemRefType::get({}, b.getI32Type()); OwningOpRef<memref::AllocaOp> varPtrOp = - b.create<memref::AllocaOp>(loc, memrefTy); + memref::AllocaOp::create(b, loc, memrefTy); TypedValue<PointerLikeType> varPtr = cast<TypedValue<PointerLikeType>>(varPtrOp->getResult()); - OwningOpRef<GetDevicePtrOp> accPtrOp = b.create<GetDevicePtrOp>( - loc, varPtr, /*structured=*/true, /*implicit=*/true); + OwningOpRef<GetDevicePtrOp> accPtrOp = GetDevicePtrOp::create( + b, loc, varPtr, /*structured=*/true, /*implicit=*/true); TypedValue<PointerLikeType> accPtr = cast<TypedValue<PointerLikeType>>(accPtrOp->getResult()); - OwningOpRef<Op> op = b.create<Op>(loc, accPtr, - /*structured=*/true, /*implicit=*/true); + OwningOpRef<Op> op = Op::create(b, loc, accPtr, + /*structured=*/true, /*implicit=*/true); EXPECT_EQ(op->getAccPtr(), accPtr); EXPECT_EQ(op->getDataClause(), dataClause); @@ -707,24 +707,24 @@ void testShortDataExitNoVarPtrOpBuilders(OpBuilder &b, MLIRContext &context, EXPECT_TRUE(op->getStructured()); EXPECT_TRUE(op->getBounds().empty()); - OwningOpRef<Op> op2 = b.create<Op>(loc, accPtr, - /*structured=*/false, /*implicit=*/false); + OwningOpRef<Op> op2 = Op::create(b, loc, accPtr, + /*structured=*/false, /*implicit=*/false); EXPECT_FALSE(op2->getImplicit()); EXPECT_FALSE(op2->getStructured()); OwningOpRef<arith::ConstantIndexOp> extent = - b.create<arith::ConstantIndexOp>(loc, 1); + arith::ConstantIndexOp::create(b, loc, 1); OwningOpRef<DataBoundsOp> bounds = - b.create<DataBoundsOp>(loc, extent->getResult()); + DataBoundsOp::create(b, loc, extent->getResult()); OwningOpRef<Op> opWithBounds = - b.create<Op>(loc, accPtr, - /*structured=*/true, /*implicit=*/true, bounds->getResult()); + Op::create(b, loc, accPtr, + /*structured=*/true, /*implicit=*/true, bounds->getResult()); EXPECT_FALSE(opWithBounds->getBounds().empty()); EXPECT_EQ(opWithBounds->getBounds().back(), bounds->getResult()); OwningOpRef<Op> opWithName = - b.create<Op>(loc, accPtr, - /*structured=*/true, /*implicit=*/true, "varName"); + Op::create(b, loc, accPtr, + /*structured=*/true, /*implicit=*/true, "varName"); EXPECT_EQ(opWithName->getNameAttr().str(), "varName"); } @@ -742,16 +742,16 @@ void testShortDataEntryOpBuildersMappableVar(OpBuilder &b, MLIRContext &context, auto int64Ty = b.getI64Type(); auto memrefTy = MemRefType::get({}, int64Ty); OwningOpRef<memref::AllocaOp> varPtrOp = - b.create<memref::AllocaOp>(loc, memrefTy); + memref::AllocaOp::create(b, loc, memrefTy); SmallVector<Value> indices; OwningOpRef<memref::LoadOp> loadVarOp = - b.create<memref::LoadOp>(loc, int64Ty, varPtrOp->getResult(), indices); + memref::LoadOp::create(b, loc, int64Ty, varPtrOp->getResult(), indices); EXPECT_TRUE(isMappableType(loadVarOp->getResult().getType())); TypedValue<MappableType> var = cast<TypedValue<MappableType>>(loadVarOp->getResult()); - OwningOpRef<Op> op = b.create<Op>(loc, var, - /*structured=*/true, /*implicit=*/true); + OwningOpRef<Op> op = Op::create(b, loc, var, + /*structured=*/true, /*implicit=*/true); EXPECT_EQ(op->getVar(), var); EXPECT_EQ(op->getVarPtr(), nullptr); diff --git a/mlir/unittests/Dialect/SCF/LoopLikeSCFOpsTest.cpp b/mlir/unittests/Dialect/SCF/LoopLikeSCFOpsTest.cpp index fecd960..ef23123 100644 --- a/mlir/unittests/Dialect/SCF/LoopLikeSCFOpsTest.cpp +++ b/mlir/unittests/Dialect/SCF/LoopLikeSCFOpsTest.cpp @@ -119,45 +119,45 @@ protected: TEST_F(SCFLoopLikeTest, queryUnidimensionalLooplikes) { OwningOpRef<arith::ConstantIndexOp> lb = - b.create<arith::ConstantIndexOp>(loc, 0); + arith::ConstantIndexOp::create(b, loc, 0); OwningOpRef<arith::ConstantIndexOp> ub = - b.create<arith::ConstantIndexOp>(loc, 10); + arith::ConstantIndexOp::create(b, loc, 10); OwningOpRef<arith::ConstantIndexOp> step = - b.create<arith::ConstantIndexOp>(loc, 2); + arith::ConstantIndexOp::create(b, loc, 2); OwningOpRef<scf::ForOp> forOp = - b.create<scf::ForOp>(loc, lb.get(), ub.get(), step.get()); + scf::ForOp::create(b, loc, lb.get(), ub.get(), step.get()); checkUnidimensional(forOp.get()); - OwningOpRef<scf::ForallOp> forallOp = b.create<scf::ForallOp>( - loc, ArrayRef<OpFoldResult>(lb->getResult()), + OwningOpRef<scf::ForallOp> forallOp = scf::ForallOp::create( + b, loc, ArrayRef<OpFoldResult>(lb->getResult()), ArrayRef<OpFoldResult>(ub->getResult()), ArrayRef<OpFoldResult>(step->getResult()), ValueRange(), std::nullopt); checkUnidimensional(forallOp.get()); - OwningOpRef<scf::ParallelOp> parallelOp = b.create<scf::ParallelOp>( - loc, ValueRange(lb->getResult()), ValueRange(ub->getResult()), + OwningOpRef<scf::ParallelOp> parallelOp = scf::ParallelOp::create( + b, loc, ValueRange(lb->getResult()), ValueRange(ub->getResult()), ValueRange(step->getResult()), ValueRange()); checkUnidimensional(parallelOp.get()); } TEST_F(SCFLoopLikeTest, queryMultidimensionalLooplikes) { OwningOpRef<arith::ConstantIndexOp> lb = - b.create<arith::ConstantIndexOp>(loc, 0); + arith::ConstantIndexOp::create(b, loc, 0); OwningOpRef<arith::ConstantIndexOp> ub = - b.create<arith::ConstantIndexOp>(loc, 10); + arith::ConstantIndexOp::create(b, loc, 10); OwningOpRef<arith::ConstantIndexOp> step = - b.create<arith::ConstantIndexOp>(loc, 2); + arith::ConstantIndexOp::create(b, loc, 2); - OwningOpRef<scf::ForallOp> forallOp = b.create<scf::ForallOp>( - loc, ArrayRef<OpFoldResult>({lb->getResult(), lb->getResult()}), + OwningOpRef<scf::ForallOp> forallOp = scf::ForallOp::create( + b, loc, ArrayRef<OpFoldResult>({lb->getResult(), lb->getResult()}), ArrayRef<OpFoldResult>({ub->getResult(), ub->getResult()}), ArrayRef<OpFoldResult>({step->getResult(), step->getResult()}), ValueRange(), std::nullopt); checkMultidimensional(forallOp.get()); - OwningOpRef<scf::ParallelOp> parallelOp = b.create<scf::ParallelOp>( - loc, ValueRange({lb->getResult(), lb->getResult()}), + OwningOpRef<scf::ParallelOp> parallelOp = scf::ParallelOp::create( + b, loc, ValueRange({lb->getResult(), lb->getResult()}), ValueRange({ub->getResult(), ub->getResult()}), ValueRange({step->getResult(), step->getResult()}), ValueRange()); checkMultidimensional(parallelOp.get()); @@ -165,22 +165,22 @@ TEST_F(SCFLoopLikeTest, queryMultidimensionalLooplikes) { TEST_F(SCFLoopLikeTest, testForallNormalize) { OwningOpRef<arith::ConstantIndexOp> lb = - b.create<arith::ConstantIndexOp>(loc, 1); + arith::ConstantIndexOp::create(b, loc, 1); OwningOpRef<arith::ConstantIndexOp> ub = - b.create<arith::ConstantIndexOp>(loc, 10); + arith::ConstantIndexOp::create(b, loc, 10); OwningOpRef<arith::ConstantIndexOp> step = - b.create<arith::ConstantIndexOp>(loc, 3); + arith::ConstantIndexOp::create(b, loc, 3); - scf::ForallOp forallOp = b.create<scf::ForallOp>( - loc, ArrayRef<OpFoldResult>({lb->getResult(), lb->getResult()}), + scf::ForallOp forallOp = scf::ForallOp::create( + b, loc, ArrayRef<OpFoldResult>({lb->getResult(), lb->getResult()}), ArrayRef<OpFoldResult>({ub->getResult(), ub->getResult()}), ArrayRef<OpFoldResult>({step->getResult(), step->getResult()}), ValueRange(), std::nullopt); // Create a user of the induction variable. Bitcast is chosen for simplicity // since it is unary. b.setInsertionPointToStart(forallOp.getBody()); - b.create<arith::BitcastOp>(UnknownLoc::get(&context), b.getF64Type(), - forallOp.getInductionVar(0)); + arith::BitcastOp::create(b, UnknownLoc::get(&context), b.getF64Type(), + forallOp.getInductionVar(0)); IRRewriter rewriter(b); FailureOr<scf::ForallOp> maybeNormalizedForallOp = normalizeForallOp(rewriter, forallOp); diff --git a/mlir/unittests/Dialect/SMT/QuantifierTest.cpp b/mlir/unittests/Dialect/SMT/QuantifierTest.cpp index d7c57f0..5cbc019 100644 --- a/mlir/unittests/Dialect/SMT/QuantifierTest.cpp +++ b/mlir/unittests/Dialect/SMT/QuantifierTest.cpp @@ -26,10 +26,10 @@ TEST(QuantifierTest, ExistsBuilderWithPattern) { OpBuilder builder(&context); auto boolTy = BoolType::get(&context); - OwningOpRef<ExistsOp> existsOp = builder.create<ExistsOp>( - loc, TypeRange{boolTy, boolTy}, + OwningOpRef<ExistsOp> existsOp = ExistsOp::create( + builder, loc, TypeRange{boolTy, boolTy}, [](OpBuilder &builder, Location loc, ValueRange boundVars) { - return builder.create<AndOp>(loc, boundVars); + return AndOp::create(builder, loc, boundVars); }, std::nullopt, [](OpBuilder &builder, Location loc, ValueRange boundVars) { @@ -57,10 +57,10 @@ TEST(QuantifierTest, ExistsBuilderNoPattern) { OpBuilder builder(&context); auto boolTy = BoolType::get(&context); - OwningOpRef<ExistsOp> existsOp = builder.create<ExistsOp>( - loc, TypeRange{boolTy, boolTy}, + OwningOpRef<ExistsOp> existsOp = ExistsOp::create( + builder, loc, TypeRange{boolTy, boolTy}, [](OpBuilder &builder, Location loc, ValueRange boundVars) { - return builder.create<AndOp>(loc, boundVars); + return AndOp::create(builder, loc, boundVars); }, ArrayRef<StringRef>{"a", "b"}, nullptr, /*weight=*/0, /*noPattern=*/true); @@ -82,10 +82,10 @@ TEST(QuantifierTest, ExistsBuilderDefault) { OpBuilder builder(&context); auto boolTy = BoolType::get(&context); - OwningOpRef<ExistsOp> existsOp = builder.create<ExistsOp>( - loc, TypeRange{boolTy, boolTy}, + OwningOpRef<ExistsOp> existsOp = ExistsOp::create( + builder, loc, TypeRange{boolTy, boolTy}, [](OpBuilder &builder, Location loc, ValueRange boundVars) { - return builder.create<AndOp>(loc, boundVars); + return AndOp::create(builder, loc, boundVars); }, ArrayRef<StringRef>{"a", "b"}); @@ -111,10 +111,10 @@ TEST(QuantifierTest, ForallBuilderWithPattern) { OpBuilder builder(&context); auto boolTy = BoolType::get(&context); - OwningOpRef<ForallOp> forallOp = builder.create<ForallOp>( - loc, TypeRange{boolTy, boolTy}, + OwningOpRef<ForallOp> forallOp = ForallOp::create( + builder, loc, TypeRange{boolTy, boolTy}, [](OpBuilder &builder, Location loc, ValueRange boundVars) { - return builder.create<AndOp>(loc, boundVars); + return AndOp::create(builder, loc, boundVars); }, ArrayRef<StringRef>{"a", "b"}, [](OpBuilder &builder, Location loc, ValueRange boundVars) { @@ -142,10 +142,10 @@ TEST(QuantifierTest, ForallBuilderNoPattern) { OpBuilder builder(&context); auto boolTy = BoolType::get(&context); - OwningOpRef<ForallOp> forallOp = builder.create<ForallOp>( - loc, TypeRange{boolTy, boolTy}, + OwningOpRef<ForallOp> forallOp = ForallOp::create( + builder, loc, TypeRange{boolTy, boolTy}, [](OpBuilder &builder, Location loc, ValueRange boundVars) { - return builder.create<AndOp>(loc, boundVars); + return AndOp::create(builder, loc, boundVars); }, ArrayRef<StringRef>{"a", "b"}, nullptr, /*weight=*/0, /*noPattern=*/true); @@ -167,10 +167,10 @@ TEST(QuantifierTest, ForallBuilderDefault) { OpBuilder builder(&context); auto boolTy = BoolType::get(&context); - OwningOpRef<ForallOp> forallOp = builder.create<ForallOp>( - loc, TypeRange{boolTy, boolTy}, + OwningOpRef<ForallOp> forallOp = ForallOp::create( + builder, loc, TypeRange{boolTy, boolTy}, [](OpBuilder &builder, Location loc, ValueRange boundVars) { - return builder.create<AndOp>(loc, boundVars); + return AndOp::create(builder, loc, boundVars); }, std::nullopt); diff --git a/mlir/unittests/Dialect/SPIRV/SerializationTest.cpp b/mlir/unittests/Dialect/SPIRV/SerializationTest.cpp index ef89c16..af55296 100644 --- a/mlir/unittests/Dialect/SPIRV/SerializationTest.cpp +++ b/mlir/unittests/Dialect/SPIRV/SerializationTest.cpp @@ -71,8 +71,8 @@ protected: spirv::GlobalVariableOp addGlobalVar(Type type, llvm::StringRef name) { OpBuilder builder(module->getRegion()); auto ptrType = spirv::PointerType::get(type, spirv::StorageClass::Uniform); - return builder.create<spirv::GlobalVariableOp>( - UnknownLoc::get(&context), TypeAttr::get(ptrType), + return spirv::GlobalVariableOp::create( + builder, UnknownLoc::get(&context), TypeAttr::get(ptrType), builder.getStringAttr(name), nullptr); } @@ -82,14 +82,14 @@ protected: auto loc = UnknownLoc::get(&context); if (auto intType = dyn_cast<IntegerType>(type)) { - return builder.create<spirv::ConstantOp>( - loc, type, builder.getIntegerAttr(type, val)); + return spirv::ConstantOp::create(builder, loc, type, + builder.getIntegerAttr(type, val)); } if (auto vectorType = dyn_cast<VectorType>(type)) { Type elemType = vectorType.getElementType(); if (auto intType = dyn_cast<IntegerType>(elemType)) { - return builder.create<spirv::ConstantOp>( - loc, type, + return spirv::ConstantOp::create( + builder, loc, type, DenseElementsAttr::get(vectorType, IntegerAttr::get(elemType, val).getValue())); } diff --git a/mlir/unittests/ExecutionEngine/CMakeLists.txt b/mlir/unittests/ExecutionEngine/CMakeLists.txt index 4ef69a8..b83163e 100644 --- a/mlir/unittests/ExecutionEngine/CMakeLists.txt +++ b/mlir/unittests/ExecutionEngine/CMakeLists.txt @@ -10,14 +10,13 @@ add_mlir_unittest(MLIRExecutionEngineTests StridedMemRef.cpp Invoke.cpp ) -get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS) mlir_target_link_libraries(MLIRExecutionEngineTests PRIVATE MLIRArithToLLVM MLIRMemRefToLLVM MLIRReconcileUnrealizedCasts - ${dialect_libs} + MLIRRegisterAllDialects ) target_link_libraries(MLIRExecutionEngineTests PRIVATE diff --git a/mlir/unittests/IR/AttributeTest.cpp b/mlir/unittests/IR/AttributeTest.cpp index a55592d..fd40404 100644 --- a/mlir/unittests/IR/AttributeTest.cpp +++ b/mlir/unittests/IR/AttributeTest.cpp @@ -477,8 +477,9 @@ TEST(SubElementTest, Nested) { {strAttr, trueAttr, falseAttr, boolArrayAttr, dictAttr})); } -// Test how many times we call copy-ctor when building an attribute. -TEST(CopyCountAttr, CopyCount) { +// Test how many times we call copy-ctor when building an attribute with the +// 'get' method. +TEST(CopyCountAttr, CopyCountGet) { MLIRContext context; context.loadDialect<test::TestDialect>(); @@ -489,15 +490,35 @@ TEST(CopyCountAttr, CopyCount) { test::CopyCount::counter = 0; test::TestCopyCountAttr::get(&context, std::move(copyCount)); #ifndef NDEBUG - // One verification enabled only in assert-mode requires a copy. - EXPECT_EQ(counter1, 1); - EXPECT_EQ(test::CopyCount::counter, 1); + // One verification enabled only in assert-mode requires two copies: one for + // calling 'verifyInvariants' and one for calling 'verify' inside + // 'verifyInvariants'. + EXPECT_EQ(counter1, 2); + EXPECT_EQ(test::CopyCount::counter, 2); #else EXPECT_EQ(counter1, 0); EXPECT_EQ(test::CopyCount::counter, 0); #endif } +// Test how many times we call copy-ctor when building an attribute with the +// 'getChecked' method. +TEST(CopyCountAttr, CopyCountGetChecked) { + MLIRContext context; + context.loadDialect<test::TestDialect>(); + test::CopyCount::counter = 0; + test::CopyCount copyCount("hello"); + auto loc = UnknownLoc::get(&context); + test::TestCopyCountAttr::getChecked(loc, &context, std::move(copyCount)); + int counter1 = test::CopyCount::counter; + test::CopyCount::counter = 0; + test::TestCopyCountAttr::getChecked(loc, &context, std::move(copyCount)); + // The verifiers require two copies: one for calling 'verifyInvariants' and + // one for calling 'verify' inside 'verifyInvariants'. + EXPECT_EQ(counter1, 2); + EXPECT_EQ(test::CopyCount::counter, 2); +} + // Test stripped printing using test dialect attribute. TEST(CopyCountAttr, PrintStripped) { MLIRContext context; diff --git a/mlir/unittests/IR/IRMapping.cpp b/mlir/unittests/IR/IRMapping.cpp index b88009d..983c41a 100644 --- a/mlir/unittests/IR/IRMapping.cpp +++ b/mlir/unittests/IR/IRMapping.cpp @@ -26,10 +26,10 @@ TEST(IRMapping, TypedValue) { Block block; builder.setInsertionPointToEnd(&block); - Value i64Val = builder.create<test::TestOpConstant>( - loc, builder.getI64Type(), builder.getI64IntegerAttr(0)); - Value f64Val = builder.create<test::TestOpConstant>( - loc, builder.getF64Type(), builder.getF64FloatAttr(0.0)); + Value i64Val = test::TestOpConstant::create( + builder, loc, builder.getI64Type(), builder.getI64IntegerAttr(0)); + Value f64Val = test::TestOpConstant::create( + builder, loc, builder.getF64Type(), builder.getF64FloatAttr(0.0)); IRMapping mapping; mapping.map(i64Val, f64Val); diff --git a/mlir/unittests/IR/InterfaceAttachmentTest.cpp b/mlir/unittests/IR/InterfaceAttachmentTest.cpp index 1b5d3b8..e1e65da 100644 --- a/mlir/unittests/IR/InterfaceAttachmentTest.cpp +++ b/mlir/unittests/IR/InterfaceAttachmentTest.cpp @@ -303,7 +303,7 @@ TEST(InterfaceAttachment, Operation) { // Initially, the operation doesn't have the interface. OwningOpRef<ModuleOp> moduleOp = - builder.create<ModuleOp>(UnknownLoc::get(&context)); + ModuleOp::create(builder, UnknownLoc::get(&context)); ASSERT_FALSE(isa<TestExternalOpInterface>(moduleOp->getOperation())); // We can attach an external interface and now the operaiton has it. @@ -317,8 +317,8 @@ TEST(InterfaceAttachment, Operation) { // Default implementation can be overridden. OwningOpRef<UnrealizedConversionCastOp> castOp = - builder.create<UnrealizedConversionCastOp>(UnknownLoc::get(&context), - TypeRange(), ValueRange()); + UnrealizedConversionCastOp::create(builder, UnknownLoc::get(&context), + TypeRange(), ValueRange()); ASSERT_FALSE(isa<TestExternalOpInterface>(castOp->getOperation())); UnrealizedConversionCastOp::attachInterface<TestExternalOpOverridingModel>( context); @@ -368,11 +368,11 @@ TEST(InterfaceAttachment, OperationDelayedContextConstruct) { OwningOpRef<ModuleOp> module = ModuleOp::create(UnknownLoc::get(&context)); OpBuilder builder(module->getBody(), module->getBody()->begin()); auto opJ = - builder.create<test::OpJ>(builder.getUnknownLoc(), builder.getI32Type()); + test::OpJ::create(builder, builder.getUnknownLoc(), builder.getI32Type()); auto opH = - builder.create<test::OpH>(builder.getUnknownLoc(), opJ.getResult()); + test::OpH::create(builder, builder.getUnknownLoc(), opJ.getResult()); auto opI = - builder.create<test::OpI>(builder.getUnknownLoc(), opJ.getResult()); + test::OpI::create(builder, builder.getUnknownLoc(), opJ.getResult()); EXPECT_TRUE(isa<TestExternalOpInterface>(module->getOperation())); EXPECT_TRUE(isa<TestExternalOpInterface>(opJ.getOperation())); @@ -399,11 +399,11 @@ TEST(InterfaceAttachment, OperationDelayedContextAppend) { OwningOpRef<ModuleOp> module = ModuleOp::create(UnknownLoc::get(&context)); OpBuilder builder(module->getBody(), module->getBody()->begin()); auto opJ = - builder.create<test::OpJ>(builder.getUnknownLoc(), builder.getI32Type()); + test::OpJ::create(builder, builder.getUnknownLoc(), builder.getI32Type()); auto opH = - builder.create<test::OpH>(builder.getUnknownLoc(), opJ.getResult()); + test::OpH::create(builder, builder.getUnknownLoc(), opJ.getResult()); auto opI = - builder.create<test::OpI>(builder.getUnknownLoc(), opJ.getResult()); + test::OpI::create(builder, builder.getUnknownLoc(), opJ.getResult()); EXPECT_FALSE(isa<TestExternalOpInterface>(module->getOperation())); EXPECT_FALSE(isa<TestExternalOpInterface>(opJ.getOperation())); diff --git a/mlir/unittests/IR/InterfaceTest.cpp b/mlir/unittests/IR/InterfaceTest.cpp index 42196b0..235163c 100644 --- a/mlir/unittests/IR/InterfaceTest.cpp +++ b/mlir/unittests/IR/InterfaceTest.cpp @@ -27,12 +27,12 @@ TEST(InterfaceTest, OpInterfaceDenseMapKey) { OwningOpRef<ModuleOp> module = ModuleOp::create(UnknownLoc::get(&context)); OpBuilder builder(module->getBody(), module->getBody()->begin()); - auto op1 = builder.create<test::SideEffectOp>(builder.getUnknownLoc(), - builder.getI32Type()); - auto op2 = builder.create<test::SideEffectOp>(builder.getUnknownLoc(), - builder.getI32Type()); - auto op3 = builder.create<test::SideEffectOp>(builder.getUnknownLoc(), - builder.getI32Type()); + auto op1 = test::SideEffectOp::create(builder, builder.getUnknownLoc(), + builder.getI32Type()); + auto op2 = test::SideEffectOp::create(builder, builder.getUnknownLoc(), + builder.getI32Type()); + auto op3 = test::SideEffectOp::create(builder, builder.getUnknownLoc(), + builder.getI32Type()); DenseSet<MemoryEffectOpInterface> opSet; opSet.insert(op1); opSet.insert(op2); @@ -64,8 +64,8 @@ TEST(InterfaceTest, TestCustomClassOf) { context.loadDialect<test::TestDialect>(); OpBuilder builder(&context); - auto op = builder.create<TestOpOptionallyImplementingInterface>( - builder.getUnknownLoc(), /*implementsInterface=*/true); + auto op = TestOpOptionallyImplementingInterface::create( + builder, builder.getUnknownLoc(), /*implementsInterface=*/true); EXPECT_TRUE(isa<TestOptionallyImplementedOpInterface>(*op)); op.setImplementsInterface(false); EXPECT_FALSE(isa<TestOptionallyImplementedOpInterface>(*op)); diff --git a/mlir/unittests/IR/OperationSupportTest.cpp b/mlir/unittests/IR/OperationSupportTest.cpp index 7bc1a04..9f3e7ed 100644 --- a/mlir/unittests/IR/OperationSupportTest.cpp +++ b/mlir/unittests/IR/OperationSupportTest.cpp @@ -302,8 +302,8 @@ TEST(OperandStorageTest, PopulateDefaultAttrs) { auto req1 = b.getI32IntegerAttr(10); auto req2 = b.getI32IntegerAttr(60); // Verify default attributes populated post op creation. - Operation *op = b.create<test::OpAttrMatch1>(b.getUnknownLoc(), req1, nullptr, - nullptr, req2); + Operation *op = test::OpAttrMatch1::create(b, b.getUnknownLoc(), req1, + nullptr, nullptr, req2); auto opt = op->getInherentAttr("default_valued_attr"); EXPECT_NE(opt, nullptr) << *op; @@ -343,11 +343,11 @@ TEST(OperationEquivalenceTest, HashWorksWithFlags) { // Check ignore properties. auto req1 = b.getI32IntegerAttr(10); - Operation *opWithProperty1 = b.create<test::OpAttrMatch1>( - b.getUnknownLoc(), req1, nullptr, nullptr, req1); + Operation *opWithProperty1 = test::OpAttrMatch1::create( + b, b.getUnknownLoc(), req1, nullptr, nullptr, req1); auto req2 = b.getI32IntegerAttr(60); - Operation *opWithProperty2 = b.create<test::OpAttrMatch1>( - b.getUnknownLoc(), req2, nullptr, nullptr, req2); + Operation *opWithProperty2 = test::OpAttrMatch1::create( + b, b.getUnknownLoc(), req2, nullptr, nullptr, req2); EXPECT_EQ(getHash(opWithProperty1, OperationEquivalence::IgnoreProperties), getHash(opWithProperty2, OperationEquivalence::IgnoreProperties)); EXPECT_NE(getHash(opWithProperty1, OperationEquivalence::None), diff --git a/mlir/unittests/IR/SymbolTableTest.cpp b/mlir/unittests/IR/SymbolTableTest.cpp index cfc3fe0..4b3545b 100644 --- a/mlir/unittests/IR/SymbolTableTest.cpp +++ b/mlir/unittests/IR/SymbolTableTest.cpp @@ -132,4 +132,38 @@ TEST_F(ReplaceAllSymbolUsesTest, StringAttrInFuncOp) { }); } +TEST(SymbolOpInterface, Visibility) { + DialectRegistry registry; + ::test::registerTestDialect(registry); + MLIRContext context(registry); + + constexpr static StringLiteral kInput = R"MLIR( + "test.overridden_symbol_visibility"() {sym_name = "symbol_name"} : () -> () + )MLIR"; + OwningOpRef<ModuleOp> module = parseSourceString<ModuleOp>(kInput, &context); + auto symOp = cast<SymbolOpInterface>(module->getBody()->front()); + + ASSERT_TRUE(symOp.isPrivate()); + ASSERT_FALSE(symOp.isPublic()); + ASSERT_FALSE(symOp.isNested()); + ASSERT_TRUE(symOp.canDiscardOnUseEmpty()); + + std::string diagStr; + context.getDiagEngine().registerHandler( + [&](Diagnostic &diag) { diagStr += diag.str(); }); + + std::string expectedDiag; + symOp.setPublic(); + expectedDiag += "'test.overridden_symbol_visibility' op cannot change " + "visibility of symbol to public"; + symOp.setNested(); + expectedDiag += "'test.overridden_symbol_visibility' op cannot change " + "visibility of symbol to nested"; + symOp.setPrivate(); + expectedDiag += "'test.overridden_symbol_visibility' op cannot change " + "visibility of symbol to private"; + + ASSERT_EQ(diagStr, expectedDiag); +} + } // namespace diff --git a/mlir/unittests/TableGen/OpBuildGen.cpp b/mlir/unittests/TableGen/OpBuildGen.cpp index 74e62aa..0943033 100644 --- a/mlir/unittests/TableGen/OpBuildGen.cpp +++ b/mlir/unittests/TableGen/OpBuildGen.cpp @@ -36,12 +36,11 @@ protected: OpBuildGenTest() : ctx(getContext()), builder(&ctx), loc(builder.getUnknownLoc()), i32Ty(builder.getI32Type()), f32Ty(builder.getF32Type()), - cstI32(builder.create<test::TableGenConstant>(loc, i32Ty)), - cstF32(builder.create<test::TableGenConstant>(loc, f32Ty)), - noAttrs(), attrStorage{builder.getNamedAttr("attr0", - builder.getBoolAttr(true)), - builder.getNamedAttr( - "attr1", builder.getI32IntegerAttr(33))}, + cstI32(test::TableGenConstant::create(builder, loc, i32Ty)), + cstF32(test::TableGenConstant::create(builder, loc, f32Ty)), noAttrs(), + attrStorage{ + builder.getNamedAttr("attr0", builder.getBoolAttr(true)), + builder.getNamedAttr("attr1", builder.getI32IntegerAttr(33))}, attrs(attrStorage) {} // Verify that `op` has the given set of result types, operands, and @@ -123,21 +122,21 @@ protected: /// Test basic build methods. TEST_F(OpBuildGenTest, BasicBuildMethods) { // Test separate args, separate results build method. - auto op = builder.create<test::TableGenBuildOp0>(loc, i32Ty, *cstI32); + auto op = test::TableGenBuildOp0::create(builder, loc, i32Ty, *cstI32); verifyOp(op, {i32Ty}, {*cstI32}, noAttrs); // Test separate args, collective results build method. - op = builder.create<test::TableGenBuildOp0>(loc, TypeRange{i32Ty}, *cstI32); + op = test::TableGenBuildOp0::create(builder, loc, TypeRange{i32Ty}, *cstI32); verifyOp(op, {i32Ty}, {*cstI32}, noAttrs); // Test collective args, collective params build method. - op = builder.create<test::TableGenBuildOp0>(loc, TypeRange{i32Ty}, - ValueRange{*cstI32}); + op = test::TableGenBuildOp0::create(builder, loc, TypeRange{i32Ty}, + ValueRange{*cstI32}); verifyOp(op, {i32Ty}, {*cstI32}, noAttrs); // Test collective args, collective results, non-empty attributes - op = builder.create<test::TableGenBuildOp0>(loc, TypeRange{i32Ty}, - ValueRange{*cstI32}, attrs); + op = test::TableGenBuildOp0::create(builder, loc, TypeRange{i32Ty}, + ValueRange{*cstI32}, attrs); verifyOp(op, {i32Ty}, {*cstI32}, attrs); } @@ -154,25 +153,25 @@ TEST_F(OpBuildGenTest, BasicBuildMethods) { /// variadic result. TEST_F(OpBuildGenTest, BuildMethodsSingleVariadicArgAndResult) { // Test collective args, collective results method, building a unary op. - auto op = builder.create<test::TableGenBuildOp1>(loc, TypeRange{i32Ty}, - ValueRange{*cstI32}); + auto op = test::TableGenBuildOp1::create(builder, loc, TypeRange{i32Ty}, + ValueRange{*cstI32}); verifyOp(op, {i32Ty}, {*cstI32}, noAttrs); // Test collective args, collective results method, building a unary op with // named attributes. - op = builder.create<test::TableGenBuildOp1>(loc, TypeRange{i32Ty}, - ValueRange{*cstI32}, attrs); + op = test::TableGenBuildOp1::create(builder, loc, TypeRange{i32Ty}, + ValueRange{*cstI32}, attrs); verifyOp(op, {i32Ty}, {*cstI32}, attrs); // Test collective args, collective results method, building a binary op. - op = builder.create<test::TableGenBuildOp1>(loc, TypeRange{i32Ty, f32Ty}, - ValueRange{*cstI32, *cstF32}); + op = test::TableGenBuildOp1::create(builder, loc, TypeRange{i32Ty, f32Ty}, + ValueRange{*cstI32, *cstF32}); verifyOp(op, {i32Ty, f32Ty}, {*cstI32, *cstF32}, noAttrs); // Test collective args, collective results method, building a binary op with // named attributes. - op = builder.create<test::TableGenBuildOp1>( - loc, TypeRange{i32Ty, f32Ty}, ValueRange{*cstI32, *cstF32}, attrs); + op = test::TableGenBuildOp1::create(builder, loc, TypeRange{i32Ty, f32Ty}, + ValueRange{*cstI32, *cstF32}, attrs); verifyOp(op, {i32Ty, f32Ty}, {*cstI32, *cstF32}, attrs); } @@ -181,22 +180,22 @@ TEST_F(OpBuildGenTest, BuildMethodsSingleVariadicArgAndResult) { TEST_F(OpBuildGenTest, BuildMethodsSingleVariadicArgNonVariadicResults) { // Test separate arg, separate param build method. auto op = - builder.create<test::TableGenBuildOp1>(loc, i32Ty, ValueRange{*cstI32}); + test::TableGenBuildOp1::create(builder, loc, i32Ty, ValueRange{*cstI32}); verifyOp(op, {i32Ty}, {*cstI32}, noAttrs); // Test collective params build method, no attributes. - op = builder.create<test::TableGenBuildOp1>(loc, TypeRange{i32Ty}, - ValueRange{*cstI32}); + op = test::TableGenBuildOp1::create(builder, loc, TypeRange{i32Ty}, + ValueRange{*cstI32}); verifyOp(op, {i32Ty}, {*cstI32}, noAttrs); // Test collective params build method no attributes, 2 inputs. - op = builder.create<test::TableGenBuildOp1>(loc, TypeRange{i32Ty}, - ValueRange{*cstI32, *cstF32}); + op = test::TableGenBuildOp1::create(builder, loc, TypeRange{i32Ty}, + ValueRange{*cstI32, *cstF32}); verifyOp(op, {i32Ty}, {*cstI32, *cstF32}, noAttrs); // Test collective params build method, non-empty attributes. - op = builder.create<test::TableGenBuildOp1>( - loc, TypeRange{i32Ty}, ValueRange{*cstI32, *cstF32}, attrs); + op = test::TableGenBuildOp1::create(builder, loc, TypeRange{i32Ty}, + ValueRange{*cstI32, *cstF32}, attrs); verifyOp(op, {i32Ty}, {*cstI32, *cstF32}, attrs); } @@ -205,18 +204,18 @@ TEST_F(OpBuildGenTest, BuildMethodsSingleVariadicArgNonVariadicResults) { TEST_F(OpBuildGenTest, BuildMethodsSingleVariadicArgAndMultipleVariadicResults) { // Test separate arg, separate param build method. - auto op = builder.create<test::TableGenBuildOp3>( - loc, TypeRange{i32Ty}, TypeRange{f32Ty}, ValueRange{*cstI32}); + auto op = test::TableGenBuildOp3::create( + builder, loc, TypeRange{i32Ty}, TypeRange{f32Ty}, ValueRange{*cstI32}); verifyOp(op, {i32Ty, f32Ty}, {*cstI32}, noAttrs); // Test collective params build method, no attributes. - op = builder.create<test::TableGenBuildOp3>(loc, TypeRange{i32Ty, f32Ty}, - ValueRange{*cstI32}); + op = test::TableGenBuildOp3::create(builder, loc, TypeRange{i32Ty, f32Ty}, + ValueRange{*cstI32}); verifyOp(op, {i32Ty, f32Ty}, {*cstI32}, noAttrs); // Test collective params build method, with attributes. - op = builder.create<test::TableGenBuildOp3>(loc, TypeRange{i32Ty, f32Ty}, - ValueRange{*cstI32}, attrs); + op = test::TableGenBuildOp3::create(builder, loc, TypeRange{i32Ty, f32Ty}, + ValueRange{*cstI32}, attrs); verifyOp(op, {i32Ty, f32Ty}, {*cstI32}, attrs); } @@ -227,29 +226,29 @@ TEST_F(OpBuildGenTest, // build methods with no result types as they are inferred from the input types. TEST_F(OpBuildGenTest, BuildMethodsSameOperandsAndResultTypeSuppression) { // Test separate arg, separate param build method. - auto op = builder.create<test::TableGenBuildOp4>( - loc, i32Ty, ValueRange{*cstI32, *cstI32}); + auto op = test::TableGenBuildOp4::create(builder, loc, i32Ty, + ValueRange{*cstI32, *cstI32}); verifyOp(std::move(op), {i32Ty}, {*cstI32, *cstI32}, noAttrs); // Test collective params build method. - op = builder.create<test::TableGenBuildOp4>(loc, TypeRange{i32Ty}, - ValueRange{*cstI32, *cstI32}); + op = test::TableGenBuildOp4::create(builder, loc, TypeRange{i32Ty}, + ValueRange{*cstI32, *cstI32}); verifyOp(std::move(op), {i32Ty}, {*cstI32, *cstI32}, noAttrs); // Test build method with no result types, default value of attributes. - op = - builder.create<test::TableGenBuildOp4>(loc, ValueRange{*cstI32, *cstI32}); + op = test::TableGenBuildOp4::create(builder, loc, + ValueRange{*cstI32, *cstI32}); verifyOp(std::move(op), {i32Ty}, {*cstI32, *cstI32}, noAttrs); // Test build method with no result types and supplied attributes. - op = builder.create<test::TableGenBuildOp4>(loc, ValueRange{*cstI32, *cstI32}, - attrs); + op = test::TableGenBuildOp4::create(builder, loc, + ValueRange{*cstI32, *cstI32}, attrs); verifyOp(std::move(op), {i32Ty}, {*cstI32, *cstI32}, attrs); } TEST_F(OpBuildGenTest, BuildMethodsRegionsAndInferredType) { - auto op = builder.create<test::TableGenBuildOp5>( - loc, ValueRange{*cstI32, *cstF32}, /*attributes=*/noAttrs); + auto op = test::TableGenBuildOp5::create( + builder, loc, ValueRange{*cstI32, *cstF32}, /*attributes=*/noAttrs); ASSERT_EQ(op->getNumRegions(), 1u); verifyOp(op, {i32Ty}, {*cstI32, *cstF32}, noAttrs); } @@ -266,28 +265,28 @@ TEST_F(OpBuildGenTest, BuildMethodsVariadicProperties) { ArrayRef<NamedAttribute> attrs(attrsStorage); // Test separate arg, separate param build method. - auto op = builder.create<test::TableGenBuildOp6>( - loc, f32Ty, ValueRange{*cstI32}, ValueRange{*cstI32}); + auto op = test::TableGenBuildOp6::create( + builder, loc, f32Ty, ValueRange{*cstI32}, ValueRange{*cstI32}); verifyOp(std::move(op), {f32Ty}, {*cstI32}, {*cstI32}, noAttrs); // Test build method with no result types, default value of attributes. - op = builder.create<test::TableGenBuildOp6>(loc, ValueRange{*cstI32}, - ValueRange{*cstI32}); + op = test::TableGenBuildOp6::create(builder, loc, ValueRange{*cstI32}, + ValueRange{*cstI32}); verifyOp(std::move(op), {f32Ty}, {*cstI32}, {*cstI32}, noAttrs); // Test collective params build method. - op = builder.create<test::TableGenBuildOp6>( - loc, TypeRange{f32Ty}, ValueRange{*cstI32}, ValueRange{*cstI32}); + op = test::TableGenBuildOp6::create(builder, loc, TypeRange{f32Ty}, + ValueRange{*cstI32}, ValueRange{*cstI32}); verifyOp(std::move(op), {f32Ty}, {*cstI32}, {*cstI32}, noAttrs); // Test build method with result types, supplied attributes. - op = builder.create<test::TableGenBuildOp6>( - loc, TypeRange{f32Ty}, ValueRange{*cstI32, *cstI32}, attrs); + op = test::TableGenBuildOp6::create(builder, loc, TypeRange{f32Ty}, + ValueRange{*cstI32, *cstI32}, attrs); verifyOp(std::move(op), {f32Ty}, {*cstI32}, {*cstI32}, attrs); // Test build method with no result types and supplied attributes. - op = builder.create<test::TableGenBuildOp6>(loc, ValueRange{*cstI32, *cstI32}, - attrs); + op = test::TableGenBuildOp6::create(builder, loc, + ValueRange{*cstI32, *cstI32}, attrs); verifyOp(std::move(op), {f32Ty}, {*cstI32}, {*cstI32}, attrs); } @@ -295,14 +294,14 @@ TEST_F(OpBuildGenTest, BuildMethodsInherentDiscardableAttrs) { test::TableGenBuildOp7::Properties props; props.attr0 = cast<BoolAttr>(attrs[0].getValue()); ArrayRef<NamedAttribute> discardableAttrs = attrs.drop_front(); - auto op7 = builder.create<test::TableGenBuildOp7>( - loc, TypeRange{}, ValueRange{}, props, discardableAttrs); + auto op7 = test::TableGenBuildOp7::create( + builder, loc, TypeRange{}, ValueRange{}, props, discardableAttrs); verifyOp(op7, {}, {}, attrs); // Check that the old-style builder where all the attributes go in the same // place works. - auto op7b = builder.create<test::TableGenBuildOp7>(loc, TypeRange{}, - ValueRange{}, attrs); + auto op7b = test::TableGenBuildOp7::create(builder, loc, TypeRange{}, + ValueRange{}, attrs); // Note: this goes before verifyOp() because verifyOp() calls erase(), causing // use-after-free. ASSERT_EQ(op7b.getProperties().getAttr0(), attrs[0].getValue()); diff --git a/mlir/unittests/Target/LLVM/CMakeLists.txt b/mlir/unittests/Target/LLVM/CMakeLists.txt index 15835b9..0a77deb 100644 --- a/mlir/unittests/Target/LLVM/CMakeLists.txt +++ b/mlir/unittests/Target/LLVM/CMakeLists.txt @@ -1,13 +1,11 @@ -set(LLVM_LINK_COMPONENTS nativecodegen) - -get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS) +set(LLVM_LINK_COMPONENTS nativecodegen BitReader) add_mlir_unittest(MLIRTargetLLVMTests SerializeNVVMTarget.cpp SerializeROCDLTarget.cpp SerializeToLLVMBitcode.cpp DEPENDS - ${dialect_libs} + MLIRRegisterAllDialects ) mlir_target_link_libraries(MLIRTargetLLVMTests |