================ @@ -802,6 +804,132 @@ Block *cir::BrCondOp::getSuccessorForOperands(ArrayRef<Attribute> operands) { return nullptr; } +//===----------------------------------------------------------------------===// +// CaseOp +//===----------------------------------------------------------------------===// + +void cir::CaseOp::getSuccessorRegions( + mlir::RegionBranchPoint point, SmallVectorImpl<RegionSuccessor> ®ions) { + if (!point.isParent()) { + regions.push_back(RegionSuccessor()); + return; + } + regions.push_back(RegionSuccessor(&getCaseRegion())); +} + +void cir::CaseOp::build(OpBuilder &builder, OperationState &result, + ArrayAttr value, CaseOpKind kind, + OpBuilder::InsertPoint &insertPoint) { + OpBuilder::InsertionGuard guardSwitch(builder); + result.addAttribute("value", value); + result.getOrAddProperties<Properties>().kind = + cir::CaseOpKindAttr::get(builder.getContext(), kind); + Region *caseRegion = result.addRegion(); + builder.createBlock(caseRegion); + + insertPoint = builder.saveInsertionPoint(); +} + +LogicalResult cir::CaseOp::verify() { return success(); } + +//===----------------------------------------------------------------------===// +// SwitchOp +//===----------------------------------------------------------------------===// + +static ParseResult parseSwitchOp(OpAsmParser &parser, mlir::Region ®ions, + mlir::OpAsmParser::UnresolvedOperand &cond, + mlir::Type &condType) { + cir::IntType intCondType; + + if (parser.parseLParen()) + return ::mlir::failure(); + + if (parser.parseOperand(cond)) + return ::mlir::failure(); + if (parser.parseColon()) + return ::mlir::failure(); + if (parser.parseCustomTypeWithFallback(intCondType)) + return ::mlir::failure(); + condType = intCondType; + + if (parser.parseRParen()) + return ::mlir::failure(); + if (parser.parseRegion(regions, /*arguments=*/{}, /*argTypes=*/{})) + return failure(); + + return ::mlir::success(); +} + +static void printSwitchOp(OpAsmPrinter &p, cir::SwitchOp op, + mlir::Region &bodyRegion, mlir::Value condition, + mlir::Type condType) { + p << "("; + p << condition; + p << " : "; + p.printStrippedAttrOrType(condType); + p << ")"; + + p << ' '; + p.printRegion(bodyRegion, /*printEntryBlockArgs=*/false, + /*printBlockTerminators=*/true); +} + +void cir::SwitchOp::getSuccessorRegions( + mlir::RegionBranchPoint point, SmallVectorImpl<RegionSuccessor> ®ion) { + if (!point.isParent()) { + region.push_back(RegionSuccessor()); + return; + } + + region.push_back(RegionSuccessor(&getBody())); +} + +LogicalResult cir::SwitchOp::verify() { return success(); } ---------------- Andres-Salamanca wrote:
Done https://github.com/llvm/llvm-project/pull/137106 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits