From patchwork Thu May 19 06:54:35 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Revital Eres X-Patchwork-Id: 96317 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id 9FC5AB6F7C for ; Thu, 19 May 2011 16:54:59 +1000 (EST) 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 09:54:35 +0300 Message-ID: Subject: [PATCH, SMS] Fix calculation of issue_rate From: Revital Eres To: Ayal Zaks Cc: gcc-patches@gcc.gnu.org, Patch Tracking Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org 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 ());