[Patch]New InstCombine pattern for Icmp

Yi Jiang yjiang at apple.com
Fri Jul 25 16:11:32 PDT 2014


Hi Ben,

Thank you for your comments! Here is a new version.  In this version, I still kept some “if” thinking that some operand has been already extracted so I would like to use it directly.  Please let me know if any other comments. 

-Yi
On Jul 25, 2014, at 2:12 AM, Benjamin Kramer <benny.kra at gmail.com> wrote:

> On Fri, Jul 25, 2014 at 1:24 AM, Yi Jiang <yjiang at apple.com> wrote:
>> Hi,
>> 
>> his patch is trying to fold (icmp ult/ule (A + C1), C3) | (icmp ult/ule (A +
>> C2), C3)  to (icmp ult/ule ((A & ~(C1 ^ C2)) + max(C1, C2)), C3)  .
>> This transformation is legal if C1 ^ C2 is one-bit mask, in other word, C1
>> is only one bit different from C2. In this case, we can “mask” that bit and
>> do just one comparison.
>> A typical example is:
>> isALPHA(c)    ((c) >= 'A' && (c) <= 'Z') || ((c) >= 'a' && (c) <= 'z’)
>> 
>> Now llvm will optimize it to ((c + 191) <=25) || ((c + 159) <=25)
>> 
>> With this patch, we can optimize it further to:
>> (c & 223) + 191 <= 25
>> 
>> The binary format of the constants are:
>> 191   10111111
>> 159   10011111
>> 223   11011111
>> 
>> Here is some experiment result on arm64:
>> The patch shows no regression and improve spec2000 perlbmk 3.8% in
>> test-suite under -O3.
>> We also test the spec2006 400.perlbench with ref size input, it will improve
>> 1% under -O3 and 1.2% under -O3+lto+pgo.
> 
> Wow, very nice.
> 
>> Any comments are appreciated.
> 
> The patch could be significantly simplified with the PatternMatch
> tool. Something like match(LHS, m_Add(m_OneUse(m_Value(A),
> m_ConstantInt(LAddCst)... could replace your if chain.
> 
> - Ben

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140725/219b8959/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: combinecmpV2.patch
Type: application/octet-stream
Size: 2938 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140725/219b8959/attachment.obj>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140725/219b8959/attachment-0001.html>


More information about the llvm-commits mailing list