Skip to content
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

Dead code elimination transformation #850

Closed
4 tasks done
sim642 opened this issue Oct 10, 2022 · 0 comments · Fixed by #979
Closed
4 tasks done

Dead code elimination transformation #850

sim642 opened this issue Oct 10, 2022 · 0 comments · Fixed by #979
Assignees
Labels
debugging Abstract debugging feature student-job transform Code transformations
Milestone

Comments

@sim642
Copy link
Member

sim642 commented Oct 10, 2022

Since we know where dead code is and can output C programs via CIL, we could have a transformation that removes all the dead code from the program.

It wouldn't be super practical on real-world code as CIL also changes all the formatting, but it might be useful for debugging unsoundness on huge programs. For example, the program from #750 has both branches dead in a massive function where Graphviz gives up on the CFG:
image
If instead we could transform the program, it would be much easier to see, which parts of the program we consider live at all and thus where we go wrong.

Such elimination could apply to many things:

  • Remove dead statements
  • Remove dead functions altogether
  • Remove dead (i.e. unreferenced) globals
  • Remove dead (i.e. unused) types, like typedefs, struct declarations, etc.

The latter should be determined after the first two, such that dead functions wouldn't keep otherwise unused globals/types around. Cilled LDV programs in sv-benchmarks are notorious for containing large amounts of environment modeling code, which the particular benchmark doesn't actually use.

@just-max just-max self-assigned this Nov 16, 2022
@sim642 sim642 added the transform Code transformations label Aug 10, 2023
@sim642 sim642 added this to the v2.2.0 milestone Sep 11, 2023
sim642 added a commit to sim642/opam-repository that referenced this issue Sep 13, 2023
CHANGES:

* Add `setjmp`/`longjmp` analysis (goblint/analyzer#887, goblint/analyzer#970, goblint/analyzer#1015, goblint/analyzer#1019).
* Refactor race analysis to lazy distribution (goblint/analyzer#1084, goblint/analyzer#1089, goblint/analyzer#1136, goblint/analyzer#1016).
* Add thread-unsafe library function call analysis (goblint/analyzer#723, goblint/analyzer#1082).
* Add mutex type analysis and mutex API analysis (goblint/analyzer#800, goblint/analyzer#839, goblint/analyzer#1073).
* Add interval set domain and string literals domain (goblint/analyzer#901, goblint/analyzer#966, goblint/analyzer#994, goblint/analyzer#1048).
* Add affine equalities analysis (goblint/analyzer#592).
* Add use-after-free analysis (goblint/analyzer#1050, goblint/analyzer#1114).
* Add dead code elimination transformation (goblint/analyzer#850, goblint/analyzer#979).
* Add taint analysis for partial contexts (goblint/analyzer#553, goblint/analyzer#952).
* Add YAML witness validation via unassume (goblint/analyzer#796, goblint/analyzer#977, goblint/analyzer#1044, goblint/analyzer#1045, goblint/analyzer#1124).
* Add incremental analysis rename detection (goblint/analyzer#774, goblint/analyzer#777).
* Fix address sets unsoundness (goblint/analyzer#822, goblint/analyzer#967, goblint/analyzer#564, goblint/analyzer#1032, goblint/analyzer#998, goblint/analyzer#1031).
* Fix thread escape analysis unsoundness (goblint/analyzer#939, goblint/analyzer#984, goblint/analyzer#1074, goblint/analyzer#1078).
* Fix many incremental analysis issues (goblint/analyzer#627, goblint/analyzer#836, goblint/analyzer#835, goblint/analyzer#841, goblint/analyzer#932, goblint/analyzer#678, goblint/analyzer#942, goblint/analyzer#949, goblint/analyzer#950, goblint/analyzer#957, goblint/analyzer#955, goblint/analyzer#954, goblint/analyzer#960, goblint/analyzer#959, goblint/analyzer#1004, goblint/analyzer#558, goblint/analyzer#1010, goblint/analyzer#1091).
* Fix server mode for abstract debugging (goblint/analyzer#983, goblint/analyzer#990, goblint/analyzer#997, goblint/analyzer#1000, goblint/analyzer#1001, goblint/analyzer#1013, goblint/analyzer#1018, goblint/analyzer#1017, goblint/analyzer#1026, goblint/analyzer#1027).
* Add documentation for configuration JSON schema and OCaml API (goblint/analyzer#999, goblint/analyzer#1054, goblint/analyzer#1055, goblint/analyzer#1053).
* Add many library function specifications (goblint/analyzer#962, goblint/analyzer#996, goblint/analyzer#1028, goblint/analyzer#1079, goblint/analyzer#1121, goblint/analyzer#1135, goblint/analyzer#1138).
* Add OCaml 5.0 support (goblint/analyzer#1003, goblint/analyzer#945, goblint/analyzer#1162).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
debugging Abstract debugging feature student-job transform Code transformations
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants