Expose `setupTargetTriple` as a public static method on ExecutionEngine
authorMehdi Amini <aminim@google.com>
Tue, 9 Apr 2019 07:19:40 +0000 (00:19 -0700)
committerMehdi Amini <joker.eph@gmail.com>
Thu, 11 Apr 2019 17:51:24 +0000 (10:51 -0700)
    This allows client to be able to reuse the same logic to setup a module
    for the ExecutionEngine without instanciating one. One use case is running
    the optimization pipeline but not JIT-ing.

--

PiperOrigin-RevId: 242614380

mlir/examples/toy/Ch5/toyc.cpp
mlir/include/mlir/ExecutionEngine/ExecutionEngine.h
mlir/lib/ExecutionEngine/ExecutionEngine.cpp

index b140b36..6c50191 100644 (file)
@@ -238,6 +238,7 @@ int dumpLLVMIR() {
   // Initialize LLVM targets.
   llvm::InitializeNativeTarget();
   llvm::InitializeNativeTargetAsmPrinter();
+  mlir::ExecutionEngine::setupTargetTriple(llvmModule.get());
   auto optPipeline = mlir::makeOptimizingTransformer(
       /* optLevel=*/EnableOpt ? 3 : 0, /* sizeLevel=*/0);
   if (auto err = optPipeline(llvmModule.get())) {
index d8fde85..102f22e 100644 (file)
@@ -87,6 +87,10 @@ public:
   /// the templated `invoke`.
   llvm::Error invoke(StringRef name, MutableArrayRef<void *> args);
 
+  /// Set the target triple on the module. This is implicitly done when creating
+  /// the engine.
+  static bool setupTargetTriple(llvm::Module *llvmModule);
+
 private:
   // Ordering of llvmContext and jit is important for destruction purposes: the
   // jit must be destroyed before the context.
index e9f9984..0b7f3b6 100644 (file)
@@ -187,7 +187,7 @@ static void getDefaultPasses(
 }
 
 // Setup LLVM target triple from the current machine.
-static bool setupTargetTriple(llvm::Module *llvmModule) {
+bool ExecutionEngine::setupTargetTriple(llvm::Module *llvmModule) {
   // Setup the machine properties from the current architecture.
   auto targetTriple = llvm::sys::getDefaultTargetTriple();
   std::string errorMessage;