From mboxrd@z Thu Jan 1 00:00:00 1970 From: spitzak@d2.com To: gcc-gnats@gcc.gnu.org Cc: doug@d2.com Subject: optimization/3078: First time through loop produces different result Date: Thu, 07 Jun 2001 13:16:00 -0000 Message-id: <20010607201407.15262.qmail@sourceware.cygnus.com> X-SW-Source: 2001-06/msg00238.html List-Id: >Number: 3078 >Category: optimization >Synopsis: First time through loop produces different result >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Thu Jun 07 13:16:02 PDT 2001 >Closed-Date: >Last-Modified: >Originator: Bill Spitzak >Release: gcc version 2.96 20000731 (Red Hat Linux 7.0) >Organization: >Environment: /usr/lib/gcc-lib/i386-redhat-linux/2.96/specs >Description: // This code is designed to make a lookup table that uses the top 16 // bits of a floating point number to index it. The error is that the // first time through the loop the floating point number is calculated // wrong. Compare the output when compiled with no optimization and the // output when compiled with -O2 or better. // In our actual program we got a significantly different value. This version // seems to only differ in the low 16 bits. >How-To-Repeat: Compile above program with and without -O2 and run diff on the output. >Fix: I fixed our code by artificially running the loop one extra time for an index of -1 and ignoring that result. It appears to produce the correct output on all passes except the first. Any recommendations on how to construct such a lookup table without relying on aliasing would be appreciated. >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="gcctest.C" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="gcctest.C" Ly8gVGVzdCBvZiBidWcgaW4gR0NDIG9wdGltaXplcj8KCi8vIFRoaXMgY29kZSBpcyBkZXNpZ25l ZCB0byBtYWtlIGEgbG9va3VwIHRhYmxlIHRoYXQgdXNlcyB0aGUgdG9wIDE2Ci8vIGJpdHMgb2Yg YSBmbG9hdGluZyBwb2ludCBudW1iZXIgdG8gaW5kZXggaXQuIFRoZSBlcnJvciBpcyB0aGF0IHRo ZQovLyBmaXJzdCB0aW1lIHRocm91Z2ggdGhlIGxvb3AgdGhlIGZsb2F0aW5nIHBvaW50IG51bWJl ciBpcyBjYWxjdWxhdGVkCi8vIHdyb25nLiBDb21wYXJlIHRoZSBvdXRwdXQgd2hlbiBjb21waWxl ZCB3aXRoIG5vIG9wdGltaXphdGlvbiBhbmQgdGhlCi8vIG91dHB1dCB3aGVuIGNvbXBpbGVkIHdp dGggLU8yIG9yIGJldHRlci4KCi8vIEluIG91ciBhY3R1YWwgcHJvZ3JhbSB3ZSBnb3QgYSBzaWdu aWZpY2FudGx5IGRpZmZlcmVudCB2YWx1ZS4gVGhpcyB2ZXJzaW9uCi8vIHNlZW1zIHRvIG9ubHkg ZGlmZmVyIGluIHRoZSBsb3cgMTYgYml0cy4KCi8qIEhvdyB0byB0cmlnZ2VyIHRoZSBidWc6IChz YXZlIHRoaXMgZmlsZSBpbiBnY2N0ZXN0LkMpIDoKCiUgZysrIC12ClJlYWRpbmcgc3BlY3MgZnJv bSAvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzIuOTYvc3BlY3MKZ2NjIHZlcnNp b24gMi45NiAyMDAwMDczMSAoUmVkIEhhdCBMaW51eCA3LjApCiUgZysrIC1XYWxsIC1PMiAtbyBn Y2N0ZXN0IGdjY3Rlc3QuQwolIGcrKyAtV2FsbCAtbyBnY2N0ZXN0X25vX29wdCBnY2N0ZXN0LkMK JSAuL2djY3Rlc3QgPiBmb28KJSAuL2djY3Rlc3Rfbm9fb3B0ID4gYmFyCiUgZGlmZiBmb28gYmFy CjFjMQo8IGkgPSAzYTgwLCBmID0gMC4wMDA5ODM5LCBwYXR0ZXJuID0gM2E4MGY2MzgKLS0tCj4g aSA9IDNhODAsIGYgPSAwLjAwMDk3NjU2MiwgcGF0dGVybiA9IDNhODAwMDAwCiUKCiovCgojZGVm aW5lIEJPVFRPTQkweDNhODAJLy8gdG9wIDE2IGJpdHMgb2YgMS4wLzEwMjQKI2RlZmluZSBUT1AJ MHgzZjgwCS8vIHRvcCAxNiBiaXRzIG9mIDEuMApmbG9hdCB0YWJsZVtUT1AtQk9UVE9NXTsKCmZs b2F0IGZ1bmN0aW9uKGZsb2F0LCBpbnQpOwoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2 KSB7CiAgLy8gdGhlIGZsb2F0LWluZGV4ZWQgdGFibGVzOgogIGZvciAoaW50IGkgPSBCT1RUT007 IGkgPCBUT1A7IGkrKykgewogICAgZmxvYXQgaW5kZXhhWzFdOwojaWZkZWYgX19zZ2kgLy8gYmln ZW5kaWFuCiAgICAqKChzaG9ydCopKGluZGV4YSkpID0gaTsKICAgICooKHNob3J0KikoaW5kZXhh KSsxKSA9IDB4MDAwMDsKI2Vsc2UgLy8gbGl0dGxlZW5kaWFuCiAgICAqKChzaG9ydCopKGluZGV4 YSkrMSkgPSBpOwogICAgKigoc2hvcnQqKShpbmRleGEpKSA9IDB4MDAwMDsKI2VuZGlmCiAgICBm bG9hdCBmID0gaW5kZXhhWzBdOwogICAgdGFibGVbaS1CT1RUT01dID0gZnVuY3Rpb24oZiwgaSk7 CiAgfQogIHJldHVybiAwOwp9CgojaW5jbHVkZSA8c3RkaW8uaD4KCmZsb2F0IGZ1bmN0aW9uKGZs b2F0IGYsIGludCBpKSB7CiAgcHJpbnRmKCJpID0gJXgsIGYgPSAlZywgcGF0dGVybiA9ICV4XG4i LCBpLCBmLCAqKHVuc2lnbmVkKikoJmYpKTsKICByZXR1cm4gZjsKfQo=