Static analysis: we perform a backwards all-path analysis with the Boolean
abstract domain, where bot (false) means there is an atomic instruction
after the current program point with no intervening reads.
Code transformation: replace any Ifence instructions that
are post-dominated by an atomic instruction without any
intervening loads with a Inop instruction.