Skip to content

Commit de67999

Browse files
committed
Pass cloneCallback function referece instead of whole InlinerConfig class
1 parent 59b0839 commit de67999

File tree

5 files changed

+54
-49
lines changed

5 files changed

+54
-49
lines changed

mlir/include/mlir/Transforms/InliningUtils.h

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -255,16 +255,17 @@ class InlinerInterface
255255
/// information. 'shouldCloneInlinedRegion' corresponds to whether the source
256256
/// region should be cloned into the 'inlinePoint' or spliced directly.
257257
LogicalResult inlineRegion(InlinerInterface &interface,
258-
const InlinerConfig &config, Region *src,
259-
Operation *inlinePoint, IRMapping &mapper,
260-
ValueRange resultsToReplace,
258+
InlinerConfig::CloneCallbackTy cloneCallback,
259+
Region *src, Operation *inlinePoint,
260+
IRMapping &mapper, ValueRange resultsToReplace,
261261
TypeRange regionResultTypes,
262262
std::optional<Location> inlineLoc = std::nullopt,
263263
bool shouldCloneInlinedRegion = true);
264264
LogicalResult inlineRegion(InlinerInterface &interface,
265-
const InlinerConfig &config, Region *src,
266-
Block *inlineBlock, Block::iterator inlinePoint,
267-
IRMapping &mapper, ValueRange resultsToReplace,
265+
InlinerConfig::CloneCallbackTy cloneCallback,
266+
Region *src, Block *inlineBlock,
267+
Block::iterator inlinePoint, IRMapping &mapper,
268+
ValueRange resultsToReplace,
268269
TypeRange regionResultTypes,
269270
std::optional<Location> inlineLoc = std::nullopt,
270271
bool shouldCloneInlinedRegion = true);
@@ -273,14 +274,16 @@ LogicalResult inlineRegion(InlinerInterface &interface,
273274
/// providing the set of operands ('inlinedOperands') that should be used
274275
/// in-favor of the region arguments when inlining.
275276
LogicalResult inlineRegion(InlinerInterface &interface,
276-
const InlinerConfig &config, Region *src,
277-
Operation *inlinePoint, ValueRange inlinedOperands,
277+
InlinerConfig::CloneCallbackTy cloneCallback,
278+
Region *src, Operation *inlinePoint,
279+
ValueRange inlinedOperands,
278280
ValueRange resultsToReplace,
279281
std::optional<Location> inlineLoc = std::nullopt,
280282
bool shouldCloneInlinedRegion = true);
281283
LogicalResult inlineRegion(InlinerInterface &interface,
282-
const InlinerConfig &config, Region *src,
283-
Block *inlineBlock, Block::iterator inlinePoint,
284+
InlinerConfig::CloneCallbackTy cloneCallback,
285+
Region *src, Block *inlineBlock,
286+
Block::iterator inlinePoint,
284287
ValueRange inlinedOperands,
285288
ValueRange resultsToReplace,
286289
std::optional<Location> inlineLoc = std::nullopt,
@@ -293,9 +296,9 @@ LogicalResult inlineRegion(InlinerInterface &interface,
293296
/// corresponds to whether the source region should be cloned into the 'call' or
294297
/// spliced directly.
295298
LogicalResult inlineCall(InlinerInterface &interface,
296-
const InlinerConfig &config, CallOpInterface call,
297-
CallableOpInterface callable, Region *src,
298-
bool shouldCloneInlinedRegion = true);
299+
InlinerConfig::CloneCallbackTy cloneCallback,
300+
CallOpInterface call, CallableOpInterface callable,
301+
Region *src, bool shouldCloneInlinedRegion = true);
299302

300303
} // namespace mlir
301304

mlir/lib/Transforms/Utils/Inliner.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -651,7 +651,7 @@ Inliner::Impl::inlineCallsInSCC(InlinerInterfaceImpl &inlinerIface,
651651
bool inlineInPlace = useList.hasOneUseAndDiscardable(it.targetNode);
652652

653653
LogicalResult inlineResult =
654-
inlineCall(inlinerIface, inliner.config, call,
654+
inlineCall(inlinerIface, inliner.config.getCloneCallback(), call,
655655
cast<CallableOpInterface>(targetRegion->getParentOp()),
656656
targetRegion, /*shouldCloneInlinedRegion=*/!inlineInPlace);
657657
if (failed(inlineResult)) {

mlir/lib/Transforms/Utils/InliningUtils.cpp

Lines changed: 35 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -246,8 +246,9 @@ static void handleResultImpl(InlinerInterface &interface, OpBuilder &builder,
246246
}
247247

248248
static LogicalResult
249-
inlineRegionImpl(InlinerInterface &interface, const InlinerConfig &config,
250-
Region *src, Block *inlineBlock, Block::iterator inlinePoint,
249+
inlineRegionImpl(InlinerInterface &interface,
250+
InlinerConfig::CloneCallbackTy cloneCallback, Region *src,
251+
Block *inlineBlock, Block::iterator inlinePoint,
251252
IRMapping &mapper, ValueRange resultsToReplace,
252253
TypeRange regionResultTypes, std::optional<Location> inlineLoc,
253254
bool shouldCloneInlinedRegion, CallOpInterface call = {}) {
@@ -278,8 +279,8 @@ inlineRegionImpl(InlinerInterface &interface, const InlinerConfig &config,
278279

279280
// Clone the callee's source into the caller.
280281
Block *postInsertBlock = inlineBlock->splitBlock(inlinePoint);
281-
config.getCloneCallback()(builder, src, inlineBlock, postInsertBlock, mapper,
282-
shouldCloneInlinedRegion);
282+
cloneCallback(builder, src, inlineBlock, postInsertBlock, mapper,
283+
shouldCloneInlinedRegion);
283284

284285
// Get the range of newly inserted blocks.
285286
auto newBlocks = llvm::make_range(std::next(inlineBlock->getIterator()),
@@ -348,8 +349,9 @@ inlineRegionImpl(InlinerInterface &interface, const InlinerConfig &config,
348349
}
349350

350351
static LogicalResult
351-
inlineRegionImpl(InlinerInterface &interface, const InlinerConfig &config,
352-
Region *src, Block *inlineBlock, Block::iterator inlinePoint,
352+
inlineRegionImpl(InlinerInterface &interface,
353+
InlinerConfig::CloneCallbackTy cloneCallback, Region *src,
354+
Block *inlineBlock, Block::iterator inlinePoint,
353355
ValueRange inlinedOperands, ValueRange resultsToReplace,
354356
std::optional<Location> inlineLoc,
355357
bool shouldCloneInlinedRegion, CallOpInterface call = {}) {
@@ -373,54 +375,54 @@ inlineRegionImpl(InlinerInterface &interface, const InlinerConfig &config,
373375
}
374376

375377
// Call into the main region inliner function.
376-
return inlineRegionImpl(interface, config, src, inlineBlock, inlinePoint,
377-
mapper, resultsToReplace, resultsToReplace.getTypes(),
378-
inlineLoc, shouldCloneInlinedRegion, call);
378+
return inlineRegionImpl(interface, cloneCallback, src, inlineBlock,
379+
inlinePoint, mapper, resultsToReplace,
380+
resultsToReplace.getTypes(), inlineLoc,
381+
shouldCloneInlinedRegion, call);
379382
}
380383

381384
LogicalResult mlir::inlineRegion(InlinerInterface &interface,
382-
const InlinerConfig &config, Region *src,
383-
Operation *inlinePoint, IRMapping &mapper,
384-
ValueRange resultsToReplace,
385+
InlinerConfig::CloneCallbackTy cloneCallback,
386+
Region *src, Operation *inlinePoint,
387+
IRMapping &mapper, ValueRange resultsToReplace,
385388
TypeRange regionResultTypes,
386389
std::optional<Location> inlineLoc,
387390
bool shouldCloneInlinedRegion) {
388-
return inlineRegion(interface, config, src, inlinePoint->getBlock(),
391+
return inlineRegion(interface, cloneCallback, src, inlinePoint->getBlock(),
389392
++inlinePoint->getIterator(), mapper, resultsToReplace,
390393
regionResultTypes, inlineLoc, shouldCloneInlinedRegion);
391394
}
392395

393396
LogicalResult mlir::inlineRegion(
394-
InlinerInterface &interface, const InlinerConfig &config, Region *src,
395-
Block *inlineBlock, Block::iterator inlinePoint, IRMapping &mapper,
396-
ValueRange resultsToReplace, TypeRange regionResultTypes,
397+
InlinerInterface &interface, InlinerConfig::CloneCallbackTy cloneCallback,
398+
Region *src, Block *inlineBlock, Block::iterator inlinePoint,
399+
IRMapping &mapper, ValueRange resultsToReplace, TypeRange regionResultTypes,
397400
std::optional<Location> inlineLoc, bool shouldCloneInlinedRegion) {
398-
return inlineRegionImpl(interface, config, src, inlineBlock, inlinePoint,
399-
mapper, resultsToReplace, regionResultTypes,
400-
inlineLoc, shouldCloneInlinedRegion);
401+
return inlineRegionImpl(
402+
interface, cloneCallback, src, inlineBlock, inlinePoint, mapper,
403+
resultsToReplace, regionResultTypes, inlineLoc, shouldCloneInlinedRegion);
401404
}
402405

403406
LogicalResult mlir::inlineRegion(InlinerInterface &interface,
404-
const InlinerConfig &config, Region *src,
405-
Operation *inlinePoint,
407+
InlinerConfig::CloneCallbackTy cloneCallback,
408+
Region *src, Operation *inlinePoint,
406409
ValueRange inlinedOperands,
407410
ValueRange resultsToReplace,
408411
std::optional<Location> inlineLoc,
409412
bool shouldCloneInlinedRegion) {
410-
return inlineRegion(interface, config, src, inlinePoint->getBlock(),
413+
return inlineRegion(interface, cloneCallback, src, inlinePoint->getBlock(),
411414
++inlinePoint->getIterator(), inlinedOperands,
412415
resultsToReplace, inlineLoc, shouldCloneInlinedRegion);
413416
}
414417

415-
LogicalResult
416-
mlir::inlineRegion(InlinerInterface &interface, const InlinerConfig &config,
417-
Region *src, Block *inlineBlock, Block::iterator inlinePoint,
418-
ValueRange inlinedOperands, ValueRange resultsToReplace,
419-
std::optional<Location> inlineLoc,
420-
bool shouldCloneInlinedRegion) {
421-
return inlineRegionImpl(interface, config, src, inlineBlock, inlinePoint,
422-
inlinedOperands, resultsToReplace, inlineLoc,
423-
shouldCloneInlinedRegion);
418+
LogicalResult mlir::inlineRegion(
419+
InlinerInterface &interface, InlinerConfig::CloneCallbackTy cloneCallback,
420+
Region *src, Block *inlineBlock, Block::iterator inlinePoint,
421+
ValueRange inlinedOperands, ValueRange resultsToReplace,
422+
std::optional<Location> inlineLoc, bool shouldCloneInlinedRegion) {
423+
return inlineRegionImpl(interface, cloneCallback, src, inlineBlock,
424+
inlinePoint, inlinedOperands, resultsToReplace,
425+
inlineLoc, shouldCloneInlinedRegion);
424426
}
425427

426428
/// Utility function used to generate a cast operation from the given interface,
@@ -452,7 +454,7 @@ static Value materializeConversion(const DialectInlinerInterface *interface,
452454
/// corresponds to whether the source region should be cloned into the 'call' or
453455
/// spliced directly.
454456
LogicalResult mlir::inlineCall(InlinerInterface &interface,
455-
const InlinerConfig &config,
457+
InlinerConfig::CloneCallbackTy cloneCallback,
456458
CallOpInterface call,
457459
CallableOpInterface callable, Region *src,
458460
bool shouldCloneInlinedRegion) {
@@ -529,7 +531,7 @@ LogicalResult mlir::inlineCall(InlinerInterface &interface,
529531
return cleanupState();
530532

531533
// Attempt to inline the call.
532-
if (failed(inlineRegionImpl(interface, config, src, call->getBlock(),
534+
if (failed(inlineRegionImpl(interface, cloneCallback, src, call->getBlock(),
533535
++call->getIterator(), mapper, callResults,
534536
callableResultTypes, call.getLoc(),
535537
shouldCloneInlinedRegion, call)))

mlir/test/lib/Transforms/TestInlining.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ struct InlinerTest
5858
// Inline the functional region operation, but only clone the internal
5959
// region if there is more than one use.
6060
if (failed(inlineRegion(
61-
interface, config, &callee.getBody(), caller,
61+
interface, config.getCloneCallback(), &callee.getBody(), caller,
6262
caller.getArgOperands(), caller.getResults(), caller.getLoc(),
6363
/*shouldCloneInlinedRegion=*/!callee.getResult().hasOneUse())))
6464
continue;

mlir/test/lib/Transforms/TestInliningCallback.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ struct InlinerCallback
129129
// Inline the functional region operation, but only clone the internal
130130
// region if there is more than one use.
131131
if (failed(inlineRegion(
132-
interface, config, &callee.getBody(), caller,
132+
interface, config.getCloneCallback(), &callee.getBody(), caller,
133133
caller.getArgOperands(), caller.getResults(), caller.getLoc(),
134134
/*shouldCloneInlinedRegion=*/!callee.getResult().hasOneUse())))
135135
continue;

0 commit comments

Comments
 (0)