From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 120854 invoked by alias); 4 Aug 2016 17:03:47 -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 120782 invoked by uid 89); 4 Aug 2016 17:03:46 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.6 required=5.0 tests=BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-qt0-f196.google.com Received: from mail-qt0-f196.google.com (HELO mail-qt0-f196.google.com) (209.85.216.196) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Thu, 04 Aug 2016 17:03:40 +0000 Received: by mail-qt0-f196.google.com with SMTP id u25so13673793qtb.3 for ; Thu, 04 Aug 2016 10:03:40 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:subject:to:references:cc:from:message-id :date:user-agent:mime-version:in-reply-to:content-transfer-encoding; bh=32VhC7TSkz9Q6sFisRND/XXH7HA90Vs/MiPIi+2auTo=; b=E6AWBn6lkeUtABRnBGUt3sIXz2ftzJvyPlnJYCbpSA2O8QlslkEkD6EM4AOf7KzvJP nsQlgE9WdzCBRAM1SAqzSdHzzT7G4cm/5kaaMbeT4Mm4E7fwpzQy+OPZdmyfOHhEvhhY PeXiZnnhIH4IWhzRIZqd6LVvkW7RjO1YyobCF/9iDU5MPl7gJPFm4VEzlI1CTgCfdegX z3xh5BMqQf+qbQ3e5DoXSou+awgBli0RDzFoT3YpL0quQrS/kH3C+dbyq7zMapV/nt+Y uafFoZkdZxk0wfesW8gTrDIg0nDKxg31c4CWkKREZgvoRQlg57tW7SsTrFU3sGePj20O WrQA== X-Gm-Message-State: AEkoouujhSARpP5OROEkZmWrfK7p9X7UA86txqMuWsdlAopZq1QTurDXCmlqNKAgNoaK9g== X-Received: by 10.200.52.182 with SMTP id w51mr7690435qtb.90.1470330218345; Thu, 04 Aug 2016 10:03:38 -0700 (PDT) Received: from ?IPv6:2601:181:c003:1930:a2a8:cdff:fe3e:b48? ([2601:181:c003:1930:a2a8:cdff:fe3e:b48]) by smtp.googlemail.com with ESMTPSA id 127sm7387148qkk.19.2016.08.04.10.03.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 04 Aug 2016 10:03:37 -0700 (PDT) Subject: Re: [PATCH 1/4] Cherry-pick fprofile-generate-atomic from google/gcc-4_9 branch To: =?UTF-8?Q?Martin_Li=c5=a1ka?= , gcc-patches@gcc.gnu.org References: <53c4f874443d63de99393a9816041ba75f1d605e.1470041316.git.mliska@suse.cz> <95628fa2-8719-bb82-d1ab-ca8d46355020@acm.org> <0ec1ad3f-0fc7-507e-878c-907adae1c011@suse.cz> <0e248978-3717-1d78-b3b1-9fc60ded5c8e@suse.cz> <882f0f98-9b33-a764-833b-ca61796f3143@acm.org> Cc: jh@suse.cz From: Nathan Sidwell Message-ID: <87f2bc4f-c4df-eadd-aec6-a937ed0ccaba@acm.org> Date: Thu, 04 Aug 2016 17:03:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 In-Reply-To: <882f0f98-9b33-a764-833b-ca61796f3143@acm.org> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-SW-Source: 2016-08/txt/msg00364.txt.bz2 On 08/04/16 12:43, Nathan Sidwell wrote: > How about: > gcov_t expected; > atomic_load (&counter[0], val, ...); > gcov_t delta = val == value ? 1 : -1; > atomic_add (&counter[1], delta); <-- or atomic_add_fetch > if (delta < 0) { > /* can we set counter[0]? */ > atomic_load (&counter[1], &expected, ...); > if (expected < 0) { > atomic_store (&counter[0], value, ...); > atomic_add (&counter[1], 2, ...); > } > } > atomic_add (&counter[2], 1, ...); we could do better by using compare_exchange storing value, and detect the race I mentioned: gcov_t expected, val; atomic_load (&counter[0], &val, ...); gcov_t delta = val == value ? 1 : -1; atomic_add (&counter[1], delta); if (delta < 0) { retry: /* can we set counter[0]? */ atomic_load (&counter[1], &expected, ...); if (expected < 0) { bool stored = atomic_compare_exchange (&counter[0], &val, &value, ...); if (!stored && val != value) goto retry; atomic_add (&counter[1], 2, ...); } } atomic_add (&counter[2], 1, ...); This corrects the off-by one issue. nathan