History log of /seL4-l4v-10.1.1/graph-refine/loop_bounds.py
Revision Date Author Comments
# 858715f6 23-Jul-2018 Thomas Sewell <Thomas.Sewell@data61.csiro.au>

Integrate future induction.

The required checks and search process were added recently.
The ProofNode proof script type now has a SingleRevInduct
proof kind, which captures the reverse-induction at a single
loop point, and the search process emits the relevant proof
scripts.

This required a minor restructure of the searcher.


# 75cb26c5 20-Jul-2018 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Check reverse single induction, use in search.

The check module now knows how to check a proof of loop equalities
by induction. The loop_bounds module already had this, but now it
is more official. It can also check a predicate by *reverse*
induction. The idea here is to name some predicate, show that it
would be true if some iteration bound is reached (i.e. typically
a very large number), and then show by induction back down that the
predicate was also true in the initial iterations.

This is useful in a special case involving a loop of the form
for (i = 0; i < n; i ++) { } with no function calls. Suppose the
body contains an array index p[i], which implies the array fits in
memory, i * sizeof(*p) < 2 ^ 32. Since the final iteration
i = n - 1 must be reached, the compiler can deduce
that n <= 2 ^ 32 / sizeof(*p), a fact we will prove by reverse
induction.

The search module now contains code to detect cases like this and
discover the best bound we can impose by simple binary search.


# 87f29cdb 20-Jul-2018 Thomas Sewell <Thomas.Sewell@data61.csiro.au>

Tweaks, setup for next feature.


# 155931bf 30-May-2017 Thomas Sewell <Thomas.Sewell@data61.csiro.au>

Update for tweak to the way search works.


# 68737284 11-Apr-2017 Thomas Sewell <Thomas.Sewell@data61.csiro.au>

More loop_bounds inspection code.


# 423c9521 06-Apr-2017 Thomas Sewell <Thomas.Sewell@data61.csiro.au>

Bugfixes.


# 22d882f7 20-Feb-2017 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Use loop bound extra eqs in split search.

Try this strategy if an induct fails. It seems to get init_irqs to
prove, and it's really easy to implement and usually fast.


# 929697ff 04-Jan-2017 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Split inner instructions into pairs.

Create extra functions l_impl'isb, r_impl'isb etc instead of just impl'isb.
This means that rep_graph's function pair mechanism can figure out how to
orient the function pair, which avoids weird bugs.


# ae21d609 14-Nov-2016 Thomas Sewell <thomas.sewell@nicta.com.au>

Fix for metrics generation.


# cc226e32 10-Nov-2016 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Add quick query of loop body addrs.


# 4f5e2a88 09-Nov-2016 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Add facility for checking which loops are complex.


# aacb6bff 01-Nov-2016 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Improve loop_bounds induction; avoid nesteds.

New code for making sure loop_bounds avoids nested loops.

Also, a substantial upgrade to how quickly the inductive search package
discovers the true set of inductive invariants.


# ae31944f 01-Nov-2016 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Tweak detection of complex loops.


# aafda392 19-Oct-2016 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Get function limit bounds working.

Resolution:
- the previous hack for general splittable points was restored.
- the loop bound function limit code was rewritten to not require
this anyway.


# d6810c5a 18-Oct-2016 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Adjust approach to splittables.

Generate splittable information lazily and store in cached_analysis
of problem. Also check for complex loops at a slightly different
point.

Also replace an experimental better split point detector in logic
with another experimental one which also doesn't work perfectly yet.


# dda63cb1 23-Aug-2016 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Exclude instruction functions from loop_bounds.


# e8d25175 03-Jul-2016 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Improve metrics mechanisms.


# 0d8ec275 23-Jun-2016 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Note function limits in trace_refute also.

Function limits of zero are a decent way of forbidding access to part of the
system for experimental reasons.


# dc21c5b8 23-Jun-2016 Thomas Sewell <thomas.sewell@nicta.com.au>

Fix up loop bound metrics, useable.


# 3c295649 21-Jun-2016 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Bugfix.


# 3dd2c9ca 21-Jun-2016 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Finish work on loop timing estimates.

Or rather, problem metrics that may be correlated with loop timing.


# 4f670f1f 21-Jun-2016 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Loop timing estimates.


# e1e57c36 21-Jun-2016 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Retire some old code from loop_bounds.


