[llvm] r277257 - [Orc] Add support for updating stub targets to CompileOnDemandLayer.

David Blaikie via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 1 09:28:38 PDT 2016


On Fri, Jul 29, 2016 at 6:05 PM Lang Hames via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: lhames
> Date: Fri Jul 29 19:57:54 2016
> New Revision: 277257
>
> URL: http://llvm.org/viewvc/llvm-project?rev=277257&view=rev
> Log:
> [Orc] Add support for updating stub targets to CompileOnDemandLayer.
>
> This makes it possible to implement re-optimization on top of the
> CompileOnDemandLayer.
>
> Test case to come in a future patch: This will need an execution test, and
> execution tests require a full working stack. The best option is to plumb
> this
> API up to the C Bindings stack and add a C bindings test for this.
>

Why is the C binding the best path to testing this? That seems
strange/surprising to me. (would expect it'd be testable via the C++ API in
a more narrow way sooner/without as much other infrastructure)


>
> Patch by Sean Ogden. Thanks Sean!
>
>
> Modified:
>     llvm/trunk/include/llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h
>     llvm/trunk/include/llvm/ExecutionEngine/Orc/LogicalDylib.h
>
> Modified:
> llvm/trunk/include/llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h?rev=277257&r1=277256&r2=277257&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h
> (original)
> +++ llvm/trunk/include/llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h Fri
> Jul 29 19:57:54 2016
> @@ -236,6 +236,32 @@ public:
>      return H->findSymbol(Name, ExportedSymbolsOnly);
>    }
>
> +  /// @brief Update the stub for the given function to point at
> FnBodyAddr.
> +  /// This can be used to support re-optimization.
> +  /// @return true if the function exists and the stub is updated, false
> +  ///         otherwise.
> +  //
> +  // FIXME: We should track and free associated resources (unused compile
> +  //        callbacks, uncompiled IR, and no-longer-needed/reachable
> function
> +  //        implementations).
> +  // FIXME: Return Error once the JIT APIs are Errorized.
> +  bool updatePointer(std::string FuncName, TargetAddress FnBodyAddr) {
> +    //Find out which logical dylib contains our symbol
> +    auto LDI = LogicalDylibs.begin();
> +    for (auto LDE = LogicalDylibs.end(); LDI != LDE; ++LDI) {
> +      if (auto LMResources =
> LDI->getLogicalModuleResourcesForSymbol(FuncName, false)) {
> +        Module &SrcM = LMResources->SourceModule->getResource();
> +        std::string CalledFnName = mangle(FuncName, SrcM.getDataLayout());
> +        if (auto EC = LMResources->StubsMgr->updatePointer(CalledFnName,
> FnBodyAddr)) {
> +          return false;
> +        }
> +        else
> +          return true;
> +      }
> +    }
> +    return false;
> +  }
> +
>  private:
>
>    template <typename ModulePtrT>
>
> Modified: llvm/trunk/include/llvm/ExecutionEngine/Orc/LogicalDylib.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/Orc/LogicalDylib.h?rev=277257&r1=277256&r2=277257&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/ExecutionEngine/Orc/LogicalDylib.h (original)
> +++ llvm/trunk/include/llvm/ExecutionEngine/Orc/LogicalDylib.h Fri Jul 29
> 19:57:54 2016
> @@ -123,6 +123,16 @@ public:
>
>    LogicalDylibResources& getDylibResources() { return DylibResources; }
>
> +  LogicalModuleResources*
> +  getLogicalModuleResourcesForSymbol(const std::string &Name,
> +                                     bool ExportedSymbolsOnly) {
> +    for (auto LMI = LogicalModules.begin(), LME = LogicalModules.end();
> +         LMI != LME; ++LMI)
> +      if (auto Sym = LMI->Resources.findSymbol(Name, ExportedSymbolsOnly))
> +        return &LMI->Resources;
> +    return nullptr;
> +  }
> +
>  protected:
>    BaseLayerT BaseLayer;
>    LogicalModuleList LogicalModules;
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160801/480173aa/attachment.html>


More information about the llvm-commits mailing list