From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by sourceware.org (Postfix) with ESMTPS id 7BA1F3858D28 for ; Mon, 8 Apr 2024 08:47:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 7BA1F3858D28 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=irisa.fr Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=irisa.fr ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 7BA1F3858D28 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=192.134.164.104 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1712566048; cv=none; b=cZ7r4WZRxSalvu/uG8jld/VYXxhlJzcMHWQgfXeeDMn3Nxo9CPP4ZUkE0ZZN8HgohJQN6xP4OPf4xuFgzpsR6BB1TNeMejzHU377Zm9bGPlBrexM+RsPXpXfh7v1bv0W+/wwiJit1FcOyimvDK1QfQ6kjsK5fcscBdz43bs6y8g= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1712566048; c=relaxed/simple; bh=aYNhh9vfp4JK1u++LnLFIUnINNn6rkwqGlSorl+4XJE=; h=Message-ID:Date:MIME-Version:Subject:To:From; b=JJD/qeW23gcZ3Ke2iy7sQizlUVTsePqRR/ca/F8eYkxAIIw0rdpOVvPTunD0S8XUpEbWunI9EFC+Zx1yLZvomCaLBjEC+LhNW53nrhhKvW5HWKQQr+GlNFuNSrGY9cW353EY8XHWuzh/tPmTekn1J7OkTo/w3edJ9hA5cs06HR4= ARC-Authentication-Results: i=1; server2.sourceware.org Authentication-Results: mail3-relais-sop.national.inria.fr; dkim=none (message not signed) header.i=none X-Ironport-Dmarc-Check-Result: validskip X-IronPort-AV: E=Sophos;i="6.07,186,1708383600"; d="scan'208,217";a="84132815" Received: from 88-170-28-240.subs.proxad.net (HELO [192.168.1.189]) ([88.170.28.240]) by mail3-relais-sop.national.inria.fr with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Apr 2024 10:47:22 +0200 Content-Type: multipart/alternative; boundary="------------Sw9sm0SA2eCGi71YkZAOVWXl" Message-ID: <71f1d47f-a687-4b68-8538-97eda5fb91ec@irisa.fr> Date: Mon, 8 Apr 2024 10:47:21 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [gimple-ssa] result_decl and ssa_name To: Richard Biener Cc: gcc@gcc.gnu.org References: <7b63c4ff-b32e-44ad-9b25-3f8f2d138056@irisa.fr> Content-Language: fr, en-US From: Pierrick Philippe In-Reply-To: X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,HTML_MESSAGE,KAM_DMARC_STATUS,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,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: This is a multi-part message in MIME format. --------------Sw9sm0SA2eCGi71YkZAOVWXl Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On 06/04/2024 14:53, Richard Biener wrote: > On Fri, Apr 5, 2024 at 3:44 PM Pierrick Philippe > wrote: >> On 05/04/2024 14:46, Richard Biener wrote: >> >> On Fri, Apr 5, 2024 at 1:59 PM Pierrick Philippe >> wrote: >> >> Hi all, >> >> I do have a question regarding ssa_name and result_decl. >> >> For example on the following gimple function: >> >> int f () >> { >> int x; >> int D.2747; >> int _2; >> >> : >> x_1 = 42; >> _2 = x_1; >> >> : >> : >> return _2; >> >> } >> >> On the above example, using the macro SSA_NAME_VAR() on _2 does not >> yield anything usable. >> Neither to call ssa_default_def() on the result of the result_decl >> obtain through macro DECL_RESULT(). >> >> Is there a way to get the ssa_name corresponding to the result_decl of a >> function obtained through the use of macro DECL_RESULT() on a fn_decl? >> And/or the other way around? I.e., from the returned ssa_name of a >> function to the result_decl of that function? >> >> I totally might be missing something here, but I cannot figure out what. >> >> DECL_RESULT isn't always used (as in your example). Not all SSA names >> have corresponding declarations, we have "anonymous" SSA names which >> have a NULL_TREE SSA_NAME_VAR (such as the _2 in your example). >> >> I see, that makes so much more sense to me now. >> >> What do you try to find in the end? If you want to find all returns you can >> walk predecessors of EXIT_BLOCK and look at their last stmt whether they >> are greturn statements. >> >> I am implementing a state_machine within the analyzer, and I am trying to understand where would be the best place to propagate the state of the return value. >> I intuitively thought it would be best to do so in the state_machine::on_pop_frame() method, which is called by the analyzer between the two frames of the caller and the callee. What I do have access to is the struct function of the callee/caller, the gcall instruction in the caller and the callee have been processed by my analysis. > It might make sense to record the analysis of the return value in > meta-data that the analyzer keeps and access it that way. > Other than that you'd have to do it the way I said with finding the > greturn stmts again and look at what is returned there. That is what I had in mind, thanks for answering me. I do have another question though, how do you obtain the decl_context of such an ssa_name? The DECL_CONTEXT macro is failing during the tree check and I ha ve no idea how to know where a given ssa_name is declared without accessing its inner var (through SSA_NAME_VAR). And this operation is failing on _i ssa_name trees. >> And to illustrate, here I do have the _2 ssa_name and its state which I know in that case should be propagate to the lhs of the caller gcall instruction. >> >> Again I might be taking this in a wrong way. >> >> Richard. >> >> Thanks for your time, >> >> Pierrick --------------Sw9sm0SA2eCGi71YkZAOVWXl--