SjoerdMeijer added a comment. We also have a few miscompilations. Here's a reproducer for which we produce the wrong result: short short1, short2, short4; int main() { short2 = 5; short3 = -6; assert((short1 = ~short2) == short3); } https://reviews.llvm.org/D48832