Skip to content
  1. Apr 18, 2016
    • Mehdi Amini's avatar
      lli: avoid global variables, use a local unique_ptr instead · a7de820a
      Mehdi Amini authored
      There was issue with order of destruction in some cases.
      
      From: Mehdi Amini <mehdi.amini@apple.com>
      llvm-svn: 266652
      a7de820a
    • Nico Weber's avatar
      Revert 266581 (and follow-up 266588), it doesn't build on Windows. · ca94d0ec
      Nico Weber authored
      Three problems:
      1. <future> can't be easily used.  If you must use it, see
         include/Support/ThreadPool.h for how.
      2. constexpr problems, even after 266588.
      3. Move assignment operators can't be defaulted in MSVC2013.
      
      llvm-svn: 266615
      ca94d0ec
    • Lang Hames's avatar
      [ORC] Generalize the ORC RPC utils to support RPC function return values and · 236cea74
      Lang Hames authored
      asynchronous call/handle. Also updates the ORC remote JIT API to use the new
      scheme.
      
      The previous version of the RPC tools only supported void functions, and
      required the user to manually call a paired function to return results. This
      patch replaces the Procedure typedef (which only supported void functions) with
      the Function typedef which supports return values, e.g.:
      
        Function<FooId, int32_t(std::string)> Foo;
      
      The RPC primitives and channel operations are also expanded. RPC channels must
      support four new operations: startSendMessage, endSendMessage,
      startRecieveMessage and endRecieveMessage, to handle channel locking. In
      addition, serialization support for tuples to RPCChannels is added to enable
      multiple return values.
      
      The RPC primitives are expanded from callAppend, call, expect and handle, to:
      
      appendCallAsync - Make an asynchronous call to the given function.
      
      callAsync - The same as appendCallAsync, but calls send on the channel when
                  done.
      
      callSTHandling - Blocking call for single-threaded code. Wraps a call to
                       callAsync then waits on the result, using a user-supplied
                       handler to handle any callbacks from the remote.
      
      callST - The same as callSTHandling, except that it doesn't handle
               callbacks - it expects the result to be the first return.
      
      expect and handle - as before.
      
      handleResponse - Handle a response from the remote.
      
      waitForResult - Wait for the response with the given sequence number to arrive.
      
      llvm-svn: 266581
      236cea74
  2. Apr 15, 2016
  3. Apr 14, 2016
  4. Apr 07, 2016
    • Kevin Enderby's avatar
      Thread Expected<...> up from createMachOObjectFile() to allow llvm-objdump to... · 3fcdf6ae
      Kevin Enderby authored
      Thread Expected<...> up from createMachOObjectFile() to allow llvm-objdump to produce a real error message
      
      Produce the first specific error message for a malformed Mach-O file describing
      the problem instead of the generic message for object_error::parse_failed of
      "Invalid data was encountered while parsing the file”.  Many more good error
      messages will follow after this first one.
      
      This is built on Lang Hames’ great work of adding the ’Error' class for
      structured error handling and threading Error through MachOObjectFile
      construction.  And making createMachOObjectFile return Expected<...> .
      
      So to to get the error to the llvm-obdump tool, I changed the stack of
      these methods to also return Expected<...> :
      
        object::ObjectFile::createObjectFile()
        object::SymbolicFile::createSymbolicFile()
        object::createBinary()
      
      Then finally in ParseInputMachO() in MachODump.cpp the error can
      be reported and the specific error message can be printed in llvm-objdump
      and can be seen in the existing test case for the existing malformed binary
      but with the updated error message.
      
      Converting these interfaces to Expected<> from ErrorOr<> does involve
      touching a number of places. To contain the changes for now use of
      errorToErrorCode() and errorOrToExpected() are used where the callers
      are yet to be converted.
      
      Also there some were bugs in the existing code that did not deal with the
      old ErrorOr<> return values.  So now with Expected<> since they must be
      checked and the error handled, I added a TODO and a comment:
      “// TODO: Actually report errors helpfully” and a call something like
      consumeError(ObjOrErr.takeError()) so the buggy code will not crash
      since needed to deal with the Error.
      
      Note there is one fix also needed to lld/COFF/InputFiles.cpp that goes along
      with this that I will commit right after this.  So expect lld not to built
      after this commit and before the next one.
      
      llvm-svn: 265606
      3fcdf6ae
  5. Jan 17, 2016
  6. Jan 15, 2016
  7. Jan 11, 2016
  8. Dec 18, 2015
    • Rafael Espindola's avatar
      Drop materializeAllPermanently. · c4a03483
      Rafael Espindola authored
      This inlines materializeAll into the only caller
      (materializeAllPermanently) and renames materializeAllPermanently to
      just materializeAll.
      
      llvm-svn: 256024
      c4a03483
  9. Jul 15, 2015
  10. Jun 09, 2015
  11. May 12, 2015
    • Eric Christopher's avatar
      Migrate existing backends that care about software floating point · 824f42f2
      Eric Christopher authored
      to use the information in the module rather than TargetOptions.
      
      We've had and clang has used the use-soft-float attribute for some
      time now so have the backends set a subtarget feature based on
      a particular function now that subtargets are created based on
      functions and function attributes.
      
      For the one middle end soft float check go ahead and create
      an overloadable TargetLowering::useSoftFloat function that
      just checks the TargetSubtargetInfo in all cases.
      
      Also remove the command line option that hard codes whether or
      not soft-float is set by using the attribute for all of the
      target specific test cases - for the generic just go ahead and
      add the attribute in the one case that showed up.
      
      llvm-svn: 237079
      824f42f2
  12. Apr 19, 2015
  13. Apr 11, 2015
  14. Mar 25, 2015
    • Lang Hames's avatar
      [Orc][lli] Add a very simple Orc-based lazy JIT to lli. · 9528bbaa
      Lang Hames authored
      This ensures that we're building and testing the CompileOnDemand layer, at least
      in a basic way.
      
      Currently x86-64 only, and with limited to no library calls enabled (depending
      on host platform). Patches welcome. ;)
      
      To enable access to the lazy JIT, this patch replaces the '-use-orcmcjit' lli
      option with a new option:
      '-jit-kind={ mcjit | orc-mcjit | orc-lazy }'.
      
      All regression tests are updated to use the new option, and one trivial test of
      the new lazy JIT is added.
      
      llvm-svn: 233182
      9528bbaa
  15. Mar 23, 2015
  16. Feb 26, 2015
  17. Jan 23, 2015
    • Lang Hames's avatar
      [Orc] New JIT APIs. · 93de2a12
      Lang Hames authored
      This patch adds a new set of JIT APIs to LLVM. The aim of these new APIs is to
      cleanly support a wider range of JIT use cases in LLVM, and encourage the
      development and contribution of re-usable infrastructure for LLVM JIT use-cases.
      
      These APIs are intended to live alongside the MCJIT APIs, and should not affect
      existing clients.
      
      Included in this patch:
      
      1) New headers in include/llvm/ExecutionEngine/Orc that provide a set of
         components for building JIT infrastructure.
         Implementation code for these headers lives in lib/ExecutionEngine/Orc.
      
      2) A prototype re-implementation of MCJIT (OrcMCJITReplacement) built out of the
         new components.
      
      3) Minor changes to RTDyldMemoryManager needed to support the new components.
         These changes should not impact existing clients.
      
      4) A new flag for lli, -use-orcmcjit, which will cause lli to use the
         OrcMCJITReplacement class as its underlying execution engine, rather than
         MCJIT itself.
      
      Tests to follow shortly.
      
      Special thanks to Michael Ilseman, Pete Cooper, David Blaikie, Eric Christopher,
      Justin Bogner, and Jim Grosbach for extensive feedback and discussion.
      
      llvm-svn: 226940
      93de2a12
  18. Jan 22, 2015
    • Chris Bieneman's avatar
      Assigning and copying command line option objects shouldn't be allowed. · e71fb5ce
      Chris Bieneman authored
      Summary:
      The default copy and assignment operators for these objects probably don't actually do what the clients intend, so they should be deleted.
      
      Places using the assignment operator to set the value of an option should cast to the option's data type first to call into the override for operator=. Places using the copy constructor just need to be changed to not copy (i.e. passing by const reference instead of value).
      
      Reviewers: dexonsmith, chandlerc
      
      Subscribers: llvm-commits
      
      Differential Revision: http://reviews.llvm.org/D7114
      
      llvm-svn: 226762
      e71fb5ce
  19. Dec 03, 2014
  20. Nov 29, 2014
  21. Sep 23, 2014
  22. Sep 03, 2014
  23. Aug 27, 2014
  24. Aug 26, 2014
  25. Aug 25, 2014
    • Rafael Espindola's avatar
      Modernize raw_fd_ostream's constructor a bit. · 3fd1e993
      Rafael Espindola authored
      Take a StringRef instead of a "const char *".
      Take a "std::error_code &" instead of a "std::string &" for error.
      
      A create static method would be even better, but this patch is already a bit too
      big.
      
      llvm-svn: 216393
      3fd1e993
  26. Aug 20, 2014
  27. Aug 19, 2014
    • Rafael Espindola's avatar
      Don't own the buffer in object::Binary. · 48af1c2a
      Rafael Espindola authored
      Owning the buffer is somewhat inflexible. Some Binaries have sub Binaries
      (like Archive) and we had to create dummy buffers just to handle that. It is
      also a bad fit for IRObjectFile where the Module wants to own the buffer too.
      
      Keeping this ownership would make supporting IR inside native objects
      particularly painful.
      
      This patch focuses in lib/Object. If something elsewhere used to own an Binary,
      now it also owns a MemoryBuffer.
      
      This patch introduces a few new types.
      
      * MemoryBufferRef. This is just a pair of StringRefs for the data and name.
        This is to MemoryBuffer as StringRef is to std::string.
      * OwningBinary. A combination of Binary and a MemoryBuffer. This is needed
        for convenience functions that take a filename and return both the
        buffer and the Binary using that buffer.
      
      The C api now uses OwningBinary to avoid any change in semantics. I will start
      a new thread to see if we want to change it and how.
      
      llvm-svn: 216002
      48af1c2a
    • Rafael Espindola's avatar
      2a8a2795
  28. Aug 13, 2014
  29. Aug 08, 2014
  30. Aug 07, 2014
    • Rafael Espindola's avatar
      Nuke the old JIT. · f8b27c41
      Rafael Espindola authored
      I am sure we will be finding bits and pieces of dead code for years to
      come, but this is a good start.
      
      Thanks to Lang Hames for making MCJIT a good replacement!
      
      llvm-svn: 215111
      f8b27c41
  31. Aug 01, 2014
  32. Jul 31, 2014
  33. Jul 06, 2014
Loading