Skip to content

Commit c6d748c

Browse files
sjw36bertmaher
authored andcommitted
[Pipeliner] Properly fail instead of assert if cannot predicate op (triton-lang#4659)
Mirrored from upstream change: llvm/llvm-project#107442
1 parent bc16018 commit c6d748c

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

lib/Dialect/TritonGPU/Transforms/Pipeliner/PipelineExpander.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ struct LoopPipelinerInternal {
8989
bool initializeLoopInfo(ForOp op, const triton::PipeliningOption &options);
9090
/// Emits the prologue, this creates `maxStage - 1` part which will contain
9191
/// operations from stages [0; i], where i is the part index.
92-
void emitPrologue(RewriterBase &rewriter);
92+
LogicalResult emitPrologue(RewriterBase &rewriter);
9393
/// Gather liverange information for Values that are used in a different stage
9494
/// than its definition.
9595
llvm::MapVector<Value, LiverangeInfo> analyzeCrossStageValues();
@@ -275,7 +275,7 @@ cloneAndUpdateOperands(RewriterBase &rewriter, Operation *op,
275275
return clone;
276276
}
277277

278-
void LoopPipelinerInternal::emitPrologue(RewriterBase &rewriter) {
278+
LogicalResult LoopPipelinerInternal::emitPrologue(RewriterBase &rewriter) {
279279
// Initialize the iteration argument to the loop initiale values.
280280
for (auto [arg, operand] :
281281
llvm::zip(forOp.getRegionIterArgs(), forOp.getInitsMutable())) {
@@ -323,7 +323,8 @@ void LoopPipelinerInternal::emitPrologue(RewriterBase &rewriter) {
323323
if (predicates[predicateIdx]) {
324324
OpBuilder::InsertionGuard insertGuard(rewriter);
325325
newOp = predicateFn(rewriter, newOp, predicates[predicateIdx]);
326-
assert(newOp && "failed to predicate op.");
326+
if (newOp == nullptr)
327+
return failure();
327328
}
328329
if (annotateFn)
329330
annotateFn(newOp, triton::PipeliningOption::PipelinerPart::Prologue, i);
@@ -341,6 +342,7 @@ void LoopPipelinerInternal::emitPrologue(RewriterBase &rewriter) {
341342
}
342343
}
343344
}
345+
return success();
344346
}
345347

346348
llvm::MapVector<Value, LoopPipelinerInternal::LiverangeInfo>
@@ -777,7 +779,8 @@ mlir::triton::pipelineForLoop(RewriterBase &rewriter, ForOp forOp,
777779
*modifiedIR = true;
778780

779781
// 1. Emit prologue.
780-
pipeliner.emitPrologue(rewriter);
782+
if (failed(pipeliner.emitPrologue(rewriter)))
783+
return failure();
781784

782785
// 2. Track values used across stages. When a value cross stages it will
783786
// need to be passed as loop iteration arguments.

0 commit comments

Comments
 (0)