100 for (
auto [branchResult, gammaOutput] : gammaNode.
GetExitVars())
102 const auto region0Argument =
104 const auto region1Argument =
107 if (region0Argument ==
nullptr || region1Argument ==
nullptr)
114 const auto origin0 = region0Argument->
input()->
origin();
115 const auto origin1 = region1Argument->input()->origin();
117 if (origin0 == origin1)
124 auto [matchNode, matchOperation] =
128 if (std::distance(matchOperation->begin(), matchOperation->end()) != 1)
141 const auto matchOrigin = matchNode->input(0)->origin();
142 const auto caseValue = matchOperation->begin()->first;
143 const auto caseSubregion = matchOperation->begin()->second;
144 const auto defaultSubregion = matchOperation->default_alternative();
145 const auto numMatchBits = matchOperation->nbits();
146 JLM_ASSERT(caseSubregion != defaultSubregion);
148 if (numMatchBits == 1 && caseValue == caseSubregion)
155 { matchOrigin, origin1, origin0 },
156 gammaOutput->Type());
157 gammaOutput->divert_users(selectNode.output(0));
167 { constantNode.output(0), matchOrigin },
170 auto trueAlternative = caseSubregion == 0 ? origin0 : origin1;
171 auto falseAlternative = caseSubregion == 0 ? origin1 : origin0;
173 { eqNode.output(0), trueAlternative, falseAlternative },
174 gammaOutput->Type());
175 gammaOutput->divert_users(selectNode.output(0));
180 const auto falseAlternative = origin0;
181 const auto trueAlternative = origin1;
187 { controlToIntNode.output(0), trueAlternative, falseAlternative },
188 gammaOutput->Type());
189 gammaOutput->divert_users(selectNode.output(0));