From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8333 invoked by alias); 17 Jun 2009 02:12:46 -0000 Received: (qmail 8323 invoked by uid 22791); 17 Jun 2009 02:12:45 -0000 X-SWARE-Spam-Status: No, hits=-2.5 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (66.187.233.31) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 17 Jun 2009 02:12:39 +0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n5H2CbQr000928; Tue, 16 Jun 2009 22:12:37 -0400 Received: from omfg.slc.redhat.com (vpn-13-22.rdu.redhat.com [10.11.13.22]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n5H2CaRt005754; Tue, 16 Jun 2009 22:12:36 -0400 Message-ID: <4A385135.3070308@redhat.com> Date: Wed, 17 Jun 2009 02:12:00 -0000 From: Jeff Law User-Agent: Thunderbird 2.0.0.21 (X11/20090320) MIME-Version: 1.0 To: Ian Lance Taylor CC: Adam Nemet , gcc@gcc.gnu.org Subject: Re: Rationale for an old TRUNCATE patch References: In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-IsSubscribed: yes Mailing-List: contact gcc-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-owner@gcc.gnu.org X-SW-Source: 2009-06/txt/msg00388.txt.bz2 Ian Lance Taylor wrote: > Adam Nemet writes: > > >> I am trying to understand the checkin by Jeff Law from about 11 years ago: >> >> r19204 | law | 1998-04-14 01:04:21 -0700 (Tue, 14 Apr 1998) | 4 lines >> >> >> * combine.c (simplify_rtx, case TRUNCATE): Respect value of >> TRULY_NOOP_TRUNCATION. >> >> >> Index: combine.c >> =================================================================== >> --- combine.c (revision 19018) >> +++ combine.c (revision 19204) >> @@ -3736,7 +3736,9 @@ simplify_rtx (x, op0_mode, last, in_dest >> if (GET_MODE_CLASS (mode) == MODE_PARTIAL_INT) >> break; >> >> - if (GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT) >> + if (GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT >> + && TRULY_NOOP_TRUNCATION (GET_MODE_BITSIZE (mode), >> + GET_MODE_BITSIZE (GET_MODE (XEXP (x, 0))))) >> SUBST (XEXP (x, 0), >> force_to_mode (XEXP (x, 0), GET_MODE (XEXP (x, 0)), >> GET_MODE_MASK (mode), NULL_RTX, 0)); >> >> This optimization simplifies the input to a truncate by only computing bits >> that won't be eliminated by the truncation. Normally these are the bits in >> the output mode mask. Note that the optimization does not change the truncate >> into a low-part subreg, which would pretty automatically warrant the >> TRULY_NOOP_TRUNCATION check. >> > > I agree that this patch looks wrong in todays compiler. There should be > no need to call TRULY_NOOP_TRUNCATION if you are in a TRUNCATE anyhow. > Based on reviewing my old notes, we do have to ensure that combine doesn't replace a TRUNCATE with a SUBREG as that can result in having a 32bit value that isn't sign-extended, which clearly causes MIPS64 ports grief. Jeff