From: Chris Lattner Date: Tue, 23 Dec 2008 20:52:52 +0000 (+0000) Subject: add some notes for simplifylibcalls optimizations X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=9cf8ef63c62b0c8865bc4febd45c83e9965b34f2;p=oota-llvm.git add some notes for simplifylibcalls optimizations git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61385 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/README.txt b/lib/Target/README.txt index 2b7e9ed4ffd..81b0f9cc23a 100644 --- a/lib/Target/README.txt +++ b/lib/Target/README.txt @@ -1461,3 +1461,28 @@ void foo (int a, struct T b) //===---------------------------------------------------------------------===// +simplifylibcalls should do several optimizations for strspn/strcspn: + +strcspn(x, "") -> strlen(x) +strcspn("", x) -> 0 +strspn("", x) -> 0 +strspn(x, "") -> strlen(x) +strspn(x, "a") -> strchr(x, 'a')-x + +strcspn(x, "a") -> inlined loop for up to 3 letters (similarly for strspn): + +size_t __strcspn_c3 (__const char *__s, int __reject1, int __reject2, + int __reject3) { + register size_t __result = 0; + while (__s[__result] != '\0' && __s[__result] != __reject1 && + __s[__result] != __reject2 && __s[__result] != __reject3) + ++__result; + return __result; +} + +This should turn into a switch on the character. See PR3253 for some notes on +codegen. + +456.hmmer apparently uses strcspn and strspn a lot. 471.omnetpp uses strspn. + +//===---------------------------------------------------------------------===//