From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mo4-p00-ob.smtp.rzone.de (mo4-p00-ob.smtp.rzone.de [85.215.255.23]) by sourceware.org (Postfix) with ESMTPS id 547143831E7E for ; Fri, 9 Dec 2022 19:23:13 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 547143831E7E Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=gjlay.de Authentication-Results: sourceware.org; spf=none smtp.mailfrom=gjlay.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1670613790; s=strato-dkim-0002; d=gjlay.de; h=Cc:Subject:From:To:Date:Message-ID:Cc:Date:From:Subject:Sender; bh=s2mC2/fDDJ5vSYYcLDuGgaNoG4FbiYRzvIKkV1p71/I=; b=SgaM3IetG35J1kIlIN2vGDyxWn8zzQuMnOe19jjg9IhOBOb0omW1vl3TkZDag1Brbs fUTKGLiIZ2siLAJt/6JTPQIWr5lMyOeAbDzaaUeqsvvSIruKYY7fR9fLOG9P9988C6T9 XrPtF4btetDSd4TJ3j76N4YAyO/NuiTOZmfki/BHzhQgf3RjdK6oNOdDiOs2sKZiK6rn IGLdVl0yq1Z/i8SeKvWP+A5SxpNfy+35r63zgQQezRo5BJkDIL7r642OVVCedCli8E6p paVt5Ss0QPNmaEA5+RJnI4Zo+NaSiePnHnI2VeAnGDtApLeWqb3u19FvptsbxWh1xAZ2 di3A== Authentication-Results: strato.com; dkim=none X-RZG-AUTH: ":LXoWVUeid/7A29J/hMvvT3koxZnKT7Qq0xotTetVnKkagtK/o3uhL+IIhZtSUNg=" X-RZG-CLASS-ID: mo00 Received: from [192.168.2.102] by smtp.strato.de (RZmta 48.2.1 DYNA|AUTH) with ESMTPSA id aba1dcyB9JN9zDu (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits)) (Client did not present a certificate); Fri, 9 Dec 2022 20:23:09 +0100 (CET) Message-ID: <91876f97-c1ba-2893-75c8-a765c0d9d37e@gjlay.de> Date: Fri, 9 Dec 2022 20:23:02 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 Content-Language: en-US To: gcc@gcc.gnu.org From: Georg-Johann Lay Subject: [IRA] Code bloat due to register spills in v9, v10, v11, v12 and master Cc: Vladimir Makarov Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: There is the following code size regression, filed as https://gcc.gnu.org/PR90706 Simple test cases are, for example #define PORT (*((unsigned char volatile*) 0x24)) unsigned short var16; void func (void) { if (2048000ul * var16 > 1200000ul) PORT |= 1; } When I compile it with $ avr-gcc -Os bloat1.c -c && avr-size bloat1.o the code size increases from 36 bytes (v8) to 88 bytes (v13). Apart from that, register pressure is much higher because a frame pointer is set up for no reason, and the values go through stack slots for no reason. Even test cases which don't require any code like long func2 (void) { long var32; __asm ("; some code %0" : "=r" (var32)); return var32; } increase in register pressure (x2), stack usage (from 0 to 6 bytes) and code size from 2 bytes (v8) to 34 bytes (v13). Some projects like QMK "solved" the problem by declaring GCC > v8 to be "incompatible" with their project, see https://github.com/qmk/qmk_firmware/issues/6719 In own projects I observed the problem, too, and the only solution is to use v8 or older. Options like -fcaller-saves or -fira-algorithm= have no effect. To configure, I used --target=avr --disable-nls --with-dwarf2 --enable-languages=c,c++ --with-gnu-as --with-gnu-ld --disable-shared, so nothing special. The problem is present in v9, v10, v11, v12 and master (future v13), so sitting around for quite a while, so maybe it's not fixed because RA maintainers are not aware of the problem. Thanks for any help, Johann