[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