-
Notifications
You must be signed in to change notification settings - Fork 0
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
Fleshing Ideas #30
Comments
An additional idea is to insert function calls to other functions with verified CFGs. |
Yes, that's a nice idea. Also, for barriers: we can avoid problems of uniformity by (a) having just one thread (maybe a bit boring but may as well try) and (b) having all threads follow the same path (either by having them use a single directions array, or by giving them teach their own directions array, or by giving them a single directions array but their own starting index into this array (which at runtime we make all the same)). |
Here are some additional ideas to explore if we wish to continue work on fleshing:
|
Here are a collection of ideas for fleshing that we should explore. Each issue can be expanded into a separate issue once it is more concrete and being worked on.
Generate paths in a more sophisticated way
Currently, when generating a random path, we make a uniformly random choice about which neighbour of a node to visit. This can make it less likely that we will generate interesting paths, particularly for CFGs that have lots of short paths to terminating blocks. Furthermore, the fleshing tool operates without memory, so we often generate the same path when the tool is run repeatedly. It would be good to avoid repeatedly generating the same path.
One option to try to increase the likelihood of generating interesting paths is to bias the random choice at each node based on some definition of interestingness. One thought I had was to use the height of a node in a DFS of the CFG to bias the random choice towards visiting nodes with larger heights. This way we will try to go deeper into the tree.
I also wonder how expensive it would be to exhaustively explore all paths in the CFG (up to some maximum number of cycles in the path)? How large/complex do the CFGs generated get?
Flesh out a particular path
Given a predetermined path, flesh out that path (perhaps checking it is a valid path first). This could be useful for reduction and debugging.
Configurable flesing
We will add features to the flesher (many ideas below), however to aid reduction and debugging, it would be good to ensure that each feature can be easily enabled/disabled.
Exploit knowledge of CFG
Memory
Use different types of memory to store the direction and output indices, as well as the actual buffers themselves.
SSA
Use SSA instructions for the index operations.
Multiple threads
The text was updated successfully, but these errors were encountered: