An error occurred fetching the project authors.
  1. 07 Jun, 2016 3 commits
  2. 21 May, 2016 1 commit
  3. 04 May, 2016 1 commit
    • Kevin Modzelewski's avatar
      Add some lifetime information to temporaries in the cfg · ca2ed310
      Kevin Modzelewski authored
      By adding a 'is_kill' flag to AST_Name nodes, which say that
      this is the last use of this name.  This handles some common cases
      of keeping temporaries alive for too long.
      
      For some rare cases, there is no AST_Name that is a last use:
      for example, the iterator object of a for loop is live after
      every time it is used, but dies when exiting the loop.
      
      For those, we insert a `del #foo` instead.
      
      The interpreter and bjit use these flags to remove temporaries
      from the vregs.
      
      The LLVM jit ignores them since it has its own way of handling
      lifetime.  It ignores any `del` statements on temporary names
      as an optimization.
      
      This does not handle decref'ing temporaries on an exception.
      ca2ed310
  4. 29 Apr, 2016 1 commit
    • Kevin Modzelewski's avatar
      Fix some dict behavior · 4a5d4a76
      Kevin Modzelewski authored
      Large dict literals would crash the bjit since it would try to allocate
      scratch space to store all of the keys+values on the stack.
      
      This is also, in a small way, detectable to the user, since we would evaluate
      all subexpressions before doing any dict operations (which could trigger
      __hash__ and __eq__ calls).  I started working on this, but it looks
      like it's not just an issue in the JIT tiers, but it's also encoded in
      the CFG phase as well.  Punting on that for now since it's not a refcounting issue.
      4a5d4a76
  5. 28 Apr, 2016 2 commits
    • Kevin Modzelewski's avatar
      Rewriter setattr checking · 4aaaa6f2
      Kevin Modzelewski authored
      A kind-of hacky way of identifying places that do unsafe (for refcounting)
      setattrs.  When calling RewriterVar::setattr() with an owned reference,
      you need to either promise to call refUsed() or refConsumed() afterwards.
      4aaaa6f2
    • Marius Wachtler's avatar
      generate a decref info table and fix the bjit · 61dc4620
      Marius Wachtler authored
      we need this map to know which object refcounter we have to decrement in case an exception gets throwen inside an IC or the bjit.
      in addition fix all bjit related problems
      61dc4620
  6. 04 Apr, 2016 1 commit
    • Kevin Modzelewski's avatar
      Format! · fcf746df
      Kevin Modzelewski authored
      Any existing work on top of the unformatted branch might have a hard time
      merging -- it should work ok to do a format on top of your changes and then
      merge with this commit.
      fcf746df
  7. 16 Mar, 2016 1 commit
  8. 11 Mar, 2016 2 commits
    • Marius Wachtler's avatar
      bjit: microptimization use r13 instead of r12 for the interpreter pointer · b77872ef
      Marius Wachtler authored
      saves a few bytes because r12 requires the SIB byte
      django_template bjit bytes emitted shrinks from 3016247 to 3006353
      b77872ef
    • Marius Wachtler's avatar
      bjit: don't directly do a OSR from the bjit · 82c676a1
      Marius Wachtler authored
      We can't directly do OSR from the bjit frame because it will cause issues with exception handling.
      Reason is that the bjit and the OSRed code share the same python frame and the way invokes are implemented in the
      bjit. During unwinding we will see the OSR frame and will remove it and continue to unwind but the try catch
      block inside ASTInterpreter::execJITedBlock will rethrow the exception which causes another frame deinit,
      which is wrong because it already got removed.
      Instead we return back to the interpreter loop with special value (osr_dummy_value) which will trigger the OSR from there.
      82c676a1
  9. 27 Feb, 2016 1 commit
  10. 25 Feb, 2016 1 commit
  11. 06 Feb, 2016 1 commit
  12. 03 Feb, 2016 3 commits
  13. 02 Feb, 2016 1 commit
  14. 31 Jan, 2016 1 commit
  15. 25 Jan, 2016 1 commit
  16. 04 Dec, 2015 1 commit
  17. 24 Nov, 2015 1 commit
  18. 21 Nov, 2015 1 commit
    • Kevin Modzelewski's avatar
      Starting to enable refcounting in the bjit · dab628d1
      Kevin Modzelewski authored
      Current issue is that this is triggering the "mark IC as something
      being inside", which trips up the bjit's "overwrite the last few
      bytes of the previous block, assuming that they are just a jump".
      dab628d1
  19. 20 Oct, 2015 1 commit
  20. 30 Aug, 2015 1 commit
  21. 27 Aug, 2015 1 commit
  22. 22 Aug, 2015 1 commit
    • Kevin Modzelewski's avatar
      Remove mallocs for our lambda passing · 841234f6
      Kevin Modzelewski authored
      This commit works by adding a SmallFunction class that behaves
      like std::function, but allocates its data inline rather than through
      a separate allocation.  It probably could have also worked by taking
      a custom allocator and using the new RegionAllocator.
      
      It adds a bit more restrictions than std::function does (the types
      caught by the closure have to be more "trivial" than std::function
      supports), so some of this change is marking some types as trivial,
      or copying data into a trivial format from things that aren't (ex SmallVector).
      841234f6
  23. 31 Jul, 2015 1 commit
  24. 27 Jul, 2015 3 commits
  25. 24 Jul, 2015 1 commit
  26. 22 Jul, 2015 1 commit
    • Marius Wachtler's avatar
      bjit: omit frame pointer + use R12 for ASTInterpreter* · 96027cdb
      Marius Wachtler authored
      This reduces the number of stack access, because previously when we accessed a field of the interpreter
      we always had to load it first from stack into a reg - and now we have a dedicated reg.
      This is currently only a very small perf change but when #736 lands this becomes more important.
      96027cdb
  27. 15 Jul, 2015 1 commit
  28. 13 Jul, 2015 1 commit
  29. 04 Jul, 2015 1 commit
    • Marius Wachtler's avatar
      baseline jit: patch block transitions to a direct jump. · f9021356
      Marius Wachtler authored
      Before we emitted a runtime check to check if the block has been JITed or if we have to fallback to the interpreter.
      Now we always generate a exit to the interpreter if the block is not yet JITed and patch the exit to a direct jump
      later when we have successfully generated code for the new block.
      This also removes the epilog and replaces it with a direct 'leave ret' combo which saves space and an additional jump.
      f9021356
  30. 02 Jul, 2015 1 commit
    • Marius Wachtler's avatar
      Add new JIT tier between the interpreter and the LLVM JIT tiers. · fc366564
      Marius Wachtler authored
      This JIT is tightly coupled to the ASTInterpreter, at every CFGBlock* entry/exit
      on can switch between interpreting and directly executing the generated code without having
      to do any translations.
      Generating the code is pretty fast compared to the LLVM tier but the generated code is not as fast
      as code generated by the higher LLVM tiers.
      But because the JITed can use runtime ICs, avoids a lot of interpretation overhead and
      stores CFGBlock locals sysbols inside register/stack slots, it's much faster than the interpreter.
      fc366564