From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27352 invoked by alias); 19 May 2011 06:54:53 -0000 Received: (qmail 27272 invoked by uid 22791); 19 May 2011 06:54:51 -0000 X-SWARE-Spam-Status: No, hits=-1.6 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW X-Spam-Check-By: sourceware.org Received: from mail-ew0-f47.google.com (HELO mail-ew0-f47.google.com) (209.85.215.47) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 19 May 2011 06:54:37 +0000 Received: by ewy5 with SMTP id 5so773276ewy.20 for ; Wed, 18 May 2011 23:54:36 -0700 (PDT) MIME-Version: 1.0 Received: by 10.213.29.142 with SMTP id q14mr566600ebc.129.1305788075983; Wed, 18 May 2011 23:54:35 -0700 (PDT) Received: by 10.213.98.72 with HTTP; Wed, 18 May 2011 23:54:35 -0700 (PDT) Date: Thu, 19 May 2011 10:33:00 -0000 Message-ID: Subject: [PATCH, SMS] Fix calculation of issue_rate From: Revital Eres To: Ayal Zaks Cc: gcc-patches@gcc.gnu.org, Patch Tracking Content-Type: text/plain; charset=ISO-8859-1 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2011-05/txt/msg01354.txt.bz2 Hello, The issue rate is currently been set in SMS by calling targetm.sched.issue_rate function if it is defined. For rs6000 the issue_rate is 1 if !reload_completed && !flag_sched_pressure. To bypass that, SMS sets reload_completed to 1 before calling targetm.sched.issue_rate and restores it's original value after the call. The problem is that the issue rate is changed again to 1 because of the following chain of calls which occurs right after setting issue_rate in targetm.sched.issue_rate (): sms_schedule -> haifa_sched_init -> sched_init () -> targetm.sched.issue_rate () (in haifa-sched.c:3474) This time, when calling targetm.sched.issue_rate the issue_rate is set to 1 as reload_completed contains it's original value (zero). The attached patch tries to fix that. Tested (bootstrap and regtest) on ppc64-redhat-linux. OK for mainline? Thanks, Revital Changelog: * modulo-sched.c (sms_schedule): Fix stage_count calculation. Index: modulo-sched.c =================================================================== --- modulo-sched.c (revision 173786) +++ modulo-sched.c (working copy) @@ -924,6 +924,7 @@ sms_schedule (void) basic_block condition_bb = NULL; edge latch_edge; gcov_type trip_count = 0; + int temp; loop_optimizer_init (LOOPS_HAVE_PREHEADERS | LOOPS_HAVE_RECORDED_EXITS); @@ -933,22 +934,19 @@ sms_schedule (void) return; /* There are no loops to schedule. */ } + temp = reload_completed; + reload_completed = 1; /* Initialize issue_rate. */ if (targetm.sched.issue_rate) - { - int temp = reload_completed; - - reload_completed = 1; - issue_rate = targetm.sched.issue_rate (); - reload_completed = temp; - } + issue_rate = targetm.sched.issue_rate (); else issue_rate = 1; - + /* Initialize the scheduler. */ setup_sched_infos (); haifa_sched_init (); - + reload_completed = temp; + /* Allocate memory to hold the DDG array one entry for each loop. We use loop->num as index into this array. */ g_arr = XCNEWVEC (ddg_ptr, number_of_loops ());