[LLVMdev] Limit loop vectorizer to SSE

Peter Newman peter at uformia.com
Mon Nov 18 23:07:18 PST 2013


On 19/11/2013 5:57 PM, Peter Newman wrote:
> On 16/11/2013 7:58 AM, Nadav Rotem wrote:
>>
>> On Nov 15, 2013, at 12:36 PM, Renato Golin <renato.golin at linaro.org 
>> <mailto:renato.golin at linaro.org>> wrote:
>>
>>> On 15 November 2013 20:24, Joshua Klontz <josh.klontz at gmail.com 
>>> <mailto:josh.klontz at gmail.com>> wrote:
>>>
>>>     Agreed, is there a pass that will insert a runtime alignment
>>>     check? Also, what's the easiest way to get at
>>>     TargetTransformInfo::getRegisterBitWidth() so I don't have to
>>>     hard code 32? Thanks!
>>>
>>>
>>> I think that's a fair question, and it's about safety. If you're 
>>> getting this on the JIT, means we may be generating unsafe 
>>> transformations on the vectorizer.
>>>
>>> Arnold, Nadav, I don't remember seeing code to generate any run-time 
>>> alignment checks on the incoming pointer, is there such a thing? If 
>>> not, shouldn't we add one?
>>
>>
>> If the the vectorizer generates aligned memory accesses to unaligned 
>> addresses then this is a serious bug.  But I don't think that Josh 
>> said that the vectorizer generated aligned accesses to unaligned 
>> pointers.
> I've hit this (or a similar) bug, where generating SSE instructions 
> for vector access was assuming stack memory would be aligned, if it 
> was an aligned offset from the start of the allocation. But if the 
> stack wasn't appropriately aligned when the function was called, the 
> stack memory would be unaligned and cause an exception.
Actually, after reading the rest of the thread and the discussion of 
what was occurring, it seems I was generating a function without 
alignment specified, which via the "no alignment specified means align 0 
which means ABI alignment" meant the generated code thought it was 
aligned appropriately. Specifying an alignment fixed this (and causes 
the generated code to manually ensure its alignment).

>>
>> There is no point in LLVM checking for alignment because if the 
>> memory is unaligned then the program will crash.  Users who want to 
>> crash with a readable error message can simply write code that checks 
>> the pointer (by masking the high bits and comparing to zero).
>>
>>
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131119/b6b1012d/attachment.html>


More information about the llvm-dev mailing list