CIRCT 20.0.0git
Loading...
Searching...
No Matches
HWToLLVM.h
Go to the documentation of this file.
1//===- HWToLLVM.h - HW to LLVM pass entry point -----------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This header file defines prototypes that expose the HWToLLVM pass
10// constructors.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef CIRCT_CONVERSION_HWTOLLVM_HWTOLLVM_H
15#define CIRCT_CONVERSION_HWTOLLVM_HWTOLLVM_H
16
18#include "circt/Support/LLVM.h"
19#include <memory>
20
21namespace mlir {
22class LLVMTypeConverter;
23namespace LLVM {
24class GlobalOp;
25} // namespace LLVM
26} // namespace mlir
27
28namespace circt {
29
30#define GEN_PASS_DECL_CONVERTHWTOLLVM
31#include "circt/Conversion/Passes.h.inc"
32
33class Namespace;
34
36 /// Convert an index into a HW ArrayType or StructType to LLVM Endianess.
37 static uint32_t convertToLLVMEndianess(Type type, uint32_t index);
38
39 /// Get the index of a specific StructType field in the LLVM lowering of the
40 /// StructType
41 static uint32_t llvmIndexOfStructField(hw::StructType type,
42 StringRef fieldName);
43};
44
45/// Get the HW to LLVM type conversions.
46void populateHWToLLVMTypeConversions(mlir::LLVMTypeConverter &converter);
47
48/// Get the HW to LLVM conversion patterns.
50 mlir::LLVMTypeConverter &converter, RewritePatternSet &patterns,
51 Namespace &globals,
52 DenseMap<std::pair<Type, ArrayAttr>, mlir::LLVM::GlobalOp>
53 &constAggregateGlobalsMap);
54
55/// Create an HW to LLVM conversion pass.
56std::unique_ptr<OperationPass<ModuleOp>> createConvertHWToLLVMPass();
57
58} // namespace circt
59
60#endif // CIRCT_CONVERSION_HWTOLLVM_HWTOLLVM_H
A namespace that is used to store existing names and generate new names in some scope within the IR.
Definition Namespace.h:30
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.
void populateHWToLLVMConversionPatterns(mlir::LLVMTypeConverter &converter, RewritePatternSet &patterns, Namespace &globals, DenseMap< std::pair< Type, ArrayAttr >, mlir::LLVM::GlobalOp > &constAggregateGlobalsMap)
Get the HW to LLVM conversion patterns.
std::unique_ptr< OperationPass< ModuleOp > > createConvertHWToLLVMPass()
Create an HW to LLVM conversion pass.
Definition HWToLLVM.cpp:691
void populateHWToLLVMTypeConversions(mlir::LLVMTypeConverter &converter)
Get the HW to LLVM type conversions.
static uint32_t convertToLLVMEndianess(Type type, uint32_t index)
Convert an index into a HW ArrayType or StructType to LLVM Endianess.
Definition HWToLLVM.cpp:37
static uint32_t llvmIndexOfStructField(hw::StructType type, StringRef fieldName)
Get the index of a specific StructType field in the LLVM lowering of the StructType.
Definition HWToLLVM.cpp:49