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