From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21207 invoked by alias); 22 Jun 2007 09:50:50 -0000 Received: (qmail 21170 invoked by uid 48); 22 Jun 2007 09:50:39 -0000 Date: Fri, 22 Jun 2007 09:50:00 -0000 Message-ID: <20070622095039.21169.qmail@sourceware.org> X-Bugzilla-Reason: CC References: Subject: [Bug target/32413] [4.3 Regression] internal compiler error: in reload_cse_simplify_operands, at postreload.c:396 In-Reply-To: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "ubizjak at gmail dot com" 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: 2007-06/txt/msg02018.txt.bz2 ------- Comment #2 from ubizjak at gmail dot com 2007-06-22 09:50 ------- The problem here is exposed with core2_cost table, where mmxsse_to_integer is as low (2 units) as move between integer registers (2 units). Such a low value causes gcc to happily move SImode values between SSE and integer registers. The problem itself is in ix86_modes_tieable_p(). Since all integer modes are tieable, They have to be tieable in ALL register classes. Due to this, we must enable HImode and QImode moves to, from and between SSE and MMX register. A question arises, if this is a wise thing to do. Having all integer modes wandering around in SSE as well as integer registers is not a good thing, as we will have many moves between these sets (you can't add a SImode value in SSE, SSE regs can't be index registers, etc). Due to this, perhaps the best solution is to artifically raise mmxsse_to_integer to 8 units, and this will effectively prevent moves to and from register sets. -- ubizjak at gmail dot com changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Ever Confirmed|0 |1 Last reconfirmed|0000-00-00 00:00:00 |2007-06-22 09:50:39 date| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32413