From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x433.google.com (mail-wr1-x433.google.com [IPv6:2a00:1450:4864:20::433]) by sourceware.org (Postfix) with ESMTPS id 8E92F3858D33 for ; Wed, 8 Mar 2023 21:17:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8E92F3858D33 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-wr1-x433.google.com with SMTP id f11so16670791wrv.8 for ; Wed, 08 Mar 2023 13:17:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1678310223; h=content-transfer-encoding:mime-version:message-id:references :in-reply-to:subject:cc:to:from:date:from:to:cc:subject:date :message-id:reply-to; bh=ElY6CcFK9DWoXorM3uhrY5RnNz3g8UbzjlwnXWqWztY=; b=loRj4IgzRR+mWJyDU0O7EQazMscVhDTOYPDf2wJQUKLEnHixYB/QWtyta7BeYT0qQJ eIGhakBjE2heTq3HnP2xKiKMkDPI00Amd2lTBRl8h9Opt1Ab7vX2Cfa9WUNKh2jz2LxR 2D7ZSfyCExad45BDAGmpsS3p76fvFVvVzfujNDuebcRxTiBoRFUxMHMkEIjDrmGm62a8 C6tRyOFt3UJGHjhAeZXLqdJHZeD8/iwA4pmRY9PpubIGao5NfD1xeYCT9iIb2ULpdxt3 7OWIabFQub6MgT9+9kcJ1iEkU4CMg52uWyhCCHJAbDIp2tsgVVZD9SF04UoTOLvES7wL 2bNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678310223; h=content-transfer-encoding:mime-version:message-id:references :in-reply-to:subject:cc:to:from:date:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ElY6CcFK9DWoXorM3uhrY5RnNz3g8UbzjlwnXWqWztY=; b=bI3sHbPrjXNWJhhQrGMhI5JuJiTkB08CnDTV4pNVnlzct1VoZvjEF4d0El28tqYc3x fdhnseEqeoQlaKPePKH5sbKKHxIFEipgo5mZ93BA2EQ1DZ4++vzQXKQjZMxEbYMb774e G5FEi6GQWdOdTdUbZSNX3/1/j2owSUedFMRrokkA02t4won7XbaOigxh3BEmZ/HqmyqB GT81Vp9Bto3AUmoYFW6Y/CMbhDbBT87eylK/1WF8DW4wTTVfMYPWzmuRDNYWg9FrmEPo UXCiC9zUiU/IO5Rpm19oqV09lGwxvYyZ3JTkVjCjslCUbM7tnPr0lTRXqxzXQiErY0dZ t0ow== X-Gm-Message-State: AO0yUKVVULvGKfGU4kJDVBQMzXaOztdIpNtI3bEp2eD9C/HIl/4w5hcD k+SLmqkQg2j3HnuXeA3gm8c= X-Google-Smtp-Source: AK7set9Vm5UIxdcjWD6M/t1mK1tLQmvrcAnoJplSpVm3/hxC9dvRGASab9LGYeu7aJbFH7rRbD5GbA== X-Received: by 2002:adf:ce91:0:b0:2c7:1e16:57cf with SMTP id r17-20020adfce91000000b002c71e1657cfmr11653939wrn.67.1678310223193; Wed, 08 Mar 2023 13:17:03 -0800 (PST) Received: from [127.0.0.1] (80-110-214-113.static.upcbusiness.at. [80.110.214.113]) by smtp.gmail.com with ESMTPSA id q10-20020a5d658a000000b002c70851fdd8sm16208435wru.75.2023.03.08.13.17.02 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Mar 2023 13:17:02 -0800 (PST) Date: Wed, 08 Mar 2023 22:16:59 +0100 From: Bernhard Reutner-Fischer To: juzhe.zhong@rivai.ai, gcc-patches@gcc.gnu.org CC: kito.cheng@gmail.com, Ju-Zhe Zhong Subject: Re: [PATCH] RISC-V: Add fault first load C/C++ support In-Reply-To: <20230307062123.142975-1-juzhe.zhong@rivai.ai> References: <20230307062123.142975-1-juzhe.zhong@rivai.ai> Message-ID: <9A4FC141-459E-414B-BBA0-07D3275BCFFA@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-3.3 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,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 7 March 2023 07:21:23 CET, juzhe=2Ezhong@rivai=2Eai wrote: >From: Ju-Zhe Zhong > >+class vleff : public function_base >+{ >+public: >+ unsigned int call_properties (const function_instance &) const overrid= e >+ { >+ return CP_READ_MEMORY | CP_WRITE_CSR; >+ } >+ >+ gimple *fold (gimple_folder &f) const override >+ { >+ /* fold vleff (const *base, size_t *new_vl, size_t vl) >+ >+ =3D=3D=3D=3D> vleff (const *base, size_t vl) >+ new_vl =3D MEM_REF[read_vl ()]=2E */ >+ >+ auto_vec vargs; Where is that magic 8 coming from? Wouldn't you rather have one temporary to hold this manually CSEd nargs =3D gimple_call_num_args (f=2Ecall) - 2; which you would use throughout this function as it does not seem to change= ? Would you reserve something based off nargs for the auto_vec above? If not, please add a comment where the 8 comes from? thanks, >+ >+ for (unsigned i =3D 0; i < gimple_call_num_args (f=2Ecall); i++) >+ { >+ /* Exclude size_t *new_vl argument=2E */ >+ if (i =3D=3D gimple_call_num_args (f=2Ecall) - 2) >+ continue; >+ >+ vargs=2Equick_push (gimple_call_arg (f=2Ecall, i)); >+ } >+ >+ gimple *repl =3D gimple_build_call_vec (gimple_call_fn (f=2Ecall), v= args); >+ gimple_call_set_lhs (repl, f=2Elhs); >+ >+ /* Handle size_t *new_vl by read_vl=2E */ >+ tree new_vl =3D gimple_call_arg (f=2Ecall, gimple_call_num_args (f= =2Ecall) - 2); >+ if (integer_zerop (new_vl)) >+ { >+ /* This case happens when user passes the nullptr to new_vl argument=2E >+ In this case, we just need to ignore the new_vl argument and return >+ vleff instruction directly=2E */ >+ return repl; >+ } >+ >+ tree tmp_var =3D create_tmp_var (size_type_node, "new_vl"); >+ tree decl =3D get_read_vl_decl (); >+ gimple *g =3D gimple_build_call (decl, 0); >+ gimple_call_set_lhs (g, tmp_var); >+ tree indirect >+ =3D fold_build2 (MEM_REF, size_type_node, >+ gimple_call_arg (f=2Ecall, >+ gimple_call_num_args (f=2Ecall) - 2), >+ build_int_cst (build_pointer_type (size_type_node), 0)); >+ gassign *assign =3D gimple_build_assign (indirect, tmp_var); >+ >+ gsi_insert_after (f=2Egsi, assign, GSI_SAME_STMT); >+ gsi_insert_after (f=2Egsi, g, GSI_SAME_STMT); >+ return repl; >+ } >+