13#ifndef FORTRAN_TOOLS_CROSS_TOOL_HELPERS_H
14#define FORTRAN_TOOLS_CROSS_TOOL_HELPERS_H
16#include "flang/Frontend/CodeGenOptions.h"
18#include "flang/Support/LangOptions.h"
22#include "mlir/Dialect/OpenMP/OpenMPDialect.h"
23#include "mlir/Pass/PassRegistry.h"
24#include "llvm/ADT/SmallVector.h"
25#include "llvm/Frontend/Debug/Options.h"
26#include "llvm/Passes/OptimizationLevel.h"
31 void registerFIROptEarlyEPCallbacks(
32 const std::function<
void(mlir::PassManager &, llvm::OptimizationLevel)>
34 FIROptEarlyEPCallbacks.push_back(C);
37 void registerFIRInlinerCallback(
38 const std::function<
void(mlir::PassManager &, llvm::OptimizationLevel)>
40 FIRInlinerCallback.push_back(C);
43 void registerFIROptLastEPCallbacks(
44 const std::function<
void(mlir::PassManager &, llvm::OptimizationLevel)>
46 FIROptLastEPCallbacks.push_back(C);
49 void registerHLFIROptEarlyEPCallbacks(
50 const std::function<
void(mlir::PassManager &, llvm::OptimizationLevel)>
52 HLFIROptEarlyEPCallbacks.push_back(C);
55 void registerHLFIROptLastEPCallbacks(
56 const std::function<
void(mlir::PassManager &, llvm::OptimizationLevel)>
58 HLFIROptLastEPCallbacks.push_back(C);
61 void invokeFIROptEarlyEPCallbacks(
62 mlir::PassManager &pm, llvm::OptimizationLevel optLevel) {
63 for (
auto &C : FIROptEarlyEPCallbacks)
67 void invokeFIRInlinerCallback(
68 mlir::PassManager &pm, llvm::OptimizationLevel optLevel) {
69 for (
auto &C : FIRInlinerCallback)
73 void invokeFIROptLastEPCallbacks(
74 mlir::PassManager &pm, llvm::OptimizationLevel optLevel) {
75 for (
auto &C : FIROptLastEPCallbacks)
79 void invokeHLFIROptEarlyEPCallbacks(
80 mlir::PassManager &pm, llvm::OptimizationLevel optLevel)
const {
81 for (
auto &C : HLFIROptEarlyEPCallbacks)
85 void invokeHLFIROptLastEPCallbacks(
86 mlir::PassManager &pm, llvm::OptimizationLevel optLevel)
const {
87 for (
auto &C : HLFIROptLastEPCallbacks)
93 std::function<void(mlir::PassManager &, llvm::OptimizationLevel)>, 1>
94 FIROptEarlyEPCallbacks;
97 std::function<void(mlir::PassManager &, llvm::OptimizationLevel)>, 1>
101 std::function<void(mlir::PassManager &, llvm::OptimizationLevel)>, 1>
102 FIROptLastEPCallbacks;
105 std::function<void(mlir::PassManager &, llvm::OptimizationLevel)>, 1>
106 HLFIROptEarlyEPCallbacks;
109 std::function<void(mlir::PassManager &, llvm::OptimizationLevel)>, 1>
110 HLFIROptLastEPCallbacks;
115 explicit MLIRToLLVMPassPipelineConfig(llvm::OptimizationLevel level) {
118 explicit MLIRToLLVMPassPipelineConfig(llvm::OptimizationLevel level,
142 if (opts.InstrumentFunctions) {
158 llvm::codegenoptions::NoDebugInfo;
160 llvm::FramePointerKind::None;
189 Fortran::frontend::CodeGenOptions::ComplexRangeKind::
195 Fortran::common::FPMaxminBehavior::Legacy;
199[[maybe_unused]]
static mlir::omp::OffloadModuleOpts makeOffloadModuleOpts(
201 return mlir::omp::OffloadModuleOpts(Opts.OpenMPTargetDebug,
202 Opts.OpenMPTeamSubscription, Opts.OpenMPThreadSubscription,
203 Opts.OpenMPNoThreadState, Opts.OpenMPNoNestedParallelism,
204 Opts.OpenMPIsTargetDevice, Opts.OpenMPIsGPU, Opts.OpenMPForceUSM,
209[[maybe_unused]]
static void setOpenMPIntegerWrapAround(
210 mlir::ModuleOp module,
bool value) {
211 module.getOperation()->setAttr("omp.integer_wrap_around",
212 mlir::omp::IntegerWrapAroundAttr::get(module.getContext(), value));
Definition CrossToolHelpers.h:29
Definition LangOptions.h:70
std::vector< llvm::Triple > OMPTargetTriples
List of triples passed in using -fopenmp-targets.
Definition LangOptions.h:88
std::string OMPHostIRFile
signed integer overflow handling
Definition LangOptions.h:85
Definition MathOptionsBase.h:22
Definition CodeGenOptions.h:50
std::string PreferVectorWidth
The prefered vector width, if requested by -mprefer-vector-width.
Definition CodeGenOptions.h:57
std::string SplitDwarfFile
Definition CodeGenOptions.h:178
std::string Reciprocals
List of reciprocal estimate sub-options.
Definition CodeGenOptions.h:60
std::string SampleProfileFile
Name of the profile file to use with -fprofile-sample-use.
Definition CodeGenOptions.h:184
ComplexRangeKind
Controls the various implementations for complex division.
Definition CodeGenOptions.h:211
std::string DwarfDebugFlags
Definition CodeGenOptions.h:79
FPMaxminBehavior
Definition FPMaxminBehavior.h:29
llvm::codegenoptions::DebugInfoKind DebugInfo
Debug info generation.
Definition CrossToolHelpers.h:157
bool EnableSafeTrampoline
Use runtime trampoline pool (W^X).
Definition CrossToolHelpers.h:153
bool NoSignedZerosFPMath
Set no-signed-zeros-fp-math attribute for functions.
Definition CrossToolHelpers.h:166
std::string DwarfDebugFlags
Debug flags to append to DWARF producer.
Definition CrossToolHelpers.h:193
bool LoopVersioning
Run the version loop pass.
Definition CrossToolHelpers.h:155
unsigned VScaleMin
SVE vector range minimum.
Definition CrossToolHelpers.h:161
std::string Reciprocals
Definition CrossToolHelpers.h:169
llvm::FramePointerKind FramePointerKind
Add frame pointer to functions.
Definition CrossToolHelpers.h:159
bool NoNaNsFPMath
Set no-nans-fp-math attribute for functions.
Definition CrossToolHelpers.h:164
std::string SplitDwarfFile
File name for the split debug info.
Definition CrossToolHelpers.h:192
bool Underscoring
add underscores to function names.
Definition CrossToolHelpers.h:154
std::string PreferVectorWidth
Definition CrossToolHelpers.h:171
bool ApproxFuncFPMath
Set afn flag for instructions.
Definition CrossToolHelpers.h:165
unsigned VScaleMax
SVE vector range maximum.
Definition CrossToolHelpers.h:162
bool NoInfsFPMath
Set ninf flag for instructions.
Definition CrossToolHelpers.h:163
llvm::OptimizationLevel OptLevel
optimisation level
Definition CrossToolHelpers.h:151
bool EnableOpenMPSimd
Enable OpenMP simd-only mode.
Definition CrossToolHelpers.h:180
bool DebugInfoForProfiling
Enable extra debugging info.
Definition CrossToolHelpers.h:179
bool NSWOnLoopVarInc
Add nsw flag to loop variable increments.
Definition CrossToolHelpers.h:173
bool EnableOpenMPIsTargetDevice
Compiling for an OpenMP target device.
Definition CrossToolHelpers.h:176
bool AliasAnalysis
Add TBAA tags to generated LLVMIR.
Definition CrossToolHelpers.h:156
Fortran::frontend::CodeGenOptions::ComplexRangeKind ComplexRange
Method for calculating complex number division.
Definition CrossToolHelpers.h:188
bool SkipConvertComplexPow
Do not run complex pow conversion.
Definition CrossToolHelpers.h:181
bool UnsafeFPMath
Set all fast-math flags for instructions.
Definition CrossToolHelpers.h:168
std::string InstrumentFunctionEntry
Definition CrossToolHelpers.h:182
bool StackArrays
convert memory allocations to alloca.
Definition CrossToolHelpers.h:152
bool EnableOpenACC
Enable OpenACC lowering.
Definition CrossToolHelpers.h:174
bool UseSampleProfile
Enable sample based profiling.
Definition CrossToolHelpers.h:178
int32_t DwarfVersion
Version of DWARF debug info to generate.
Definition CrossToolHelpers.h:191
bool EnableOpenMP
Enable OpenMP lowering.
Definition CrossToolHelpers.h:175
std::string InstrumentFunctionExit
Definition CrossToolHelpers.h:185