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:
40 llvm_unreachable(
"Windows ABI NYI");
43 llvm_unreachable(
"invalid C++ ABI kind");
46static std::unique_ptr<TargetLoweringInfo>
50 switch (triple.getArch()) {
51 case llvm::Triple::amdgcn:
53 case llvm::Triple::nvptx:
54 case llvm::Triple::nvptx64:
58 return std::make_unique<TargetLoweringInfo>();
64 mlir::ModuleOp &module,
65 std::unique_ptr<clang::TargetInfo> target)
66 : module(module), target(
std::move(target)), abi(
createCXXABI(*this)) {}
69 if (!targetLoweringInfo)
71 return *targetLoweringInfo;
79 if (!module->hasAttr(cir::CIRDialect::getTripleAttrName()))
83 llvm::Triple triple(mlir::cast<mlir::StringAttr>(
84 module->getAttr(cir::CIRDialect::getTripleAttrName()))
87 targetOptions.
Triple = triple.str();
101 if (
auto optInfo = mlir::cast_if_present<cir::OptInfoAttr>(
102 module->getAttr(cir::CIRDialect::getOptInfoAttrName()))) {
103 codeGenOpts.OptimizationLevel = optInfo.getLevel();
104 codeGenOpts.OptimizeSize = optInfo.getSize();
107 return std::make_unique<LowerModule>(std::move(langOpts),
108 std::move(codeGenOpts), module,
109 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...
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< 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< 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 lowerModuleLangOpts()
static bool lowerModuleCodeGenOpts()
static bool makeTripleAlwaysPresent()
static bool targetLoweringInfo()