[llvm-dev] How to optimize store of constant arrays
Krzysztof Parzyszek via llvm-dev
llvm-dev at lists.llvm.org
Tue Mar 13 08:26:43 PDT 2018
You could create a statically initialized global variable containing the
constant data, and then insert a call to memcpy to copy it over to your
destination.
-Krzysztof
On 3/13/2018 10:06 AM, via llvm-dev wrote:
> Hi all, I have this problem:
>
> I'm using LLVM's C++ API, mostly `IRBuilder<>` to generate code. Some of
> the generated code is just storing constant data to a location provided
> as a function argument. Something like
> `ir_builder.CreateStore(get_default_data(), ptrValue)` where
> `get_default_data()` may return a `ConstantArray` of `i8` and `ptrValue`
> is a function argument. Looking at the generated assembly, it seems
> inefficient, it generates a separate instruction for storing each byte
> relative to the pointer. Each instruction takes several bytes, and I am
> trying to optimize for code size.
>
> The Q: What should I do to make the generated code more size-efficient
> (think `-Os`)?
>
> Current ideas, which may not include the best answer:
> - Store the data as-is in the IR, and use the `MemCpyInst` instead of
> the store when `get_default_data()` returns something big?
> - Add a custom -- or any available built-in -- pass to the output to
> transform the store instns to memcpy when appropriate?
>
> Thanks for any help,
> Boldizsar
>
> This message and any attachments are intended for the use of the addressee or addressees only.
> The unauthorised disclosure, use, dissemination or copying (either in whole or in part) of its
> content is not permitted.
> If you received this message in error, please notify the sender and delete it from your system.
> Emails can be altered and their integrity cannot be guaranteed by the sender.
>
> Please consider the environment before printing this email.
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by The Linux Foundation
More information about the llvm-dev
mailing list