[lld] 4514608 - [ELF] relocateNonAlloc & ICF: replace random access iterators of relocations with input iterators. NFC
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 10 23:11:36 PDT 2024
Author: Fangrui Song
Date: 2024-04-10T23:11:24-07:00
New Revision: 45146082e693415f37413c656e0a0fd13d0e3136
URL: https://github.com/llvm/llvm-project/commit/45146082e693415f37413c656e0a0fd13d0e3136
DIFF: https://github.com/llvm/llvm-project/commit/45146082e693415f37413c656e0a0fd13d0e3136.diff
LOG: [ELF] relocateNonAlloc & ICF: replace random access iterators of relocations with input iterators. NFC
Also replace one `this->file` with a local variable as some function
calls are opaque to the compiler, causing unneeded reload.
Added:
Modified:
lld/ELF/ICF.cpp
lld/ELF/InputSection.cpp
Removed:
################################################################################
diff --git a/lld/ELF/ICF.cpp b/lld/ELF/ICF.cpp
index 2551c2e807b73f..bfc605c793a92c 100644
--- a/lld/ELF/ICF.cpp
+++ b/lld/ELF/ICF.cpp
@@ -239,16 +239,17 @@ bool ICF<ELFT>::constantEq(const InputSection *secA, ArrayRef<RelTy> ra,
const InputSection *secB, ArrayRef<RelTy> rb) {
if (ra.size() != rb.size())
return false;
- for (size_t i = 0; i < ra.size(); ++i) {
- if (ra[i].r_offset != rb[i].r_offset ||
- ra[i].getType(config->isMips64EL) != rb[i].getType(config->isMips64EL))
+ auto rai = ra.begin(), rae = ra.end(), rbi = rb.begin();
+ for (; rai != rae; ++rai, ++rbi) {
+ if (rai->r_offset != rbi->r_offset ||
+ rai->getType(config->isMips64EL) != rbi->getType(config->isMips64EL))
return false;
- uint64_t addA = getAddend<ELFT>(ra[i]);
- uint64_t addB = getAddend<ELFT>(rb[i]);
+ uint64_t addA = getAddend<ELFT>(*rai);
+ uint64_t addB = getAddend<ELFT>(*rbi);
- Symbol &sa = secA->file->getRelocTargetSym(ra[i]);
- Symbol &sb = secB->file->getRelocTargetSym(rb[i]);
+ Symbol &sa = secA->file->getRelocTargetSym(*rai);
+ Symbol &sb = secB->file->getRelocTargetSym(*rbi);
if (&sa == &sb) {
if (addA == addB)
continue;
@@ -336,10 +337,11 @@ bool ICF<ELFT>::variableEq(const InputSection *secA, ArrayRef<RelTy> ra,
const InputSection *secB, ArrayRef<RelTy> rb) {
assert(ra.size() == rb.size());
- for (size_t i = 0; i < ra.size(); ++i) {
+ auto rai = ra.begin(), rae = ra.end(), rbi = rb.begin();
+ for (; rai != rae; ++rai, ++rbi) {
// The two sections must be identical.
- Symbol &sa = secA->file->getRelocTargetSym(ra[i]);
- Symbol &sb = secB->file->getRelocTargetSym(rb[i]);
+ Symbol &sa = secA->file->getRelocTargetSym(*rai);
+ Symbol &sb = secB->file->getRelocTargetSym(*rbi);
if (&sa == &sb)
continue;
diff --git a/lld/ELF/InputSection.cpp b/lld/ELF/InputSection.cpp
index c06816bcfd5616..c8350652e65a67 100644
--- a/lld/ELF/InputSection.cpp
+++ b/lld/ELF/InputSection.cpp
@@ -918,8 +918,9 @@ void InputSection::relocateNonAlloc(uint8_t *buf, ArrayRef<RelTy> rels) {
break;
}
- for (size_t i = 0, relsSize = rels.size(); i != relsSize; ++i) {
- const RelTy &rel = rels[i];
+ const InputFile *f = this->file;
+ for (auto it = rels.begin(), end = rels.end(); it != end; ++it) {
+ const RelTy &rel = *it;
const RelType type = rel.getType(config->isMips64EL);
const uint64_t offset = rel.r_offset;
uint8_t *bufLoc = buf + offset;
@@ -927,23 +928,22 @@ void InputSection::relocateNonAlloc(uint8_t *buf, ArrayRef<RelTy> rels) {
if (!RelTy::IsRela)
addend += target.getImplicitAddend(bufLoc, type);
- Symbol &sym = this->file->getRelocTargetSym(rel);
+ Symbol &sym = f->getRelocTargetSym(rel);
RelExpr expr = target.getRelExpr(type, sym, bufLoc);
if (expr == R_NONE)
continue;
auto *ds = dyn_cast<Defined>(&sym);
if (emachine == EM_RISCV && type == R_RISCV_SET_ULEB128) {
- if (++i < relsSize &&
- rels[i].getType(/*isMips64EL=*/false) == R_RISCV_SUB_ULEB128 &&
- rels[i].r_offset == offset) {
+ if (++it != end &&
+ it->getType(/*isMips64EL=*/false) == R_RISCV_SUB_ULEB128 &&
+ it->r_offset == offset) {
uint64_t val;
if (!ds && tombstone) {
val = *tombstone;
} else {
val = sym.getVA(addend) -
- (this->file->getRelocTargetSym(rels[i]).getVA(0) +
- getAddend<ELFT>(rels[i]));
+ (f->getRelocTargetSym(*it).getVA(0) + getAddend<ELFT>(*it));
}
if (overwriteULEB128(bufLoc, val) >= 0x80)
errorOrWarn(getLocation(offset) + ": ULEB128 value " + Twine(val) +
More information about the llvm-commits
mailing list