From patchwork Wed May 8 16:40:29 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Makarov X-Patchwork-Id: 1933103 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=HA1fyFLU; 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 4VZLWJ1xT0z1xnT for ; Thu, 9 May 2024 02:41:16 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 4E555384DD00 for ; Wed, 8 May 2024 16:41:14 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id E7DD8384AB63 for ; Wed, 8 May 2024 16:40:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E7DD8384AB63 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org E7DD8384AB63 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1715186438; cv=none; b=HhQ9UQE1LG/2YBtmkkAFIc3WDh3HJu2Yr3byF0Zm+nfBF7IQR/GuT+uFTMGp0EXRaO1vRSyLqxavAlEFreXmgU3ctVB5pLU0P4Wg2iXBkI9vUq3EC1AKPzh2mk0AZxvk6ObDgB2LB3U8AeYqQxW/qkjyLFvz6Noqn1oScbZ9joA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1715186438; c=relaxed/simple; bh=UYgqJLcriWSUTqmq0n2q/jdthIFiEWnAGi2a+dopB3w=; h=DKIM-Signature:Message-ID:Date:MIME-Version:From:Subject:To; b=mkVdPcra0dqWH4l+zKIk/l24Ue+5gV43C6CIe30ZnKd9QRWFwHGUn3xU0iUac95pkxq+xbWJY472YX82vKiUnhhHWvEqTIajq0c17pVREu9gtvMq6fAEOPMOs8/RefCXCgrHtyio/dX/mG/kuNSsMGCa7up5uwogBL0iTfp+g8M= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1715186435; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=g+pI9psdBdbFy6S9ctUvTTG8GB39mDmKAfEfxb7IC+I=; b=HA1fyFLUxgzYvQjeaeEuG1TQE6EsDTndocFXPG0NbM8boLFwxBAfZ+Sx3OmJcmndr0KG/5 bGmfoKAJckBOD0UFBWbtEEP18kzQLGl6XD+IVT3RD5M1EREXox0aJWDTYVhjxRSlbuI2Ok a6FdC+Iwu7JUssxMR1Ae8zUgbqbcg/Y= Received: from mail-vk1-f197.google.com (mail-vk1-f197.google.com [209.85.221.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-164-PuOFcFN1PSuhPC7oJPIPOw-1; Wed, 08 May 2024 12:40:33 -0400 X-MC-Unique: PuOFcFN1PSuhPC7oJPIPOw-1 Received: by mail-vk1-f197.google.com with SMTP id 71dfb90a1353d-4df18d9052aso2096170e0c.1 for ; Wed, 08 May 2024 09:40:33 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1715186432; x=1715791232; h=to:subject:from:content-language:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=dCL585/r25EMPzB+tXC6cCUgBPhsLR0AUHmLUpBXeF0=; b=HWwzEyoraNGPRGR9un9CrwgFlomYFkNnwbVFr4yY1dCOvOrg2R6ZABHh5xl8/n8pla 3uuTwLaLP75Bd6uM5YJwpSb+991hCrNUcDqmANr2a/USf2J/5tcxUbAIbJhB0cRrdV20 zwHDgk+1SZhoLXIPLcQKlxgFCynokArnmcijVwmie7xT0KoGEb8pQ4/ABq9f8bTbEJqk AGVMUo9prwC7MrbDDgi68YXofvmP+e+3sPBfbJBktI3W0SYfx8y44grs96KdpRpF4tXO LYuhzU0H1hHQY5CCzr9vUOcZgiQEyPSF8B0IQQrBh4130iG4Tc/firAfq393hpI2T+4n YzEA== X-Gm-Message-State: AOJu0YxtbAQqUmYrGvLTMCQDdXq73limHgxCJ/FvDmzeINjzewzZ6IpQ zR+cXuHTZMRRnFzcVKTWSkfGWZfs1qTyCF/5OFm0+2k3/KrwBUYrNXlvqmI+F1pt3A8qonF9eGQ 1vz1UAL4s2DlWIKS8f8QvYZU1eJ/ED5bcJo42b7pa62MKcndjeRvO8vBHfXZ1OfScdbclo9YVJO OcrJb0olX3rfT3uUc0y8rwqpnbeejavLEfNAjH6W4= X-Received: by 2002:a05:6102:cd0:b0:47c:86c:cb75 with SMTP id ada2fe7eead31-47f3c2ef18dmr3896391137.16.1715186431075; Wed, 08 May 2024 09:40:31 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFYCCe/ZZY1ZsCogWk6ZShYNCfLHcm+CgtCDIMtHu0J8iczFwAk/XGOvMu8aSFY98X88Zuzuw== X-Received: by 2002:a05:6102:cd0:b0:47c:86c:cb75 with SMTP id ada2fe7eead31-47f3c2ef18dmr3896340137.16.1715186430257; Wed, 08 May 2024 09:40:30 -0700 (PDT) Received: from [192.168.1.107] (23-233-12-249.cpe.pppoe.ca. [23.233.12.249]) by smtp.gmail.com with ESMTPSA id z4-20020a0cfc04000000b006a0fd24c27fsm5677347qvo.22.2024.05.08.09.40.29 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 May 2024 09:40:29 -0700 (PDT) Message-ID: <7dd25e5b-b936-4870-adfd-e410d3f535e0@redhat.com> Date: Wed, 8 May 2024 12:40:29 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Vladimir Makarov Subject: [pushed][PR114810][LRA]: Recognize alternatives with lack of available registers for insn and demote them. To: "gcc-patches@gcc.gnu.org" X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US X-Spam-Status: No, score=-11.7 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, HTML_MESSAGE, KAM_SHORT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, 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 The following patch is a fix for PR114810 from LRA side. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114810 The patch was successfully bootstrapped and tested on x86_64, aarch64, ppc64le. commit dc859c1fcb6f3ad95022fb078c040907ef361e4c Author: Vladimir N. Makarov Date: Wed May 8 10:39:04 2024 -0400 [PR114810][LRA]: Recognize alternatives with lack of available registers for insn and demote them. PR114810 was fixed in machine-dependent way. This patch is a fix of the PR on LRA side. LRA chose alternative with constraints `&r,r,ro` on i686 when all operands of DImode and there are only 6 available general regs. The patch recognizes such case and significantly increase the alternative cost. It does not reject alternative completely. So the fix is safe but it might not work for all potentially possible cases of registers lack as register classes can have any relations including subsets and intersections. gcc/ChangeLog: PR target/114810 * lra-constraints.cc (process_alt_operands): Calculate union reg class for the alternative, peak matched regs and required reload regs. Recognize alternatives with lack of available registers and make them costly. Add debug print about this case. diff --git a/gcc/lra-constraints.cc b/gcc/lra-constraints.cc index 10e3d4e4097..5b78fd0b7e5 100644 --- a/gcc/lra-constraints.cc +++ b/gcc/lra-constraints.cc @@ -2127,6 +2127,8 @@ process_alt_operands (int only_alternative) /* Numbers of operands which are early clobber registers. */ int early_clobbered_nops[MAX_RECOG_OPERANDS]; enum reg_class curr_alt[MAX_RECOG_OPERANDS]; + enum reg_class all_this_alternative; + int all_used_nregs, all_reload_nregs; HARD_REG_SET curr_alt_set[MAX_RECOG_OPERANDS]; HARD_REG_SET curr_alt_exclude_start_hard_regs[MAX_RECOG_OPERANDS]; bool curr_alt_match_win[MAX_RECOG_OPERANDS]; @@ -2229,7 +2231,8 @@ process_alt_operands (int only_alternative) curr_alt_out_sp_reload_p = false; curr_reuse_alt_p = true; curr_alt_class_change_p = false; - + all_this_alternative = NO_REGS; + all_used_nregs = all_reload_nregs = 0; for (nop = 0; nop < n_operands; nop++) { const char *p; @@ -2660,6 +2663,15 @@ process_alt_operands (int only_alternative) /* Record which operands fit this alternative. */ if (win) { + if (early_clobber_p + || curr_static_id->operand[nop].type != OP_OUT) + { + all_used_nregs + += ira_reg_class_min_nregs[this_alternative][mode]; + all_this_alternative + = (reg_class_subunion + [all_this_alternative][this_alternative]); + } this_alternative_win = true; if (class_change_p) { @@ -2781,7 +2793,19 @@ process_alt_operands (int only_alternative) & ~((ira_prohibited_class_mode_regs [this_alternative][mode]) | lra_no_alloc_regs)); - if (hard_reg_set_empty_p (available_regs)) + if (!hard_reg_set_empty_p (available_regs)) + { + if (early_clobber_p + || curr_static_id->operand[nop].type != OP_OUT) + { + all_reload_nregs + += ira_reg_class_min_nregs[this_alternative][mode]; + all_this_alternative + = (reg_class_subunion + [all_this_alternative][this_alternative]); + } + } + else { /* There are no hard regs holding a value of given mode. */ @@ -3217,6 +3241,21 @@ process_alt_operands (int only_alternative) " Cycle danger: overall += LRA_MAX_REJECT\n"); overall += LRA_MAX_REJECT; } + if (all_this_alternative != NO_REGS + && all_used_nregs != 0 && all_reload_nregs != 0 + && (all_used_nregs + all_reload_nregs + 1 + >= ira_class_hard_regs_num[all_this_alternative])) + { + if (lra_dump_file != NULL) + fprintf + (lra_dump_file, + " Register starvation: overall += LRA_MAX_REJECT" + "(class=%s,avail=%d,used=%d,reload=%d)\n", + reg_class_names[all_this_alternative], + ira_class_hard_regs_num[all_this_alternative], + all_used_nregs, all_reload_nregs); + overall += LRA_MAX_REJECT; + } ok_p = true; curr_alt_dont_inherit_ops_num = 0; for (nop = 0; nop < early_clobbered_regs_num; nop++)