> And we fail to fold vect_patt_384.36_436 | { 1, ... } to { 1, ... }? > Or is the issue that vector masks contain padding and with > non-zero masking we'd have garbage in the padding and that leaks > here? That is, _47 ? 1 : iftmp.0_113 -> _47 | iftmp.0_113 assumes > there's exactly one bit in a bool, specifically it has assumptions > on padding - I'd guess that > > *(char *)p = 17; > _Bool _47 = *(_Bool *)p; > ... = _47 ? 1 : b; > > would have similar issues but eventually loading 17 into a _Bool > invokes undefined behavior. So maybe the COND_EXPRs are only > required for .MASK_LOADs of _Bool (or any other type with padding)?
Hmm yeah, if you put it like that, very likely. I have only seen it with _Bool/mask types. In this PR here the significant bit is correct and it's the others leaking. -- Regards Robin