On 13/12/18 00:00, Alexei Starovoitov wrote: > luckily found it in my email archives. next time could you send a link to > make sure we're talking about the same patch? Sorry, will do.
> back then there was no per-register chains and push_stack() > has to do only one live_children++. > With per-register it would need to walk all frames and all regs and > all stack slots. Thinking about it, since this is about control flow rather than data flow, maybe it makes sense to add in a separate parent pointer on the verifier state, and use that for this, rather than shoehorning it into the liveness machinery. > Old kill_thread() instead of: > + while (cur && !--cur->live_children) > + cur = cur->parent; > becomes such inner loop for all frames, all regs and all slots, right? If it's done with the per-reg parent pointers, then yes that's right and that does start to look a bit painful, agreed. > As far as state merging I see a pattern when a bunch of states are > overlapping in the register ranges, but not fully contained. > Essentially range_within() is too conservative. > The idea is to merge [1,5] with [3,10] if this is the only difference > between states. Merge, but don't declare it safe yet and proceed further. Yep, makes sense. -Ed