1. 28 Jun, 2016 1 commit
    • Marius Wachtler's avatar
      ICs: variable size IC slots · 258a2b0a
      Marius Wachtler authored
      before this change we had a fixed number of equal size slots inside an IC.
      Because of the large difference in rewrite sizes a fixed slot size is not ideal.
      We often ended up with too large slots which prevented us from emitting more slots.
      (or very large ICs in general which are bad for memory usage and the instruction cache)
      
      With this commit we will start with a single slot with the size of the whole IC and then decreasing its size to the actual bytes emitted
      and creating a new slot which starts directly at the end of the previous slot.
      We will repeat to to this until the space left is smaller than the number of bytes the last slot required.
      This makes it a little bit less likely that we will be successful in overwritting an existing slot
      but our benchmarks show that it is still a large win on all our benchmarks.
      
      Some notable changes are:
      - we pick the slot to rewrite much earlier now and prevent it from getting rewritten while we rewrite using num_inside = 1
        the reason is that we would otherwise not know how big the slot is
      - when we resize a slot we have to patch the failing guard jumps to the address of the next slot
      258a2b0a
  2. 26 Jun, 2016 2 commits
  3. 20 Jun, 2016 1 commit
  4. 17 Jun, 2016 10 commits
  5. 16 Jun, 2016 11 commits
    • Kevin Modzelewski's avatar
      Improve lineno handling · 8bc8f879
      Kevin Modzelewski authored
      We've been a bit lazy about adding line numbers to all ast nodes.
      This is an inconvenience when the tracebacks are bad/wrong, and it's
      also causing issues for testing code that wants to look at the line
      at which something failed.
      
      So I added line numbers to a whole bunch more nodes.  There are still
      quite a few that don't have line numbers, but many of them are harmless,
      so I tried to identify the ones that matter.  I also added some assertions
      to make sure that bad (non-positive) line numbers don't escape to the user.
      8bc8f879
    • Kevin Modzelewski's avatar
      Turn down verbosity · a3e41785
      Kevin Modzelewski authored
      a3e41785
    • Kevin Modzelewski's avatar
      Regression test: this test throws an irgen assertion · ae2b1c0c
      Kevin Modzelewski authored
      This issue is that type analysis is stronger than irgen.
      Specifically here, type analysis knows that the phi isn't required
      and propagates the type across BB's, but irgen conservatively promotes
      to UNKNOWN.
      ae2b1c0c
    • Kevin Modzelewski's avatar
      Support staticmethod.__func__ · 33ac174e
      Kevin Modzelewski authored
      33ac174e
    • Kevin Modzelewski's avatar
      d43ea30f
    • Kevin Modzelewski's avatar
      Merge pull request #1252 from kmod/telnetlib · 616dd7bf
      Kevin Modzelewski authored
      Fix some leaks related to signals
      616dd7bf
    • Kevin Modzelewski's avatar
      Add a simple test for these issues · 5466b67e
      Kevin Modzelewski authored
      5466b67e
    • Kevin Modzelewski's avatar
      llvm JIT: refcount safety for signals · 43351fb2
      Kevin Modzelewski authored
      The IR we generated looked something like this:
      
      1: i64 %a = doIC()
      2: checkPendingCalls()
      3: Box* %b = (Box*)%b
      
      The problem is that the refcounter only knew about %b, starting on
      line 3.  So for line 2, the refcounter didn't think it needed to decref
      %a if an exception was thrown.
      
      So the first thing this commit does is it adds check that when we refcount-track
      a value, if it is a cast, then the cast must be right next to the thing it is casting.
      This is stricter than we need but it should be easy enough to do and be sufficient.
      
      Another approach would have been to have the refcount checker be able to track the
      non-box-like values, ie track %a in the above example.  This would need some checking
      to make sure that people didn't forget to track that.  In the end I thought this would
      be simpler.
      
      The second thing is it adds a helper function createAfter that inserts the cast in
      the right location.  This could have worked by having createIC do the casting itself.
      But this was a little bit tricky since some callers want to know the Instruction of the
      call itself, and if createIC only returned the cast then those would get confused.  It
      could have returned both, but that seemed complicated.
      43351fb2
    • Kevin Modzelewski's avatar
      Interpreter: refcount safety for signals · 0460ca63
      Kevin Modzelewski authored
      We would leak refs if an exception was thrown via the pending-calls handler.
      0460ca63
    • Kevin Modzelewski's avatar
      Smart leak checker · cbed4274
      Kevin Modzelewski authored
      Previously we would print out all leaked objects at program exit.
      But this is problematic since it includes both directly leaked objects
      (the ones we are interested in), and indirectly leaked objects
      (which only got leaked by being referenced from another leaked object).
      
      This uses the cycle collector infrastructure to figure out what objects
      have non-heap, ie leaked, references remaining.  Hopefully this should
      help us debug cases where there are hundreds of objects remaining.
      cbed4274
    • Kevin Modzelewski's avatar
      Time the build part of the CI script · 03a8895c
      Kevin Modzelewski authored
      03a8895c
  6. 15 Jun, 2016 4 commits
  7. 13 Jun, 2016 5 commits
  8. 12 Jun, 2016 3 commits
  9. 11 Jun, 2016 3 commits