[Mlir-commits] [mlir] [mlir][arith] Overflow semantics in documentation for muli, subi, and addi (PR #74346)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Mon Dec 4 09:33:38 PST 2023


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-mlir-arith

Author: Jacob Yu (pingshiyu)

<details>
<summary>Changes</summary>

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.

---
Full diff: https://github.com/llvm/llvm-project/pull/74346.diff


1 Files Affected:

- (modified) mlir/include/mlir/Dialect/Arith/IR/ArithOps.td (+28) 


``````````diff
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;
 }

``````````

</details>


https://github.com/llvm/llvm-project/pull/74346


More information about the Mlir-commits mailing list