From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11179 invoked by alias); 17 Feb 2006 17:49:39 -0000 Received: (qmail 11170 invoked by uid 22791); 17 Feb 2006 17:49:38 -0000 X-Spam-Check-By: sourceware.org Received: from mail.overta.ru (HELO overta.ru) (217.65.208.5) by sourceware.org (qpsmtpd/0.31) with ESMTP; Fri, 17 Feb 2006 17:49:37 +0000 Received: from [217.65.223.248] (HELO localhost) by overta.ru (CommuniGate Pro SMTP 4.2.9) with ESMTP id 33937254; Fri, 17 Feb 2006 20:49:33 +0300 To: Ian Lance Taylor Cc: Denis Chertykov , Eric Christopher , gcc@gcc.gnu.org Subject: Re: CAN_ELIMINATE question References: <93106CFF-7969-45F5-B56B-70CFBBBEAD83@apple.com> From: Denis Chertykov Date: Fri, 17 Feb 2006 17:49:00 -0000 In-Reply-To: Message-ID: User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.4 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-IsSubscribed: yes Mailing-List: contact gcc-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-owner@gcc.gnu.org X-SW-Source: 2006-02/txt/msg00349.txt.bz2 Ian Lance Taylor writes: > Denis Chertykov writes: > > > > > I think that better to call update_eliminables() somewhere after > > > > setup_save_areas() > > > > > > Exactly. We do that. About 15 lines after the lines you quoted > > > above. > > > > > > What am I missing? > > > > I'm (exactly AVR port) need in call to update_eliminables() somewhere > > between setup_save_areas() and calculate_needs_all_insns() > > (Not "about 15 lines after" ;) because all bad things happened inside > > calculate_needs_all_insns(). > > > > calculate_needs_all_insns() collect wrong reloads because > > reg_eliminate structure for FP->SP have wrong can_eliminate field. > > But then we go around the loop again, so everything should get > recalculated based on the new assumptions. Doesn't that happen for > you? If you mean the "continue" here: if (caller_save_needed) setup_save_areas (); /* If we allocated another stack slot, redo elimination bookkeeping. */ if (starting_frame_size != get_frame_size ()) continue; -------^^^^^^^^^ then answer no because only set_initial_elim_offsets() will be called. set_initial_elim_offsets() doesn't change reg_eliminate[].can_eliminate flag. If you mean a call update_eliminables() after calculate_needs_all_insns() then answer no (again :) because all wrong things already happened inside calculate_needs_all_insns() and compiler will call select_reload_regs() -> find_reload_regs() -> spill_failure() Denis.