This is the mail archive of the gcc-prs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

optimization/3078: First time through loop produces different result



>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=


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]