@@ -226,7 +226,7 @@ def Arith_AddIOp : Arith_IntBinaryOpWithOverflowFlags<"addi", [Commutative]> {
226226 these is required to be the same type. This type may be an integer scalar type,
227227 a vector whose element type is integer, or a tensor of integers.
228228
229- This op supports `nuw`/`nsw` overflow flags which stands for
229+ This op supports `nuw`/`nsw` overflow flags which stands stand for
230230 "No Unsigned Wrap" and "No Signed Wrap", respectively. If the `nuw` and/or
231231 `nsw` flags are present, and an unsigned/signed overflow occurs
232232 (respectively), the result is poison.
@@ -321,7 +321,7 @@ def Arith_SubIOp : Arith_IntBinaryOpWithOverflowFlags<"subi"> {
321321 these is required to be the same type. This type may be an integer scalar type,
322322 a vector whose element type is integer, or a tensor of integers.
323323
324- This op supports `nuw`/`nsw` overflow flags which stands for
324+ This op supports `nuw`/`nsw` overflow flags which stands stand for
325325 "No Unsigned Wrap" and "No Signed Wrap", respectively. If the `nuw` and/or
326326 `nsw` flags are present, and an unsigned/signed overflow occurs
327327 (respectively), the result is poison.
@@ -367,7 +367,7 @@ def Arith_MulIOp : Arith_IntBinaryOpWithOverflowFlags<"muli",
367367 these is required to be the same type. This type may be an integer scalar type,
368368 a vector whose element type is integer, or a tensor of integers.
369369
370- This op supports `nuw`/`nsw` overflow flags which stands for
370+ This op supports `nuw`/`nsw` overflow flags which stands stand for
371371 "No Unsigned Wrap" and "No Signed Wrap", respectively. If the `nuw` and/or
372372 `nsw` flags are present, and an unsigned/signed overflow occurs
373373 (respectively), the result is poison.
@@ -800,7 +800,7 @@ def Arith_ShLIOp : Arith_IntBinaryOpWithOverflowFlags<"shli"> {
800800 operand is greater or equal than the bitwidth of the first operand, then the
801801 operation returns poison.
802802
803- This op supports `nuw`/`nsw` overflow flags which stands for
803+ This op supports `nuw`/`nsw` overflow flags which stands stand for
804804 "No Unsigned Wrap" and "No Signed Wrap", respectively. If the `nuw` and/or
805805 `nsw` flags are present, and an unsigned/signed overflow occurs
806806 (respectively), the result is poison.
@@ -1271,49 +1271,25 @@ def Arith_ScalingExtFOp
12711271// TruncIOp
12721272//===----------------------------------------------------------------------===//
12731273
1274- def Arith_TruncIOp : Arith_Op<"trunci",
1275- [Pure, SameOperandsAndResultShape, SameInputOutputTensorDims,
1276- DeclareOpInterfaceMethods<CastOpInterface>,
1277- DeclareOpInterfaceMethods<InferIntRangeInterface, ["inferResultRanges"]>,
1278- DeclareOpInterfaceMethods<ArithIntegerOverflowFlagsInterface>]> {
1274+ def Arith_TruncIOp : Arith_IToICastOp<"trunci"> {
12791275 let summary = "integer truncation operation";
12801276 let description = [{
12811277 The integer truncation operation takes an integer input of
12821278 width M and an integer destination type of width N. The destination
12831279 bit-width must be smaller than the input bit-width (N < M).
12841280 The top-most (N - M) bits of the input are discarded.
12851281
1286- This op supports `nuw`/`nsw` overflow flags which stands for "No Unsigned
1287- Wrap" and "No Signed Wrap", respectively. If the nuw keyword is present,
1288- and any of the truncated bits are non-zero, the result is a poison value.
1289- If the nsw keyword is present, and any of the truncated bits are not the
1290- same as the top bit of the truncation result, the result is a poison value.
1291-
12921282 Example:
12931283
12941284 ```mlir
1295- // Scalar truncation.
12961285 %1 = arith.constant 21 : i5 // %1 is 0b10101
12971286 %2 = arith.trunci %1 : i5 to i4 // %2 is 0b0101
12981287 %3 = arith.trunci %1 : i5 to i3 // %3 is 0b101
12991288
1300- // Vector truncation.
1301- %4 = arith.trunci %0 : vector<2 x i32> to vector<2 x i16>
1302-
1303- // Scalar truncation with overflow flags.
1304- %5 = arith.trunci %a overflow<nsw, nuw> : i32 to i16
1289+ %5 = arith.trunci %0 : vector<2 x i32> to vector<2 x i16>
13051290 ```
13061291 }];
13071292
1308- let arguments = (ins
1309- SignlessFixedWidthIntegerLike:$in,
1310- DefaultValuedAttr<Arith_IntegerOverflowAttr,
1311- "::mlir::arith::IntegerOverflowFlags::none">:$overflowFlags);
1312- let results = (outs SignlessFixedWidthIntegerLike:$out);
1313- let assemblyFormat = [{
1314- $in (`overflow` `` $overflowFlags^)? attr-dict
1315- `:` type($in) `to` type($out)
1316- }];
13171293 let hasFolder = 1;
13181294 let hasCanonicalizer = 1;
13191295 let hasVerifier = 1;
0 commit comments