[PATCH] [PATCH][ARM] Fix issue with UMLAL (unsigned multiple	accumulate long) lowering
    Jyoti Allur 
    jyoti.allur at samsung.com
       
    Wed May 20 08:15:20 PDT 2015
    
    
  
Hi jmolloy, t.p.northover,
[ARM] This patch addresses following issue.
```
unsigned long long
foo (unsigned long long a, unsigned char *b, unsigned short *c)
{
  return a + *b * *c;
}
```
Should compile to use UMLAL ((unsigned multiple accumulate long) which multiplies two unsigned 32-bit values to produce a 64-bit value, and accumulates this with a 64-bit value.
```
foo:
        ldrb    r2, [r2]
        ldrh    r3, [r3]
        mul     r2, r3, r2
        adds    r0, r2, r0
        adc     r1, r1, #0
        bx      lr
```
The above is reduced to following with this patch:
```
foo: 
        ldrb    r2, [r2]
        ldrh    r3, [r3]
        umlal   r0, r1, r3, r2
        bx      lr
```
REPOSITORY
  rL LLVM
http://reviews.llvm.org/D9881
Files:
  ../../llvm/lib/Target/ARM/ARMISelLowering.cpp
  ../../llvm/test/CodeGen/ARM/longMAC.ll
EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D9881.26152.patch
Type: text/x-patch
Size: 6950 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150520/529b6950/attachment.bin>
    
    
More information about the llvm-commits
mailing list