MLIR  16.0.0git
LoweringOptions.h
Go to the documentation of this file.
1 //===- LoweringOptions.h - Common config for lowering to LLVM ---*- 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 // Provides a configuration shared by several conversions targeting the LLVM
10 // dialect.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef MLIR_CONVERSION_LLVMCOMMON_LOWERINGOPTIONS_H
15 #define MLIR_CONVERSION_LLVMCOMMON_LOWERINGOPTIONS_H
16 
17 #include "llvm/IR/DataLayout.h"
18 
19 namespace mlir {
20 
21 class DataLayout;
22 class MLIRContext;
23 
24 /// Value to pass as bitwidth for the index type when the converter is expected
25 /// to derive the bitwidth from the LLVM data layout.
26 static constexpr unsigned kDeriveIndexBitwidthFromDataLayout = 0;
27 
28 /// Options to control the LLVM lowering. The struct is used to share lowering
29 /// options between passes, patterns, and type converter.
31 public:
32  explicit LowerToLLVMOptions(MLIRContext *ctx);
33  LowerToLLVMOptions(MLIRContext *ctx, const DataLayout &dl);
34 
35  bool useBarePtrCallConv = false;
36 
37  enum class AllocLowering {
38  /// Use malloc for for heap allocations.
39  Malloc,
40 
41  /// Use aligned_alloc for heap allocations.
43 
44  /// Do not lower heap allocations. Users must provide their own patterns for
45  /// AllocOp and DeallocOp lowering.
46  None
47  };
48 
50 
51  bool useGenericFunctions = false;
52 
53  /// The data layout of the module to produce. This must be consistent with the
54  /// data layout used in the upper levels of the lowering pipeline.
55  // TODO: this should be replaced by MLIR data layout when one exists.
56  llvm::DataLayout dataLayout = llvm::DataLayout("");
57 
58  /// Set the index bitwidth to the given value.
59  void overrideIndexBitwidth(unsigned bitwidth) {
60  assert(bitwidth != kDeriveIndexBitwidthFromDataLayout &&
61  "can only override to a concrete bitwidth");
62  indexBitwidth = bitwidth;
63  }
64 
65  /// Get the index bitwidth.
66  unsigned getIndexBitwidth() const { return indexBitwidth; }
67 
68 private:
69  unsigned indexBitwidth;
70 };
71 
72 } // namespace mlir
73 
74 #endif // MLIR_CONVERSION_LLVMCOMMON_LOWERINGOPTIONS_H
Include the generated interface declarations.
Do not lower heap allocations.
llvm::DataLayout dataLayout
The data layout of the module to produce.
unsigned getIndexBitwidth() const
Get the index bitwidth.
Use malloc for for heap allocations.
Use aligned_alloc for heap allocations.
void overrideIndexBitwidth(unsigned bitwidth)
Set the index bitwidth to the given value.
static constexpr unsigned kDeriveIndexBitwidthFromDataLayout
Value to pass as bitwidth for the index type when the converter is expected to derive the bitwidth fr...
MLIRContext is the top-level object for a collection of MLIR operations.
Definition: MLIRContext.h:56
Options to control the LLVM lowering.
LowerToLLVMOptions(MLIRContext *ctx)
The main mechanism for performing data layout queries.