# 46dfe435 20-Jun-2016 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Slightly more timing information, diagnostic.


# 4fad4764 19-Jun-2016 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Bugfix.


# 2ce309ae 15-Jun-2016 Thomas Sewell <Thomas.Sewell@nicta.com.au>

loop_bounds: more principle for preemptionPoint

We've been manually adding bounds for functions which call preemptionPoint, but
that means manually checking that we've found them all, and for larger numbers
of runs I'm starting to make mistakes. Add a mechanism to quickly check this.
Has to be configured to the name of the functions limited. Also allows pruning
functions considered unreachable in this run.


# 604af79c 14-Jun-2016 Thomas Sewell <Thomas.Sewell@nicta.com.au>

loop_bounds: Recurse more thoroughly for merge.

Merged bounds are computed by considering all possible call sites of a
function. We need to avoid doing this recursively, since the exponentially many
possible contexts would explode us. Previously this was done by avoiding the
context operations inside a merge, which prevents us looking up the stack for
functions with single call sites. This patch adds a little more finesse.


# e0a7fea3 10-Jun-2016 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Track timing in LoopBounds.txt


# a0f838f1 10-May-2016 Felix Kam <felix.kam@nicta.com.au>

added a flag to convert_loop_bounds.py and get_bound_super_ctxt to only
read cached result and not do any long running calculations (treat those
as failures)


# 6b2f1eba 07-Apr-2016 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Re-fix loop bound conversion.

The call to the new test_hyp_group was still wrong.


# 80bbfdd7 29-Mar-2016 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Adjust for API change in check_hyp_group.

Somewhere in the parallelisation change, the change of return type
of this function didn't get propagated.


# 9dfe0d02 08-Mar-2016 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Split load_target and load_target_args.


# 7e18d501 15-Oct-2015 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Add no-C-information mode, tweak solver models.


# f76d32f2 14-Oct-2015 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Robustness adjustments.


# d3cf19a6 12-Oct-2015 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Normalise loop ids in get_bound_super_ctxt.


# d3d29954 12-Oct-2015 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Bugfix.


# 745d16a4 12-Oct-2015 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Don't assume loop heads are canonical.

Instead switch to the canonical loop heads for internal caching.


# 7d7812c1 12-Oct-2015 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Cache aborts as None in get_bound_super_ctxt.


# a6628e96 08-Oct-2015 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Commentate loop bounds better on stdout.


# be8155ec 08-Oct-2015 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Bugfixes.


# ceeb63ab 08-Oct-2015 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Capture un-paired functions in some analyses.

Functions callable from functions tagged 'ASM' should be analysed
in ASM analysis phases also. Tongue twist that.


# a0ff9425 07-Oct-2015 Thomas Sewell <Thomas.Sewell@nicta.com.au>

More bugfixing and diagnostics for loop_bounds.


# abaff68e 07-Oct-2015 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Yet more of the above.


# 54869e9f 07-Oct-2015 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Pass explicit tags further to fix more bugs.


# b881dd6c 06-Oct-2015 Thomas Sewell <Thomas.Sewell@nicta.com.au>

More caching & bugfixes.


# 4225e91c 04-Oct-2015 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Loop bounds passing for now on seL4.

(It's not actually finding all that many bounds, so we're not done
yet.)


# b9cfe8ec 01-Oct-2015 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Trivia.


# a416eb7f 01-Oct-2015 Thomas Sewell <Thomas.Sewell@nicta.com.au>

More loop search bugfixes.


# 11039ac4 01-Oct-2015 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Simplify search_bound, bugfixes.


# 28d0c74d 30-Sep-2015 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Fix bug in linear series hyp processing.


# 25b5a409 30-Sep-2015 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Further bugfixes for linked problems.


# e3d8d78f 29-Sep-2015 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Continue searching on Abort.


# 64fef777 29-Sep-2015 Thomas Sewell <Thomas.Sewell@nicta.com.au>

minor bugfix


# fe9400af 29-Sep-2015 Thomas Sewell <Thomas.Sewell@nicta.com.au>

Integrate loop_bounds.py from WCET project.

The new loop_bounds.py is a sibling to trace_refute. It discovers
bounds for binary loops in various ways.

This version takes a previous external version and stitches it into
the local infrastructure. It's still a bit of a mess.