[PATCH] [InstCombine] Attempt to eliminate redundant loads whose	addresses are dependent on the result of a select instruction.
    Tilmann Scheller 
    t.scheller at samsung.com
       
    Wed Sep  3 13:24:24 PDT 2014
    
    
  
Hi,
attached is the following patch:
[PATCH] [InstCombine] Attempt to eliminate redundant loads whose addresses are dependent on the result of a select instruction.
If both values have already been loaded into registers the load becomes redundant and can be replaced with a select on the two values instead, e.g. we can do the following transformation:
a = (load (gep idx_a))
b = (load (gep idx_b))
c = (load (gep (select (cond, idx_a, idx_b))))
  -->
a = (load (gep idx_a))
b = (load (gep idx_b))
c = (select (cond, a, b))
This particular pattern occurs in the hottest loop of 175.vpr from SPEC CPU2000. Haven't done any measurements yet but I would assume it improves performance (GCC is doing the above optimization and is ~10% faster on ARM)
This is my first patch for InstCombine, feedback welcome :)
Regards,
Tilmann
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-InstCombine-Attempt-to-eliminate-redundant-loads-who.patch
Type: application/octet-stream
Size: 6440 bytes
Desc: 0001-InstCombine-Attempt-to-eliminate-redundant-loads-who.patch
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140903/146f10bd/attachment.obj>
    
    
More information about the llvm-commits
mailing list