From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from nikam.ms.mff.cuni.cz (nikam.ms.mff.cuni.cz [195.113.20.16]) by sourceware.org (Postfix) with ESMTPS id E89CA3858C50; Tue, 22 Nov 2022 11:54:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org E89CA3858C50 Authentication-Results: sourceware.org; dmarc=fail (p=none dis=none) header.from=ucw.cz Authentication-Results: sourceware.org; spf=none smtp.mailfrom=kam.mff.cuni.cz Received: by nikam.ms.mff.cuni.cz (Postfix, from userid 16202) id 8C295284A97; Tue, 22 Nov 2022 12:54:01 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ucw.cz; s=gen1; t=1669118041; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=UNvLIq8RPhXvNhpnRcnM8ni78xZcEQgTNI03l5NO7Do=; b=j5zrAznDqroO/2QOXEooFDUHJCdhAkS6yKyYBy++VvLccKDTAL6jbXfBa5smlMQDmvvpQR z6qnjIYHEMib7GPyMxgDA6Lwhlpk4o7qMT5ufk9uy843R9NZZwv5eEbzqS6KX1OTFc05nW D9XhFuBUZ3TtiLzohsTInMJvR0SqGJQ= Date: Tue, 22 Nov 2022 12:54:01 +0100 From: Jan Hubicka To: Bernhard Reutner-Fischer Cc: gcc-patches@gcc.gnu.org, Bernhard Reutner-Fischer , gfortran ML Subject: Re: [PATCH 1/2] symtab: also change RTL decl name Message-ID: References: <20221109190225.96037-1-aldot@gcc.gnu.org> <20221109190225.96037-2-aldot@gcc.gnu.org> <20221117090219.2884af08@nbbrfq> <20221121204743.6e4e7d57@nbbrfq> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20221121204743.6e4e7d57@nbbrfq> X-Spam-Status: No, score=-4.7 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,KAM_SHORT,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=no 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 Mon, 21 Nov 2022 20:02:49 +0100 > Jan Hubicka wrote: > > > > Hi Honza, Ping. > > > Regtests cleanly for c,fortran,c++,ada,d,go,lto,objc,obj-c++ > > > Ok? > > > I'd need this for attribute target_clones for the Fortran FE. > > Sorry for delay here. > > > > void > > > > @@ -303,6 +301,10 @@ symbol_table::change_decl_assembler_name (tree decl, tree name) > > > > warning (0, "%qD renamed after being referenced in assembly", decl); > > > > > > > > SET_DECL_ASSEMBLER_NAME (decl, name); > > > > + /* Set the new name in rtl. */ > > > > + if (DECL_RTL_SET_P (decl)) > > > > + XSTR (XEXP (DECL_RTL (decl), 0), 0) = IDENTIFIER_POINTER (name); > > > > I am not quite sure how safe this is. We generally produce DECL_RTL > > when we produce assembly file. So if DECL_RTL is set then we probably > > already output the original function name and it is too late to change > > it. > > AFAICS we make_decl_rtl in the fortran FE in trans_function_start. I see, it may be a relic of something that is no longer necessary. Can you see why one needs DECL_RTL so early? > > > > > Also RTL is shared so changing it in-place is going to rewrite all the > > existing RTL expressions using it. > > > > Why the DECL_RTL is produced for function you want to rename? > > I think the fortran FE sets it quite early when lowering a function. > Later, when the ME creates the target_clones, it wants to rename the > initial function to initial_fun.default for the default target. > That's where the change_decl_assembler_name is called (only on the > decl). > But nobody changes the RTL name, so the ifunc (which should be the > initial, unchanged name) is properly emitted but > assemble_start_function uses the same, unchanged, initial fnname it > later obtains by get_fnname_from_decl which fetches the (wrong) initial > name where it should use the .default target name. > See > https://gcc.gnu.org/pipermail/gcc-patches/2022-November/605081.html > > I'm open to other suggestions to make this work in a different way, of > course. Maybe we're missing some magic somewhere that might share the > name between the fndecl and the RTL XSTR so the RTL is magically > updated by that single SET_ECL_ASSEMBLER_NAME in > change_decl_assembler_name? But i didn't quite see where that'd be? I think we should start by understanding why Fortran FE produces DECL_RTL early. It was written before symbol table code emerged, it may be simply an oversight I made while converting FE to symbol table. Honza > > thanks, > > > Honza > > > > + > > > > if (alias) > > > > { > > > > IDENTIFIER_TRANSPARENT_ALIAS (name) = 1; > > > >