From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31769 invoked by alias); 5 Mar 2003 14:26: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 31751 invoked by uid 71); 5 Mar 2003 14:26:00 -0000 Resent-Date: 5 Mar 2003 14:26:00 -0000 Resent-Message-ID: <20030305142600.31749.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, beszedes@rgai.hu Received: (qmail 31717 invoked by uid 48); 5 Mar 2003 14:25:51 -0000 Message-Id: <20030305142551.31716.qmail@sources.redhat.com> Date: Wed, 05 Mar 2003 14:26:00 -0000 From: beszedes@rgai.hu Reply-To: beszedes@rgai.hu To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: middle-end/9967: Some standard C function calls should not be replaced when optimizing for size X-SW-Source: 2003-03/txt/msg00216.txt.bz2 List-Id: >Number: 9967 >Category: middle-end >Synopsis: Some standard C function calls should not be replaced when optimizing for size >Confidential: no >Severity: non-critical >Priority: medium >Responsible: unassigned >State: open >Class: pessimizes-code >Submitter-Id: net >Arrival-Date: Wed Mar 05 14:26:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: Árpád Beszédes >Release: gcc version 3.3 20030224 (prerelease) >Organization: >Environment: BUILD & HOST: Linux 2.4.20 i686 unknown TARGET: arm-unknown-elf >Description: GCC replaces calls with special parameters to some standard C functions to equivalent ones in order to increase performance. E.g. fputs with string parameter -> fwrite. However, some of these calls take more instructions, which is not good if we optimize for size. These replacements should be avoided depending on the optimization switches. (See example below.) >How-To-Repeat: This simple program demonstrates that fprintf is replaced by calling fwrite in the assembly output (arm-elf target with newlib library): #include void foo () { fprintf(stderr, "Comment"); // fprintf->fwrite } ldr r3, .L2 ldr r3, [r3, #0] ldr r0, .L2+4 ldr r3, [r3, #12] mov r1, #1 mov r2, #7 b fwrite However, calling fprintf would require two instructions less: ldr r3, .L2 ldr r3, [r3, #0] ldr r1, .L2+4 ldr r0, [r3, #12] b fprintf >Fix: >Release-Note: >Audit-Trail: >Unformatted: