[mlir][NFC] update mlir/Dialect create APIs (30/n) (#150643)

See https://github.com/llvm/llvm-project/pull/147168 for more info.
This commit is contained in:
Maksim Levental 2025-07-25 11:48:17 -05:00 committed by GitHub
parent 258d04c810
commit b58ad3650f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 193 additions and 194 deletions

View File

@ -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

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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()));
}

View File

@ -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);

View File

@ -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()));

View File

@ -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));

View File

@ -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),

View File

@ -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());