summaryrefslogtreecommitdiffstats
path: root/mlir/include/mlir/Dialect/EmitC/IR/EmitC.td
diff options
context:
space:
mode:
Diffstat (limited to 'mlir/include/mlir/Dialect/EmitC/IR/EmitC.td')
-rw-r--r--mlir/include/mlir/Dialect/EmitC/IR/EmitC.td30
1 files changed, 30 insertions, 0 deletions
diff --git a/mlir/include/mlir/Dialect/EmitC/IR/EmitC.td b/mlir/include/mlir/Dialect/EmitC/IR/EmitC.td
index ac1e38a5506d..ec842f76628c 100644
--- a/mlir/include/mlir/Dialect/EmitC/IR/EmitC.td
+++ b/mlir/include/mlir/Dialect/EmitC/IR/EmitC.td
@@ -908,6 +908,36 @@ def EmitC_SubOp : EmitC_BinaryOp<"sub", [CExpression]> {
let hasVerifier = 1;
}
+def EmitC_ConditionalOp : EmitC_Op<"conditional",
+ [AllTypesMatch<["true_value", "false_value", "result"]>, CExpression]> {
+ let summary = "Conditional (ternary) operation";
+ let description = [{
+ With the `conditional` operation the ternary conditional operator can
+ be applied.
+
+ Example:
+
+ ```mlir
+ %0 = emitc.cmp gt, %arg0, %arg1 : (i32, i32) -> i1
+
+ %c0 = "emitc.constant"() {value = 10 : i32} : () -> i32
+ %c1 = "emitc.constant"() {value = 11 : i32} : () -> i32
+
+ %1 = emitc.conditional %0, %c0, %c1 : i32
+ ```
+ ```c++
+ // Code emitted for the operations above.
+ bool v3 = v1 > v2;
+ int32_t v4 = 10;
+ int32_t v5 = 11;
+ int32_t v6 = v3 ? v4 : v5;
+ ```
+ }];
+ let arguments = (ins I1:$condition, AnyType:$true_value, AnyType:$false_value);
+ let results = (outs AnyType:$result);
+ let assemblyFormat = "operands attr-dict `:` type($result)";
+}
+
def EmitC_UnaryMinusOp : EmitC_UnaryOp<"unary_minus", [CExpression]> {
let summary = "Unary minus operation";
let description = [{