From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by sourceware.org (Postfix) with ESMTP id EC2A83858281 for ; Fri, 29 Dec 2023 07:57:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org EC2A83858281 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=loongson.cn ARC-Filter: OpenARC Filter v1.0.0 sourceware.org EC2A83858281 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=114.242.206.163 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1703836653; cv=none; b=eyUc6rqlOAy0bkS3Qi/kB712MsbjNVqZlPoWa20ZNIU53wSRDvwyM9jMs5P2K80EOT3SItM3hyVjXJ7PsfTPcG3hWdUER6fiIbuFfCESd2UjZc6XovLNSE+y8ybkiPnBvz6Evr5fWQZH9Q9JOMi+NJI3j6jAWWemQslm4X93Qtw= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1703836653; c=relaxed/simple; bh=jJROZ9s0KL9hJzWup4CpkyABm0WqzM5nwDDmJYwR51U=; h=Subject:To:From:Message-ID:Date:MIME-Version; b=EkfgTdT38BJmfq1JKl+Us5xXSY6+7ClLbeHEckeu7OZC0u/6TA4MKMGpbf9QhA+dgKY8L2tSku0hrOuek6C945Bu+PkhByupRCNwNA9eabh+KS/oSXDG1VmBP78MPFykvLzaJuGMNkjyQPW9LL2QiiJUf187uFgbVnpEpQehDXc= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from loongson.cn (unknown [10.20.4.107]) by gateway (Coremail) with SMTP id _____8AxDOvke45lg2IAAA--.1796S3; Fri, 29 Dec 2023 15:57:24 +0800 (CST) Received: from [10.20.4.107] (unknown [10.20.4.107]) by localhost.localdomain (Coremail) with SMTP id AQAAf8AxPL7he45lWJAPAA--.23362S3; Fri, 29 Dec 2023 15:57:21 +0800 (CST) Subject: Re: [PATCH v3] LoongArch: Replace -mexplicit-relocs=auto simple-used address peephole2 with combine To: Xi Ruoyao , gcc-patches@gcc.gnu.org Cc: i@xen0n.name, xuchenghua@loongson.cn, c@jia.je References: <20231228161611.10555-1-xry111@xry111.site> From: chenglulu Message-ID: Date: Fri, 29 Dec 2023 15:57:21 +0800 User-Agent: Mozilla/5.0 (X11; Linux loongarch64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: <20231228161611.10555-1-xry111@xry111.site> Content-Type: text/plain; charset=gbk; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US X-CM-TRANSID:AQAAf8AxPL7he45lWJAPAA--.23362S3 X-CM-SenderInfo: xfkh0wpoxo3qxorr0wxvrqhubq/ X-Coremail-Antispam: 1Uk129KBj93XoWxAFWDGrW3AryxWFWrZFW3CFX_yoWrurWUp3 9rua4YqF4kJrn7Gwn7Za4fXa1DJ3sFgrW2ga43t3y0ka1UJwn7XF10kr9IqFy3Xw15trWS vr4Sk34jvF1UA3gCm3ZEXasCq-sJn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7KY7ZEXa sCq-sGcSsGvfJ3Ic02F40EFcxC0VAKzVAqx4xG6I80ebIjqfuFe4nvWSU5nxnvy29KBjDU 0xBIdaVrnRJUUUv2b4IE77IF4wAFF20E14v26r1j6r4UM7CY07I20VC2zVCF04k26cxKx2 IYs7xG6rWj6s0DM7CIcVAFz4kK6r1Y6r17M28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48v e4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_Gr0_Xr1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI 0_Gr0_Cr1l84ACjcxK6I8E87Iv67AKxVW8Jr0_Cr1UM28EF7xvwVC2z280aVCY1x0267AK xVW8Jr0_Cr1UM2AIxVAIcxkEcVAq07x20xvEncxIr21l57IF6xkI12xvs2x26I8E6xACxx 1l5I8CrVACY4xI64kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r106r15McIj6I8E87Iv 67AKxVWUJVW8JwAm72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IY64vIr41lc7I2V7IY0VAS07 AlzVAYIcxG8wCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02 F40E14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_JF0_Jw 1lIxkGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUJVWUCwCI42IY6xIIjxv20xvEc7Cj xVAFwI0_Jr0_Gr1lIxAIcVCF04k26cxKx2IYs7xG6r1j6r1xMIIF0xvEx4A2jsIE14v26r 1j6r4UMIIF0xvEx4A2jsIEc7CjxVAFwI0_Jr0_GrUvcSsGvfC2KfnxnUUI43ZEXa7IU8j- e5UUUUU== X-Spam-Status: No, score=-10.6 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_DMARC_STATUS,KAM_SHORT,KAM_STOCKGEN,MIME_CHARSET_FARAWAY,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE 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: ÔÚ 2023/12/29 ÉÏÎç12:11, Xi Ruoyao дµÀ: > The problem with peephole2 is it uses a naive sliding-window algorithm > and misses many cases. For example: > > float a[10000]; > float t() { return a[0] + a[8000]; } > > is compiled to: > > la.local $r13,a > la.local $r12,a+32768 > fld.s $f1,$r13,0 > fld.s $f0,$r12,-768 > fadd.s $f0,$f1,$f0 > > by trunk. But as we've explained in r14-4851, the following would be > better with -mexplicit-relocs=auto: > > pcalau12i $r13,%pc_hi20(a) > pcalau12i $r12,%pc_hi20(a+32000) > fld.s $f1,$r13,%pc_lo12(a) > fld.s $f0,$r12,%pc_lo12(a+32000) > fadd.s $f0,$f1,$f0 > > However the sliding-window algorithm just won't detect the pcalau12i/fld > pair to be optimized. Use a define_insn_and_split in combine pass will > work around the issue. > > gcc/ChangeLog: > > * config/loongarch/predicates.md > (symbolic_pcrel_offset_operand): New define_predicate. > (mem_simple_ldst_operand): Likewise. > * config/loongarch/loongarch-protos.h > (loongarch_rewrite_mem_for_simple_ldst): Declare. > * config/loongarch/loongarch.cc > (loongarch_rewrite_mem_for_simple_ldst): Implement. > * config/loongarch/loongarch.md (simple_load): New > define_insn_and_rewrite. > (simple_load_ext): Likewise. > (simple_store): Likewise. > (define_peephole2): Remove la.local/[f]ld peepholes. > > gcc/testsuite/ChangeLog: > > * gcc.target/loongarch/explicit-relocs-auto-single-load-store-2.c: > New test. > * gcc.target/loongarch/explicit-relocs-auto-single-load-store-3.c: > New test. > --- > > Changes from [v2]: > - Match (mem (symbol_ref ...)) instead of (symbol_ref ...) to retain the > attributes of the MEM. > - Add a test to make sure the attributes of the MEM is retained. > > [v2]:https://gcc.gnu.org/pipermail/gcc-patches/2023-December/641430.html > > Bootstrapped & regtestd on loongarch64-linux-gnu. Ok for trunk? > > gcc/config/loongarch/loongarch-protos.h | 1 + > gcc/config/loongarch/loongarch.cc | 16 +++ > gcc/config/loongarch/loongarch.md | 114 +++++------------- > gcc/config/loongarch/predicates.md | 13 ++ > ...explicit-relocs-auto-single-load-store-2.c | 11 ++ > ...explicit-relocs-auto-single-load-store-3.c | 18 +++ > 6 files changed, 86 insertions(+), 87 deletions(-) > create mode 100644 gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-single-load-store-2.c > create mode 100644 gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-single-load-store-3.c > > diff --git a/gcc/config/loongarch/loongarch-protos.h b/gcc/config/loongarch/loongarch-protos.h /* snip */ > > diff --git a/gcc/config/loongarch/loongarch.md b/gcc/config/loongarch/loongarch.md /* snip */ > +(define_insn_and_rewrite "simple_load" > + [(set (match_operand:LD_AT_LEAST_32_BIT 0 "register_operand" "=r,f") > + (match_operand:LD_AT_LEAST_32_BIT 1 "mem_simple_ldst_operand" ""))] > + "loongarch_pre_reload_split () \ > + && la_opt_explicit_relocs == EXPLICIT_RELOCS_AUTO \ Is the '\' here dispensable? I don't seem to have added it when I wrote the conditions. > + && (TARGET_CMODEL_NORMAL || TARGET_CMODEL_MEDIUM)" > + "#" > + "&& true" > { > - emit_insn (gen_pcalau12i_gr (operands[0], operands[1])); > + operands[1] = loongarch_rewrite_mem_for_simple_ldst (operands[1]); > }) /* snip */ > ;; Synchronization instructions. > diff --git a/gcc/config/loongarch/predicates.md b/gcc/config/loongarch/predicates.md > index 83fea08315c..2158fe7538c 100644 > --- a/gcc/config/loongarch/predicates.md > +++ b/gcc/config/loongarch/predicates.md > @@ -579,6 +579,19 @@ (define_predicate "symbolic_pcrel_operand" > return loongarch_symbolic_constant_p (op, &type) && type == SYMBOL_PCREL; > }) > > +(define_predicate "symbolic_pcrel_offset_operand" > + (and (match_code "plus") > + (match_operand 0 "symbolic_pcrel_operand") > + (match_operand 1 "const_int_operand"))) > + > +(define_predicate "mem_simple_ldst_operand" > + (match_code "mem") > +{ > + op = XEXP (op, 0); > + return symbolic_pcrel_operand (op, Pmode) || > + symbolic_pcrel_offset_operand (op, Pmode); > +}) > + > Symbol '||' It shouldn't be at the end of the line. + return symbolic_pcrel_operand (op, Pmode) + || symbolic_pcrel_offset_operand (op, Pmode); Others LGTM. Thanks! /* snip */