Add machinery to try and transform A ^ ((A ^ B) & M)
commita12b8636da77f2b1ed2be90e234c0013db9baddc
authorJulian Seward <jseward@acm.org>
Fri, 27 Feb 2015 13:33:56 +0000 (27 13:33 +0000)
committerJulian Seward <jseward@acm.org>
Fri, 27 Feb 2015 13:33:56 +0000 (27 13:33 +0000)
tree9bd00c7326a2b8d87f6f94b99ff3207e1cbe9811
parent2bee6426aa3ecd24b540a50ff55ddf7ebe4917bd
Add machinery to try and transform A ^ ((A ^ B) & M)
into (A ^ ~M) | (B & M).

The former is MSVC's optimised idiom for bitfield assignment, the
latter is GCC's idiom.  The former causes Memcheck problems because it
doesn't understand that (in this complex case) XORing an undefined
value with itself produces a defined result.

Believed to be working but currently disabled.  To re-enable, change
if (0) to if (1) at line 6651.  Fixes, to some extent, and when
enabled, bug 344382.

git-svn-id: svn://svn.valgrind.org/vex/trunk@3097
VEX/priv/ir_opt.c