This is a follow-up to D48830 to allow more shuffle folding using identity constants. Without this patch, we're only returning identity constants for commutative binops, so we miss opportunities to fold shifts and other binops.
LLVM binary opcode review: there are a total of 18 binops. There are 7 commutative binops (add, mul, and, or, xor, fadd, fmul) which we already fold. We're able to fold 4 more opcodes with this patch (shl, lshr, ashr, fdiv). Loosening the div/rem constraint in the shuffle fold will allow 2 more opcodes (udiv/sdiv). There are no folds for srem/urem/frem AFAIK. We don't bother with sub/fsub with constant operand 1 because those are canonicalized to add/fadd. 7 + 4 + 2 + 3 + 2 = 18.
Note that the more flexible definition for the identity constant shown here almost matches the logic of getDefaultConstantForOpcode() in D28907, so that patch could be reduced assuming this is ok and once we figure out how to handle -0.0 with fadd.