From patchwork Thu May 12 13:57:19 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Revital Eres X-Patchwork-Id: 95315 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 C7826B6FC2 for ; Thu, 12 May 2011 23:57:36 +1000 (EST) Received: (qmail 11886 invoked by alias); 12 May 2011 13:57:34 -0000 Received: (qmail 11874 invoked by uid 22791); 12 May 2011 13:57:34 -0000 X-SWARE-Spam-Status: No, hits=-1.4 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_LOW, TW_RR 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, 12 May 2011 13:57:21 +0000 Received: by ewy5 with SMTP id 5so498685ewy.20 for ; Thu, 12 May 2011 06:57:19 -0700 (PDT) MIME-Version: 1.0 Received: by 10.213.33.67 with SMTP id g3mr676038ebd.13.1305208639598; Thu, 12 May 2011 06:57:19 -0700 (PDT) Received: by 10.213.108.203 with HTTP; Thu, 12 May 2011 06:57:19 -0700 (PDT) In-Reply-To: References: Date: Thu, 12 May 2011 16:57:19 +0300 Message-ID: Subject: Re: [PATCH, SMS 1/3] Support closing_branch_deps (second try) From: Revital Eres To: Ramana Radhakrishnan 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 Ramana, Following our conversation; here is the patch again without the arm specific flags. Tested on ARM machine configured with [--with-arch=armv7-a] --with-mode=thumb. OK for mainline? Thanks, Revital testsuite/Changlog:        * gcc.target/arm/sms-9.c: New file.        * gcc.target/arm/sms-10.c: New file. Index: arm/sms-9.c =================================================================== --- arm/sms-9.c (revision 0) +++ arm/sms-9.c (revision 0) @@ -0,0 +1,73 @@ +/* { dg-do run } */ +/* { dg-require-effective-target arm_thumb2_ok } */ +/* { dg-options "-O2 -fmodulo-sched -fdump-rtl-sms -fno-auto-inc-dec" } */ + +extern void abort (void); + +int filter1[8][4] = { + { + 23170, -23170, -23170, 23170,}, + { + 22005, -26319, -16846, 29621,}, + { + 22005, -26319, -16846, 29621,}, + { + 5, -26319, -16846, 29621,}, + { + 55, -26319, -16846, 29621,}, + { + 77, -26319, -16846, 29621,}, + { + 22005, -26319, -16846, 29621,}, + { + 22005, -26319, -16846, 29621,}, + +}; + + +int out[32] = { + 22, -22, -22, 22, 21, -25, -16, 28, 21, -25, -16, 28, 0, -25, -16, 28, 0, + -25, -16, 28, 0, -25, -16, 28, 21, -25, -16, 28, 21, -25, -16, 28 +}; + +__attribute__ ((noinline)) +static void +foo (int *arr, int *accums) +{ + typedef int NN[8][4]; + static NN *filter; + int i; + filter = &filter1; + + int *filterp; + int *arrp; + arrp = arr; + filterp = (int *) ((*filter)[0]); + i = 32; + + while (i--) + { + *accums++ = (arrp[0] * filterp[0] + arrp[8] * filterp[0]) / 32768; + filterp += 1; + } +} + +int +main () +{ + int inarr[32]; + int accums[32]; + int i; + for (i = 0; i < 32; i++) + inarr[i] = i << 2; + foo (inarr, accums); + for (i = 0; i < 32; i++) + if (out[i] != accums[i]) + abort (); + return 0; +} + +/* { dg-final { scan-rtl-dump-times "SMS succeeded" 1 "sms" } } */ +/* { dg-final { cleanup-rtl-dump "sms" } } */ + + Index: arm/sms-10.c =================================================================== --- arm/sms-10.c (revision 0) +++ arm/sms-10.c (revision 0) @@ -0,0 +1,35 @@ +/* { dg-do run } */ +/* { dg-require-effective-target arm_thumb1_ok } */ +/* { dg-options "-O2 -fmodulo-sched -fdump-rtl-sms -fno-auto-inc-dec -fmodulo-sched-allow-regmoves -gtoggle" } */ + +extern void abort (void); + +unsigned char filter1[8] = { 2, 3, 1, 2, 3, 2, 2, 1 }; + + +void +foo (int val, unsigned int size, unsigned char *dest) +{ + while (size != 0) + { + *dest++ = val & 0xff; + --size; + } +} + + +int +main () +{ + int i; + foo (50, 4, filter1); + for (i = 0; i < 4; i++) + if (filter1[i] != 50) + abort (); + return 0; +} + +/* { dg-final { scan-rtl-dump-times "OK" 1 "sms" } } */ +/* { dg-final { cleanup-rtl-dump "sms" } } */ + +