From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10675 invoked by alias); 5 Mar 2003 07:16:00 -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 10648 invoked by uid 71); 5 Mar 2003 07:16:00 -0000 Resent-Date: 5 Mar 2003 07:16:00 -0000 Resent-Message-ID: <20030305071600.10647.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, ksakamot@lsi.melco.co.jp Received: (qmail 8225 invoked by uid 48); 5 Mar 2003 07:08:26 -0000 Message-Id: <20030305070826.8224.qmail@sources.redhat.com> Date: Wed, 05 Mar 2003 07:16:00 -0000 From: ksakamot@lsi.melco.co.jp Reply-To: ksakamot@lsi.melco.co.jp To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: optimization/9962: Scheduling bug on i386 X-SW-Source: 2003-03/txt/msg00200.txt.bz2 List-Id: >Number: 9962 >Category: optimization >Synopsis: Scheduling bug on i386 >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: wrong-code >Submitter-Id: net >Arrival-Date: Wed Mar 05 07:16:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: ksakamot@lsi.melco.co.jp >Release: 3.2.2 >Organization: >Environment: i686-pc-linux-gnu >Description: When the following source is compiled with "-O2 -fschedule-insns -fno-schedule-insns2", the scheduling is incorrect. > gcc -S -O2 -fschedule-insns -fno-schedule-insns2 sched-bug.c > cat sched-bug.s .file "sched-bug.c" .text .p2align 4,,15 .globl func .type func,@function func: pushl %ebp movl %esp, %ebp movzwl 12(%ebp), %edx movl 8(%ebp), %eax movw %dx, (%eax) movl $0, (%eax) popl %ebp ret .Lfe1: .size func,.Lfe1-func .ident "GCC: (GNU) 3.2.2" "movl $0, (%eax)" is generated from "rr-code = code" and "movw %dx, (%eax)" is generated from "((unsigned long *)rr)[0] = 0;". So "movw %dx, (%eax)" should be located after "movl $0, (%eax)". >How-To-Repeat: typedef struct r { unsigned short code; int a; } ST; void func( ST *rr, unsigned short code ) { ((unsigned long *)rr)[0] = 0; rr->code = code; } >Fix: >Release-Note: >Audit-Trail: >Unformatted: