File tree 2 files changed +37
-3
lines changed
lib/CIR/Lowering/DirectToLLVM 2 files changed +37
-3
lines changed Original file line number Diff line number Diff line change @@ -339,7 +339,7 @@ class CIRLoopOpLowering : public mlir::OpConversionPattern<mlir::cir::LoopOp> {
339
339
}
340
340
341
341
// Succeed only if both yields are found.
342
- if (!yieldToBody || !yieldToCont )
342
+ if (!yieldToBody)
343
343
return mlir::failure ();
344
344
return mlir::success ();
345
345
}
@@ -428,8 +428,10 @@ class CIRLoopOpLowering : public mlir::OpConversionPattern<mlir::cir::LoopOp> {
428
428
rewriter.create <mlir::cir::BrOp>(loopOp.getLoc (), &entry);
429
429
430
430
// Set loop exit point to continue block.
431
- rewriter.setInsertionPoint (yieldToCont);
432
- rewriter.replaceOpWithNewOp <mlir::cir::BrOp>(yieldToCont, continueBlock);
431
+ if (yieldToCont) {
432
+ rewriter.setInsertionPoint (yieldToCont);
433
+ rewriter.replaceOpWithNewOp <mlir::cir::BrOp>(yieldToCont, continueBlock);
434
+ }
433
435
434
436
// Branch from condition to body.
435
437
rewriter.setInsertionPoint (yieldToBody);
Original file line number Diff line number Diff line change @@ -185,4 +185,36 @@ module {
185
185
// MLIR-NEXT: ^bb6:
186
186
// MLIR-NEXT: llvm.br ^bb7
187
187
188
+ // Test endless cir.loop lowering.
189
+ cir.func @testEndless() {
190
+ cir.scope {
191
+ cir.loop for(cond : {
192
+ cir.yield continue
193
+ }, step : {
194
+ cir.yield
195
+ }) {
196
+ cir.yield
197
+ }
198
+ }
199
+ cir.return
200
+ }
201
+
202
+ // MLIR: llvm.func @testEndless()
203
+ // MLIR-NEXT: llvm.br ^bb1
204
+ // MLIR-NEXT: ^bb1:
205
+ // MLIR-NEXT: llvm.br ^bb2
206
+ // ============= Condition block =============
207
+ // MLIR-NEXT: ^bb2:
208
+ // MLIR-NEXT: llvm.br ^bb3
209
+ // ============= Body block =============
210
+ // MLIR-NEXT: ^bb3:
211
+ // MLIR-NEXT: llvm.br ^bb4
212
+ // ============= Step block =============
213
+ // MLIR-NEXT: ^bb4:
214
+ // MLIR-NEXT: llvm.br ^bb2
215
+ // ============= Exit block =============
216
+ // MLIR-NEXT: ^bb5:
217
+ // MLIR-NEXT: llvm.br ^bb6
218
+ // MLIR-NEXT: ^bb6:
219
+ // MLIR-NEXT: llvm.return
188
220
}
You can’t perform that action at this time.
0 commit comments