-
Notifications
You must be signed in to change notification settings - Fork 152
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implement a union of N disjunctive abstract values #139
Comments
I would suggest you think twice about implementing this. This is basically what Frama-C/Value used to do for trace partitioning and loop unrolling, under the name Over the years, we ran into tons of problems caused by the partitioning strategy. It is utterly impossible to predict where the states will be consumed, even in simple looking function. The worst offender is
where Other problems include, in no particular order:
My former colleagues at CEA finally managed to implement other partitioning strategies (1) to unroll loops; (2) to propagate disjuncts according to a clear criterion. My understanding is that they are much happier with this approach. Of course, the dataflow iterator is quite a bit more complex, but this is definitely worth it. Feel free to ask questions here or in private if you're not convinced. I can also put you in contact with my former team, which has first-hand experience with the new engine. |
Thanks for your feedback @yakobowski! I was not aware of all these issues.
Interesting. Did you see this pattern a lot in real codes? LLVM has an optimization called loop invariant code motion that can move the
I know a few Frama-C users and they all use
Agreed!
I didn't really think about this. Did you get a big performance win after implementing this optimization?
I'm actually focusing on #137 first. The main idea is to propagate disjunctions for the different Is it something you have implemented in Frama-C? I saw the Thanks. |
We could implement an abstract domain containing a union of at most N disjunctive abstract values. This should be implemented as an option to the analyzer, so that the user can specify N.
This could be used to unroll loops and fix false positives, for instance #39 or #102. This is somewhat similar to #137.
There are still questions on how to implement the abstract operators such as join, meet, widening and narrowing.
The text was updated successfully, but these errors were encountered: