[llvm-dev] What should a truncating store do?

Jon Chesterfield via llvm-dev llvm-dev at lists.llvm.org
Mon Sep 25 14:27:31 PDT 2017


Bit packing vectors doesn't appear to interact well with splitting or
concatenating vectors since it redistributes where the padding goes.

The behaviour I find strange is writing zeros to round up to a byte
boundary when storing instead of preserving whatever was already there.
Writing a vector of size N bits shouldn't clobber more than N bits of
memory.

On Mon, Sep 25, 2017 at 9:54 PM, Friedman, Eli <efriedma at codeaurora.org>
wrote:

> On 9/25/2017 12:13 PM, Björn Pettersson A wrote:
>
>> So what is the correct behavior of the store <2 x i2>. Storing two bytes
>> with a zext:ed i2 in each, or a bit packed vector?
>>
>> I can't remember any documentation mentioning that vectors are bit
>> packed. But if LLVM is supposed to bit pack vectors, should we do it for
>> any element size, or only when element size is less than the byte size, or
>> only for i1 vectors?
>>
> For lack of any formal documentation, the most canonical source of
> information about the size of a type is DataLayout.  And currently
> DataLayout::getTypeSizeInBits() assumes vectors are bit-packed.
>
>> Maybe bit packing should be optional (target specific)?
>>
>
> That's... maybe possible?  It would break the current rule that whether a
> bitcast is legal is independent of the target, and I don't see a compelling
> reason.  (If you're trying to comply with some external ABI, you can always
> explicitly extend a value before you store it.)
>
>
> -Eli
>
> --
> Employee of Qualcomm Innovation Center, Inc.
> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux
> Foundation Collaborative Project
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170925/d9b65c33/attachment.html>


More information about the llvm-dev mailing list