From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 80111 invoked by alias); 31 May 2017 16:33:15 -0000 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 Received: (qmail 80091 invoked by uid 89); 31 May 2017 16:33:14 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.4 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,RCVD_IN_SORBS_SPAM,SPF_PASS autolearn=ham version=3.3.2 spammy=match_test, HX-Received:sk:e22mr12, HX-Received:10.223.155.214 X-HELO: mail-wm0-f46.google.com Received: from mail-wm0-f46.google.com (HELO mail-wm0-f46.google.com) (74.125.82.46) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 31 May 2017 16:33:13 +0000 Received: by mail-wm0-f46.google.com with SMTP id b84so125818095wmh.0 for ; Wed, 31 May 2017 09:33:16 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=xexschtSWQ4uTVd1GJC7/MAArigZFPAe5Rv7Yl4o8j4=; b=NueWXEeJ+8r9g7AZKfYl9kDWV3rDqKRa/xkCv9JkKCLRI2MQm+A/RoWUWQ6j1/weZn kkaAdslf9M9Sc78iqqJePg7aS3Oz0xIUxJ7e39FnAC47OICcmPSqDgotZHH8GQdY8gHr AIR9p4iP7e8AeJLKZxjqSibyNODsPfBZMHNU5Si3RDG5xGjwo6sx6YhY9f/IDd9nYzEq cuMBAs/0sujZ1SdIRR3R9JKmAJFYMPqDPt6JAPABMug272qqiJbAcNETKtMiVZj3hEQ6 1O4hEXxwQXdt9K9G8ntmSyEvlAhZ0Oo276/bFr3GpYbA+dzClyDKQu8dh63bixvCyyN8 zcFg== X-Gm-Message-State: AODbwcDvqszpIYw5yNvMzoA8t/wuwJo1trVML/nS9ZqMeJEeiilqFCun iOQU1HvbiCES3+CG X-Received: by 10.223.155.214 with SMTP id e22mr1259994wrc.33.1496248394793; Wed, 31 May 2017 09:33:14 -0700 (PDT) Received: from localhost (host86-164-133-102.range86-164.btcentralplus.com. [86.164.133.102]) by smtp.gmail.com with ESMTPSA id r130sm14116444wmg.4.2017.05.31.09.33.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 31 May 2017 09:33:13 -0700 (PDT) Date: Wed, 31 May 2017 16:40:00 -0000 From: Andrew Burgess To: Claudiu Zissulescu Cc: gcc-patches@gcc.gnu.org, Francois.Bedard@synopsys.com, Claudiu Zissulescu Subject: Re: [PATCH 6/7] [ARC] Prevent moving stores to the frame before the stack adjustment. Message-ID: <20170531163313.GI25719@embecosm.com> References: <1495189862-20533-1-git-send-email-claziss@synopsys.com> <1495189862-20533-7-git-send-email-claziss@synopsys.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1495189862-20533-7-git-send-email-claziss@synopsys.com> X-Editor: GNU Emacs [ http://www.gnu.org/software/emacs ] User-Agent: Mutt/1.6.1 (2016-04-27) X-IsSubscribed: yes X-SW-Source: 2017-05/txt/msg02386.txt.bz2 * Claudiu Zissulescu [2017-05-19 12:31:01 +0200]: > From: Claudiu Zissulescu > > If the stack pointer is needed, emit a special barrier that will prevent > the scheduler from moving stores to the frame before the stack adjustment. > > 2017-01-03 Claudiu Zissulescu > > * config/arc/arc.c (arc_expand_prologue): Emit a special barrier > to prevent store reordering. > * config/arc/arc.md (UNSPEC_ARC_STKTIE): Define. > (type): Add block type. > (stack_tie): Define special instruction to be used in > expand_prologue. Given the description the code looks fine. It would be nice to see more of a _why_ in the commit message. I'm guessing this is either something related to signal handling, or debugging... I don't see why this would be needed for functional correctness. Thanks, Andrew > --- > gcc/config/arc/arc.c | 10 +++++++++- > gcc/config/arc/arc.md | 15 ++++++++++++++- > 2 files changed, 23 insertions(+), 2 deletions(-) > > diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c > index ff86f6c..0c4c901 100644 > --- a/gcc/config/arc/arc.c > +++ b/gcc/config/arc/arc.c > @@ -3030,7 +3030,15 @@ arc_expand_prologue (void) > frame_size_to_allocate -= first_offset; > /* Allocate the stack frame. */ > if (frame_size_to_allocate > 0) > - frame_stack_add ((HOST_WIDE_INT) 0 - frame_size_to_allocate); > + { > + frame_stack_add ((HOST_WIDE_INT) 0 - frame_size_to_allocate); > + /* If the frame pointer is needed, emit a special barrier that > + will prevent the scheduler from moving stores to the frame > + before the stack adjustment. */ > + if (arc_frame_pointer_needed ()) > + emit_insn (gen_stack_tie (stack_pointer_rtx, > + hard_frame_pointer_rtx)); > + } > > /* Setup the gp register, if needed. */ > if (crtl->uses_pic_offset_table) > diff --git a/gcc/config/arc/arc.md b/gcc/config/arc/arc.md > index 743a844..6cd192a 100644 > --- a/gcc/config/arc/arc.md > +++ b/gcc/config/arc/arc.md > @@ -135,6 +135,7 @@ > UNSPEC_ARC_VMAC2HU > UNSPEC_ARC_VMPY2H > UNSPEC_ARC_VMPY2HU > + UNSPEC_ARC_STKTIE > ]) > > (define_c_enum "vunspec" [ > @@ -205,7 +206,7 @@ > simd_vcompare, simd_vpermute, simd_vpack, simd_vpack_with_acc, > simd_valign, simd_valign_with_acc, simd_vcontrol, > simd_vspecial_3cycle, simd_vspecial_4cycle, simd_dma, mul16_em, div_rem, > - fpu" > + fpu, block" > (cond [(eq_attr "is_sfunc" "yes") > (cond [(match_test "!TARGET_LONG_CALLS_SET && (!TARGET_MEDIUM_CALLS || GET_CODE (PATTERN (insn)) != COND_EXEC)") (const_string "call") > (match_test "flag_pic") (const_string "sfunc")] > @@ -6547,6 +6548,18 @@ > (set_attr "predicable" "yes,no,no,yes,no") > (set_attr "cond" "canuse,nocond,nocond,canuse_limm,nocond")]) > > +(define_insn "stack_tie" > + [(set (mem:BLK (scratch)) > + (unspec:BLK [(match_operand:SI 0 "register_operand" "rb") > + (match_operand:SI 1 "register_operand" "rb")] > + UNSPEC_ARC_STKTIE))] > + "" > + "" > + [(set_attr "length" "0") > + (set_attr "iscompact" "false") > + (set_attr "type" "block")] > + ) > + > ;; include the arc-FPX instructions > (include "fpx.md") > > -- > 1.9.1 >