[llvm-dev] How to optimize store of constant arrays

via llvm-dev llvm-dev at lists.llvm.org
Tue Mar 13 08:06:04 PDT 2018


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.


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


More information about the llvm-dev mailing list