From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12686 invoked by alias); 16 May 2003 16:56:03 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 12623 invoked by uid 71); 16 May 2003 16:56:01 -0000 Resent-Date: 16 May 2003 16:56:01 -0000 Resent-Message-ID: <20030516165601.12622.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, gawrilow@math.tu-berlin.de Received: (qmail 6165 invoked by uid 48); 16 May 2003 16:54:07 -0000 Message-Id: <20030516165407.6163.qmail@sources.redhat.com> Date: Fri, 16 May 2003 16:56:00 -0000 From: gawrilow@math.tu-berlin.de Reply-To: gawrilow@math.tu-berlin.de To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: optimization/10823: 3.3 - wrong code after first cse pass X-SW-Source: 2003-05/txt/msg01862.txt.bz2 List-Id: >Number: 10823 >Category: optimization >Synopsis: 3.3 - wrong code after first cse pass >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: wrong-code >Submitter-Id: net >Arrival-Date: Fri May 16 16:56:01 UTC 2003 >Closed-Date: >Last-Modified: >Originator: Ewgenij Gawrilow >Release: 3.3 >Organization: >Environment: RedHat 7.3 on an Athlon PC ../gcc-3.3/configure --enable-languages=c++ --enable-shared --with-cpu=athlon --enable-version-specific-runtime-libs --with-gxx-include-dir=/usr/site-local/share/include/c++/3.3 --prefix=/usr/site-local/share --exec-prefix=/usr/site-local >Description: The first cse pass garbles the class LV constructor code inlined into the fetch() function. Compare the insn 405, 406 in the 08.null and 09.cse dumps. The _start field of the target is copied from the _size field of the source, which is obviuosly wrong. I hope, this time the test case is sufficiently short. The original program that crashed due to this bug has over 80K lines after cpp. Further reducing makes the bug disappear, especially removing the explicitly defined copy constructor of class Gen (if this helps...) The parts embraced in #ifdef DEMO are useful only for the bug demonstration, e.g. in a test suite, and can be safely ignored when debugging. BTW, as I analyzed the assembler output, some other optimization deficiences have been revealed. If you mean, I should submit them as separate bugs, or they are no bugs at all, please let me know. Here they are: 1. The placement operator new is not required to check his argument for being non-null. Neither the constructors are. Nevertheless, gcc emits a test and a branch. 2. Even if this test would be required, it should have been eliminated by the previous optimization pass (null pointer elimination), as the same pointer is used to access the 'exists' field prior to the test. Or, alternatively, the null pointer elimination should be repeated after cse, if this failure is caused by the expressions looking too different at the beginning. 3. The constructor argument in the placement new expression is a temporary object returned by the inlined function get(). It would be much better for the run-time efficiency if the target address (area) would be passed directly to get(). Currently the temporary object is created separately and then copied into the area. I think, the Standard allows to eliminate such temporaries together with copy constructor calls, doesn't it? >How-To-Repeat: Compile the attached program with additional -DDEMO option, then run it. If compiled with -O1, it produces the correct output string '0 3 0 3'. When compiled with -O2 or higher, the output will be '0 3 3 3'. >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="minkowski_test.cc" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="minkowski_test.cc" I2luY2x1ZGUgPG5ldz4KCmNsYXNzIEdlbiB7CnByb3RlY3RlZDoKICAgR2VuKCkgeyB9CiAgIEdl bihjb25zdCBHZW4mKSB7IH0KfTsKCmNsYXNzIFNlcSA6IHB1YmxpYyBHZW4gewpwcm90ZWN0ZWQ6 CiAgIGludCBfc3RhcnQsIF9zaXplOwpwdWJsaWM6CiAgIFNlcShpbnQgc3RhcnRfYXJnLCBpbnQg c2l6ZV9hcmcpCiAgICAgIDogX3N0YXJ0KHN0YXJ0X2FyZyksIF9zaXplKHNpemVfYXJnKSB7IH0K CiAgIGludCBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIF9zdGFydDsgfQogICBpbnQgc2l6ZSgpIGNv bnN0IHsgcmV0dXJuIF9zaXplOyB9Cn07CgpjbGFzcyBNYXRyaXggewpwcm90ZWN0ZWQ6CiAgIGlu dCBkaW1yLCBkaW1jOwpwdWJsaWM6CiNpZmRlZiBERU1PCiAgIE1hdHJpeChpbnQgciwgaW50IGMp IDogZGltcihyKSwgZGltYyhjKSB7IH0KI2VuZGlmCiAgIGludCBjb2xzKCkgY29uc3QgeyByZXR1 cm4gZGltYzsgfQp9OwoKY2xhc3MgUlYgewpwcm90ZWN0ZWQ6CiAgIGNvbnN0IGludCogczE7CiAg IFNlcSBzMjsKcHVibGljOgogICBSVihjb25zdCBpbnQmIGFyZzEsIGNvbnN0IFNlcSYgYXJnMikg OiBzMSgmYXJnMSksIHMyKGFyZzIpIHsgfQojaWZkZWYgREVNTwogICBjb25zdCBTZXEmIHNlcSgp IGNvbnN0IHsgcmV0dXJuIHMyOyB9CiNlbmRpZgp9OwoKY2xhc3MgVW9wIHsKICAgY29uc3QgTWF0 cml4ICpfbWF0cml4OwpwdWJsaWM6CiAgIHR5cGVkZWYgY29uc3QgaW50JiBhcmd1bWVudF90eXBl OwogICB0eXBlZGVmIGNvbnN0IFJWIHJlc3VsdF90eXBlOwojaWZkZWYgREVNTwogICBVb3AoY29u c3QgTWF0cml4JiBtKSA6IF9tYXRyaXgoJm0pIHsgfQojZW5kaWYKICAgcmVzdWx0X3R5cGUgb3Bl cmF0b3IoKSAoYXJndW1lbnRfdHlwZSBzdGFydCkgY29uc3QgewogICAgICByZXR1cm4gcmVzdWx0 X3R5cGUoc3RhcnQsIFNlcSgwLCBfbWF0cml4LT5jb2xzKCkpKTsKICAgfQp9OwoKY2xhc3MgVWV2 IHsKcHJvdGVjdGVkOgogICBjb25zdCBpbnQqIHA7CiAgIFVvcCBvcDsKcHVibGljOgojaWZkZWYg REVNTwogICBVZXYoY29uc3QgTWF0cml4JiBtKSA6IG9wKG0pIHsgfQojZW5kaWYKCiAgIFVvcDo6 cmVzdWx0X3R5cGUgb3BlcmF0b3IqICgpIGNvbnN0IHsKICAgICAgcmV0dXJuIG9wKCpwKTsKICAg fQp9OwoKY2xhc3MgSVRQIDogcHVibGljIFVldiB7CnB1YmxpYzoKICAgVWV2IHNlY29uZDsKI2lm ZGVmIERFTU8KICAgSVRQKGNvbnN0IE1hdHJpeCYgbSkgOiBVZXYobSksIHNlY29uZChtKSB7IH0K I2VuZGlmCn07CgpjbGFzcyBMViB7CiAgIFJWIHIxLCByMjsKcHVibGljOgogICBMVihjb25zdCBS ViYgYXJnMSwgY29uc3QgUlYmIGFyZzIpCiAgICAgIDogcjEoYXJnMSksIHIyKGFyZzIpIHsgfQoj aWZkZWYgREVNTwogICBjb25zdCBTZXEmIHNlcTEoKSBjb25zdCB7IHJldHVybiByMS5zZXEoKTsg fQogICBjb25zdCBTZXEmIHNlcTIoKSBjb25zdCB7IHJldHVybiByMi5zZXEoKTsgfQojZW5kaWYK fTsKCnN0cnVjdCBCb3AgewogICBMViBvcGVyYXRvcigpIChjb25zdCBSViYgbCwgY29uc3QgUlYm IHIpIGNvbnN0IHsKICAgICAgcmV0dXJuIExWKGwscik7CiAgIH0KfTsKCmNsYXNzIEJldiA6IHB1 YmxpYyBJVFAgewpwcm90ZWN0ZWQ6CiAgIEJvcCBvcDsKCnB1YmxpYzoKI2lmZGVmIERFTU8KICAg QmV2KGNvbnN0IE1hdHJpeCYgbSkgOiBJVFAobSkgeyB9CiNlbmRpZgogICBMViBnZXQoKSBjb25z dCB7CiAgICAgIHJldHVybiBvcCgqc3RhdGljX2Nhc3Q8Y29uc3QgSVRQJj4oKnRoaXMpLCAqc2Vj b25kKTsKICAgfQp9OwoKY2xhc3MgQ2FjaGUgewpwdWJsaWM6CiAgIENhY2hlKCkgOiBleGlzdHMo ZmFsc2UpIHsgfQogICBjb25zdCBMViYgZmV0Y2goKTsKcHJpdmF0ZToKICAgY2hhciBhcmVhW3Np emVvZihMVildIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg0KSkpOwogICBib29sIGV4aXN0czsK fTsKCmNsYXNzIFRvcAogICA6IHB1YmxpYyBCZXYsCiAgICAgcHVibGljIENhY2hlIHsKI2lmZGVm IERFTU8KcHVibGljOgogICBUb3AoY29uc3QgTWF0cml4JiBtKSA6IEJldihtKSB7IH0KI2VuZGlm Cn07Cgpjb25zdCBMViYgQ2FjaGU6OmZldGNoKCkgewogICBpZiAoIWV4aXN0cykgewogICAgICBu ZXcoYXJlYSkgTFYoc3RhdGljX2Nhc3Q8VG9wKj4odGhpcyktPmdldCgpKTsKICAgICAgZXhpc3Rz PXRydWU7CiAgIH0KICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTFYmPihhcmVhKTsK fQoKI2lmIGRlZmluZWQoREVNTykKI2luY2x1ZGUgPGlvc3RyZWFtPgoKaW50IG1haW4oKSB7CiAg IE1hdHJpeCBNKDMsMyk7CiAgIFRvcCBUKE0pOwogICBjb25zdCBMViYgbD1ULmZldGNoKCk7CiAg IHN0ZDo6Y291dCA8PCBsLnNlcTEoKS5zdGFydCgpIDw8ICcgJwoJICAgICA8PCBsLnNlcTEoKS5z aXplKCkgPDwgJyAnCgkgICAgIDw8IGwuc2VxMigpLnN0YXJ0KCkgPDwgJyAnCgkgICAgIDw8IGwu c2VxMigpLnNpemUoKSA8PCBzdGQ6OmVuZGw7CiAgIHJldHVybiAwOwp9CiNlbmRpZiAvLyBERU1P Cg==