From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dedi548.your-server.de (dedi548.your-server.de [85.10.215.148]) by sourceware.org (Postfix) with ESMTPS id F2F95384D6ED for ; Tue, 6 Dec 2022 13:11:57 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org F2F95384D6ED Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embedded-brains.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embedded-brains.de Received: from sslproxy01.your-server.de ([78.46.139.224]) by dedi548.your-server.de with esmtpsa (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1p2Xjo-000M3q-99; Tue, 06 Dec 2022 14:11:56 +0100 Received: from [82.100.198.138] (helo=mail.embedded-brains.de) by sslproxy01.your-server.de with esmtpsa (TLSv1.3:TLS_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p2Xjo-000TRQ-6b; Tue, 06 Dec 2022 14:11:56 +0100 Received: from localhost (localhost [127.0.0.1]) by mail.embedded-brains.de (Postfix) with ESMTP id D22CE4800BE; Tue, 6 Dec 2022 14:11:55 +0100 (CET) Received: from mail.embedded-brains.de ([127.0.0.1]) by localhost (zimbra.eb.localhost [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id hEY0Cn0cW_Nn; Tue, 6 Dec 2022 14:11:55 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by mail.embedded-brains.de (Postfix) with ESMTP id 5281E48015A; Tue, 6 Dec 2022 14:11:55 +0100 (CET) X-Virus-Scanned: amavisd-new at zimbra.eb.localhost Received: from mail.embedded-brains.de ([127.0.0.1]) by localhost (zimbra.eb.localhost [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id bZWs24TFPPjy; Tue, 6 Dec 2022 14:11:55 +0100 (CET) Received: from [10.10.171.6] (unknown [10.10.171.6]) by mail.embedded-brains.de (Postfix) with ESMTPSA id 124E74800BE; Tue, 6 Dec 2022 14:11:55 +0100 (CET) Message-ID: <8dfe2880-783c-d63e-2315-959455988294@embedded-brains.de> Date: Tue, 6 Dec 2022 14:11:54 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.5.0 Subject: Re: -fprofile-update=atomic vs. 32-bit architectures Content-Language: en-US To: Richard Biener Cc: GCC Development References: <13ec35ee-19b2-536c-42d9-28efcd01df5b@embedded-brains.de> <582f9b96-47e9-6005-8d62-fd209f979848@embedded-brains.de> From: Sebastian Huber In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable X-Authenticated-Sender: smtp-embedded@poldinet.de X-Virus-Scanned: Clear (ClamAV 0.103.7/26742/Tue Dec 6 09:18:20 2022) X-Spam-Status: No, score=-5.4 required=5.0 tests=BAYES_00,KAM_DMARC_STATUS,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On 05/12/2022 08:44, Richard Biener wrote: > On Mon, Dec 5, 2022 at 8:26 AM Sebastian Huber > wrote: >> On 08/11/2022 11:25, Richard Biener wrote: >>>> It would be great to have a code example for the construction of the= "if >>>> (f()) f();". >>> I think for the function above we need to emit __atomic_fetch_add_8, >>> not the emulated form because we cannot insert the required control >>> flow (if (f()) f()) on an edge. The __atomic_fetch_add_8 should then= be >>> lowered after the instrumentation took place. >> Would it help to change the >> >> if (__atomic_add_fetch_4 ((unsigned int *) &val, 1, __ATOMIC_REL= AXED) >> =3D=3D 0) >> __atomic_fetch_add_4 (((unsigned int *) &val) + 1, 1, >> __ATOMIC_RELAXED); >> >> into >> >> unsigned int v =3D __atomic_add_fetch_4 ((unsigned int *) &val, = 1, >> __ATOMIC_RELAXED) >> =3D=3D 0) >> v =3D (unsigned int)(v =3D=3D 0); >> __atomic_fetch_add_4 (((unsigned int *) &val) + 1, 1, >> __ATOMIC_RELAXED); > that's supposed to add 'v' instead of 1? Possibly use uint32_t here > (aka uint32_type_node). >=20 >> to get rid of an inserted control flow? > That for sure wouldn't require any changes to how the profile > instrumentation works, > so yes it would be simpler. Yes, this seems to work. After a bit of trial and error I ended up with=20 something in gimple_gen_edge_profiler() like this (endian support is=20 missing): else if (flag_profile_update =3D=3D PROFILE_UPDATE_SPLIT_ATOMIC) { tree addr =3D tree_coverage_counter_addr (GCOV_COUNTER_ARCS, edgen= o); tree f =3D builtin_decl_explicit (BUILT_IN_ATOMIC_ADD_FETCH_4); gcall *stmt1 =3D gimple_build_call (f, 3, addr, one, build_int_cst (integer_type_node, MEMMODEL_RELAXED)); tree low =3D create_tmp_var (uint32_type_node); gimple_call_set_lhs (stmt1, low); tree is_zero =3D create_tmp_var (boolean_type_node); gassign *stmt2 =3D gimple_build_assign (is_zero, EQ_EXPR, low, build_zero_cst (uint32_type_node)); tree high_inc =3D create_tmp_var (uint32_type_node); gassign *stmt3 =3D gimple_build_assign (high_inc, COND_EXPR, is_ze= ro, build_one_cst (uint32_type_node), build_zero_cst (uint32_type_node)); tree addr_high =3D create_tmp_var (TREE_TYPE (addr)); gassign *stmt4 =3D gimple_build_assign (addr_high, addr); gassign *stmt5 =3D gimple_build_assign (addr_high, POINTER_PLUS_EX= PR, addr_high, build_int_cst (size_type_node, 4)); gcall *stmt6 =3D gimple_build_call (f, 3, addr_high, high_inc, build_int_cst (integer_type_node, MEMMODEL_RELAXED)); gsi_insert_on_edge (e, stmt1); gsi_insert_on_edge (e, stmt2); gsi_insert_on_edge (e, stmt3); gsi_insert_on_edge (e, stmt4); gsi_insert_on_edge (e, stmt5); gsi_insert_on_edge (e, stmt6); } It can be probably simplified. The generated code: .type f, @function f: lui a4,%hi(__gcov0.f) li a3,1 addi a4,a4,%lo(__gcov0.f) amoadd.w a5,a3,0(a4) lui a4,%hi(__gcov0.f+4) addi a5,a5,1 seqz a5,a5 addi a4,a4,%lo(__gcov0.f+4) amoadd.w zero,a5,0(a4) li a0,3 ret looks good for this code: int f(void) { return 3; } The loading of the high address could be probably optimized from lui a4,%hi(__gcov0.f+4) addi a4,a4,%lo(__gcov0.f+4) to addi a4,a4,4 I wasn't able to figure out how to do this. --=20 embedded brains GmbH Herr Sebastian HUBER Dornierstr. 4 82178 Puchheim Germany email: sebastian.huber@embedded-brains.de phone: +49-89-18 94 741 - 16 fax: +49-89-18 94 741 - 08 Registergericht: Amtsgericht M=C3=BCnchen Registernummer: HRB 157899 Vertretungsberechtigte Gesch=C3=A4ftsf=C3=BChrer: Peter Rasmussen, Thomas= D=C3=B6rfler Unsere Datenschutzerkl=C3=A4rung finden Sie hier: https://embedded-brains.de/datenschutzerklaerung/