From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-x32d.google.com (mail-wm1-x32d.google.com [IPv6:2a00:1450:4864:20::32d]) by sourceware.org (Postfix) with ESMTPS id E5C063854179 for ; Mon, 7 Nov 2022 08:41:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org E5C063854179 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=adacore.com Received: by mail-wm1-x32d.google.com with SMTP id r186-20020a1c44c3000000b003cf4d389c41so9122849wma.3 for ; Mon, 07 Nov 2022 00:41:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=m71wIQtUr3MTY91no0xbzg6kO1utKLySGZDHEU8nTHE=; b=LknYPFfbz+80Kh18q6dUarbGCMoaAzsYARdClH/o1yFKjO6KbovFvf8mIQhVj9scZy rzn0mD4zG7BOzFT65N/H8Cj4vrz+iXVWYsDh+ODiF+EuQTgDArw9T6MSlJBvZrr/2eyZ 3O0jGudTfL12h0P//M49jZsbXql10ygbCgH7l7dtsYDJ1sho2m+4NHKybk8UpAfcGgPq zcZ6Y9mkMOC2Ddgvh7rOUnwCipBIoR2E7bFFjC1JFVXvaxTY3KL4cZs4kPqqIHahOnch tJNBsoO0RG2/22ljoIAi7RIjXJz32VF9Ve1VS5zREcagJ/KgD3/VC4s6izdFnhIoffIG muHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=m71wIQtUr3MTY91no0xbzg6kO1utKLySGZDHEU8nTHE=; b=R3ztAx6YfOTvGqdpHizOEtATSO9yzClStczSRWb+dDrH/Hfu0E+a2QpsMAYU1ewmMA UgVylCqXZ3jeg0GFcWf32oqlc2+7mtD4PMVJIbalMlYkFxiPn3dlB2Vec24vUHowRo5S DgII2kf0ez1Ws9qK2ukucPoKg34mjPKukxEyJE6LAuQq3OXt93xDkw10I44ckS1GWS/A w2D5BKZiQzkiR4di0WRSJuVuf+J7YtbOpFieJvcZNd6QoNLsfXfFjgUFlJCW9XFK6Wva DLAlQapC0I2/nLV+4ej/xwk+RonWWJzHo9k7RU8mFe9lWfK8yqTWuUR0WajB2bmDtMMq RDpA== X-Gm-Message-State: ACrzQf2ygP34QohOiF0dPF3BZlgPqBM15xsTiGhHzc1MUP69YcZKM4Mv gtcj9stB99KYIOBoaPMIS0pOYEQjI8lFcg== X-Google-Smtp-Source: AMsMyM4QH28Mz0R1sbigo/4xlkKGF1hgFESANxq3qGWq3/S5er/fjGkZMzSYrPwYOntLCbO46HHEOA== X-Received: by 2002:a05:600c:2053:b0:3cf:9b39:8585 with SMTP id p19-20020a05600c205300b003cf9b398585mr10189547wmg.106.1667810503788; Mon, 07 Nov 2022 00:41:43 -0800 (PST) Received: from poulhies-Precision-5550.lan (static-176-191-105-132.ftth.abo.bbox.fr. [176.191.105.132]) by smtp.gmail.com with ESMTPSA id i5-20020adffc05000000b0023660f6cecfsm6631719wrr.80.2022.11.07.00.41.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Nov 2022 00:41:43 -0800 (PST) From: =?UTF-8?q?Marc=20Poulhi=C3=A8s?= To: gcc-patches@gcc.gnu.org Cc: Piotr Trojanek Subject: [COMMITTED] ada: Fix performance regression related to references in Refined_State Date: Mon, 7 Nov 2022 09:41:40 +0100 Message-Id: <20221107084140.151953-1-poulhies@adacore.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-13.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,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: From: Piotr Trojanek Recently added call to In_Pragma_Expression caused a performance regression. It might require climbing syntax trees of arbitrarily deep expressions, while previously references within pragmas were detected in bounded time. This patch restores the previous efficiency. However, while the original code only detected references directly within pragma argument associations, now we also detect references inside aggregates, e.g. like those in pragma Refined_State. gcc/ada/ * sem_prag.adb (Non_Significant_Pragma_Reference): Detect references with aggregates; only assign local variables Id and C when necessary. Tested on x86_64-pc-linux-gnu, committed on master. --- gcc/ada/sem_prag.adb | 56 +++++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb index f33d858062d..2a3aca85a79 100644 --- a/gcc/ada/sem_prag.adb +++ b/gcc/ada/sem_prag.adb @@ -31719,43 +31719,45 @@ package body Sem_Prag is -- Start of processing for Non_Significant_Pragma_Reference begin - P := Parent (N); - - if Nkind (P) /= N_Pragma_Argument_Association then + -- Reference might appear either directly as expression of a pragma + -- argument association, e.g. pragma Export (...), or within an + -- aggregate with component associations, e.g. pragma Refined_State + -- ((... => ...)). - -- References within pragma Refined_State are not significant. They - -- can't be recognized using pragma argument number, because they - -- appear inside refinement clauses that rely on aggregate syntax. + P := Parent (N); + loop + case Nkind (P) is + when N_Pragma_Argument_Association => + exit; + when N_Aggregate | N_Component_Association => + P := Parent (P); + when others => + return False; + end case; + end loop; - if In_Pragma_Expression (N, Name_Refined_State) then - return True; - end if; + AN := Arg_No; + if AN = 0 then return False; + end if; - else - Id := Get_Pragma_Id (Parent (P)); - C := Sig_Flags (Id); - AN := Arg_No; + Id := Get_Pragma_Id (Parent (P)); + C := Sig_Flags (Id); - if AN = 0 then + case C is + when -1 => return False; - end if; - - case C is - when -1 => - return False; - when 0 => - return True; + when 0 => + return True; - when 92 .. 99 => - return AN < (C - 90); + when 92 .. 99 => + return AN < (C - 90); - when others => - return AN /= C; - end case; - end if; + when others => + return AN /= C; + end case; end Is_Non_Significant_Pragma_Reference; ------------------------------ -- 2.34.1