In this directory we give results from our testing campaign for x86 and
Power and scripts for reproducing our paper's tables.

* Result structure

For each architecture we give the results of running Memalloy as described in
our paper's methodology section. The raw results are split by the number of
events and then into `Forbid' and `Allow' test-sets:

  ./<arch>/<N>ev              -- implicitly `Forbid'
  ./<arch>/<N>ev/allow        -- `Allow'

Within each test-set we have the following structure:

  - <N>ev_experiment.log
giving the raw log from Memalloy during synthesis

  - litmus/<arch>/
giving auto-generated litmus tests of the executions and log files from running
the tests on different implementations (given as result_<machine>.log files).

  - png/
giving generating png images of the executions (omitted for space reasons)

* Reproducing tables

The following should reproduce the latex for our Table 1 in our paper

  $ ./mk_table.py -arch X86 fences-as-nodes/X86/
  $ ./mk_table.py -arch PPC fences-as-nodes/PPC/

* Generating sqlite3 database

Finally, the following should produce an sqlite3 database that can be used for
querying all of our experimental data.

  $ ./mk_csv.py `pwd` > out.csv
  $ sqlite3 < create.sql
  $ sqlite3 out.db
  > select * from results;

## Known issues

We note the following issues that affect our results (that we intend to fix
after the submission deadline):

* Some tests in our allow-set may in fact be inconsistent due to an imprecision
  in our deadness predicate; we catch all such cases automatically, but filter
  them from the testsuite manually.
* Some tests that we generate reuse the same register in the initial location
  mapping as well as the postcondition. This is potentially problematic in the
  case where the register is loaded-into within a transaction that can fail. We
  fix such tests manually.
