39 auto numCases = match->getNumRegions();
45 ImplicitLocOpBuilder b(match.getLoc(), match);
46 auto input = match.getInput();
47 for (
size_t i = 0; i < numCases - 1; ++i) {
49 auto condition = b.create<IsTagOp>(input, match.getFieldIndexAttr(i));
50 auto when = b.create<WhenOp>(condition,
true);
53 auto *thenBlock = &when.getThenBlock();
54 auto *caseBlock = &match.getRegion(i).front();
55 caseBlock->moveBefore(thenBlock);
59 b.setInsertionPointToStart(caseBlock);
60 auto data = b.create<SubtagOp>(input, match.getFieldIndexAttr(i));
61 caseBlock->getArgument(0).replaceAllUsesWith(
data);
62 caseBlock->eraseArgument(0);
65 b.setInsertionPointToStart(&when.getElseBlock());
72 auto data = b.create<SubtagOp>(input, match.getFieldIndexAttr(numCases - 1));
76 auto *caseBlock = &match->getRegions().back().front();
77 caseBlock->getArgument(0).replaceAllUsesWith(
data);
78 auto *defaultBlock = b.getInsertionBlock();
79 defaultBlock->getOperations().splice(b.getInsertionPoint(),
80 caseBlock->getOperations());