Skip to content
  1. Dec 18, 2009
  2. Dec 17, 2009
  3. Dec 13, 2009
  4. Dec 12, 2009
  5. Dec 03, 2009
  6. Nov 24, 2009
  7. Nov 19, 2009
  8. Nov 17, 2009
  9. 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
  10. Nov 14, 2009
  11. Nov 13, 2009
  12. Nov 12, 2009
  13. Nov 11, 2009
  14. Nov 10, 2009
    • Jeffrey Yasskin's avatar
      Fix DenseMap iterator constness. · b40d3f76
      Jeffrey Yasskin authored
      This patch forbids implicit conversion of DenseMap::const_iterator to
      DenseMap::iterator which was possible because DenseMapIterator inherited
      (publicly) from DenseMapConstIterator. Conversion the other way around is now
      allowed as one may expect.
      
      The template DenseMapConstIterator is removed and the template parameter
      IsConst which specifies whether the iterator is constant is added to
      DenseMapIterator.
      
      Actually IsConst parameter is not necessary since the constness can be
      determined from KeyT but this is not relevant to the fix and can be addressed
      later.
      
      Patch by Victor Zverovich!
      
      llvm-svn: 86636
      b40d3f76
  15. Nov 09, 2009
  16. Oct 28, 2009
  17. Oct 27, 2009
  18. Oct 26, 2009
  19. Oct 24, 2009
    • Jeffrey Yasskin's avatar
      Fix http://llvm.org/PR4822: allow module deletion after a function has been · d0fc8f80
      Jeffrey Yasskin authored
      compiled.
      
      When functions are compiled, they accumulate references in the JITResolver's
      stub maps. This patch removes those references when the functions are
      destroyed.  It's illegal to destroy a Function when any thread may still try to
      call its machine code.
      
      This patch also updates r83987 to use ValueMap instead of explicit CallbackVHs
      and fixes a couple "do stuff inside assert()" bugs from r84522.
      
      llvm-svn: 84975
      d0fc8f80
  20. Oct 23, 2009
  21. Oct 22, 2009
  22. Oct 20, 2009
Loading