Simplify and canonicalize conditional branches with constant operands.
This module performs no analysis, it simply attempts to
simplify any branching instructions of a basic block that have constant
operands. The intent is that analysis modules can call this
transformation engine, allowing us to share the
simplification code among multiple analysis modules.
Given a basic block, attempt to simplify any conditional branch
instructions with constant operands.
The instruction will be mutated in place.
The control flow graph will be updated, but the caller is responsible
for calling BranchOptmizations after simplify has been called on
all basic blocks in the IR to remove unreachable code.