From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24457 invoked by alias); 10 Jun 2002 15:26:04 -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 24413 invoked by uid 71); 10 Jun 2002 15:26:02 -0000 Resent-Date: 10 Jun 2002 15:26:02 -0000 Resent-Message-ID: <20020610152602.24412.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-To: nobody@gcc.gnu.org Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, fshvaige@cisco.com Received: (qmail 22268 invoked by uid 61); 10 Jun 2002 15:22:30 -0000 Message-Id: <20020610152230.22267.qmail@sources.redhat.com> Date: Mon, 10 Jun 2002 08:26:00 -0000 From: fshvaige@cisco.com Reply-To: fshvaige@cisco.com To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: optimization/6984: wrong code generated with -O2, -O3, -Os for do-while loop on PowerPC X-SW-Source: 2002-06/txt/msg00219.txt.bz2 List-Id: >Number: 6984 >Category: optimization >Synopsis: wrong code generated with -O2, -O3, -Os for do-while loop on PowerPC >Confidential: no >Severity: critical >Priority: medium >Responsible: unassigned >State: open >Class: wrong-code >Submitter-Id: net >Arrival-Date: Mon Jun 10 08:26:01 PDT 2002 >Closed-Date: >Last-Modified: >Originator: fshvaige@cisco.com >Release: 3.1 >Organization: >Environment: ../gcc-3.1/configure --with-gcc-version-trigger=/home/install/gcc-3.1/gcc/version.c --host=i686-pc-linux-gnu --with-newlib --enable-target-optspace --target=ppc-eabi --prefix=/home/crossGCC/ppc-eabi --with-local-prefix=/home/crossGCC/ppc-eabi --program-prefix=ppc-eabi- --enable-languages=c,c++ -v --norecursion >Description: File test1.c: void f1 (unsigned n) { do { } while (--n); } void f2 (unsigned n) { l1: if (--n) goto l1; } When compiled with: ppc-eabi-gcc -v -save-temps -c -O2 -Wall test1.c Produces wrong-large-ugly code for function f1(). The same for -O3 and -Os. For -O1 all Ok. Note: code for function f2() always Ok. >How-To-Repeat: compile test1.c: void f1 (unsigned n) { do { } while (--n); } void f2 (unsigned n) { l1: if (--n) goto l1; } with command line like: ppc-eabi-gcc -v -save-temps -c -O2 -Wall test1.c and see file test1.s: .file "test1.c" .section ".text" .align 2 .globl f1 .type f1,@function f1: cmpwi 0,3,0 bne- 0,.L7 li 3,1 .L7: mtctr 3 .L6: bdnz .L6 blr .Lfe1: .size f1,.Lfe1-f1 .align 2 .globl f2 .type f2,@function f2: mtctr 3 .L9: bdnz .L9 blr .Lfe2: .size f2,.Lfe2-f2 .ident "GCC: (GNU) 3.1" Code for f1() must be the same as for f2(). >Fix: >Release-Note: >Audit-Trail: >Unformatted: