Revision tags: llvmorg-18.1.8, llvmorg-18.1.7, llvmorg-18.1.6, llvmorg-18.1.5, llvmorg-18.1.4, llvmorg-18.1.3, llvmorg-18.1.2, llvmorg-18.1.1, llvmorg-18.1.0, llvmorg-18.1.0-rc4, llvmorg-18.1.0-rc3, llvmorg-18.1.0-rc2, llvmorg-18.1.0-rc1, llvmorg-19-init, llvmorg-17.0.6, llvmorg-17.0.5, llvmorg-17.0.4, llvmorg-17.0.3, llvmorg-17.0.2, llvmorg-17.0.1, llvmorg-17.0.0, llvmorg-17.0.0-rc4, llvmorg-17.0.0-rc3, llvmorg-17.0.0-rc2, llvmorg-17.0.0-rc1, llvmorg-18-init, llvmorg-16.0.6, llvmorg-16.0.5, llvmorg-16.0.4, llvmorg-16.0.3, llvmorg-16.0.2, llvmorg-16.0.1, llvmorg-16.0.0, llvmorg-16.0.0-rc4, llvmorg-16.0.0-rc3, llvmorg-16.0.0-rc2, llvmorg-16.0.0-rc1, llvmorg-17-init, llvmorg-15.0.7, llvmorg-15.0.6, llvmorg-15.0.5, llvmorg-15.0.4, llvmorg-15.0.3, working, llvmorg-15.0.2, llvmorg-15.0.1, llvmorg-15.0.0, llvmorg-15.0.0-rc3, llvmorg-15.0.0-rc2, llvmorg-15.0.0-rc1, llvmorg-16-init, llvmorg-14.0.6, llvmorg-14.0.5, llvmorg-14.0.4, llvmorg-14.0.3, llvmorg-14.0.2, llvmorg-14.0.1, llvmorg-14.0.0, llvmorg-14.0.0-rc4, llvmorg-14.0.0-rc3, llvmorg-14.0.0-rc2, llvmorg-14.0.0-rc1, llvmorg-15-init, llvmorg-13.0.1, llvmorg-13.0.1-rc3, llvmorg-13.0.1-rc2, llvmorg-13.0.1-rc1, llvmorg-13.0.0, llvmorg-13.0.0-rc4, llvmorg-13.0.0-rc3, llvmorg-13.0.0-rc2, llvmorg-13.0.0-rc1, llvmorg-14-init, llvmorg-12.0.1, llvmorg-12.0.1-rc4, llvmorg-12.0.1-rc3, llvmorg-12.0.1-rc2 |
#
21aa107e |
| 25-May-2021 |
Momchil Velikov <momchil.velikov@arm.com> |
Reland "Do not create LLVM IR `constant`s for objects with dynamic initialisation"
This relands commit 13dd65b3a1a3ac049b5f3a9712059f7c61649bea.
The original commit contained a test, which failed w
Reland "Do not create LLVM IR `constant`s for objects with dynamic initialisation"
This relands commit 13dd65b3a1a3ac049b5f3a9712059f7c61649bea.
The original commit contained a test, which failed when compiled for a MACH-O target.
This patch changes the test to run for x86_64-linux instead of `%itanium_abi_triple`, to avoid having invalid syntax for MACH-O sections. The patch itself does not care about section attribute syntax and a x86 backend does not even need to be included in the build.
Differential Revision: https://reviews.llvm.org/D102693
show more ...
|
#
13dd65b3 |
| 24-May-2021 |
Momchil Velikov <momchil.velikov@arm.com> |
Do not create LLVM IR `constant`s for objects with dynamic initialisation
When a const-qualified object has a section attribute, that section is set to read-only and clang outputs a LLVM IR constant
Do not create LLVM IR `constant`s for objects with dynamic initialisation
When a const-qualified object has a section attribute, that section is set to read-only and clang outputs a LLVM IR constant for that object. This is incorrect for dynamically initialised objects.
For example:
int init() { return 15; }
__attribute__((section("SA"))) const int a = init();
a is allocated to a read-only section and is left unintialised (zero-initialised).
This patch adds checks if an initialiser is a constant expression and allocates objects to sections as follows:
* const-qualified objects - no initialiser or constant initialiser: .rodata - dynamic initializer: .bss * non const-qualified objects - no initialiser or dynamic initialiser: .bss - constant initialiser: .data
(".rodata", ".data", and ".bss" names used just for explanatory purpose)
Differential Revision: https://reviews.llvm.org/D102693
show more ...
|