[PATCH] Don't use runtime bounds check between different address space pointers
Matt Arsenault
Matthew.Arsenault at amd.com
Wed Oct 2 11:54:32 PDT 2013
On 10/01/2013 08:30 PM, Nadav Rotem wrote:
> Hi Matt,
>
> Is this a real problem on R600 ? The patch LGTM. I did not understand the comment about the Parallel annotation.
>
> Thanks,
> Nadav
The bitcast is a problem. If the pointers were to be compared, they
would need to use ptrtoint + compare. That still would not be valid when
using the flat address space. For example a local pointer and a flat
pointer to the same location wouldn't have the same bit value, and there
is an instruction to map between them. The different address spaces are
accessed with completely different instructions, so it doesn't make
sense to cast between them ordinarily. Local and region pointers could
have the same values, but be intended for different hardware. I'm pretty
sure the current R600 target doesn't yet support either of these features.
I thought this check was happening later at the time and would allow
inserting the runtime check, but I see now that it doesn't make sense.
>
> On Oct 1, 2013, at 7:14 PM, Matt Arsenault <Matthew.Arsenault at amd.com> wrote:
>
>> Hi nadav,
>>
>> Don't vectorize with a runtime check if it requires a comparison between pointers with different address spaces. The values can't be assumed to be directly comparable. Previously it would create an illegal bitcast.
>>
>> http://llvm-reviews.chandlerc.com/D1804
>>
>> Files:
>> lib/Transforms/Vectorize/LoopVectorize.cpp
>> test/Transforms/LoopVectorize/runtime-check-address-space.ll
>> test/Transforms/LoopVectorize/runtime-check-readonly-address-space.ll
>> <D1804.1.patch>
>
More information about the llvm-commits
mailing list