From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from hognose1.porkbun.com (hognose1.porkbun.com [35.82.102.206]) by sourceware.org (Postfix) with ESMTPS id 118813857C5A for ; Wed, 9 Aug 2023 11:54:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 118813857C5A Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=jia.je Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=jia.je Received: from cslab-raptor.. (unknown [166.111.226.99]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) (Authenticated sender: c@jia.je) by hognose1.porkbun.com (Postfix) with ESMTPSA id E9EE644026; Wed, 9 Aug 2023 11:54:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jia.je; s=default; t=1691582047; bh=OmeEadlvEPPSOfLSFvxinzib0b1bphbrFyD256PQV1g=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=puJ/ExN9j7EkQrre5HlH+yCT83P7UGskoKWVu9p6F6hWyHvRoYgoU8jPRYkxXfkOY /KMkjxBevQpQfvb89kS+50kTGF6+H6Of3m9HmxygloH1M90kfpbKvXN3ourSUcEifr Jtj9E/T6JANcvqKmYNXMmitEs2oioht6lKAdjRdM= From: Jiajie Chen To: gcc-patches@gcc.gnu.org Cc: xry111@xry111.site, xuchenghua@loongson.cn, Jiajie Chen Subject: [PATCH v2 10/14] LoongArch: Forbid ADDRESS_REG_REG in loongarch32 Date: Wed, 9 Aug 2023 19:46:17 +0800 Message-ID: <20230809115325.3716347-11-c@jia.je> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230809115325.3716347-1-c@jia.je> References: <20230809115325.3716347-1-c@jia.je> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-13.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_NUMSUBJECT,KAM_SHORT,SPF_HELO_PASS,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: LoongArch32 does not include LDX/STD instructions, and cannot lower (plus (reg) (reg)) pattern. Forbid ADDRESS_REG_REG and do not emit ldx/stx. gcc/ChangeLog: * config/loongarch/loongarch.cc (loongarch_valid_index_p): Check ADDRESS_REG_REG pattern and fail in loongarch32. (loongarch_output_move_index): assertion failed if generating ldx/stx in loongarch32. gcc/testsuite/ChangeLog: * gcc.target/loongarch/array-ldx.c: Add regression test for ldx in loongarch32. --- gcc/config/loongarch/loongarch.cc | 4 +++- gcc/testsuite/gcc.target/loongarch/array-ldx.c | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/loongarch/array-ldx.c diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc index 49df9509ba9..1fde680ccd4 100644 --- a/gcc/config/loongarch/loongarch.cc +++ b/gcc/config/loongarch/loongarch.cc @@ -2016,7 +2016,8 @@ loongarch_valid_index_p (struct loongarch_address_info *info, rtx x, && contains_reg_of_mode[GENERAL_REGS][GET_MODE (SUBREG_REG (index))]) index = SUBREG_REG (index); - if (loongarch_valid_base_register_p (index, mode, strict_p)) + /* LA32 does not provide LDX/STX. */ + if (loongarch_valid_base_register_p (index, mode, strict_p) && !TARGET_32BIT) { info->type = ADDRESS_REG_REG; info->offset = index; @@ -3853,6 +3854,7 @@ loongarch_output_move_index (rtx x, machine_mode mode, bool ldr) } }; + gcc_assert (!TARGET_32BIT); return insn[ldr][index]; } diff --git a/gcc/testsuite/gcc.target/loongarch/array-ldx.c b/gcc/testsuite/gcc.target/loongarch/array-ldx.c new file mode 100644 index 00000000000..0797af3bbfb --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/array-ldx.c @@ -0,0 +1,6 @@ +/* { dg-do compile } */ +/* { dg-options "-march=loongarch32 -mabi=ilp32d -O2" } */ +long long foo(long long *arr, long long index) +{ + return arr[index]; +} \ No newline at end of file -- 2.41.0