@@ -228,6 +228,7 @@ void AffineDialect::initialize() {
228
228
addOperations<AffineDmaStartOp, AffineDmaWaitOp,
229
229
#define GET_OP_LIST
230
230
#include " mlir/Dialect/Affine/IR/AffineOps.cpp.inc"
231
+
231
232
>();
232
233
addInterfaces<AffineInlinerInterface>();
233
234
declarePromisedInterfaces<ValueBoundsOpInterface, AffineApplyOp, AffineMaxOp,
@@ -240,7 +241,7 @@ Operation *AffineDialect::materializeConstant(OpBuilder &builder,
240
241
Attribute value, Type type,
241
242
Location loc) {
242
243
if (auto poison = dyn_cast<ub::PoisonAttr>(value))
243
- return builder. create < ub::PoisonOp>( loc, type, poison);
244
+ return ub::PoisonOp::create (builder, loc, type, poison);
244
245
return arith::ConstantOp::materialize (builder, value, type, loc);
245
246
}
246
247
@@ -1282,7 +1283,7 @@ mlir::affine::makeComposedAffineApply(OpBuilder &b, Location loc, AffineMap map,
1282
1283
map = foldAttributesIntoMap (b, map, operands, valueOperands);
1283
1284
composeAffineMapAndOperands (&map, &valueOperands, composeAffineMin);
1284
1285
assert (map);
1285
- return b. create < AffineApplyOp>( loc, map, valueOperands);
1286
+ return AffineApplyOp::create (b, loc, map, valueOperands);
1286
1287
}
1287
1288
1288
1289
AffineApplyOp
@@ -1389,7 +1390,7 @@ static OpTy makeComposedMinMax(OpBuilder &b, Location loc, AffineMap map,
1389
1390
SmallVector<Value> valueOperands;
1390
1391
map = foldAttributesIntoMap (b, map, operands, valueOperands);
1391
1392
composeMultiResultAffineMap (map, valueOperands);
1392
- return b. create < OpTy>( loc, b.getIndexType (), map, valueOperands);
1393
+ return OpTy::create (b, loc, b.getIndexType (), map, valueOperands);
1393
1394
}
1394
1395
1395
1396
AffineMinOp
@@ -1747,6 +1748,32 @@ void AffineDmaStartOp::build(OpBuilder &builder, OperationState &result,
1747
1748
}
1748
1749
}
1749
1750
1751
+ AffineDmaStartOp AffineDmaStartOp::create (
1752
+ OpBuilder &builder, Location location, Value srcMemRef, AffineMap srcMap,
1753
+ ValueRange srcIndices, Value destMemRef, AffineMap dstMap,
1754
+ ValueRange destIndices, Value tagMemRef, AffineMap tagMap,
1755
+ ValueRange tagIndices, Value numElements, Value stride,
1756
+ Value elementsPerStride) {
1757
+ mlir::OperationState state (location, getOperationName ());
1758
+ build (builder, state, srcMemRef, srcMap, srcIndices, destMemRef, dstMap,
1759
+ destIndices, tagMemRef, tagMap, tagIndices, numElements, stride,
1760
+ elementsPerStride);
1761
+ auto result = llvm::dyn_cast<AffineDmaStartOp>(builder.create (state));
1762
+ assert (result && " builder didn't return the right type" );
1763
+ return result;
1764
+ }
1765
+
1766
+ AffineDmaStartOp AffineDmaStartOp::create (
1767
+ ImplicitLocOpBuilder &builder, Value srcMemRef, AffineMap srcMap,
1768
+ ValueRange srcIndices, Value destMemRef, AffineMap dstMap,
1769
+ ValueRange destIndices, Value tagMemRef, AffineMap tagMap,
1770
+ ValueRange tagIndices, Value numElements, Value stride,
1771
+ Value elementsPerStride) {
1772
+ return create (builder, builder.getLoc (), srcMemRef, srcMap, srcIndices,
1773
+ destMemRef, dstMap, destIndices, tagMemRef, tagMap, tagIndices,
1774
+ numElements, stride, elementsPerStride);
1775
+ }
1776
+
1750
1777
void AffineDmaStartOp::print (OpAsmPrinter &p) {
1751
1778
p << " " << getSrcMemRef () << ' [' ;
1752
1779
p.printAffineMapOfSSAIds (getSrcMapAttr (), getSrcIndices ());
@@ -1917,6 +1944,25 @@ void AffineDmaWaitOp::build(OpBuilder &builder, OperationState &result,
1917
1944
result.addOperands (numElements);
1918
1945
}
1919
1946
1947
+ AffineDmaWaitOp AffineDmaWaitOp::create (OpBuilder &builder, Location location,
1948
+ Value tagMemRef, AffineMap tagMap,
1949
+ ValueRange tagIndices,
1950
+ Value numElements) {
1951
+ mlir::OperationState state (location, getOperationName ());
1952
+ build (builder, state, tagMemRef, tagMap, tagIndices, numElements);
1953
+ auto result = llvm::dyn_cast<AffineDmaWaitOp>(builder.create (state));
1954
+ assert (result && " builder didn't return the right type" );
1955
+ return result;
1956
+ }
1957
+
1958
+ AffineDmaWaitOp AffineDmaWaitOp::create (ImplicitLocOpBuilder &builder,
1959
+ Value tagMemRef, AffineMap tagMap,
1960
+ ValueRange tagIndices,
1961
+ Value numElements) {
1962
+ return create (builder, builder.getLoc (), tagMemRef, tagMap, tagIndices,
1963
+ numElements);
1964
+ }
1965
+
1920
1966
void AffineDmaWaitOp::print (OpAsmPrinter &p) {
1921
1967
p << " " << getTagMemRef () << ' [' ;
1922
1968
SmallVector<Value, 2 > operands (getTagIndices ());
@@ -2688,8 +2734,8 @@ FailureOr<LoopLikeOpInterface> AffineForOp::replaceWithAdditionalYields(
2688
2734
rewriter.setInsertionPoint (getOperation ());
2689
2735
auto inits = llvm::to_vector (getInits ());
2690
2736
inits.append (newInitOperands.begin (), newInitOperands.end ());
2691
- AffineForOp newLoop = rewriter. create < AffineForOp> (
2692
- getLoc (), getLowerBoundOperands (), getLowerBoundMap (),
2737
+ AffineForOp newLoop = AffineForOp::create (
2738
+ rewriter, getLoc (), getLowerBoundOperands (), getLowerBoundMap (),
2693
2739
getUpperBoundOperands (), getUpperBoundMap (), getStepAsInt (), inits);
2694
2740
2695
2741
// Generate the new yield values and append them to the scf.yield operation.
@@ -2831,7 +2877,7 @@ static void buildAffineLoopNestImpl(
2831
2877
OpBuilder::InsertionGuard nestedGuard (nestedBuilder);
2832
2878
bodyBuilderFn (nestedBuilder, nestedLoc, ivs);
2833
2879
}
2834
- nestedBuilder. create < AffineYieldOp>( nestedLoc);
2880
+ AffineYieldOp::create (nestedBuilder, nestedLoc);
2835
2881
};
2836
2882
2837
2883
// Delegate actual loop creation to the callback in order to dispatch
@@ -2846,8 +2892,8 @@ static AffineForOp
2846
2892
buildAffineLoopFromConstants (OpBuilder &builder, Location loc, int64_t lb,
2847
2893
int64_t ub, int64_t step,
2848
2894
AffineForOp::BodyBuilderFn bodyBuilderFn) {
2849
- return builder. create < AffineForOp>( loc, lb, ub, step,
2850
- /* iterArgs=*/ ValueRange (), bodyBuilderFn);
2895
+ return AffineForOp::create (builder, loc, lb, ub, step,
2896
+ /* iterArgs=*/ ValueRange (), bodyBuilderFn);
2851
2897
}
2852
2898
2853
2899
// / Creates an affine loop from the bounds that may or may not be constants.
@@ -2860,9 +2906,9 @@ buildAffineLoopFromValues(OpBuilder &builder, Location loc, Value lb, Value ub,
2860
2906
if (lbConst && ubConst)
2861
2907
return buildAffineLoopFromConstants (builder, loc, lbConst.value (),
2862
2908
ubConst.value (), step, bodyBuilderFn);
2863
- return builder. create < AffineForOp>( loc, lb, builder.getDimIdentityMap (), ub,
2864
- builder.getDimIdentityMap (), step,
2865
- /* iterArgs=*/ ValueRange (), bodyBuilderFn);
2909
+ return AffineForOp::create (builder, loc, lb, builder.getDimIdentityMap (), ub,
2910
+ builder.getDimIdentityMap (), step,
2911
+ /* iterArgs=*/ ValueRange (), bodyBuilderFn);
2866
2912
}
2867
2913
2868
2914
void mlir::affine::buildAffineLoopNest (
@@ -4883,7 +4929,7 @@ struct DropUnitExtentBasis
4883
4929
Location loc = delinearizeOp->getLoc ();
4884
4930
auto getZero = [&]() -> Value {
4885
4931
if (!zero)
4886
- zero = rewriter. create < arith::ConstantIndexOp>( loc, 0 );
4932
+ zero = arith::ConstantIndexOp::create (rewriter, loc, 0 );
4887
4933
return zero.value ();
4888
4934
};
4889
4935
@@ -4906,8 +4952,8 @@ struct DropUnitExtentBasis
4906
4952
4907
4953
if (!newBasis.empty ()) {
4908
4954
// Will drop the leading nullptr from `basis` if there was no outer bound.
4909
- auto newDelinearizeOp = rewriter. create < affine::AffineDelinearizeIndexOp> (
4910
- loc, delinearizeOp.getLinearIndex (), newBasis);
4955
+ auto newDelinearizeOp = affine::AffineDelinearizeIndexOp::create (
4956
+ rewriter, loc, delinearizeOp.getLinearIndex (), newBasis);
4911
4957
int newIndex = 0 ;
4912
4958
// Map back the new delinearized indices to the values they replace.
4913
4959
for (auto &replacement : replacements) {
@@ -4971,12 +5017,12 @@ struct CancelDelinearizeOfLinearizeDisjointExactTail
4971
5017
return success ();
4972
5018
}
4973
5019
4974
- Value newLinearize = rewriter. create < affine::AffineLinearizeIndexOp> (
4975
- linearizeOp.getLoc (), linearizeIns.drop_back (numMatches),
5020
+ Value newLinearize = affine::AffineLinearizeIndexOp::create (
5021
+ rewriter, linearizeOp.getLoc (), linearizeIns.drop_back (numMatches),
4976
5022
ArrayRef<OpFoldResult>{linearizeBasis}.drop_back (numMatches),
4977
5023
linearizeOp.getDisjoint ());
4978
- auto newDelinearize = rewriter. create < affine::AffineDelinearizeIndexOp> (
4979
- delinearizeOp.getLoc (), newLinearize,
5024
+ auto newDelinearize = affine::AffineDelinearizeIndexOp::create (
5025
+ rewriter, delinearizeOp.getLoc (), newLinearize,
4980
5026
ArrayRef<OpFoldResult>{delinearizeBasis}.drop_back (numMatches),
4981
5027
delinearizeOp.hasOuterBound ());
4982
5028
SmallVector<Value> mergedResults (newDelinearize.getResults ());
@@ -5048,19 +5094,16 @@ struct SplitDelinearizeSpanningLastLinearizeArg final
5048
5094
delinearizeOp,
5049
5095
" need at least two elements to form the basis product" );
5050
5096
5051
- Value linearizeWithoutBack =
5052
- rewriter.create <affine::AffineLinearizeIndexOp>(
5053
- linearizeOp.getLoc (), linearizeOp.getMultiIndex ().drop_back (),
5054
- linearizeOp.getDynamicBasis (),
5055
- linearizeOp.getStaticBasis ().drop_back (),
5056
- linearizeOp.getDisjoint ());
5057
- auto delinearizeWithoutSplitPart =
5058
- rewriter.create <affine::AffineDelinearizeIndexOp>(
5059
- delinearizeOp.getLoc (), linearizeWithoutBack,
5060
- delinearizeOp.getDynamicBasis (), basis.drop_back (elemsToSplit),
5061
- delinearizeOp.hasOuterBound ());
5062
- auto delinearizeBack = rewriter.create <affine::AffineDelinearizeIndexOp>(
5063
- delinearizeOp.getLoc (), linearizeOp.getMultiIndex ().back (),
5097
+ Value linearizeWithoutBack = affine::AffineLinearizeIndexOp::create (
5098
+ rewriter, linearizeOp.getLoc (), linearizeOp.getMultiIndex ().drop_back (),
5099
+ linearizeOp.getDynamicBasis (), linearizeOp.getStaticBasis ().drop_back (),
5100
+ linearizeOp.getDisjoint ());
5101
+ auto delinearizeWithoutSplitPart = affine::AffineDelinearizeIndexOp::create (
5102
+ rewriter, delinearizeOp.getLoc (), linearizeWithoutBack,
5103
+ delinearizeOp.getDynamicBasis (), basis.drop_back (elemsToSplit),
5104
+ delinearizeOp.hasOuterBound ());
5105
+ auto delinearizeBack = affine::AffineDelinearizeIndexOp::create (
5106
+ rewriter, delinearizeOp.getLoc (), linearizeOp.getMultiIndex ().back (),
5064
5107
basis.take_back (elemsToSplit), /* hasOuterBound=*/ true );
5065
5108
SmallVector<Value> results = llvm::to_vector (
5066
5109
llvm::concat<Value>(delinearizeWithoutSplitPart.getResults (),
@@ -5272,7 +5315,7 @@ OpFoldResult computeProduct(Location loc, OpBuilder &builder,
5272
5315
}
5273
5316
if (auto constant = dyn_cast<AffineConstantExpr>(result))
5274
5317
return getAsIndexOpFoldResult (builder.getContext (), constant.getValue ());
5275
- return builder. create < AffineApplyOp>( loc, result, dynamicPart).getResult ();
5318
+ return AffineApplyOp::create (builder, loc, result, dynamicPart).getResult ();
5276
5319
}
5277
5320
5278
5321
// / If conseceutive outputs of a delinearize_index are linearized with the same
@@ -5437,16 +5480,16 @@ struct CancelLinearizeOfDelinearizePortion final
5437
5480
newDelinBasis.erase (newDelinBasis.begin () + m.delinStart ,
5438
5481
newDelinBasis.begin () + m.delinStart + m.length );
5439
5482
newDelinBasis.insert (newDelinBasis.begin () + m.delinStart , newSize);
5440
- auto newDelinearize = rewriter. create < AffineDelinearizeIndexOp> (
5441
- m.delinearize .getLoc (), m.delinearize .getLinearIndex (),
5483
+ auto newDelinearize = AffineDelinearizeIndexOp::create (
5484
+ rewriter, m.delinearize .getLoc (), m.delinearize .getLinearIndex (),
5442
5485
newDelinBasis);
5443
5486
5444
5487
// Since there may be other uses of the indices we just merged together,
5445
5488
// create a residual affine.delinearize_index that delinearizes the
5446
5489
// merged output into its component parts.
5447
5490
Value combinedElem = newDelinearize.getResult (m.delinStart );
5448
- auto residualDelinearize = rewriter. create < AffineDelinearizeIndexOp> (
5449
- m.delinearize .getLoc (), combinedElem, basisToMerge);
5491
+ auto residualDelinearize = AffineDelinearizeIndexOp::create (
5492
+ rewriter, m.delinearize .getLoc (), combinedElem, basisToMerge);
5450
5493
5451
5494
// Swap all the uses of the unaffected delinearize outputs to the new
5452
5495
// delinearization so that the old code can be removed if this
0 commit comments