When basic block is executed, Canal iterates over all the instruction in this basic block and executes the instructions on abstract domains. This may be slow since it requires to make a few functions calls (which are not inlined, since they are all in different object files) and all the data might be on different positions in memory, which makes slow cachewise.
It might be possible to make this faster via just-in-time code generation that would do this - have all the domains as local variables and execute functions directly on these local variables, and then just copy the result into Canal variable tree.
LLVM JIT compiler might a good solution for this problem.
When basic block is executed, Canal iterates over all the instruction in this basic block and executes the instructions on abstract domains. This may be slow since it requires to make a few functions calls (which are not inlined, since they are all in different object files) and all the data might be on different positions in memory, which makes slow cachewise. It might be possible to make this faster via just-in-time code generation that would do this - have all the domains as local variables and execute functions directly on these local variables, and then just copy the result into Canal variable tree.
LLVM JIT compiler might a good solution for this problem.