diff options
Diffstat (limited to 'contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/JITTargetMachineBuilder.cpp')
| -rw-r--r-- | contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/JITTargetMachineBuilder.cpp | 54 | 
1 files changed, 54 insertions, 0 deletions
diff --git a/contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/JITTargetMachineBuilder.cpp b/contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/JITTargetMachineBuilder.cpp new file mode 100644 index 000000000000..df23547a9de3 --- /dev/null +++ b/contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/JITTargetMachineBuilder.cpp @@ -0,0 +1,54 @@ +//===----- JITTargetMachineBuilder.cpp - Build TargetMachines for JIT -----===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "llvm/ExecutionEngine/Orc/JITTargetMachineBuilder.h" + +#include "llvm/Support/TargetRegistry.h" + +namespace llvm { +namespace orc { + +JITTargetMachineBuilder::JITTargetMachineBuilder(Triple TT) +    : TT(std::move(TT)) { +  Options.EmulatedTLS = true; +  Options.ExplicitEmulatedTLS = true; +} + +Expected<JITTargetMachineBuilder> JITTargetMachineBuilder::detectHost() { +  // FIXME: getProcessTriple is bogus. It returns the host LLVM was compiled on, +  //        rather than a valid triple for the current process. +  return JITTargetMachineBuilder(Triple(sys::getProcessTriple())); +} + +Expected<std::unique_ptr<TargetMachine>> +JITTargetMachineBuilder::createTargetMachine() { + +  std::string ErrMsg; +  auto *TheTarget = TargetRegistry::lookupTarget(TT.getTriple(), ErrMsg); +  if (!TheTarget) +    return make_error<StringError>(std::move(ErrMsg), inconvertibleErrorCode()); + +  auto *TM = +      TheTarget->createTargetMachine(TT.getTriple(), CPU, Features.getString(), +                                     Options, RM, CM, OptLevel, /*JIT*/ true); +  if (!TM) +    return make_error<StringError>("Could not allocate target machine", +                                   inconvertibleErrorCode()); + +  return std::unique_ptr<TargetMachine>(TM); +} + +JITTargetMachineBuilder &JITTargetMachineBuilder::addFeatures( +    const std::vector<std::string> &FeatureVec) { +  for (const auto &F : FeatureVec) +    Features.AddFeature(F); +  return *this; +} + +} // End namespace orc. +} // End namespace llvm.  | 
