# 'mathExt' Dialect
Extended Math dialect.
## Operations
### `mathExt.ilogb` (mathExt::IlogbOp)
_An exponent components of a floating-point number_
Syntax:
```mlir
operation ::= `mathExt.ilogb` $operand (`fastmath` `` $fastmath^)?
attr-dict `:` type($result)
```
ilogb(x) := floor(log2(abs(x)))
The `ilogb` operation takes one operand of floating point type (i.e.,
scalar, tensor or vector) and returns one result of the same type. It has no
standard attributes.
Traits: `AlwaysSpeculatableImplTrait`, `Elementwise`, `SameOperandsAndResultType`, `Scalarizable`, `Tensorizable`, `Vectorizable`
Interfaces: `ArithFastMathInterface`, `ConditionallySpeculatable`, `InferTypeOpInterface`, `NoMemoryEffect (MemoryEffectOpInterface)`, `VectorUnrollOpInterface`
Effects: `MemoryEffects::Effect{}`
#### Attributes
| Attribute | MLIR Type | Description |
fastmath | ::mlir::arith::FastMathFlagsAttr | Floating point fast math flags{{% markdown %}}Enum cases:
* none (`none`)
* reassoc (`reassoc`)
* nnan (`nnan`)
* ninf (`ninf`)
* nsz (`nsz`)
* arcp (`arcp`)
* contract (`contract`)
* afn (`afn`)
* fast (`fast`){{% /markdown %}} |
#### Operands
| Operand | Description |
| :-----: | ----------- |
| `operand` | floating-point-like
#### Results
| Result | Description |
| :----: | ----------- |
| `result` | floating-point-like
### `mathExt.ldep` (mathExt::LdexpOp)
_A fractional components of a floating-point number_
Syntax:
```mlir
operation ::= `mathExt.ldep` $lhs `,` $rhs (`fastmath` `` $fastmath^)?
attr-dict `:` type($result)
```
ldep(x) = x * (ilogb(x) + 1)^(-1)
The `ldexp` operation takes two operands of floating point type (i.e.,
scalar, tensor or vector) and returns one result of the same type. Operands
must have the same type.
Traits: `AlwaysSpeculatableImplTrait`, `Elementwise`, `SameOperandsAndResultType`, `Scalarizable`, `Tensorizable`, `Vectorizable`
Interfaces: `ArithFastMathInterface`, `ConditionallySpeculatable`, `InferTypeOpInterface`, `NoMemoryEffect (MemoryEffectOpInterface)`, `VectorUnrollOpInterface`
Effects: `MemoryEffects::Effect{}`
#### Attributes
| Attribute | MLIR Type | Description |
fastmath | ::mlir::arith::FastMathFlagsAttr | Floating point fast math flags{{% markdown %}}Enum cases:
* none (`none`)
* reassoc (`reassoc`)
* nnan (`nnan`)
* ninf (`ninf`)
* nsz (`nsz`)
* arcp (`arcp`)
* contract (`contract`)
* afn (`afn`)
* fast (`fast`){{% /markdown %}} |
#### Operands
| Operand | Description |
| :-----: | ----------- |
| `lhs` | floating-point-like
| `rhs` | floating-point-like
#### Results
| Result | Description |
| :----: | ----------- |
| `result` | floating-point-like
## Enums
### CmpFPredicate
allowed 64-bit signless integer cases: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
#### Cases
| Symbol | Value | String |
| :----: | :---: | ------ |
| AlwaysFalse | `0` | false |
| OEQ | `1` | oeq |
| OGT | `2` | ogt |
| OGE | `3` | oge |
| OLT | `4` | olt |
| OLE | `5` | ole |
| ONE | `6` | one |
| ORD | `7` | ord |
| UEQ | `8` | ueq |
| UGT | `9` | ugt |
| UGE | `10` | uge |
| ULT | `11` | ult |
| ULE | `12` | ule |
| UNE | `13` | une |
| UNO | `14` | uno |
| AlwaysTrue | `15` | true |
### CmpIPredicate
allowed 64-bit signless integer cases: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
#### Cases
| Symbol | Value | String |
| :----: | :---: | ------ |
| eq | `0` | eq |
| ne | `1` | ne |
| slt | `2` | slt |
| sle | `3` | sle |
| sgt | `4` | sgt |
| sge | `5` | sge |
| ult | `6` | ult |
| ule | `7` | ule |
| ugt | `8` | ugt |
| uge | `9` | uge |
### IntegerOverflowFlags
Integer overflow arith flags
#### Cases
| Symbol | Value | String |
| :----: | :---: | ------ |
| none | `0` | none |
| nsw | `1` | nsw |
| nuw | `2` | nuw |
### RoundingMode
Floating point rounding mode
#### Cases
| Symbol | Value | String |
| :----: | :---: | ------ |
| to_nearest_even | `0` | to_nearest_even |
| downward | `1` | downward |
| upward | `2` | upward |
| toward_zero | `3` | toward_zero |
| to_nearest_away | `4` | to_nearest_away |
### AtomicRMWKind
allowed 64-bit signless integer cases: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
#### Cases
| Symbol | Value | String |
| :----: | :---: | ------ |
| addf | `0` | addf |
| addi | `1` | addi |
| assign | `2` | assign |
| maximumf | `3` | maximumf |
| maxs | `4` | maxs |
| maxu | `5` | maxu |
| minimumf | `6` | minimumf |
| mins | `7` | mins |
| minu | `8` | minu |
| mulf | `9` | mulf |
| muli | `10` | muli |
| ori | `11` | ori |
| andi | `12` | andi |
| maxnumf | `13` | maxnumf |
| minnumf | `14` | minnumf |
### FastMathFlags
Floating point fast math flags
#### Cases
| Symbol | Value | String |
| :----: | :---: | ------ |
| none | `0` | none |
| reassoc | `1` | reassoc |
| nnan | `2` | nnan |
| ninf | `4` | ninf |
| nsz | `8` | nsz |
| arcp | `16` | arcp |
| contract | `32` | contract |
| afn | `64` | afn |
| fast | `127` | fast |