Files
clang-p2996/mlir/test/Target/Cpp/arithmetic_operators.mlir
Marius Brehler a2426eb603 [mlir][emitc] Add div, mul and rem operators
This adds operations for binary multiplicative arithmetic operators to
EmitC. The input and output arguments for the remainder operator are
restricted to index (emitted as size_t), integers and the EmitC opaque
types (as the operator can be overloaded for a custom type). The
multiplication and division operator further support floating point
numbers.

Reviewed By: jpienaar

Differential Revision: https://reviews.llvm.org/D154846
2023-07-12 08:45:10 +02:00

51 lines
1.6 KiB
MLIR

// RUN: mlir-translate -mlir-to-cpp %s | FileCheck %s
func.func @add_int(%arg0: i32, %arg1: i32) {
%1 = "emitc.add" (%arg0, %arg1) : (i32, i32) -> i32
return
}
// CHECK-LABEL: void add_int
// CHECK-NEXT: int32_t [[V2:[^ ]*]] = [[V0:[^ ]*]] + [[V1:[^ ]*]]
func.func @add_pointer(%arg0: !emitc.ptr<f32>, %arg1: i32) {
%1 = "emitc.add" (%arg0, %arg1) : (!emitc.ptr<f32>, i32) -> !emitc.ptr<f32>
return
}
// CHECK-LABEL: void add_pointer
// CHECK-NEXT: float* [[V2:[^ ]*]] = [[V0:[^ ]*]] + [[V1:[^ ]*]]
func.func @div_int(%arg0: i32, %arg1: i32) {
%1 = "emitc.div" (%arg0, %arg1) : (i32, i32) -> i32
return
}
// CHECK-LABEL: void div_int
// CHECK-NEXT: int32_t [[V2:[^ ]*]] = [[V0:[^ ]*]] / [[V1:[^ ]*]]
func.func @mul_int(%arg0: i32, %arg1: i32) {
%1 = "emitc.mul" (%arg0, %arg1) : (i32, i32) -> i32
return
}
// CHECK-LABEL: void mul_int
// CHECK-NEXT: int32_t [[V2:[^ ]*]] = [[V0:[^ ]*]] * [[V1:[^ ]*]]
func.func @rem(%arg0: i32, %arg1: i32) {
%1 = "emitc.rem" (%arg0, %arg1) : (i32, i32) -> i32
return
}
// CHECK-LABEL: void rem
// CHECK-NEXT: int32_t [[V2:[^ ]*]] = [[V0:[^ ]*]] % [[V1:[^ ]*]]
func.func @sub_int(%arg0: i32, %arg1: i32) {
%1 = "emitc.sub" (%arg0, %arg1) : (i32, i32) -> i32
return
}
// CHECK-LABEL: void sub_int
// CHECK-NEXT: int32_t [[V2:[^ ]*]] = [[V0:[^ ]*]] - [[V1:[^ ]*]]
func.func @sub_pointer(%arg0: !emitc.ptr<f32>, %arg1: !emitc.ptr<f32>) {
%1 = "emitc.sub" (%arg0, %arg1) : (!emitc.ptr<f32>, !emitc.ptr<f32>) -> !emitc.opaque<"ptrdiff_t">
return
}
// CHECK-LABEL: void sub_pointer
// CHECK-NEXT: ptrdiff_t [[V2:[^ ]*]] = [[V0:[^ ]*]] - [[V1:[^ ]*]]