Show enters and exits. Hide enters and exits.
| 19:14:25 | evan | brixen: pretty sure i've got the XSS problem fixed. |
| 19:14:32 | evan | had to do a pretty major modification to onig though. |
| 19:15:51 | brixen | sweet |
| 19:17:00 | Defiler | There's probably no API to hook into with Terminal if I want to listen for certain events |
| 19:17:18 | evan | Defiler: ? |
| 19:17:24 | Defiler | I'd like to do something better with the shift-cmd-click event |
| 19:29:43 | boyscout | Teach onig to treat invalid utf-8 sequences are raw bytes - 765ee2f - Evan Phoenix |
| 19:38:09 | boyscout | CI: rubinius: 765ee2f successful: 3449 files, 13484 examples, 41048 expectations, 0 failures, 0 errors |
| 21:32:18 | dbussink | evan: how was the vacation? |
| 21:49:59 | slava | hi evan, brixen |
| 21:58:12 | evan | slava: hello. |
| 21:58:15 | evan | dbussink: oh, good. |
| 21:58:24 | evan | i was a little sick the whole time, which sucked. |
| 21:58:26 | evan | but it was fun. |
| 21:59:20 | dbussink | evan: ah, that's too bad then yeah |
| 21:59:28 | dbussink | evan: still feeling a bit ill now? |
| 21:59:40 | evan | a little, yeah. |
| 21:59:46 | evan | i had a low fever yesterday |
| 21:59:58 | evan | if it flares again, i'm going to go into the doctor |
| 22:00:07 | evan | since i'll probably need to get some antibiotics |
| 22:01:26 | slava | evan: are you going to add some float optimizations soon? floats are easier to make fast than fixnums |
| 22:01:32 | slava | because the result of a float op is always a float |
| 22:01:42 | evan | i've started to yeah |
| 22:01:50 | evan | probably when I upgrade to LLVM 2.7 i'll do that |
| 22:02:08 | evan | because i'll use it's new metadata stuff to do some type based alias analysis |
| 22:02:17 | evan | to remove float boxes |
| 22:02:30 | slava | cool |
| 22:02:38 | slava | do you think eventually you'll allow values to live across a GC? |
| 22:02:52 | evan | well, how do ya mean? |
| 22:03:16 | slava | when you have a GC check, and some values are in registers, what happens? |
| 22:04:11 | evan | i force LLVM to reload them out of the storage that the GC can see |
| 22:04:12 | evan | basically |
| 22:04:22 | slava | does LLVM know its the same value? |
| 22:04:29 | evan | no, thats part of the issue |
| 22:04:36 | evan | but with the metadata stuff |
| 22:04:50 | evan | i'm going to propagate the type info between SSA variables that hold the same value |
| 22:04:57 | evan | ie |
| 22:05:10 | evan | val = stack[0]; whatever(val); val2 = stack[0] |
| 22:05:28 | evan | well, it's more like |
| 22:05:33 | evan | val = stack[0]; whatever(stack, val); val2 = stack[0] |
| 22:06:01 | evan | i know that whatever can stack by moving objects, but it won't change the type |
| 22:06:08 | evan | can change the stack, rather. |
| 22:06:24 | slava | ok |
| 22:06:29 | evan | the data still has to be reloaded from val2 though |
| 22:06:34 | slava | is there a way of doing it without saving the value to the stack? |
| 22:06:35 | evan | in certain cases |
| 22:06:45 | evan | ie, if i've unboxed val into a double on the stack |
| 22:06:49 | evan | i don't need to unbox val2 |
| 22:06:59 | evan | since I know that val2 will have the same double |
| 22:07:17 | slava | in that case you don't have to pass it to the GC at all |
| 22:07:24 | slava | once its been unboxed you don't need to hold on to the boxed version anymore |
| 22:07:27 | evan | whats it? |
| 22:07:44 | evan | sure, thats another optimization |
| 22:07:58 | evan | if you can reason that the box isn't used at all |
| 22:08:07 | evan | hopefully you avoided creating the box in the first place |
| 22:08:11 | evan | much bigger win there. |
| 22:11:44 | slava | are you able to keep values in registers across method calls? |
| 22:12:49 | evan | no, how could you? |
| 22:13:01 | evan | unless I'm able to have something that can update the registers directly |
| 22:13:16 | slava | well, LLVM would spill the registers for you |
| 22:13:26 | evan | right, spill and reload them. |
| 22:13:28 | slava | this would be more efficient than shuffling everything to the operand stack |
| 22:13:38 | evan | this being what? |
| 22:13:55 | slava | letting LLVM save/restore registers instead of doing it yourself on the operand stack |
| 22:14:13 | evan | thats what i'm doing now. |
| 22:14:18 | slava | cool |
| 22:14:19 | evan | you're saying something else would be better |
| 22:14:23 | evan | aren't you? |
| 22:14:35 | slava | so you have GC metadata for LLVM? |
| 22:14:43 | evan | one thing at a time. |
| 22:14:51 | evan | i do use an explicit operand stack |
| 22:14:56 | evan | that values are read and written to |
| 22:15:08 | evan | LLVM can optimize access to it already, ie: |
| 22:15:26 | evan | stack[0] = val; val2 = stack[0]; |
| 22:15:34 | evan | it will replace val2 with val |
| 22:15:39 | slava | but not if there's a call in between |
| 22:15:42 | evan | across GC points though |
| 22:15:48 | evan | it will reload the values from the operand stack |
| 22:16:09 | evan | which is fine, because thats exactly the same as reload them as though they were spilled registers |
| 22:16:29 | evan | the operand stack is the equiv of an alloca() |
| 22:16:39 | slava | if a value passes through a GC check like this, can LLVM still do LICM and such? |
| 22:16:44 | evan | so LLVM can access it via the frame pointer |
| 22:17:13 | evan | slava: it must assume nothing about the pointers in the operand stack across a GC point |
| 22:17:16 | evan | nor should it. |
| 22:17:22 | evan | they could all be moved |
| 22:17:38 | evan | and LLVM's alias analysis is pointer based |
| 22:17:55 | evan | so it's just concerned with knowing if to SSA variables are for the same address in memory |
| 22:18:08 | evan | thats why I have to build type based alias analysis on top |
| 22:18:13 | slava | but normal spilling has the advantage that its done late |
| 22:18:16 | evan | which I can maintain across GC points |
| 22:18:16 | slava | so it doesn't ruin other optimizations |
| 22:18:34 | evan | in this case, it's the same. |
| 22:18:53 | slava | if a value is a tagged fixnum 1 before a GC point will it know its the same after? |
| 22:20:47 | evan | it can in some cases |
| 22:20:54 | evan | and actually, i could teach it that now |
| 22:21:13 | evan | or, rather, teach it better about that. |
| 22:21:31 | evan | i already improve on it's AA data by detecting and return strong alias info about tagged pointers |
| 22:21:38 | evan | which improves all optimizations |
| 22:25:31 | evan | ok, bbiab. |