diff options
Diffstat (limited to 'mlir/include/mlir/Dialect/EmitC/IR/EmitC.td')
-rw-r--r-- | mlir/include/mlir/Dialect/EmitC/IR/EmitC.td | 30 |
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 = [{ |