From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 44020 invoked by alias); 26 Jul 2017 17:31:14 -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 43750 invoked by uid 89); 26 Jul 2017 17:31:13 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.9 required=5.0 tests=BAYES_00,KAM_LAZY_DOMAIN_SECURITY,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=no version=3.3.2 spammy=30pm X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 26 Jul 2017 17:31:11 +0000 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id C5583285D0; Wed, 26 Jul 2017 17:31:09 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com C5583285D0 Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=jakub@redhat.com Received: from tucnak.zalov.cz (ovpn-116-143.ams2.redhat.com [10.36.116.143]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 62B0B61F3F; Wed, 26 Jul 2017 17:31:09 +0000 (UTC) Received: from tucnak.zalov.cz (localhost [127.0.0.1]) by tucnak.zalov.cz (8.15.2/8.15.2) with ESMTP id v6QHV6sT008948; Wed, 26 Jul 2017 19:31:06 +0200 Received: (from jakub@localhost) by tucnak.zalov.cz (8.15.2/8.15.2/Submit) id v6QHV4Nn008947; Wed, 26 Jul 2017 19:31:04 +0200 Date: Wed, 26 Jul 2017 17:31:00 -0000 From: Jakub Jelinek To: Richard Biener Cc: Jan Hubicka , gcc-patches@gcc.gnu.org Subject: Re: Patch ping Message-ID: <20170726173103.GX2123@tucnak> Reply-To: Jakub Jelinek References: <20170725094050.GR2123@tucnak> <20170726134715.GW2123@tucnak> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.7.1 (2016-10-04) X-IsSubscribed: yes X-SW-Source: 2017-07/txt/msg01700.txt.bz2 On Wed, Jul 26, 2017 at 04:13:30PM +0200, Richard Biener wrote: > > > You don't seem to use 'size' anywhere. > > > > size I thought about but then decided not to do anything with it. > > There are two cases, one is where there is no ADDR_EXPR and it actually > > a memory reference. > > In that case in theory the size could be used, but it would need > > to be used only for the positive offsets, so like: > > if (off > 0) { > > if (ptr + off + size < ptr) > > runtime_fail; > > } else if (ptr + off > ptr) > > runtime_fail; > > but when it is actually a memory reference, I suppose it will fail > > at runtime anyway when performing such an access, so I think it is > > unnecessary. And for the ADDR_EXPR case, the size is irrelevant, we > > are just taking address of the start of the object. > > > > > You fail to allow other handled components -- for no good reason? > > > > I was trying to have a quick bail out. What other handled components might > > be relevant? I guess IMAGPART_EXPR. For say BIT_FIELD_REF I don't think > > I can > > tree ptr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (t)), t); > > REALPART/IMAGPART_EXPR, yes. You can't address BIT_FIELD_REF > apart those on byte boundary (&vector[4] is eventually folded to > a BIT_FIELD_REF). Similar for VIEW_CONVERT_EXPR, but you are > only building the address on the base? > > > > You fail to handle > > > &MEM[ptr + CST] a canonical gimple invariant way of ptr +p CST, > > > the early out bitpos == 0 will cause non-instrumentation here. > > > > Guess I could use: > > if ((offset == NULL_TREE > > && bitpos == 0 > > && (TREE_CODE (inner) != MEM_REF > > || integer_zerop (TREE_OPERAND (inner, 1)))) > > The rest of the code will handle it. > > Yeah. > > > > > > (I'd just round down in the case of bitpos % BITS_PER_UNIT != 0) > > > > But then the > > tree ptr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (t)), t); > > won't work again. > > Hmm. So instead of building the address on the original tree you > could build the difference based on what get_inner_reference returns > in bitpos/offset? I'm building both addresses and subtracting them to get the offset. I guess the other option is to compute just the address of the base (i.e. base_addr), and add offset (if non-NULL) plus bitpos / BITS_PER_UNIT plus offset from the MEM_REF (if any). In that case it would probably handle any handled_component_p and bitfields too. Jakub