From: Brian Inglis <Brian.Inglis@SystematicSW.ab.ca>
To: newlib@sourceware.org
Subject: Re: [PATCH] newlib: libc: Improved the readability of strcspn with minor optimization
Date: Wed, 20 Dec 2023 15:24:10 -0700 [thread overview]
Message-ID: <52a680da-61ad-486d-aaa4-d2800320791f@SystematicSW.ab.ca> (raw)
In-Reply-To: <CAOox84tJ3nakbUFtAM6dNdPqcRkOZz=7ToJvhGt0XrrywA7CQg@mail.gmail.com>
On 2023-12-19 21:24, Jeff Johnston wrote:
> Patch merged to master.
> On Sat, Dec 16, 2023 at 4:31 AM Xiao Zeng wrote:
> 2023-12-15 18:28 Torbjorn SVENSSON wrote:
>> On 2023-12-15 09:31, Xiao Zeng wrote:
>>> Signed-off-by: Xiao Zeng <zengxiao@eswincomputing.com
> <mailto:zengxiao@eswincomputing.com>>
>>> ---
>>> newlib/libc/string/strcspn.c | 6 ++----
>>> 1 file changed, 2 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/newlib/libc/string/strcspn.c b/newlib/libc/string/strcspn.c
>>> index abaa93ad6..8ac0bf10c 100644
>>> --- a/newlib/libc/string/strcspn.c
>>> +++ b/newlib/libc/string/strcspn.c
>>> @@ -37,12 +37,10 @@ strcspn (const char *s1,
> >> for (c = s2; *c; c++)
> >> {
> >> if (*s1 == *c)
> >> - break;
> >> + goto end;
> >> }
> >> - if (*c)
> >> - break;
> >> s1++;
> >> }
> >> -
> >> +end:
> >> return s1 - s;
> >> }
>> Just looking at this small snippet of code, I would say that the previous
>> code and your suggestion won't do the same thing.
>>
>> Do you have unit tests that confirm that the behavior is identical with the
>> current implementation and your suggested change?
>>
>> When I run your suggestion, I get return value 0, but with the current
>> implementation it's 3 for this call: strspn("129th", "1234567890").
> After applying this patch, provide a comparison of assembly code under the
> risc-v architecture, with default compilation parameters used in both of
> them:
These "micro-optimizations" improve code generation by a few instructions on a
single (RISC-V) target at a single optimization level of a single compiler and
version, but what is the cost in execution time and the cache imoact?
Using gotos throw away potential optimizations in modern compilers, where
goto-less code may have control and/or data flow optimized, with branches
altered or eliminated, depending on target instruction sets and compiler
supported optimizations selected and implemented.
For example, in these small functions with few branches, conditional execution
instructions could be generated, eliminating branches, cache, and lookaside
buffer impacts, possibly allowing inlining.
Who knows what impacts this has on all of the other targets, compilers,
versions, and optimization levels?
Should we even consider making these kinds of non-bug-fix minor changes to
non-target specific sources, unless there are algorithm changes with
demonstrated benefits across multiple targets, compilers, versions, and
optimization levels?
--
Take care. Thanks, Brian Inglis Calgary, Alberta, Canada
La perfection est atteinte Perfection is achieved
non pas lorsqu'il n'y a plus rien à ajouter not when there is no more to add
mais lorsqu'il n'y a plus rien à retirer but when there is no more to cut
-- Antoine de Saint-Exupéry
next prev parent reply other threads:[~2023-12-20 22:24 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-15 8:31 Xiao Zeng
2023-12-15 10:28 ` Torbjorn SVENSSON
2023-12-16 4:45 ` Xiao Zeng
2023-12-16 4:56 ` Xiao Zeng
2023-12-20 15:08 ` Torbjorn SVENSSON
2023-12-21 1:22 ` Xiao Zeng
2023-12-16 9:30 ` Xiao Zeng
2023-12-20 4:24 ` Jeff Johnston
2023-12-20 5:51 ` Xiao Zeng
2023-12-20 22:24 ` Brian Inglis [this message]
2023-12-21 8:00 ` Stefan Tauner
2023-12-21 17:47 ` Brian Inglis
2023-12-22 7:53 Xiao Zeng
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=52a680da-61ad-486d-aaa4-d2800320791f@SystematicSW.ab.ca \
--to=brian.inglis@systematicsw.ab.ca \
--cc=newlib@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).