[PATCH] DAGCombiner: Merge load/store sequences with adresses: base + index + offset

Arnold Schwaighofer aschwaighofer at apple.com
Mon Apr 1 11:14:25 PDT 2013


r178483

Thanks.

On Apr 1, 2013, at 12:12 PM, Nadav Rotem <nrotem at apple.com> wrote:

> LGTM! 
> 
> On Apr 1, 2013, at 9:51 AM, Arnold Schwaighofer <aschwaighofer at apple.com> wrote:
> 
>> We would also like to merge sequences that involve a variable index like in the
>> example below.
>> 
>>    int index = *idx++
>>    int i0 = c[index+0];
>>    int i1 = c[index+1];
>>    b[0] = i0;
>>    b[1] = i1;
>> 
>> By extending the parsing of the base pointer to handle dags that contain a
>> base, index, and offset we can handle examples like the one above.
>> 
>> The dag for the code above will look something like:
>> 
>> (load (i64 add (i64 copyfromreg %c)
>>                (i64 signextend (i8 load %index))))
>> 
>> (load (i64 add (i64 copyfromreg %c)
>>                (i64 signextend (i32 add (i32 signextend (i8 load %index))
>>                                         (i32 1)))))
>> 
>> The code that parses the tree ignores the intermediate sign extensions. However,
>> if there is a sign extension it needs to be on all indexes.
>> 
>> (load (i64 add (i64 copyfromreg %c)
>>                (i64 signextend (add (i8 load %index)
>>                                     (i8 1))))
>> vs
>> 
>> (load (i64 add (i64 copyfromreg %c)
>>                (i64 signextend (i32 add (i32 signextend (i8 load %index))
>>                                         (i32 1)))))
>> radar://13536387
>> 
>> <0001-Merge-load-store-sequences-with-adresses-base-index-.patch>




More information about the llvm-commits mailing list