diff options
author | Alex Richardson <alexrichardson@google.com> | 2022-11-24 11:23:38 +0000 |
---|---|---|
committer | Alex Richardson <alexrichardson@google.com> | 2023-10-04 13:45:16 -0700 |
commit | a8f8613dec435cfb78bf202c392f2acf150a5937 (patch) | |
tree | 1d13ac38a994a884d48389cf991f453e5e9b24e6 /llvm/lib/CodeGen/CommandFlags.cpp | |
parent | d32edcb86dfd18771fd05b66ad89a3377dc8c32b (diff) | |
download | llvm-a8f8613dec435cfb78bf202c392f2acf150a5937.zip llvm-a8f8613dec435cfb78bf202c392f2acf150a5937.tar.gz llvm-a8f8613dec435cfb78bf202c392f2acf150a5937.tar.bz2 |
Introduce and use codegen::createTargetMachineForTriple()
This creates a TargetMachine with the default options (from the command
line flags). This allows us to share a bit more code between tools.
Differential Revision: https://reviews.llvm.org/D141057
Diffstat (limited to 'llvm/lib/CodeGen/CommandFlags.cpp')
-rw-r--r-- | llvm/lib/CodeGen/CommandFlags.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/CommandFlags.cpp b/llvm/lib/CodeGen/CommandFlags.cpp index 1eba979..c6d7827 100644 --- a/llvm/lib/CodeGen/CommandFlags.cpp +++ b/llvm/lib/CodeGen/CommandFlags.cpp @@ -18,8 +18,10 @@ #include "llvm/IR/Intrinsics.h" #include "llvm/IR/Module.h" #include "llvm/MC/MCTargetOptionsCommandFlags.h" +#include "llvm/MC/TargetRegistry.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/MemoryBuffer.h" +#include "llvm/Target/TargetMachine.h" #include "llvm/TargetParser/Host.h" #include "llvm/TargetParser/SubtargetFeature.h" #include "llvm/TargetParser/Triple.h" @@ -732,3 +734,24 @@ void codegen::setFunctionAttributes(StringRef CPU, StringRef Features, for (Function &F : M) setFunctionAttributes(CPU, Features, F); } + +Expected<std::unique_ptr<TargetMachine>> +codegen::createTargetMachineForTriple(StringRef TargetTriple, + CodeGenOptLevel OptLevel) { + Triple TheTriple(TargetTriple); + std::string Error; + const auto *TheTarget = + TargetRegistry::lookupTarget(codegen::getMArch(), TheTriple, Error); + if (!TheTarget) + return createStringError(inconvertibleErrorCode(), Error); + auto *Target = TheTarget->createTargetMachine( + TheTriple.getTriple(), codegen::getCPUStr(), codegen::getFeaturesStr(), + codegen::InitTargetOptionsFromCodeGenFlags(TheTriple), + codegen::getExplicitRelocModel(), codegen::getExplicitCodeModel(), + OptLevel); + if (!Target) + return createStringError(inconvertibleErrorCode(), + Twine("could not allocate target machine for ") + + TargetTriple); + return std::unique_ptr<TargetMachine>(Target); +} |