|
25 | 25 | #include "llvm/IR/Module.h" |
26 | 26 | #include "llvm/TargetParser/Host.h" |
27 | 27 |
|
| 28 | +#include "clang/Basic/Diagnostic.h" |
| 29 | +#include "clang/Basic/DiagnosticIDs.h" |
| 30 | +#include "clang/Basic/DiagnosticOptions.h" |
28 | 31 | #include "clang/Basic/TargetInfo.h" |
29 | 32 | #include "clang/CIR/Dialect/IR/CIRDialect.h" |
30 | 33 | #include "clang/CIR/Dialect/Passes.h" |
@@ -82,12 +85,19 @@ llvm::LogicalResult prepareCIRModuleDataLayout(mlir::ModuleOp mod, |
82 | 85 |
|
83 | 86 | // Data layout is fully determined by the target triple. Here we only pass the |
84 | 87 | // triple to get the data layout. |
| 88 | + llvm::IntrusiveRefCntPtr<clang::DiagnosticIDs> diagID( |
| 89 | + new clang::DiagnosticIDs); |
| 90 | + clang::DiagnosticOptions diagOpts; |
| 91 | + llvm::IntrusiveRefCntPtr<clang::DiagnosticsEngine> diagnostics = |
| 92 | + new clang::DiagnosticsEngine(diagID, diagOpts, |
| 93 | + new clang::IgnoringDiagConsumer()); |
85 | 94 | llvm::Triple triple(rawTriple); |
| 95 | + // TODO: Need to set various target options later to populate |
| 96 | + // 'TargetInfo' properly. |
86 | 97 | clang::TargetOptions targetOptions; |
87 | 98 | targetOptions.Triple = rawTriple; |
88 | | - // FIXME: AllocateTarget is a big deal. Better make it a global state. |
89 | | - std::unique_ptr<clang::TargetInfo> targetInfo = |
90 | | - clang::targets::AllocateTarget(llvm::Triple(rawTriple), targetOptions); |
| 99 | + llvm::IntrusiveRefCntPtr<clang::TargetInfo> targetInfo = |
| 100 | + clang::TargetInfo::CreateTargetInfo(*diagnostics, targetOptions); |
91 | 101 | if (!targetInfo) { |
92 | 102 | mod.emitError() << "error: invalid target triple '" << rawTriple << "'\n"; |
93 | 103 | return llvm::failure(); |
|
0 commit comments