[llvm] [bolt] Simplify rodata/literal load for X86_64 & AArch64 (PR #179474)
YongKang Zhu via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 3 17:55:00 PST 2026
================
@@ -1261,28 +1262,49 @@ bool SimplifyRODataLoads::simplifyRODataLoads(BinaryFunction &BF) {
}
// Get the contents of the section containing the target address of the
- // memory operand. We are only interested in read-only sections.
+ // memory operand. We are only interested in read-only sections for X86,
+ // for aarch64 the sections can be read-only or executable.
ErrorOr<BinarySection &> DataSection =
BC.getSectionForAddress(TargetAddress);
if (!DataSection || DataSection->isWritable())
continue;
+ if (DataSection->isText()) {
+ // If data is not part of a function, check if it is part of a global CI
+ // Do not proceed if there aren't data markers for CIs
+ BinaryFunction *TargetBF =
+ BC.getBinaryFunctionContainingAddress(TargetAddress,
+ /*CheckPastEnd*/ false,
+ /*UseMaxSize*/ true);
+ const bool IsInsideFunc =
+ TargetBF && TargetBF->isInConstantIsland(TargetAddress);
+
+ auto CIEndIter = BC.AddressToConstantIslandMap.end();
+ auto CIIter = BC.AddressToConstantIslandMap.find(TargetAddress);
+ if (!IsInsideFunc && CIIter == CIEndIter)
----------------
yozhu wrote:
Your code is correct. I got it wrong ..
https://github.com/llvm/llvm-project/pull/179474
More information about the llvm-commits
mailing list