From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24886 invoked by alias); 9 Feb 2009 20:37:07 -0000 Received: (qmail 24792 invoked by uid 48); 9 Feb 2009 20:36:50 -0000 Date: Mon, 09 Feb 2009 20:37:00 -0000 Message-ID: <20090209203650.24791.qmail@sourceware.org> X-Bugzilla-Reason: CC References: Subject: [Bug target/39139] [4.4 Regression] ICE with stringop and register var In-Reply-To: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "jakub at gcc dot gnu dot org" Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2009-02/txt/msg00824.txt.bz2 ------- Comment #11 from jakub at gcc dot gnu dot org 2009-02-09 20:36 ------- Sure, but in your testcase you do the operation that requires the register while the register var is still in scope and live. The compiler doesn't have a possibility to compile it right. But, if we say it is ok for the compiler to move an unrelated 1 << somevar or call, stringop etc. into a block where the register var is live and ICE because the compiler did it, we'd basically forbid all uses of register vars. Automatic register vars are there mainly to support inline asm hardcoded inputs/outputs for which you don't have special register classes, programmers using them know very well the limitations and that they only copy prepared stuff from other variables into the register variables, do inline asm and copy back the results from local register vars to other vars. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39139