From patchwork Fri Apr 19 23:05:47 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guillaume Gomez X-Patchwork-Id: 88782 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 9C5B2385DC3F for ; Fri, 19 Apr 2024 23:06:30 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wm1-x329.google.com (mail-wm1-x329.google.com [IPv6:2a00:1450:4864:20::329]) by sourceware.org (Postfix) with ESMTPS id 66A003858D37; Fri, 19 Apr 2024 23:06:00 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 66A003858D37 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 66A003858D37 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::329 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1713567962; cv=none; b=xRYF1kF+JhkG0EGmST/xyur3bEOcwTRkZjjK54xQGd/EDZ6xgr6JFJ/2ab67QJLdKR4KYRcF36qYygwjXTnVFt3t6Sj6vLRGP+hF7G313g+M9f0XFWqcSFrPCHGe1vSwTx4I156eIp7j47q2vaaceMPb08EcGfN5o1IeTORBY/M= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1713567962; c=relaxed/simple; bh=Xqy6+48iDvCKxC88TkOstJSUr1GmcTJp8IVwd8ARfho=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=lRE3nDAgiRXZUPqWePrwb2hHn4fGA4AKU4xnhzN5hnuNznIdI4zj+uQ8u0PQCsGXbcKCcLgObCg3P/HFCw8O9S5e8icLwlqluXcSbLxoD55xwSQ0nhEHbouLD1f082cBgQvFPKzu7k9O51HPiC44uGw67kMcFVlsSFTTddXKJns= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x329.google.com with SMTP id 5b1f17b1804b1-418c979ddf3so18849075e9.0; Fri, 19 Apr 2024 16:06:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713567959; x=1714172759; darn=gcc.gnu.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=EOzDYJvtdny0y7nR6bUmBFewM3bPVpDwuUYCNvarM0E=; b=M93+6k9gOcy2fW/hoj3J4G8jcpIrPNuP6GqrdBq8Wk27DreBJWs9TjFp9akCqP/I5V TRf7p2WV3nfFZLPHE04JxnVwMe+hvu5K250OmQb/pLmO1JkzkBgkO3Hq39kaEUXxowVk IGtVvml1pe1RxmHIWL4cBvvCC2nl2cE9/FQVvZ4De0hVbZxLIxjcQc7ly1v/wGTFTQ7U IA8PPUCLFQiaN7FYoCDnLE2gqpawCyosXzVIfo+TDhZDtUiV8oqonhccva1XkfJ9d4d8 lvAx1zrqbq/sxEzYvzP2iK6Jje5VxwRVQl8K/F1g4HOs1/DERUo8aPzG8erG1bONmA2G BunQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713567959; x=1714172759; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=EOzDYJvtdny0y7nR6bUmBFewM3bPVpDwuUYCNvarM0E=; b=hq9eVcj+I+j7x68EVC0QsucjZN7P/u2DVdchvZOyPxLfPxHhs4IwzjlKgOl/BEYdLh OoJ9Zc3bWd5EkuEMmHr6qMTB9oSawWqiX9/YwgSDAgDs73N62LKwcMq5GELHV+l3eck/ p3F5GoDGihqrBNppz8CqJlV4ZAVuqfby2NytBsao5+x0tBs1jbj+j3RcvUNgYjnGwMT6 2ylc2g10mBfcOAAF8w7vIn2D/HbNDVpzbrxnZGRbglyYjquQkquAisrqzBgtZJFOugjs 9YM6x3huJd7VEuM68lyl2toIsoRUtGflQbXcejJnWWdpWeZfVPaQc8cjhjz44ZdUHWca eUIQ== X-Forwarded-Encrypted: i=1; AJvYcCUhnYDVvVQu+RHZF01PjVz4A1u4D5AHW6DHTzWEwTq7bOjL4m1eXThEH6PDmExUj1puqBEFaDo1qcKew+cn3kQ= X-Gm-Message-State: AOJu0YyviOGTRTeEx43a5Jlr58DBZaaAikBcV+i742rcQsVtT6TiT9ea 4yda1RuW6Y3hCp+oXN14Z7ezSV+E1rL51/5aNowSmn2IYn8+bG+yIuBr0PrEMt33J+2v2P3leHZ RGCzqPdmIz7R/6+0dxzowYykd7MLuxg== X-Google-Smtp-Source: AGHT+IFerkucS1AlZkyWo4pDar/A25vLVCQ99YPNckNI8BNwR9PY4LOAFBBTl5SAufeEi60IGeJOrEy+w0+vyXT+LJk= X-Received: by 2002:a5d:628c:0:b0:349:cba9:572d with SMTP id k12-20020a5d628c000000b00349cba9572dmr2287438wru.54.1713567958907; Fri, 19 Apr 2024 16:05:58 -0700 (PDT) MIME-Version: 1.0 From: Guillaume Gomez Date: Sat, 20 Apr 2024 01:05:47 +0200 Message-ID: Subject: [PATCH] Add rvalue::get_name method (and its C equivalent) To: gcc-patches@gcc.gnu.org, jit@gcc.gnu.org, David Malcolm , Antoni X-Spam-Status: No, score=-8.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_FILL_THIS_FORM_SHORT autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Hi, I just encountered the need to retrieve the name of an `rvalue` (if there is one) while working on the Rust GCC backend. This patch adds a getter to retrieve the information. Cordially. From d2ddeec950f23533e5e18bc0c10c4b49eef3cda3 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sat, 20 Apr 2024 01:02:20 +0200 Subject: [PATCH] [PATCH] Add rvalue::get_name method gcc/jit/ChangeLog: * jit-recording.h: Add rvalue::get_name method * libgccjit.cc (gcc_jit_rvalue_get_name): Likewise * libgccjit.h (gcc_jit_rvalue_get_name): Likewise * libgccjit.map: Likewise gcc/testsuite/ChangeLog: * jit.dg/test-tls.c: Add test for gcc_jit_rvalue_get_name --- gcc/jit/jit-recording.h | 8 ++++++++ gcc/jit/libgccjit.cc | 16 ++++++++++++++++ gcc/jit/libgccjit.h | 4 ++++ gcc/jit/libgccjit.map | 5 +++++ gcc/testsuite/jit.dg/test-tls.c | 3 +++ 5 files changed, 36 insertions(+) diff --git a/gcc/jit/jit-recording.h b/gcc/jit/jit-recording.h index d8d16f4fe29..3ae87c146ac 100644 --- a/gcc/jit/jit-recording.h +++ b/gcc/jit/jit-recording.h @@ -1213,6 +1213,8 @@ public: virtual bool is_constant () const { return false; } virtual bool get_wide_int (wide_int *) const { return false; } + virtual string * get_name () { return NULL; } + private: virtual enum precedence get_precedence () const = 0; @@ -1305,6 +1307,8 @@ public: const char *access_as_rvalue (reproducer &r) final override; const char *access_as_lvalue (reproducer &r) final override; + string * get_name () final override { return m_name; } + private: string * make_debug_string () final override { return m_name; } void write_reproducer (reproducer &r) final override; @@ -1558,6 +1562,8 @@ public: void set_rvalue_init (rvalue *val) { m_rvalue_init = val; } + string * get_name () final override { return m_name; } + private: string * make_debug_string () final override { return m_name; } template @@ -2148,6 +2154,8 @@ public: void write_to_dump (dump &d) final override; + string * get_name () final override { return m_name; } + private: string * make_debug_string () final override { return m_name; } void write_reproducer (reproducer &r) final override; diff --git a/gcc/jit/libgccjit.cc b/gcc/jit/libgccjit.cc index 445c0d0e0e3..2b8706dc7fd 100644 --- a/gcc/jit/libgccjit.cc +++ b/gcc/jit/libgccjit.cc @@ -4377,3 +4377,19 @@ gcc_jit_context_add_top_level_asm (gcc_jit_context *ctxt, RETURN_IF_FAIL (asm_stmts, ctxt, NULL, "NULL asm_stmts"); ctxt->add_top_level_asm (loc, asm_stmts); } + +/* Public entrypoint. See description in libgccjit.h. + + After error-checking, this calls the trivial + gcc::jit::recording::rvalue::get_name method, in jit-recording.h. */ + +extern const char * +gcc_jit_rvalue_get_name (gcc_jit_rvalue *rvalue) +{ + RETURN_NULL_IF_FAIL (rvalue, NULL, NULL, "NULL rvalue"); + auto name = rvalue->get_name (); + + if (!name) + return NULL; + return name->c_str (); +} diff --git a/gcc/jit/libgccjit.h b/gcc/jit/libgccjit.h index 74e847b2dec..d4094610a16 100644 --- a/gcc/jit/libgccjit.h +++ b/gcc/jit/libgccjit.h @@ -2066,6 +2066,10 @@ gcc_jit_lvalue_add_string_attribute (gcc_jit_lvalue *variable, enum gcc_jit_variable_attribute attribute, const char* value); +/* Returns the name of the `rvalue`, if any. Returns NULL otherwise. */ +extern const char * +gcc_jit_rvalue_get_name (gcc_jit_rvalue *rvalue); + #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/gcc/jit/libgccjit.map b/gcc/jit/libgccjit.map index 99aa5970be1..bbed8024263 100644 --- a/gcc/jit/libgccjit.map +++ b/gcc/jit/libgccjit.map @@ -289,3 +289,8 @@ LIBGCCJIT_ABI_27 { global: gcc_jit_context_new_sizeof; } LIBGCCJIT_ABI_26; + +LIBGCCJIT_ABI_28 { + global: + gcc_jit_rvalue_get_name; +} LIBGCCJIT_ABI_27; diff --git a/gcc/testsuite/jit.dg/test-tls.c b/gcc/testsuite/jit.dg/test-tls.c index 3b20182ac10..b651eb09b44 100644 --- a/gcc/testsuite/jit.dg/test-tls.c +++ b/gcc/testsuite/jit.dg/test-tls.c @@ -28,6 +28,9 @@ create_code (gcc_jit_context *ctxt, void *user_data) ctxt, NULL, GCC_JIT_GLOBAL_EXPORTED, int_type, "foo"); gcc_jit_lvalue_set_tls_model (foo, GCC_JIT_TLS_MODEL_GLOBAL_DYNAMIC); + CHECK_STRING_VALUE ( + gcc_jit_rvalue_get_name (gcc_jit_lvalue_as_rvalue (foo)), "foo"); + /* Build the test_fn. */ gcc_jit_function *test_fn = gcc_jit_context_new_function (ctxt, NULL, -- 2.24.1.2762.gfe2e4819b8