16#include "mlir/IR/BuiltinAttributes.h"
21#include "llvm/Support/ErrorHandling.h"
22#include "llvm/Support/FileSystem.h"
28 case clang::TargetCXXABI::AppleARM64:
29 case clang::TargetCXXABI::Fuchsia:
30 case clang::TargetCXXABI::GenericAArch64:
31 case clang::TargetCXXABI::GenericARM:
32 case clang::TargetCXXABI::iOS:
33 case clang::TargetCXXABI::WatchOS:
34 case clang::TargetCXXABI::GenericMIPS:
35 case clang::TargetCXXABI::GenericItanium:
36 case clang::TargetCXXABI::WebAssembly:
37 case clang::TargetCXXABI::XL:
39 case clang::TargetCXXABI::Microsoft:
43 llvm_unreachable(
"invalid C++ ABI kind");
46static std::unique_ptr<TargetLoweringInfo>
50 switch (triple.getArch()) {
51 case llvm::Triple::amdgpu:
53 case llvm::Triple::nvptx:
54 case llvm::Triple::nvptx64:
56 case llvm::Triple::spir:
57 case llvm::Triple::spir64:
58 case llvm::Triple::spirv:
59 case llvm::Triple::spirv32:
60 case llvm::Triple::spirv64:
64 return std::make_unique<TargetLoweringInfo>();
70 mlir::ModuleOp &module,
71 std::unique_ptr<clang::TargetInfo> target)
72 : module(module), langOpts(
std::move(langOpts)), target(
std::move(target)),
76 if (!targetLoweringInfo)
78 return *targetLoweringInfo;
86 if (!module->hasAttr(cir::CIRDialect::getTripleAttrName()))
90 llvm::Triple triple(mlir::cast<mlir::StringAttr>(
91 module->getAttr(cir::CIRDialect::getTripleAttrName()))
94 targetOptions.
Triple = triple.str();
102 if (
auto loweringLangOpts =
103 mlir::dyn_cast_if_present<cir::LoweringLangOptionsAttr>(
105 cir::CIRDialect::getLoweringLangOptionsAttrName()))) {
106 langOpts.Exceptions = loweringLangOpts.getExceptions();
107 langOpts.ThreadsafeStatics = loweringLangOpts.getThreadsafeStatics();
108 langOpts.CUDA = loweringLangOpts.getCuda();
109 langOpts.CUDAIsDevice = loweringLangOpts.getCudaIsDevice();
110 langOpts.HIP = loweringLangOpts.getHip();
111 langOpts.GPURelocatableDeviceCode = loweringLangOpts.getGpuRdc();
112 langOpts.OpenMP = loweringLangOpts.getOpenmp();
113 langOpts.OpenMPIsTargetDevice = loweringLangOpts.getOpenmpIsTargetDevice();
115 loweringLangOpts.getClangAbiCompat()));
123 if (
auto optInfo = mlir::cast_if_present<cir::OptInfoAttr>(
124 module->getAttr(cir::CIRDialect::getOptInfoAttrName()))) {
125 codeGenOpts.OptimizationLevel = optInfo.getLevel();
126 codeGenOpts.OptimizeSize = optInfo.getSize();
129 return std::make_unique<LowerModule>(std::move(langOpts),
130 std::move(codeGenOpts), module,
131 std::move(targetInfo));
Defines the clang::LangOptions interface.
Defines the clang::TargetOptions class.
LowerModule(clang::LangOptions langOpts, clang::CodeGenOptions codeGenOpts, mlir::ModuleOp &module, std::unique_ptr< clang::TargetInfo > target)
clang::TargetCXXABI::Kind getCXXABIKind() const
const TargetLoweringInfo & getTargetLoweringInfo()
const clang::TargetInfo & getTarget() const
CodeGenOptions - Track various options which control how the code is optimized and passed to the back...
ClangABI
Clang versions with different platform ABI conformance.
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
const llvm::Triple & getTriple() const
Returns the target triple of the primary target.
Options for controlling the target.
std::string Triple
The name of the target triple to compile for.
Defines the clang::TargetInfo interface.
static std::unique_ptr< TargetLoweringInfo > createTargetLoweringInfo(LowerModule &lm)
std::unique_ptr< TargetLoweringInfo > createSPIRVTargetLoweringInfo()
std::unique_ptr< CIRCXXABI > createItaniumCXXABI(LowerModule &lm)
Creates an Itanium-family ABI.
static std::unique_ptr< CIRCXXABI > createCXXABI(LowerModule &lm)
std::unique_ptr< TargetLoweringInfo > createNVPTXTargetLoweringInfo()
std::unique_ptr< CIRCXXABI > createMicrosoftCXXABI(LowerModule &lm)
Creates a Microsoft-family ABI.
std::unique_ptr< LowerModule > createLowerModule(mlir::ModuleOp module)
std::unique_ptr< TargetLoweringInfo > createAMDGPUTargetLoweringInfo()
std::unique_ptr< clang::TargetInfo > AllocateTarget(const llvm::Triple &Triple, const clang::TargetOptions &Opts)
static bool lowerModuleCodeGenOpts()
static bool makeTripleAlwaysPresent()
static bool targetLoweringInfo()