================
@@ -462,6 +462,58 @@ def ReturnOp : CIR_Op<"return", [ParentOneOf<["FuncOp",
"ScopeOp", "DoWhileOp",
let hasVerifier = 1;
}
+//===----------------------------------------------------------------------===//
+// IfOp
+//===----------------------------------------------------------------------===//
+
+def IfOp : CIR_Op<"if",
+ [DeclareOpInterfaceMethods<RegionBranchOpInterface>,
+ RecursivelySpeculatable, AutomaticAllocationScope, NoRegionArguments]>{
+
+ let summary = "the if-then-else operation";
+ let description = [{
+ The `cir.if` operation represents an if-then-else construct for
+ conditionally executing two regions of code. The operand is a `cir.bool`
+ type.
+
+ Examples:
+
+ ```mlir
+ cir.if %b {
----------------
andykaylor wrote:
> do you have anything in mind?
I don't have anything specific in mind. I just have a general preference for
consistency. If I've written some code to handle `cir.if` and it knows how to
find the condition and any associated initialization, then I want to extend
this code to handle `cir.while`, it would surprise me to have to find the
condition and initialization differently. Of course, without actually going
through that process it's hard to say which way is more natural in practice.
> If you feel encourage to try this approach, I recommend experimenting in the
> incubator to double check IR soundness with our CIR test coverage.
I am OK with having this PR proceed with the current representation and
revisiting the issue in the incubator if we decide to explore a change. At
least until we have enough of the implementation upstreamed to believe that
people might be using it, I would agree that's a good general approach.
https://github.com/llvm/llvm-project/pull/134333
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits