I have already started looking into the issue: https://bugs.open64.net/show_bug.cgi?id=771
Doug > -----Original Message----- > From: Wu Yongchong [mailto:wuyongch...@gmail.com] > Sent: Wednesday, April 13, 2011 2:34 PM > To: Nelson H. F. Beebe > Cc: open64-devel > Subject: Re: [Open64-devel] floating-point test failures in code > generated by Open64 compiler version 4.2.4 > > Hi, Nelson > Would you please file a bug in https://bugs.open64.net > > On Wed, Apr 13, 2011 at 8:00 AM, Nelson H. F. Beebe > <be...@math.utah.edu> wrote: > > cbergst...@pathscale.com asks for the compilation options that I used > > in my report of floating-point test failures of the new opencc > version > > 4.2.4 in the features-1.2.1 tests. Here is what I used: > > > > opencc -g -O2 > > > > I just reran the tests with multiple optimization levels on IA-32: > > > > % foreach f ( "" -g -O1 -O2 -O3 -Ofast ) > > foreach? echo ===== $f ; opencc $f inf.c && ./a.out | grep WRONG > > foreach? end > > ===== > > (-Inf > 0.0): WRONG > > (-Inf >= 0.0): WRONG > > (0.0 <= -Inf): WRONG > > (0.0 < -Inf): WRONG > > ===== -g > > ===== -O1 > > ===== -O2 > > (-Inf > 0.0): WRONG > > (-Inf >= 0.0): WRONG > > (0.0 <= -Inf): WRONG > > (0.0 < -Inf): WRONG > > ===== -O3 > > (-Inf > 0.0): WRONG > > (-Inf >= 0.0): WRONG > > (0.0 <= -Inf): WRONG > > (0.0 < -Inf): WRONG > > ===== -Ofast > > !IsNaN(Inf - Inf): WRONG > > !IsNaN(Inf - Inf): WRONG > > !IsNaN(Inf - Inf): WRONG > > > > Thus, behavior is correct only with -g or -O1. All others produce > > errors, and -Ofast produces different errors than the others. > > > > For the NaN tests, I get > > > > ===== > > ===== -g > > ===== -O1 > > ===== -O2 > > ===== -O3 > > ===== -Ofast > > (NaN == NaN): WRONG > > (NaN <= NaN): WRONG > > (NaN >= NaN): WRONG > > (NaN == 0.0): WRONG > > (NaN <= 0.0): WRONG > > (NaN >= 0.0): WRONG > > (0.0 == NaN): WRONG > > (0.0 <= NaN): WRONG > > (0.0 >= NaN): WRONG > > (NaN == NaN): WRONG > > (NaN <= NaN): WRONG > > (NaN >= NaN): WRONG > > (NaN == 0.0): WRONG > > (NaN <= 0.0): WRONG > > (NaN >= 0.0): WRONG > > (0.0 == NaN): WRONG > > (0.0 <= NaN): WRONG > > (0.0 >= NaN): WRONG > > (NaN == NaN): WRONG > > (NaN <= NaN): WRONG > > (NaN >= NaN): WRONG > > (NaN == 0.0): WRONG > > (NaN <= 0.0): WRONG > > (NaN >= 0.0): WRONG > > (0.0 == NaN): WRONG > > (0.0 <= NaN): WRONG > > (0.0 >= NaN): WRONG > > > > A check of the generated code from -O1 and -Ofast shows the problem: > > the correctly working code uses a run-time comparison, but the the > > code from -Ofast has no comparisons, and that is ALWAYS WRONG > behavior > > for floating-point arithmetic if operands can be NaNs (which should > > always be assumed, unless both are finite compile-time constants). > > > > The signed zero tests pass with all six optimization choices on IA- > 32. > > > > The same experiment on AMD64 produced this output: > > > > ===== > > (-Inf > 0.0): WRONG > > (-Inf >= 0.0): WRONG > > (0.0 <= -Inf): WRONG > > (0.0 < -Inf): WRONG > > ===== -g > > ===== -O1 > > ===== -O2 > > (-Inf > 0.0): WRONG > > (-Inf >= 0.0): WRONG > > (0.0 <= -Inf): WRONG > > (0.0 < -Inf): WRONG > > ===== -O3 > > (-Inf > 0.0): WRONG > > (-Inf >= 0.0): WRONG > > (0.0 <= -Inf): WRONG > > (0.0 < -Inf): WRONG > > ===== -Ofast > > !IsNaN(Inf - Inf): WRONG > > !IsNaN(Inf - Inf): WRONG > > !IsNaN(Inf - Inf): WRONG > > > > For the NaN tests, I get: > > > > ===== > > ===== -g > > ===== -O1 > > ===== -O2 > > ===== -O3 > > ===== -Ofast > > (NaN == NaN): WRONG > > (NaN <= NaN): WRONG > > (NaN >= NaN): WRONG > > (NaN == 0.0): WRONG > > (NaN <= 0.0): WRONG > > (NaN >= 0.0): WRONG > > (0.0 == NaN): WRONG > > (0.0 <= NaN): WRONG > > (0.0 >= NaN): WRONG > > (NaN == NaN): WRONG > > (NaN <= NaN): WRONG > > (NaN >= NaN): WRONG > > (NaN == 0.0): WRONG > > (NaN <= 0.0): WRONG > > (NaN >= 0.0): WRONG > > (0.0 == NaN): WRONG > > (0.0 <= NaN): WRONG > > (0.0 >= NaN): WRONG > > (NaN == NaN): WRONG > > (NaN <= NaN): WRONG > > (NaN >= NaN): WRONG > > (NaN == 0.0): WRONG > > (NaN <= 0.0): WRONG > > (NaN >= 0.0): WRONG > > (0.0 == NaN): WRONG > > (0.0 <= NaN): WRONG > > (0.0 >= NaN): WRONG > > > > For the signed zero test that failed on AMD64, all optimization > levels > > produce errors: > > > > % foreach f ( "" -g -O1 -O2 -O3 -Ofast ) > > foreach? echo ===== $f ; opencc $f zero.c && ./a.out | grep WRONG > > foreach? end > > ===== > > -zero is unsigned WRONG > > (-0) - (+0) is unsigned WRONG > > (-1)*(0) is unsigned WRONG > > ===== -g > > -zero is unsigned WRONG > > (-0) - (+0) is unsigned WRONG > > (-1)*(0) is unsigned WRONG > > ===== -O1 > > -zero is unsigned WRONG > > (-0) - (+0) is unsigned WRONG > > (-1)*(0) is unsigned WRONG > > ===== -O2 > > -zero is unsigned WRONG > > (-0) - (+0) is unsigned WRONG > > (-1)*(0) is unsigned WRONG > > ===== -O3 > > -zero is unsigned WRONG > > (-0) - (+0) is unsigned WRONG > > (-1)*(0) is unsigned WRONG > > ===== -Ofast > > -zero is unsigned WRONG > > (-0) - (+0) is unsigned WRONG > > (-1)*(0) is unsigned WRONG > > > > I do not yet have the 4.2.4 compiler working on IA-64, but for the > > older 4.2.3 version, here is what I get on that architecture: > > > > % foreach f ( "" -g -O1 -O2 -O3 -Ofast ) > > foreach? echo ===== $f ; opencc $f inf.c && ./a.out | grep > WRONG > > foreach? end > > ===== > > be(4897): unaligned access to 0x600000000003e564, > ip=0x200000000010e170 > > be(4897): unaligned access to 0x600000000003e58c, > ip=0x200000000010e170 > > be(4897): unaligned access to 0x600000000003e5dc, > ip=0x200000000010e130 > > be(4897): unaligned access to 0x600000000003e5ec, > ip=0x200000000010e130 > > be(4897): unaligned access to 0x600000000003e614, > ip=0x200000000010e170 > > (-Inf > 0.0): WRONG > > (-Inf >= 0.0): WRONG > > (0.0 <= -Inf): WRONG > > (0.0 < -Inf): WRONG > > ===== -g > > be(4927): unaligned access to 0x600000000003d874, > ip=0x200000000010e170 > > be(4927): unaligned access to 0x600000000003d89c, > ip=0x200000000010e170 > > be(4927): unaligned access to 0x600000000003d8ec, > ip=0x200000000010e130 > > be(4927): unaligned access to 0x600000000003d8fc, > ip=0x200000000010e130 > > be(4927): unaligned access to 0x600000000003d924, > ip=0x200000000010e170 > > ===== -O1 > > ===== -O2 > > (-Inf > 0.0): WRONG > > (-Inf >= 0.0): WRONG > > (0.0 <= -Inf): WRONG > > (0.0 < -Inf): WRONG > > ===== -O3 > > be(5030): unaligned access to 0x600000000003f984, > ip=0x200000000010e170 > > be(5030): unaligned access to 0x600000000003f9ac, > ip=0x200000000010e170 > > be(5030): unaligned access to 0x600000000003f9fc, > ip=0x200000000010e130 > > be(5030): unaligned access to 0x600000000003fa0c, > ip=0x200000000010e130 > > be(5030): unaligned access to 0x600000000003fa34, > ip=0x200000000010e170 > > !IsNaN(Inf - Inf): WRONG > > !IsNaN(Inf - Inf): WRONG > > (-Inf > 0.0): WRONG > > (-Inf >= 0.0): WRONG > > (0.0 <= -Inf): WRONG > > (0.0 < -Inf): WRONG > > !IsNaN(Inf - Inf): WRONG > > ===== -Ofast > > be(5080): unaligned access to 0x600000000003e694, > ip=0x200000000010e170 > > be(5080): unaligned access to 0x600000000003e6bc, > ip=0x200000000010e170 > > be(5080): unaligned access to 0x600000000003e70c, > ip=0x200000000010e130 > > be(5080): unaligned access to 0x600000000003e71c, > ip=0x200000000010e130 > > be(5080): unaligned access to 0x600000000003e744, > ip=0x200000000010e170 > > !IsNaN(Inf - Inf): WRONG > > !IsNaN(Inf - Inf): WRONG > > !IsNaN(Inf - Inf): WRONG > > > > > > % foreach f ( "" -g -O1 -O2 -O3 -Ofast ) > > foreach? echo ===== $f ; opencc $f zero.c && ./a.out | grep > WRONG > > foreach? end > > ===== > > be(5144): unaligned access to 0x600000000003e564, > ip=0x200000000010e170 > > be(5144): unaligned access to 0x600000000003e58c, > ip=0x200000000010e170 > > be(5144): unaligned access to 0x600000000003e5dc, > ip=0x200000000010e130 > > be(5144): unaligned access to 0x600000000003e5ec, > ip=0x200000000010e130 > > be(5144): unaligned access to 0x600000000003e614, > ip=0x200000000010e170 > > +zero is signed WRONG > > -zero is unsigned WRONG > > 0 - 0 is signed WRONG > > (-0) - (+0) is unsigned WRONG > > (+1)*(0) is signed WRONG > > (-1)*(0) is unsigned WRONG > > ===== -g > > -zero is unsigned WRONG > > (-0) - (+0) is unsigned WRONG > > (-1)*(0) is unsigned WRONG > > ===== -O1 > > -zero is unsigned WRONG > > (-0) - (+0) is unsigned WRONG > > (-1)*(0) is unsigned WRONG > > ===== -O2 > > +zero is signed WRONG > > -zero is unsigned WRONG > > 0 - 0 is signed WRONG > > (-0) - (+0) is unsigned WRONG > > (+1)*(0) is signed WRONG > > (-1)*(0) is unsigned WRONG > > ===== -O3 > > be(5276): unaligned access to 0x600000000003f984, > ip=0x200000000010e170 > > be(5276): unaligned access to 0x600000000003f9ac, > ip=0x200000000010e170 > > be(5276): unaligned access to 0x600000000003f9fc, > ip=0x200000000010e130 > > be(5276): unaligned access to 0x600000000003fa0c, > ip=0x200000000010e130 > > be(5276): unaligned access to 0x600000000003fa34, > ip=0x200000000010e170 > > +zero is signed WRONG > > -zero is unsigned WRONG > > 0 - 0 is signed WRONG > > (-0) - (+0) is unsigned WRONG > > (+1)*(0) is signed WRONG > > (-1)*(0) is unsigned WRONG > > ===== -Ofast > > -zero is unsigned WRONG > > (-0) - (+0) is unsigned WRONG > > (-1)*(0) is unsigned WRONG > > > > % foreach f ( "" -g -O1 -O2 -O3 -Ofast ) > > foreach? echo ===== $f ; opencc $f nan.c && ./a.out | grep > WRONG > > foreach? end > > ===== > > be(5389): unaligned access to 0x600000000003e564, > ip=0x200000000010e170 > > be(5389): unaligned access to 0x600000000003e58c, > ip=0x200000000010e170 > > be(5389): unaligned access to 0x600000000003e5dc, > ip=0x200000000010e130 > > be(5389): unaligned access to 0x600000000003e5ec, > ip=0x200000000010e130 > > be(5389): unaligned access to 0x600000000003e614, > ip=0x200000000010e170 > > ===== -g > > ===== -O1 > > ===== -O2 > > ===== -O3 > > be(5522): unaligned access to 0x600000000003f984, > ip=0x200000000010e170 > > be(5522): unaligned access to 0x600000000003f9ac, > ip=0x200000000010e170 > > be(5522): unaligned access to 0x600000000003f9fc, > ip=0x200000000010e130 > > be(5522): unaligned access to 0x600000000003fa0c, > ip=0x200000000010e130 > > be(5522): unaligned access to 0x600000000003fa34, > ip=0x200000000010e170 > > ===== -Ofast > > (NaN == NaN): WRONG > > (NaN <= NaN): WRONG > > (NaN >= NaN): WRONG > > (NaN == 0.0): WRONG > > (NaN <= 0.0): WRONG > > (NaN >= 0.0): WRONG > > (0.0 == NaN): WRONG > > (0.0 <= NaN): WRONG > > (0.0 >= NaN): WRONG > > (NaN == NaN): WRONG > > (NaN <= NaN): WRONG > > (NaN >= NaN): WRONG > > (NaN == 0.0): WRONG > > (NaN <= 0.0): WRONG > > (NaN >= 0.0): WRONG > > (0.0 == NaN): WRONG > > (0.0 <= NaN): WRONG > > (0.0 >= NaN): WRONG > > (NaN == NaN): WRONG > > (NaN <= NaN): WRONG > > (NaN >= NaN): WRONG > > (NaN == 0.0): WRONG > > (NaN <= 0.0): WRONG > > (NaN >= 0.0): WRONG > > (0.0 == NaN): WRONG > > (0.0 <= NaN): WRONG > > (0.0 >= NaN): WRONG > > > > The many unaligned access errors are bothersome, and they also > produce > > reports in /var/log/messages. > > > > --------------------------------------------------------------------- > ---------- > > - Nelson H. F. Beebe Tel: +1 801 581 5254 > - > > - University of Utah FAX: +1 801 581 4148 > - > > - Department of Mathematics, 110 LCB Internet e-mail: > be...@math.utah.edu - > > - 155 S 1400 E RM 233 be...@acm.org > be...@computer.org - > > - Salt Lake City, UT 84112-0090, USA URL: > http://www.math.utah.edu/~beebe/ - > > --------------------------------------------------------------------- > ---------- > > > > --------------------------------------------------------------------- > --------- > > Forrester Wave Report - Recovery time is now measured in hours and > minutes > > not days. Key insights are discussed in the 2010 Forrester Wave > Report as > > part of an in-depth evaluation of disaster recovery service > providers. > > Forrester found the best-in-class provider in terms of services and > vision. > > Read this report now! http://p.sf.net/sfu/ibm-webcastpromo > > _______________________________________________ > > Open64-devel mailing list > > Open64-devel@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/open64-devel > > > > > > -- > yongchong > ----------------------------------------------------------------------- > ------- > Benefiting from Server Virtualization: Beyond Initial Workload > Consolidation -- Increasing the use of server virtualization is a top > priority.Virtualization can reduce costs, simplify management, and > improve > application availability and disaster protection. Learn more about > boosting > the value of server virtualization. http://p.sf.net/sfu/vmware- > sfdev2dev > _______________________________________________ > Open64-devel mailing list > Open64-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/open64-devel ------------------------------------------------------------------------------ Benefiting from Server Virtualization: Beyond Initial Workload Consolidation -- Increasing the use of server virtualization is a top priority.Virtualization can reduce costs, simplify management, and improve application availability and disaster protection. Learn more about boosting the value of server virtualization. http://p.sf.net/sfu/vmware-sfdev2dev _______________________________________________ Open64-devel mailing list Open64-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/open64-devel