[Mlir-commits] [mlir] [mlir][arith] Overflow semantics in documentation for muli, subi, and addi (PR #74346)
Jacob Yu
llvmlistbot at llvm.org
Mon Dec 4 09:33:08 PST 2023
https://github.com/pingshiyu created https://github.com/llvm/llvm-project/pull/74346
Following discussions from this RFC: https://discourse.llvm.org/t/rfc-integer-overflow-semantics
Adding the overflow semantics into the muli, subi and addi arith operations.
>From c7573a35d447c88474c3b7dbf25cc451db2798b9 Mon Sep 17 00:00:00 2001
From: pingshiyu <pingshiyu at gmail.com>
Date: Mon, 4 Dec 2023 17:31:06 +0000
Subject: [PATCH] [mlir][arith] arith ops overflow semantics defined for muli,
subi, and addi
---
.../include/mlir/Dialect/Arith/IR/ArithOps.td | 28 +++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/mlir/include/mlir/Dialect/Arith/IR/ArithOps.td b/mlir/include/mlir/Dialect/Arith/IR/ArithOps.td
index 38cce99679e99..3c2c48180a2a2 100644
--- a/mlir/include/mlir/Dialect/Arith/IR/ArithOps.td
+++ b/mlir/include/mlir/Dialect/Arith/IR/ArithOps.td
@@ -200,6 +200,12 @@ def Arith_AddIOp : Arith_TotalIntBinaryOp<"addi", [Commutative]> {
a vector whose element type is integer, or a tensor of integers. It has no
standard attributes.
+ The operands are interpreted as unsigned bitvectors. The result is represented by
+ a bitvector containing the mathematical value of the addition modulo 2^n, where
+ `n` is the bitwidth. Because `arith` integers use a two's complement
+ representation, this operation is applicable on both signed and unsigned
+ integer operands.
+
Example:
```mlir
@@ -276,6 +282,17 @@ def Arith_SubIOp : Arith_TotalIntBinaryOp<"subi"> {
let summary = [{
Integer subtraction operation.
}];
+ let description = [{
+ The `subi` operation takes two operands and returns one result, each of
+ these is required to be the same type. This type may be an integer scalar type,
+ a vector whose element type is integer, or a tensor of integers. It has no
+ standard attributes.
+
+ The operands are interpreted as unsigned bitvectors. The result is represented by a
+ bitvector containing the mathematical value of the subtraction modulo 2^n, where `n`
+ is the bitwidth. Because `arith` integers use a two's complement representation, this
+ operation is applicable on both signed and unsigned integer operands.
+ }];
let hasFolder = 1;
let hasCanonicalizer = 1;
}
@@ -288,6 +305,17 @@ def Arith_MulIOp : Arith_TotalIntBinaryOp<"muli", [Commutative]> {
let summary = [{
Integer multiplication operation.
}];
+ let description = [{
+ The `muli` operation takes two operands and returns one result, each of
+ these is required to be the same type. This type may be an integer scalar type,
+ a vector whose element type is integer, or a tensor of integers. It has no
+ standard attributes.
+
+ The operands are interpreted as unsigned bitvectors. The result is represented by a
+ bitvector containing the mathematical value of the multiplication modulo 2^n, where `n`
+ is the bitwidth. Because `arith` integers use a two's complement representation, this
+ operation is applicable on both signed and unsigned integer operands.
+ }];
let hasFolder = 1;
let hasCanonicalizer = 1;
}
More information about the Mlir-commits
mailing list