aboutsummaryrefslogtreecommitdiff
path: root/mlir/unittests
diff options
context:
space:
mode:
Diffstat (limited to 'mlir/unittests')
-rw-r--r--mlir/unittests/Conversion/PDLToPDLInterp/RootOrderingTest.cpp2
-rw-r--r--mlir/unittests/Dialect/OpenACC/OpenACCOpsTest.cpp126
-rw-r--r--mlir/unittests/Dialect/SCF/LoopLikeSCFOpsTest.cpp44
-rw-r--r--mlir/unittests/Dialect/SMT/QuantifierTest.cpp36
-rw-r--r--mlir/unittests/Dialect/SPIRV/SerializationTest.cpp12
-rw-r--r--mlir/unittests/ExecutionEngine/CMakeLists.txt3
-rw-r--r--mlir/unittests/IR/AttributeTest.cpp31
-rw-r--r--mlir/unittests/IR/IRMapping.cpp8
-rw-r--r--mlir/unittests/IR/InterfaceAttachmentTest.cpp18
-rw-r--r--mlir/unittests/IR/InterfaceTest.cpp16
-rw-r--r--mlir/unittests/IR/OperationSupportTest.cpp12
-rw-r--r--mlir/unittests/IR/SymbolTableTest.cpp34
-rw-r--r--mlir/unittests/TableGen/OpBuildGen.cpp113
-rw-r--r--mlir/unittests/Target/LLVM/CMakeLists.txt6
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