|
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