Mercurial > hg > truffle
diff src/share/vm/opto/connode.cpp @ 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 | 660978a2a31a |
children | 93c14e5562c4 |
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;