
Preliminary patch to change lowering/code generation to use llvm::DataLayout information instead of generating "sizeof" GEP (see https://github.com/llvm/llvm-project/issues/71507). Fortran Semantic analysis needs to know about the target type size and alignment to deal with common blocks, and intrinsics like C_SIZEOF/TRANSFER. This information should be obtained from the llvm::DataLayout so that it is consistent during the whole compilation flow. This change is changing flang-new and bbc drivers to: 1. Create the llvm::TargetMachine so that the data layout of the target can be obtained before semantics. 2. Sharing bbc/flang-new set-up of the SemanticConstext.targetCharateristics from the llvm::TargetMachine. For now, the actual part that set-up the Fortran type size and alignment from the llvm::DataLayout is left TODO so that this change is mostly an NFC impacting the drivers. 3. Let the lowering bridge set-up the mlir::Module datalayout attributes since it is doing it for the target attribute, and that allows the llvm data layout information to be available during lowering. For flang-new, the changes are code shuffling: the `llvm::TargetMachine` instance is moved to `CompilerInvocation` class so that it can be used to set-up the semantic contexts. `setMLIRDataLayout` is moved to `flang/Optimizer/Support/DataLayout.h` (it will need to be used from codegen pass for fir-opt target independent testing.)), and the code setting-up semantics targetCharacteristics is moved to `Tools/TargetSetup.h` so that it can be shared with bbc. As a consequence, LLVM targets must be registered when running semantics, and it is not possible to run semantics for a target that is not registered with the -triple option (hence the power pc specific modules can only be built if the PowerPC target is available.
36 lines
599 B
CMake
36 lines
599 B
CMake
set(LLVM_LINK_COMPONENTS
|
|
Passes
|
|
AllTargetsCodeGens
|
|
AllTargetsDescs
|
|
AllTargetsInfos
|
|
TargetParser
|
|
)
|
|
|
|
add_flang_tool(bbc bbc.cpp
|
|
DEPENDS
|
|
FIROptCodeGenPassIncGen
|
|
)
|
|
|
|
llvm_update_compile_flags(bbc)
|
|
get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
|
|
get_property(extension_libs GLOBAL PROPERTY MLIR_EXTENSION_LIBS)
|
|
|
|
target_link_libraries(bbc PRIVATE
|
|
FIRDialect
|
|
FIRDialectSupport
|
|
FIRSupport
|
|
FIRTransforms
|
|
FIRBuilder
|
|
HLFIRDialect
|
|
HLFIRTransforms
|
|
${dialect_libs}
|
|
${extension_libs}
|
|
MLIRAffineToStandard
|
|
MLIRSCFToControlFlow
|
|
FortranCommon
|
|
FortranParser
|
|
FortranEvaluate
|
|
FortranSemantics
|
|
FortranLower
|
|
)
|