This patch resolves the suboptimal codegen described in http://llvm.org/pr47873 .
When CodeGenPrepare lowers select into a conditional branch, a freeze instruction is inserted.
It is then translated to BRCOND(FREEZE(SETCC)) in SelDag.
The FREEZE in the middle of SETCC and BRCOND was causing a suboptimal code generation however.
This patch adds BRCOND(FREEZE(cond)) -> BRCOND(cond) fold to DAGCombiner to remove the FREEZE.
To make this optimization sound, BRCOND(UNDEF) simply should nondeterministically jump to the branch or not, rather than raising UB.
It wasn't clear what happens when the condition was undef according to the comments in ISDOpcodes.h, however.
I updated the comments of BRCOND to make it explicit (as well as BR_CC, which is also a conditional branch instruction).
Note that it diverges from the semantics of br instruction in IR, which is explicitly UB.
Since the UB semantics was necessary to explain optimizations that use branching conditions, and SelDag doesn't seem to have such optimization, I think this divergence is okay.
Isn't this only valid if freeze has one use?