- Dec 07, 2023
-
-
Carlos Galindo authored
-
Carlos Galindo authored
Also updated README with instructions for using other versions of Erlang.
-
- Dec 06, 2023
-
-
Carlos Galindo authored
Now last edge is only remembered as Control if the node is a Generator. Also moved store lastEdgeType logic to interface.
-
Carlos Galindo authored
-
- Dec 05, 2023
-
-
Carlos Galindo authored
Main motivation: AdaptedStandardAlgorithm is not an equivalent context-insensitive version of StandardAlgorithm, because it groups nodes as if it were slicing the SDG. Secondary motivation: apply the same traversal rules (if applicable) to all slicing algorithms, instead of having different versions that haven't been updated since they stopped being used in benchmarks. - Introduced the OnePassStandardAlgorithm, field-insensitive version of OnePassConstrainedAlgorithm. - Document all available slicing algorithms and their quirks (javadoc on interface). - Unified traversal rules for the EDG on SlicingAlgorithm. Changes to specific algorithms: - StandardAlgorithm, AdaptedStandardAlgorithm: include last edge type in traversal. - ConstrainedAlgorithm, OnePassConstrainedAlgorithm: - Simplify NodeWork processing and EdgeWork constructor. - Upstream types of edges that can't be traversed during SummaryGeneration. - ConstrainedAlgorithm: copy changes of commit 523c3112. - Pseudo-predicate algorithms: unify conditional traversal on SlicingAlgorithm and simplify both algorithms. Other, minor changes: - Add EDG#clearConstraints, moved from OnePassConstrainedAlgorithm#slice (was commented out) - LAST#getResFromNode: add check for null NodeInfo. - Documentation
-
Carlos Galindo authored
- Bug 1: if a loop was detected, but it wasn't an increasing loop, no NodeWork was generated (step 4). In the case of balanced loops (and some decreasing loops), this may lead to incorrect results. - Bug 2: inclusion in traversedEdges was conditional on edge type, but it should be based on Constraint type, as that is what determines the PDA analysis' result. Now it doesn't include edges with ignored edge constraints. Previously, this behaviour excluded Summary edges with ListComprehensionConstraints (generated as external in SummaryEdgeGenerator#buildListsNthSummaries). - Other changes: 1. Shortened try-catch looking for StackOverflow 2. Extracted loop detection from for-loop, adding a check to avoid loop detection if newConstraintsList is empty. 3. Moved traversedEdges update logic to PDA, as it is closely linked to PDA#isIncreasingLoop. 4. Reformatted file (whitespace and indentation).
-
- Dec 04, 2023
-
-
Carlos Galindo authored
- Moved from Work#getTraversedLoop
-
Carlos Galindo authored
- Now Constraints is just a stack of EdgeConstraint.
-
Carlos Galindo authored
-
Carlos Galindo authored
-
Carlos Galindo authored
-
Carlos Galindo authored
-
Carlos Galindo authored
- Config.summaries must be false, to disallow generation of internal summary edges with grammars.
-
Carlos Galindo authored
- Previously, tabular slicing algorithms cached summary edges between runs (no longer necessary). - SummaryTable is no longer in use, because tabular slicing is implemented without it.
-
Carlos Galindo authored
-
Carlos Galindo authored
-
- Nov 30, 2023
-
-
Carlos Galindo authored
-
Carlos Galindo authored
-
Carlos Galindo authored
-
Carlos Galindo authored
-
Carlos Galindo authored
-
Carlos Galindo authored
Also fixes typo in db name.
-
Carlos Galindo authored
Also implemented in subsumed version.
-
Carlos Galindo authored
-
- Nov 29, 2023
-
-
Carlos Galindo authored
WorkNS didn't take into account lastEdgeType, causing incompleteness errors in slices.
-
Carlos Galindo authored
-
Carlos Galindo authored
-
- Nov 28, 2023
-
-
Carlos Galindo authored
- Extends JGraphT's DefaultEdge - Removed equals and hashCode (were equivalent to Object's)
-
Carlos Galindo authored
Partial benchmarks: only timing or only slices.
-
Carlos Galindo authored
-
Carlos Galindo authored
- ConstrainedTabularAlgorithm: - Unified State and MState, moving the last edge type to Work. - For efficiency, don't store the last edge type unless it is relevant. - Removed assertions. - ConstrainedSubsumedTabularAlgorithm: added map to speed-up lookup of subsumed work objects.
-
- Nov 23, 2023
-
-
Carlos Galindo authored
-
Carlos Galindo authored
-
Carlos Galindo authored
-
Carlos Galindo authored
-
Carlos Galindo authored
-
Carlos Galindo authored
- Tabular algorithm: only traverse intraprocedural edges by default. - Improved subsumption checks in tabular algorithm. - Corrected actual-out detection. - Added assertions to check for incorrect interprocedural edges. - Control-flow is incorrect in anonymous routines: it produces interprocedural control dependence. - Parametrized erlang server connection settings. - Added new comparisons for benchmarks. - New script to run benchmarks and analyze results with SQLite.
-
- Nov 20, 2023
-
-
Carlos Galindo authored
- Worklist approach implemented through a Config flag in SummaryTable. - Unconstrained and constrained variantes (TabularAlgorithm & ConstrainedTabularAlgorithm). The constrained version features a limit to the size of the stack. - Constrained subsumed variant for efficiency (ConstrainedSubsumedTabularAlgorithm). - Efficient EdgeList (linked-list) to store edges visited through a traversal. - Bump language level to 16. - eKnife cli: added switch to use tabular algorithms. - Moved benchmarks out of eKnife and BencherTest.
-
- Oct 25, 2023
-
-
Carlos Galindo authored
- ️️SummaryTable: actual-out node may none or multiple matching formal-out. - EDG, SummaryTable: get and clear methods for stats. - EKnife, BencherTest: adapted for benchmarks in which running the benchmark alters the graph itself.
-
- Oct 19, 2023
-
-
Carlos Galindo authored
- Move summary settings from EDGFactory to Config. - The EDG now contains a SummaryTable, a map which computes summaries on-the-fly. - ConstrainedAlgorithm: now looks up summary edges in SummaryTable. - Fixed typo in SummaryEdgeGenerator#generateOnlyExternal.
-