13#ifndef CIRCT_DIALECT_COMB_COMBOPS_H
14#define CIRCT_DIALECT_COMB_COMBOPS_H
19#include "mlir/Bytecode/BytecodeOpInterface.h"
20#include "mlir/IR/BuiltinOps.h"
21#include "mlir/IR/OpImplementation.h"
22#include "mlir/Interfaces/FunctionInterfaces.h"
23#include "mlir/Interfaces/InferIntRangeInterface.h"
24#include "mlir/Interfaces/InferTypeOpInterface.h"
25#include "mlir/Interfaces/SideEffectInterfaces.h"
26#include "mlir/Transforms/DialectConversion.h"
37#include "circt/Dialect/Comb/Comb.h.inc"
51Value
createZExt(OpBuilder &builder, Location loc, Value value,
52 unsigned targetWidth);
58Value
createOrFoldSExt(Value value, Type destTy, ImplicitLocOpBuilder &builder);
62 bool twoState =
false);
64 bool twoState =
false);
67void extractBits(OpBuilder &builder, Value val, SmallVectorImpl<Value> &bits);
72 ArrayRef<Value> selectors, ArrayRef<Value> leafNodes,
73 Value outOfBoundsValue);
77 Value offset,
unsigned width);
82 Value offset, Value replacement,
83 bool twoState =
false);
86Value
createInject(OpBuilder &builder, Location loc, Value value,
87 unsigned offset, Value replacement);
90std::pair<Value, Value>
fullAdder(OpBuilder &builder, Location loc, Value a,
98 size_t width,
size_t targetAddends,
99 SmallVector<SmallVector<Value>> &addends);
std::pair< Value, Value > fullAdder(OpBuilder &builder, Location loc, Value a, Value b, Value c)
Construct a full adder for three 1-bit inputs.
void extractBits(OpBuilder &builder, Value val, SmallVectorImpl< Value > &bits)
Extract bits from a value.
Value createOrFoldNot(Location loc, Value value, OpBuilder &builder, bool twoState=false)
Create a `‘Not’' gate on a value.
Value createDynamicInject(OpBuilder &builder, Location loc, Value value, Value offset, Value replacement, bool twoState=false)
Replace a range of bits in an integer at a dynamic offset, and return the updated integer value.
Value createInject(OpBuilder &builder, Location loc, Value value, unsigned offset, Value replacement)
Replace a range of bits in an integer and return the updated integer value.
Value createDynamicExtract(OpBuilder &builder, Location loc, Value value, Value offset, unsigned width)
Extract a range of bits from an integer at a dynamic offset.
KnownBits computeKnownBits(Value value)
Compute "known bits" information about the specified value - the set of bits that are guaranteed to a...
Value createOrFoldSExt(Location loc, Value value, Type destTy, OpBuilder &builder)
Create a sign extension operation from a value of integer type to an equal or larger integer type.
SmallVector< Value > wallaceReduction(OpBuilder &builder, Location loc, size_t width, size_t targetAddends, SmallVector< SmallVector< Value > > &addends)
Perform Wallace tree reduction on partial products.
Value constructMuxTree(OpBuilder &builder, Location loc, ArrayRef< Value > selectors, ArrayRef< Value > leafNodes, Value outOfBoundsValue)
Construct a mux tree for given leaf nodes.
Value createZExt(OpBuilder &builder, Location loc, Value value, unsigned targetWidth)
Create the ops to zero-extend a value to an integer of equal or larger type.
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.