Make GVN handle HDeoptimize better

The GVN system didn't handle the deoptimization very well since
deoptimize is a predicated operation. This means that HDeoptimize
needs to prevent some code motion but if it isn't taken the operation
has no effect. This confused the GVN system into thinking that it
cannot merge deoptimizations. To fix this we special cased the side
effects GVN considers deoptimizations to have.

Test: ./test.py --host
Change-Id: Ic79d975f9ae584a07026647cee2768ed1105e5a9
3 files changed