First Part: http://reviews.llvm.org/D3733
2nd Part: http://reviews.llvm.org/D4209
This patch enable following transform
(x + (~(y | c) + 1) --> x - (y | c) if c is odd (x + (~((y >> z) | c) + 1) --> x - ((y>>z) | c) if c is odd
Z3 verification code:
http://rise4fun.com/Z3/ZA06
Make sure this TODO goes away after you rebase.