Mercurial > hg > truffle
changeset 755:36ee9b69616e
6833879: Assigning positive zero is ignored when old value is negative zero
Summary: Don't perform CMOVE identity optimization for floating point types
Reviewed-by: kvn, never
author | cfang |
---|---|
date | Tue, 05 May 2009 11:02:10 -0700 |
parents | 2b25645dab33 |
children | cecd04fc6f93 93c14e5562c4 f53b154d959d |
files | src/share/vm/opto/connode.cpp |
diffstat | 1 files changed, 4 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/vm/opto/connode.cpp Mon May 04 22:06:47 2009 -0700 +++ b/src/share/vm/opto/connode.cpp Tue May 05 11:02:10 2009 -0700 @@ -128,6 +128,10 @@ // Swapped Cmp is OK (phase->eqv(cmp->in(2),f) && phase->eqv(cmp->in(1),t)) ) { + // Give up this identity check for floating points because it may choose incorrect + // value around 0.0 and -0.0 + if ( cmp->Opcode()==Op_CmpF || cmp->Opcode()==Op_CmpD ) + return NULL; // Check for "(t==f)?t:f;" and replace with "f" if( b->_test._test == BoolTest::eq ) return f;