If a logical and/or is used, we need to be careful not to propagate a potential poison value from the RHS by inserting a freeze instruction. Otherwise it works the same way as bitwise and/or.
This is intended to address the regression reported at https://reviews.llvm.org/D101191#2751002.
As a side-note, it would probably make sense to push freeze instructions through one-use non-canCreateUndefOrPoison instructions. 1 << freeze(x) is better than freeze(1 << x).