Skip to content

Commit c70e794

Browse files
committed
fix ci fail on windows platform
1 parent dee51cd commit c70e794

File tree

1 file changed

+65
-33
lines changed

1 file changed

+65
-33
lines changed

mlir/lib/IR/AffineExpr.cpp

Lines changed: 65 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -379,32 +379,44 @@ static bool isDivisibleBySymbol(AffineExpr expr, unsigned symbolPos,
379379
// Note: Assignment must occur before pop, which will affect whether it
380380
// enters other execution branches.
381381
result = cast<AffineConstantExpr>(expr).getValue() == 0;
382+
llvm::detail::scope_exit<std::function<void(void)>> sexit(
383+
std::move(std::get<3>(stack.back())));
382384
stack.pop_back();
383385
break;
384386
}
385387
case AffineExprKind::DimId: {
386388
result = false;
389+
llvm::detail::scope_exit<std::function<void(void)>> sexit(
390+
std::move(std::get<3>(stack.back())));
387391
stack.pop_back();
388392
break;
389393
}
390394
case AffineExprKind::SymbolId: {
391395
result = cast<AffineSymbolExpr>(expr).getPosition() == symbolPos;
396+
llvm::detail::scope_exit<std::function<void(void)>> sexit(
397+
std::move(std::get<3>(stack.back())));
392398
stack.pop_back();
393399
break;
394400
}
395401
// Checks divisibility by the given symbol for both operands.
396402
case AffineExprKind::Add: {
397403
AffineBinaryOpExpr binaryExpr = cast<AffineBinaryOpExpr>(expr);
398-
stack.emplace_back(binaryExpr.getLHS(), symbolPos, opKind,
399-
[&stack, &result, binaryExpr, symbolPos, opKind]() {
400-
if (result) {
401-
stack.emplace_back(
402-
binaryExpr.getRHS(), symbolPos, opKind,
403-
[&stack]() { stack.pop_back(); });
404-
} else {
405-
stack.pop_back();
406-
}
407-
});
404+
stack.emplace_back(
405+
binaryExpr.getLHS(), symbolPos, opKind,
406+
[&stack, &result, binaryExpr, symbolPos, opKind]() {
407+
if (result) {
408+
stack.emplace_back(
409+
binaryExpr.getRHS(), symbolPos, opKind, [&stack]() {
410+
llvm::detail::scope_exit<std::function<void(void)>> sexit(
411+
std::move(std::get<3>(stack.back())));
412+
stack.pop_back();
413+
});
414+
} else {
415+
llvm::detail::scope_exit<std::function<void(void)>> sexit(
416+
std::move(std::get<3>(stack.back())));
417+
stack.pop_back();
418+
}
419+
});
408420
break;
409421
}
410422
// Checks divisibility by the given symbol for both operands. Consider the
@@ -414,32 +426,44 @@ static bool isDivisibleBySymbol(AffineExpr expr, unsigned symbolPos,
414426
// is `AffineExprKind::Mod` for this reason.
415427
case AffineExprKind::Mod: {
416428
AffineBinaryOpExpr binaryExpr = cast<AffineBinaryOpExpr>(expr);
417-
stack.emplace_back(binaryExpr.getLHS(), symbolPos, AffineExprKind::Mod,
418-
[&stack, &result, binaryExpr, symbolPos]() {
419-
if (result) {
420-
stack.emplace_back(
421-
binaryExpr.getRHS(), symbolPos,
422-
AffineExprKind::Mod,
423-
[&stack]() { stack.pop_back(); });
424-
} else {
425-
stack.pop_back();
426-
}
427-
});
429+
stack.emplace_back(
430+
binaryExpr.getLHS(), symbolPos, AffineExprKind::Mod,
431+
[&stack, &result, binaryExpr, symbolPos]() {
432+
if (result) {
433+
stack.emplace_back(
434+
binaryExpr.getRHS(), symbolPos, AffineExprKind::Mod,
435+
[&stack]() {
436+
llvm::detail::scope_exit<std::function<void(void)>> sexit(
437+
std::move(std::get<3>(stack.back())));
438+
stack.pop_back();
439+
});
440+
} else {
441+
llvm::detail::scope_exit<std::function<void(void)>> sexit(
442+
std::move(std::get<3>(stack.back())));
443+
stack.pop_back();
444+
}
445+
});
428446
break;
429447
}
430448
// Checks if any of the operand divisible by the given symbol.
431449
case AffineExprKind::Mul: {
432450
AffineBinaryOpExpr binaryExpr = cast<AffineBinaryOpExpr>(expr);
433-
stack.emplace_back(binaryExpr.getLHS(), symbolPos, opKind,
434-
[&stack, &result, binaryExpr, symbolPos, opKind]() {
435-
if (!result) {
436-
stack.emplace_back(
437-
binaryExpr.getRHS(), symbolPos, opKind,
438-
[&stack]() { stack.pop_back(); });
439-
} else {
440-
stack.pop_back();
441-
}
442-
});
451+
stack.emplace_back(
452+
binaryExpr.getLHS(), symbolPos, opKind,
453+
[&stack, &result, binaryExpr, symbolPos, opKind]() {
454+
if (!result) {
455+
stack.emplace_back(
456+
binaryExpr.getRHS(), symbolPos, opKind, [&stack]() {
457+
llvm::detail::scope_exit<std::function<void(void)>> sexit(
458+
std::move(std::get<3>(stack.back())));
459+
stack.pop_back();
460+
});
461+
} else {
462+
llvm::detail::scope_exit<std::function<void(void)>> sexit(
463+
std::move(std::get<3>(stack.back())));
464+
stack.pop_back();
465+
}
466+
});
443467
break;
444468
}
445469
// Floordiv and ceildiv are divisible by the given symbol when the first
@@ -457,19 +481,27 @@ static bool isDivisibleBySymbol(AffineExpr expr, unsigned symbolPos,
457481
AffineBinaryOpExpr binaryExpr = cast<AffineBinaryOpExpr>(expr);
458482
if (opKind != expr.getKind()) {
459483
result = false;
484+
llvm::detail::scope_exit<std::function<void(void)>> sexit(
485+
std::move(std::get<3>(stack.back())));
460486
stack.pop_back();
461487
break;
462488
}
463489
if (llvm::any_of(stack, [](auto &it) {
464490
return std::get<0>(it).getKind() == AffineExprKind::Mul;
465491
})) {
466492
result = false;
493+
llvm::detail::scope_exit<std::function<void(void)>> sexit(
494+
std::move(std::get<3>(stack.back())));
467495
stack.pop_back();
468496
break;
469497
}
470498

471-
stack.emplace_back(binaryExpr.getLHS(), symbolPos, expr.getKind(),
472-
[&stack]() { stack.pop_back(); });
499+
stack.emplace_back(
500+
binaryExpr.getLHS(), symbolPos, expr.getKind(), [&stack]() {
501+
llvm::detail::scope_exit<std::function<void(void)>> sexit(
502+
std::move(std::get<3>(stack.back())));
503+
stack.pop_back();
504+
});
473505
break;
474506
}
475507
llvm_unreachable("Unknown AffineExpr");

0 commit comments

Comments
 (0)