[PATCH] D56586: [PPC64] Update LocalEntry from assigned symbols
Leandro Lupori via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 11 03:26:02 PST 2019
luporl created this revision.
Herald added subscribers: llvm-commits, jsji, kbarton, nemanjai.
Repository:
rL LLVM
https://reviews.llvm.org/D56586
Files:
lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp
Index: lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp
===================================================================
--- lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp
+++ lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp
@@ -36,6 +36,8 @@
#include "llvm/Support/TargetRegistry.h"
#include "llvm/Support/raw_ostream.h"
+#include <set>
+
using namespace llvm;
#define GET_INSTRINFO_MC_DESC
@@ -182,16 +184,35 @@
void emitAssignment(MCSymbol *S, const MCExpr *Value) override {
auto *Symbol = cast<MCSymbolELF>(S);
+
+ auto I = UpdateOther.find(Symbol);
+ if (I != UpdateOther.end())
+ UpdateOther.erase(I);
+
// When encoding an assignment to set symbol A to symbol B, also copy
// the st_other bits encoding the local entry point offset.
- if (Value->getKind() != MCExpr::SymbolRef)
- return;
- const auto &RhsSym = cast<MCSymbolELF>(
- static_cast<const MCSymbolRefExpr *>(Value)->getSymbol());
- unsigned Other = Symbol->getOther();
+ if (copyLocalEntry(Symbol, Value))
+ UpdateOther.insert(Symbol);
+ }
+
+ void finish() override {
+ for (auto *Sym : UpdateOther)
+ copyLocalEntry(Sym, Sym->getVariableValue());
+ }
+
+private:
+ std::set<MCSymbolELF *> UpdateOther;
+
+ bool copyLocalEntry(MCSymbolELF *D, const MCExpr *S) {
+ if (S->getKind() != MCExpr::SymbolRef)
+ return false;
+ const auto &RhsSym =
+ cast<MCSymbolELF>(static_cast<const MCSymbolRefExpr *>(S)->getSymbol());
+ unsigned Other = D->getOther();
Other &= ~ELF::STO_PPC64_LOCAL_MASK;
Other |= RhsSym.getOther() & ELF::STO_PPC64_LOCAL_MASK;
- Symbol->setOther(Other);
+ D->setOther(Other);
+ return true;
}
};
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D56586.181234.patch
Type: text/x-patch
Size: 1724 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190111/8fd26e07/attachment.bin>
More information about the llvm-commits
mailing list