From patchwork Tue Oct 15 12:55:04 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Robin Dapp X-Patchwork-Id: 1997384 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=bkBZzQCS; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4XSYwy1x1Yz1xvK for ; Tue, 15 Oct 2024 23:55:30 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id CDC333858D20 for ; Tue, 15 Oct 2024 12:55:27 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-lf1-x132.google.com (mail-lf1-x132.google.com [IPv6:2a00:1450:4864:20::132]) by sourceware.org (Postfix) with ESMTPS id 8F8083858D20 for ; Tue, 15 Oct 2024 12:55:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8F8083858D20 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 8F8083858D20 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::132 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1728996910; cv=none; b=NchU9BmXTnlGZU0uZ8eE4taLRIkwWlpqkM/WIPbmrCAwj7pWRBjuCHmvo9W4gT68a+yiUTgJReA08nV7yvGv2dVbuVJjdebGRNRToFN5pJILH/jO+/+lsf6dolxuWozfRrgfis56ch+IMjpV6kizXanwwiK8AfQ024BLCZC8Q1E= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1728996910; c=relaxed/simple; bh=WGuWoXY0QkkLaqD9eQ8nEn/a31e1Hvudwy+swl0mMFg=; h=DKIM-Signature:Mime-Version:Date:Message-Id:From:Subject:To; b=NoZBJjyw7W7fXbKM6MXLOgZrxh3LxN5MaLvrFSTImtb+1BCk2mCxX7/owP87SJyP8TUjVabFf5xqAZ4jmbnQ62c4OjvGOtYnifeUCJmisgUBzUAWaeqsZSUGMdLUQg/nyoeSYzvdCsHl7++ycRxmSj7D3cIEQ3gV5cNs9E51MVM= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x132.google.com with SMTP id 2adb3069b0e04-539f84907caso2448293e87.3 for ; Tue, 15 Oct 2024 05:55:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1728996906; x=1729601706; darn=gcc.gnu.org; h=to:cc:subject:from:message-id:date:content-transfer-encoding :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=8G0Yjd8zj7ULFDAB0yW9EUPfYzICtyaAlltFnvD6DkA=; b=bkBZzQCSH/+xtKkJAfOH2QIdhru8Op8m/UpguY/iKmEzn6R7yBnJ488rc6v6/rQaDA oOfoHPK64tInG7HMgzltdwFd634t7pKIAGkIwW8fNTSpW7WO/ulIcXfTogh+orkdjHUH 5zNVUCC6v3q5Xm3ZKQb52GS280zOxq9m5f2Sx8mDjXhJmdoqX8FkWlTU/wwa7wSKSPmu vgdUDnco6fO6bZKduwE+8Riq/6pYOZTqAgMt267lcTRbI9TPDbS0W+ZF59SVfaM+B5/5 5vTfM0++pkNKP9nlxKW1SWqmvlgH3DYfjzHBT4uHQJzZz1SIMHyPcl4qJiKbr0LxeXxp lIuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728996906; x=1729601706; h=to:cc:subject:from:message-id:date:content-transfer-encoding :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=8G0Yjd8zj7ULFDAB0yW9EUPfYzICtyaAlltFnvD6DkA=; b=RCLU9xOLXgsdx+rlQDwrMGEZx5cMnfusQ6/+LpKg6OidXpPg2epXYxMklgJdknVHCH lzBw9RJUy0ZB2SCyoMHtGotkXbHg1CrxoSz3PvG1QgntXkxNHf/rX2YgzR8oCdjG/G5b VKXLbC39bdEydeEZDVGVVcWMsSwUWdoZmL4fEmaYaNYd4HWe94hIajvLF76KBND5UDWO dxl92DdE955BGN5WnAzGPbYkULq2Jr0BRCeSiCwwsp20hUKM2i2WmmcwaPtyyQ2QkmGd sHVpjbWgjGEMx2GqObsAoRifA2zY2QUYY2+omqfuXmbzAKCpvNT6KASIou5mev7PY8tF RIxA== X-Gm-Message-State: AOJu0YzqOHiggnDlunnZwxcwbBzuWHCx5xKRQ5fCznsuW7jSx0Gy8u1T utfzQ1TtUd6Abrd64j0HSkdcV2JeYogMlNfTML1MMyiKqO6sZmLFcvsuEw== X-Google-Smtp-Source: AGHT+IEmfOKpJGYe5aIU0WcUdrGuo1s+H659gPyLEzjflo7R0WkXdxrKTNHtzcZrfySICD2AHxVx5g== X-Received: by 2002:a05:6512:2348:b0:539:8ad5:5093 with SMTP id 2adb3069b0e04-53a03f484a2mr168384e87.35.1728996905175; Tue, 15 Oct 2024 05:55:05 -0700 (PDT) Received: from localhost (ip-149-172-150-237.um42.pools.vodafone-ip.de. [149.172.150.237]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-37d7fa7a256sm1524923f8f.14.2024.10.15.05.55.04 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 15 Oct 2024 05:55:04 -0700 (PDT) Mime-Version: 1.0 Date: Tue, 15 Oct 2024 14:55:04 +0200 Message-Id: From: "Robin Dapp" Subject: [PATCH] RISC-V: Use biggest_mode as mode for constants. Cc: , , , , , To: "gcc-patches" X-Spam-Status: No, score=-9.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, 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 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~incoming=patchwork.ozlabs.org@gcc.gnu.org Hi, in compute_nregs_for_mode we expect that the current variable's mode is at most as large as the biggest mode to be used for vectorization. This might not be true for constants as they don't actually have a mode. In that case, just use the biggest mode so max_number_of_live_regs returns 1. This fixes several test cases in the test suite. Regtested on rv64gcv and letting the CI work out the rest. Regards Robin gcc/ChangeLog: PR target/116655 * config/riscv/riscv-vector-costs.cc (max_number_of_live_regs): Use biggest mode instead of constant's saved mode. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/pr116655.c: New test. --- gcc/config/riscv/riscv-vector-costs.cc | 14 ++++++++++---- .../gcc.target/riscv/rvv/autovec/pr116655.c | 11 +++++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/pr116655.c diff --git a/gcc/config/riscv/riscv-vector-costs.cc b/gcc/config/riscv/riscv-vector-costs.cc index 25570bd4004..67b9e3e8f41 100644 --- a/gcc/config/riscv/riscv-vector-costs.cc +++ b/gcc/config/riscv/riscv-vector-costs.cc @@ -194,7 +194,7 @@ compute_local_program_points ( /* Collect the stmts that is vectorized and mark their program point. */ for (i = 0; i < nbbs; i++) { - int point = 1; + unsigned int point = 1; basic_block bb = bbs[i]; vec program_points = vNULL; if (dump_enabled_p ()) @@ -489,9 +489,15 @@ max_number_of_live_regs (loop_vec_info loop_vinfo, const basic_block bb, pair live_range = (*iter).second; for (i = live_range.first + 1; i <= live_range.second; i++) { - machine_mode mode = TREE_CODE (TREE_TYPE (var)) == BOOLEAN_TYPE - ? BImode - : TYPE_MODE (TREE_TYPE (var)); + machine_mode mode; + if (TREE_CODE (TREE_TYPE (var)) == BOOLEAN_TYPE) + mode = BImode; + /* Constants do not have a mode, just use the biggest so + compute_nregs will return 1. */ + else if (TREE_CODE (var) == INTEGER_CST) + mode = biggest_mode; + else + mode = TYPE_MODE (TREE_TYPE (var)); unsigned int nregs = compute_nregs_for_mode (loop_vinfo, mode, biggest_mode, lmul); live_vars_vec[i] += nregs; diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr116655.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr116655.c new file mode 100644 index 00000000000..36768e37d00 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr116655.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -march=rv64imv -mabi=lp64d -mrvv-max-lmul=dynamic" } */ + +short a[5]; +int b() { + int c = 0; + for (; c <= 4; c++) + if (a[c]) + break; + return c; +}