Limit the number of operands for FusionOfTensorOps to 32. (#6478)
diff --git a/iree/compiler/Dialect/Flow/Transforms/FusionOfTensorOps.cpp b/iree/compiler/Dialect/Flow/Transforms/FusionOfTensorOps.cpp index 9032285..6689134 100644 --- a/iree/compiler/Dialect/Flow/Transforms/FusionOfTensorOps.cpp +++ b/iree/compiler/Dialect/Flow/Transforms/FusionOfTensorOps.cpp
@@ -64,6 +64,14 @@ } } + // Limit the number of operands. We have hard limit (32) of bindings + // passing down to HAL. Set the number to be as same as the limit -- + // IREE_HAL_MODULE_MAX_DESCRIPTOR_BINDING_COUNT. + constexpr int64_t kIreeMaxOperandCount = 32; + auto numOperands = producer.getOwner()->getNumOperands() + + consumer.getOwner()->getNumOperands() - 1; + if (numOperands >= kIreeMaxOperandCount) return false; + llvm::SmallDenseSet<Operation *, 4> numUsers; for (Operation *user : producer.getUsers()) { if (isa<linalg::GenericOp>(user)) continue;