From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from m15113.mail.126.com (m15113.mail.126.com [220.181.15.113]) by sourceware.org (Postfix) with ESMTP id DCA393858D28 for ; Sun, 16 Oct 2022 06:49:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org DCA393858D28 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=126.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=126.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=126.com; s=s110527; h=From:Subject:Date:Message-Id:MIME-Version; bh=XM2XN 44HnIofWew0huHsalAkfmhuJqDQC63AZMBiaMs=; b=p/MmO211OF6JXWcyH2ujp hq0sL2wVfDUmU5dXK8lXwQDaPpaHNaEuk4B7kue0uxlpdcvnCSI9yD8ap4KMqpm/ kyCEhw938ftjFa0AZwrxaxq6m37K6FlyQUcxnyia18HFzcnMWfb1yN0hCd9tjmzu gD1Rd3KkAhVyPXaawHXOrE= Received: from localhost.localdomain (unknown [117.61.19.197]) by smtp3 (Coremail) with SMTP id DcmowAC33sL4qEtj8nS0DA--.17891S2; Sun, 16 Oct 2022 14:47:20 +0800 (CST) From: Xiaole He To: libabigail@sourceware.org Cc: Xiaole He , Xiaole He Subject: [PATCH] abg-reader: optimize if construction Date: Sun, 16 Oct 2022 06:47:03 +0000 Message-Id: <20221016064703.67180-1-hexiaole1994@126.com> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CM-TRANSID:DcmowAC33sL4qEtj8nS0DA--.17891S2 X-Coremail-Antispam: 1Uf129KBjvJXoW7KF1xXFy7ZrW3Xr48Wr15Arb_yoW5JryUpr Z7GF4ktwn3Gw1ak3Zavr18Zan5XrWfJa1UWrn8Gr1jkr9Yqrs2grWxJw1ftr17tr4xX34Y qrsxtrykC3WxZF7anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x0z_q2MrUUUUU= X-Originating-IP: [117.61.19.197] X-CM-SenderInfo: 5kh0xt5rohimizu6ij2wof0z/1tbijhmcBlpEHGtnMQAAsy X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_BARRACUDACENTRAL,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: In 'build_enum_type_decl' function of 'src/abg-reader.cc', the 'for loop' walk through all the child nodes of the '' for seeking '' and '': /* original src/abg-reader.cc begin */ static enum_type_decl_sptr build_enum_type_decl(read_context& ctxt, const xmlNodePtr node, bool add_to_current_scope) { ... for (xmlNodePtr n = xmlFirstElementChild(node); n; n = xmlNextElementSibling(n)) { if (xmlStrEqual(n->name, BAD_CAST("underlying-type"))) { ... } if (xmlStrEqual(n->name, BAD_CAST("enumerator"))) { ... } } ... } /* original src/abg-reader.cc end */ Here uses 2 separate 'if' statements for seeking, that is, for any child node of the '', there involves 2 'if' comparations. Because the child node of the '' is either '' or '', there would be a slight optimization when use 'if-else if' construction instead, like below: /* optimized src/abg-reader.cc begin */ for (xmlNodePtr n = xmlFirstElementChild(node); n; n = xmlNextElementSibling(n)) { if (xmlStrEqual(n->name, BAD_CAST("underlying-type"))) { ... } else if (xmlStrEqual(n->name, BAD_CAST("enumerator"))) { ... } } /* optimized src/abg-reader.cc end */ Supposing there has the test case: /* test case begin */ /* test case end */ When parsing the '' xml tag, for the original 'src/abg-reader.cc', there involves 2 'if' comparations. But involves only 1 'if' comparation for the optimized 'src/abg-reader.cc'. Signed-off-by: Xiaole He Tested-by: Xiaole He --- src/abg-reader.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/abg-reader.cc b/src/abg-reader.cc index b55808b9..4afa427a 100644 --- a/src/abg-reader.cc +++ b/src/abg-reader.cc @@ -4602,8 +4602,7 @@ build_enum_type_decl(read_context& ctxt, base_type_id = CHAR_STR(a); continue; } - - if (xmlStrEqual(n->name, BAD_CAST("enumerator"))) + else if (xmlStrEqual(n->name, BAD_CAST("enumerator"))) { string name; int64_t value = 0; -- 2.27.0