  The vast number of interleavings that a concurrent program can have is
typically identified as the root cause of the difficulty of automatic analysis
of concurrent software. Weak memory is generally believed to make this problem
even harder. We address both issues by modelling programs' executions with
partial orders rather than the interleaving semantics (SC). We implemented a
software analysis tool based on these ideas. It scales to programs of
sufficient size to achieve first-time formal verification of non-trivial
concurrent systems code over a wide range of models, including SC, Intel x86
and IBM Power.
