Skip to content
  1. Mar 15, 2010
  2. Feb 08, 2010
  3. Jan 05, 2010
  4. Dec 15, 2009
  5. Nov 24, 2009
    • Jeffrey Yasskin's avatar
      * Move stub allocation inside the JITEmitter, instead of exposing a · f2ad5714
      Jeffrey Yasskin authored
      way for each TargetJITInfo subclass to allocate its own stubs. This
      means stubs aren't as exactly-sized anymore, but it lets us get rid of
      TargetJITInfo::emitFunctionStubAtAddr(), which lets ARM and PPC
      support the eager JIT, fixing http://llvm.org/PR4816.
      
      * Rename the JITEmitter's stub creation functions to describe the kind
      of stub they create. So far, all of them create lazy-compilation
      stubs, but they sometimes get used when far-call stubs are needed.
      Fixing http://llvm.org/PR5201 will involve fixing this.
      
      llvm-svn: 89715
      f2ad5714
  6. Nov 23, 2009
  7. Nov 16, 2009
    • Jeffrey Yasskin's avatar
      Make X86-64 in the Large model always emit 64-bit calls. · 10d3604a
      Jeffrey Yasskin authored
      The large code model is documented at
      http://www.x86-64.org/documentation/abi.pdf and says that calls should
      assume their target doesn't live within the 32-bit pc-relative offset
      that fits in the call instruction.
      
      To do this, we turn off the global-address->target-global-address
      conversion in X86TargetLowering::LowerCall(). The first attempt at
      this broke the lazy JIT because it can separate the movabs(imm->reg)
      from the actual call instruction. The lazy JIT receives the address of
      the movabs as a relocation and needs to record the return address from
      the call; and then when that call happens, it needs to patch the
      movabs with the newly-compiled target. We could thread the call
      instruction into the relocation and record the movabs<->call mapping
      explicitly, but that seems to require at least as much new
      complication in the code generator as this change.
      
      To fix this, we make lazy functions _always_ go through a call
      stub. You'd think we'd only have to force lazy calls through a stub on
      difficult platforms, but that turns out to break indirect calls
      through a function pointer. The right fix for that is to distinguish
      between calls and address-of operations on uncompiled functions, but
      that's complex enough to leave for someone else to do.
      
      Another attempt at this defined a new CALL64i pseudo-instruction,
      which expanded to a 2-instruction sequence in the assembly output and
      was special-cased in the X86CodeEmitter's emitInstruction()
      function. That broke indirect calls in the same way as above.
      
      This patch also removes a hack forcing Darwin to the small code model.
      Without far-call-stubs, the small code model requires things of the
      JITMemoryManager that the DefaultJITMemoryManager can't provide.
      
      Thanks to echristo for lots of testing!
      
      llvm-svn: 88984
      10d3604a
  8. Sep 15, 2009
  9. Sep 06, 2009
  10. Sep 03, 2009
  11. Aug 28, 2009
  12. Aug 24, 2009
  13. Aug 20, 2009
  14. Aug 05, 2009
  15. Aug 03, 2009
  16. Jul 14, 2009
  17. Jul 12, 2009
  18. Jul 11, 2009
    • Torok Edwin's avatar
      assert(0) -> LLVM_UNREACHABLE. · 56d06597
      Torok Edwin authored
      Make llvm_unreachable take an optional string, thus moving the cerr<< out of
      line.
      LLVM_UNREACHABLE is now a simple wrapper that makes the message go away for
      NDEBUG builds.
      
      llvm-svn: 75379
      56d06597
  19. Jul 08, 2009
  20. May 30, 2009
  21. Feb 18, 2009
    • Nate Begeman's avatar
      Add support to the JIT for true non-lazy operation. When a call to a function · 18d85e74
      Nate Begeman authored
      that has not been JIT'd yet, the callee is put on a list of pending functions
      to JIT.  The call is directed through a stub, which is updated with the address
      of the function after it has been JIT'd.  A new interface for allocating and
      updating empty stubs is provided.
      
      Add support for removing the ModuleProvider the JIT was created with, which
      would otherwise invalidate the JIT's PassManager, which is initialized with the
      ModuleProvider's Module.
      
      Add support under a new ExecutionEngine flag for emitting the infomration 
      necessary to update Function and GlobalVariable stubs after JITing them, by
      recording the address of the stub and the name of the GlobalValue.  This allows
      code to be copied from one address space to another, where libraries may live
      at different virtual addresses, and have the stubs updated with their new
      correct target addresses.
      
      llvm-svn: 64906
      18d85e74
  22. Feb 06, 2009
  23. Dec 10, 2008
  24. Nov 10, 2008
  25. Nov 08, 2008
  26. Nov 05, 2008
  27. Oct 25, 2008
  28. Aug 13, 2008
  29. Jul 16, 2008
  30. Jun 24, 2008
  31. Jun 06, 2008
  32. Apr 17, 2008
  33. Apr 16, 2008
  34. Mar 23, 2008
  35. Feb 20, 2008
  36. Jan 08, 2008
Loading