|
| class | AssignmentNode |
| | AST node for assignment statements. More...
|
| class | ASTNode |
| | Abstract Syntax Tree (AST) node base class. More...
|
| class | BinaryOpNode |
| | AST node for binary operations (arithmetic and relational). More...
|
| class | CallNode |
| | AST node for function calls. More...
|
| struct | ChainedBrightnessPattern |
| struct | ChainedInvertPattern |
| struct | ChainRotatePattern |
| class | CLIOptions |
| | Struct to hold command-line options for the compiler. More...
|
| struct | CombineNestedCrops |
| | Canonicalization pattern for the CropOp that combines nested crop operations into a single crop operation. only applicable when both crop operations have constant integer coordinates and dimensions. More...
|
| struct | CompileError |
| | Struct to hold compilation error information. More...
|
| class | Compiler |
| | Compiler class that orchestrates the compilation process. More...
|
| struct | CropToAffine |
| struct | ElementWiseBinaryOpToAffine |
| struct | ElementWiseUnaryOpToAffine |
| struct | FixedKernelFilterPattern |
| class | ForNode |
| | AST node for "for" statements. More...
|
| class | FunctionNode |
| | AST node for function definitions. More...
|
| struct | GenericTypeUpdatePattern |
| | A generic pattern that updates the types of operations based on a provided type converter. Used in KernelToMemref and OpsToFuncCalls passes to ensure that operations have the correct types after type conversion. More...
|
| struct | IdentityConvolutionPattern |
| class | IfNode |
| | AST node for if conditional statements. More...
|
| class | ImageAccessHelper |
| | Helper class to generate LLVM IR for accessing fields of the Image struct via an opaque pointer. Assumes the following C++ struct layout: struct Image { uint32_t _width; // Offset 0 uint32_t _height; // Offset 4 unsigned char *_data; // Offset 8 };. More...
|
| class | IRPassManager |
| | Wrapper around MLIR PassManager to manage and run passes. More...
|
| class | KernelData |
| class | KernelNode |
| | AST node for kernel definitions. More...
|
| struct | KernelToMemref |
| class | Lexer |
| | Lexical analyzer for the picceler programming language. More...
|
| struct | LoadImageToCall |
| class | Location |
| | Struct to hold location information. More...
|
| class | MLIRGen |
| | MLIR code generator that converts AST nodes to MLIR constructs. This offers the initial IR generation from the AST. More...
|
| class | ModuleNode |
| | AST node for the entire module. More...
|
| struct | NeighbourhoodOpsToAffine |
| class | NumberNode |
| | AST node for numeric literals. More...
|
| struct | ParameterizedFilterPattern |
| | Rewrites a filter op whose kernel depends on a single I64 parameter (sharpen's strength, box_blur/gaussian_blur's radius) into a convolution + kernel pair, using staticCalc when the parameter is a compile-time constant and dynamicBuilder otherwise. More...
|
| class | Parser |
| | The Parser class that converts tokens into an AST. More...
|
| struct | PassLogger |
| | Custom struct to log pass execution using spdlog. This struct implements the PassInstrumentation interface to hook into the pass execution lifecycle. More...
|
| struct | PiccelerAddProfilingPass |
| | A pass that wraps every Picceler compute/IO op with piccelerTraceBegin/piccelerTraceEnd runtime calls. Excludes StringConstOp (instrumentation itself creates these) and ShowImageOp/ ReadNumberOp/ReadStringOp (block on a window/stdin, not compute – one call would swallow every real op's time into invisibility on the timeline), PrintOp (times stdout buffering, not compute), and KernelConstOp (sub-microsecond next to any real op, just adds a row). More...
|
| struct | PiccelerFiltersToConvPass |
| | A pass that converts high-level image filter operations (like sharpen, blur, edge detect) into convolution operations with constant kernels. More...
|
| struct | PiccelerKernelToMemrefPass |
| struct | PiccelerOpsToFuncCallsPass |
| | A pass that converts image operations (like load, show, save) into function calls. More...
|
| struct | PiccelerToAffinePass |
| | A pass that converts Picceler operations to the Affine dialect. This is the crucial step where we lower from our high-level image processing operations to a more explicit representation that can be further lowered to LLVM IR. Each Picceler operation is matched and rewritten into one or more Affine loops that perform the equivalent computation. This pass also handles type conversions and ensures that necessary runtime functions (like piccelerCreateImage) are declared. More...
|
| struct | PiccelerToLLVMIRPass |
| | A pass that helps convert last pieces of Picceler IR to LLVM IR. More...
|
| struct | PrintToCalls |
| struct | ReadNumberToCall |
| struct | ReadStringToCall |
| struct | RemoveInvertPattern |
| class | ReturnNode |
| | AST node for "return" statements. More...
|
| struct | RotateToAffine |
| struct | SameOperandPattern |
| | Canonicalization pattern for the BlendOp that replaces blend(img, img, weight) with img if both input images are the same. More...
|
| struct | SaveImageToCall |
| | Pattern to lower SaveImageOp to a function call. More...
|
| struct | ShowImageToCall |
| | Pattern to lower ShowImageOp to a function call. More...
|
| struct | StringConstConverter |
| class | StringNode |
| | AST node for string literals. More...
|
| struct | Token |
| | Represents a token produced by the lexer. More...
|
| class | VariableNode |
| | AST node for variable references. More...
|
|
| template<typename T> |
| auto | getRawPointers (const std::vector< std::unique_ptr< T > > &vec) |
| std::ostream & | operator<< (std::ostream &os, const Token &token) |
| | Outputs a token to the given output stream.
|
| mlir::Value | createFloatConstant (mlir::OpBuilder &builder, mlir::Location loc, double value) |
| | Common utility function to create a constant float value in MLIR.
|
| mlir::Value | createIntConstant (mlir::OpBuilder &builder, mlir::Location loc, int64_t value) |
| | Common utility function to create a constant int value in MLIR.
|
| mlir::affine::AffineParallelOp | createAffineParallel (mlir::ConversionPatternRewriter &rewriter, mlir::Location loc, mlir::ValueRange upperBounds, mlir::TypeRange resultTypes={}, llvm::ArrayRef< mlir::arith::AtomicRMWKind > reductions={}) |
| | Builds an affine.parallel band with one induction variable per entry in upperBounds, lower bound 0 and step 1. Upper bounds may be dynamic SSA values, not just compile-time constants. Pass resultTypes/reductions to get a reduction band whose body must end with a matching affine.yield; left empty, the trivial affine.yield terminator is inserted automatically.
|
| BinaryOperatorType | getBinaryOpType (const std::string &opStr) |
| mlir::Value | coerceValueToInt64 (mlir::OpBuilder &builder, mlir::Location loc, mlir::Value value, llvm::StringRef opName, llvm::StringRef argName) |
| | Coerces a given MLIR value to a 64-bit integer if possible, with special handling for constants.
|
| Result< std::pair< mlir::Value, mlir::Value > > | getKernelNeighborhoodSize (mlir::OpBuilder &builder, mlir::Location loc, mlir::Value kernelOperand) |
| Result< KernelData > | calculateSharpenKernel (SharpenOp op, SharpenOpAdaptor adaptor) |
| Result< KernelData > | calculateBoxBlurKernel (BoxBlurOp op, BoxBlurOpAdaptor adaptor) |
| Result< KernelData > | calculateGaussianKernel (GaussianBlurOp op, GaussianBlurOpAdaptor adaptor) |
| Result< KernelData > | calculateEdgeDetectKernel (EdgeDetectOp op, EdgeDetectOpAdaptor adaptor) |
| Result< KernelData > | calculateEmbossKernel (EmbossOp op, EmbossOpAdaptor adaptor) |
| void | emitRuntimeRadiusBoundsCheck (mlir::ConversionPatternRewriter &rewriter, mlir::Location loc, mlir::Value radius) |
| Result< mlir::Value > | buildBoxBlurKernelDynamic (BoxBlurOp op, BoxBlurOpAdaptor adaptor, mlir::ConversionPatternRewriter &rewriter, mlir::Location loc) |
| Result< mlir::Value > | buildGaussianKernelDynamic (GaussianBlurOp op, GaussianBlurOpAdaptor adaptor, mlir::ConversionPatternRewriter &rewriter, mlir::Location loc) |
| Result< mlir::Value > | buildSharpenKernelDynamic (SharpenOp op, SharpenOpAdaptor adaptor, mlir::ConversionPatternRewriter &rewriter, mlir::Location loc) |
| mlir::func::FuncOp | ensureRuntimeFunc (mlir::ModuleOp module, mlir::StringRef name, llvm::ArrayRef< mlir::Type > inputs, llvm::ArrayRef< mlir::Type > results, mlir::PatternRewriter &rewriter, mlir::Location loc) |
| | Ensures that a runtime function is declared in the module. If the function does not exist, it is created.
|
| mlir::Value | buildImageMemref (mlir::PatternRewriter &rewriter, mlir::Location loc, mlir::Value dataPtr, mlir::Value heightI64, mlir::Value widthI64) |
| | Builds a memref<?x?x4xi8> LLVM descriptor directly from a raw data pointer and dynamic height/width (both i64-typed, matching LLVMTypeConverter's default index type), emitting a single UnrealizedConversionCastOp from the LLVM struct to the memref type. This cast is a structural identity (LLVMTypeConverter converts memref<?x?x4xi8> to exactly this struct type), so it folds away cleanly under ReconcileUnrealizedCastsPass, unlike a cast straight from !llvm.ptr to memref.
|
| mlir::FailureOr< mlir::Value > | hoistArithChainToFunctionTop (mlir::ConversionPatternRewriter &rewriter, mlir::func::FuncOp funcOp, mlir::Operation *insertBefore, mlir::Value value) |
| | Relocates value's defining chain to funcOp's top level, since MLIR requires an affine.parallel/affine.apply dim or symbol to be defined there. Only safe for a pure arith chain (a compile-time-constant kernel size); fails otherwise.
|
Each function corresponds to a specific pass that transforms the IR in a particular way.
|
| std::unique_ptr< mlir::Pass > | createPiccelerKernelToMemrefPass () |
| std::unique_ptr< mlir::Pass > | createPiccelerOpsToFuncCallsPass () |
| std::unique_ptr< mlir::Pass > | createPiccelerToAffinePass () |
| std::unique_ptr< mlir::Pass > | createPiccelerToLLVMIRPass () |
| std::unique_ptr< mlir::Pass > | createPiccelerFiltersToConvPass () |
| std::unique_ptr< mlir::Pass > | createPiccelerAddProfilingPass () |