57 auto loopLikeOp = cast<LoopLikeOpInterface>(op);
60 if (loopLikeOp.getInits().size() != loopLikeOp.getRegionIterArgs().size())
61 return op->
emitOpError(
"different number of inits and region iter_args: ")
62 << loopLikeOp.getInits().size()
63 <<
" != " << loopLikeOp.getRegionIterArgs().size();
64 if (!loopLikeOp.getYieldedValues().empty() &&
65 loopLikeOp.getRegionIterArgs().size() !=
66 loopLikeOp.getYieldedValues().size())
68 "different number of region iter_args and yielded values: ")
69 << loopLikeOp.getRegionIterArgs().size()
70 <<
" != " << loopLikeOp.getYieldedValues().size();
71 if (loopLikeOp.getLoopResults() && loopLikeOp.getLoopResults()->size() !=
72 loopLikeOp.getRegionIterArgs().size())
74 "different number of loop results and region iter_args: ")
75 << loopLikeOp.getLoopResults()->size()
76 <<
" != " << loopLikeOp.getRegionIterArgs().size();
82 if (!isa<RegionBranchOpInterface>(op)) {
83 auto yieldedValues = loopLikeOp.getYieldedValues();
84 for (
const auto [
index, init, regionIterArg] : llvm::enumerate(
85 loopLikeOp.getInits(), loopLikeOp.getRegionIterArgs())) {
86 if (init.getType() != regionIterArg.getType())
88 <<
"-th init and " <<
index
89 <<
"-th region iter_arg have different type: " << init.getType()
90 <<
" != " << regionIterArg.getType();
91 if (!yieldedValues.empty()) {
92 if (regionIterArg.getType() != yieldedValues[
index].getType())
94 <<
"-th region iter_arg and " <<
index
95 <<
"-th yielded value have different type: "
96 << regionIterArg.getType()
97 <<
" != " << yieldedValues[
index].getType();
100 if (loopLikeOp.getLoopResults()) {
101 for (
const auto [
index, regionIterArg, loopResult] : llvm::enumerate(
102 loopLikeOp.getRegionIterArgs(), *loopLikeOp.getLoopResults())) {
103 if (regionIterArg.getType() != loopResult.getType())
105 <<
"-th region iter_arg and " <<
index
106 <<
"-th loop result have different type: "
107 << regionIterArg.getType() <<
" != " << loopResult.getType();
113 auto inductionVars = loopLikeOp.getLoopInductionVars();
114 if (inductionVars.has_value()) {
115 for (
auto [
index, inductionVar] : llvm::enumerate(*inductionVars)) {
116 if (!loopLikeOp.isValidInductionVarType(inductionVar.getType()))
118 <<
"-th induction variable has invalid type: "
119 << inductionVar.getType();