Skip to content

Commit

Permalink
[Dispatch] Don't fuse bit truncate -> extend ops
Browse files Browse the repository at this point in the history
Signed-off-by: Ian Wood <[email protected]>
  • Loading branch information
IanWood1 committed Dec 6, 2024
1 parent 9f8aad8 commit 9e22402
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,7 @@ void ElementwiseOpFusionPass::runOnOperation() {
};

RewritePatternSet linalgFusionPatterns(context);
linalgFusionPatterns.insert<GatherFusionPattern>(context);
linalg::populateElementwiseOpsFusionPatterns(linalgFusionPatterns,
fuseElementwiseOpsControlFn);

Expand All @@ -158,7 +159,6 @@ void ElementwiseOpFusionPass::runOnOperation() {
RewritePatternSet linalgExtFusionPatterns(context);
IREE::LinalgExt::populateFuseLinalgExtOpsWithTransposes(
linalgExtFusionPatterns, foldTransposeControlFn);
linalgExtFusionPatterns.insert<GatherFusionPattern>(context);
if (failed(applyPatternsAndFoldGreedily(
getOperation(), std::move(linalgExtFusionPatterns), rewriteConfig))) {
getOperation()->emitOpError(
Expand Down
4 changes: 3 additions & 1 deletion compiler/src/iree/compiler/DispatchCreation/FusionUtils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,9 @@ bool areFusableAsElementwiseOps(MLIRContext *context, OpOperand *fusedOperand,
// (except for bit-extend ops). If the consumer has only one use, then this
// fusion is fine since cloning wont result in redundant computation of the
// producer. (Also note that the producer is always an elementwise operation).
if (IREE::LinalgExt::isBitExtendOp(consumerOp) && !consumerOp->hasOneUse()) {
if (IREE::LinalgExt::isBitExtendOp(consumerOp) &&
(!consumerOp->hasOneUse() ||
IREE::LinalgExt::isBitTruncateOp(producerOp))) {
return false;
}

Expand Down

0 comments on commit 9e22402

Please sign in to comment.