This patch introduces the propagation of known information based on path exploration.
For example,
int u(int c, int *p){ if(c) { return *p; } else { return *p + 1; } }
An argument p is dereferenced whatever c's value is.
For an instruction CtxI, we accumulate branch instructions in the must-be-executed-context of CtxI and then, we take the conjunction of the successors' known state.
My first impression is that we might want to shift the burden of collecting instructions to the user and just do the iterating here. The benefit is that we could use the return of Pred to indicate that we want to stop. I think we want to have a way to stop the search of the context if we don't expect to find better results anymore.