[clang] [CIR] Upstream TryCallOp (PR #165303)
Andy Kaylor via cfe-commits
cfe-commits at lists.llvm.org
Mon Nov 3 12:38:11 PST 2025
================
@@ -2707,6 +2707,98 @@ def CIR_CallOp : CIR_CallOpBase<"call", [NoRegionArguments]> {
];
}
+def CIR_TryCallOp : CIR_CallOpBase<"try_call",[
+ DeclareOpInterfaceMethods<BranchOpInterface>,
+ Terminator, AttrSizedOperandSegments
+]> {
+ let summary = "try_call operation";
+
+ let description = [{
+ Mostly similar to cir.call but requires two destination
+ branches, one for handling exceptions in case its thrown and
+ the other one to follow on regular control-flow.
+
+ Example:
+
+ ```mlir
+ // Direct call
+ %result = cir.try_call @division(%a, %b) ^continue, ^landing_pad
+ : (f32, f32) -> f32
+ ```
+ }];
+
+ let arguments = !con((ins
+ Variadic<CIR_AnyType>:$contOperands,
+ Variadic<CIR_AnyType>:$landingPadOperands
+ ), commonArgs);
+
+ let results = (outs Optional<CIR_AnyType>:$result);
+ let successors = (successor AnySuccessor:$cont, AnySuccessor:$landing_pad);
----------------
andykaylor wrote:
The destinations are referred to as the normal destination and the unwind destination in the LLVM invoke instruction. I think it would be helpful to use the same terminology here.
https://github.com/llvm/llvm-project/pull/165303
More information about the cfe-commits
mailing list