Skip to content

Commit f21034e

Browse files
committed
Revert "[ORC] Implement basic reoptimization."
Broke main tests: ``` [ RUN ] JITLinkRedirectionManagerTest.BasicRedirectionOperation Failure value returned from cantFail wrapped call Unable to find target for this triple (no targets are registered) ``` This reverts commit 188ede2.
1 parent 697d65d commit f21034e

File tree

11 files changed

+30
-650
lines changed

11 files changed

+30
-650
lines changed

compiler-rt/lib/orc/common.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919

2020
/// This macro should be used to define tags that will be associated with
2121
/// handlers in the JIT process, and call can be used to define tags f
22-
#define ORC_RT_JIT_DISPATCH_TAG(X) \
23-
ORC_RT_INTERFACE char X; \
24-
char X = 0;
22+
#define ORC_RT_JIT_DISPATCH_TAG(X) \
23+
extern "C" char X; \
24+
char X = 0;
2525

2626
/// Opaque struct for external symbols.
2727
struct __orc_rt_Opaque {};

compiler-rt/lib/orc/elfnix_platform.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ using namespace orc_rt;
3030
using namespace orc_rt::elfnix;
3131

3232
// Declare function tags for functions in the JIT process.
33-
ORC_RT_JIT_DISPATCH_TAG(__orc_rt_reoptimize_tag)
3433
ORC_RT_JIT_DISPATCH_TAG(__orc_rt_elfnix_push_initializers_tag)
3534
ORC_RT_JIT_DISPATCH_TAG(__orc_rt_elfnix_symbol_lookup_tag)
3635

llvm/include/llvm/ExecutionEngine/Orc/JITLinkRedirectableSymbolManager.h

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,11 @@ class JITLinkRedirectableSymbolManager : public RedirectableSymbolManager,
2525
public:
2626
/// Create redirection manager that uses JITLink based implementaion.
2727
static Expected<std::unique_ptr<RedirectableSymbolManager>>
28-
Create(ObjectLinkingLayer &ObjLinkingLayer, JITDylib &JD) {
28+
Create(ExecutionSession &ES, ObjectLinkingLayer &ObjLinkingLayer,
29+
JITDylib &JD) {
2930
Error Err = Error::success();
3031
auto RM = std::unique_ptr<RedirectableSymbolManager>(
31-
new JITLinkRedirectableSymbolManager(ObjLinkingLayer, JD, Err));
32+
new JITLinkRedirectableSymbolManager(ES, ObjLinkingLayer, JD, Err));
3233
if (Err)
3334
return Err;
3435
return std::move(RM);
@@ -52,40 +53,38 @@ class JITLinkRedirectableSymbolManager : public RedirectableSymbolManager,
5253
constexpr static StringRef JumpStubTableName = "$IND_JUMP_";
5354
constexpr static StringRef StubPtrTableName = "$__IND_JUMP_PTRS";
5455

55-
JITLinkRedirectableSymbolManager(ObjectLinkingLayer &ObjLinkingLayer,
56+
JITLinkRedirectableSymbolManager(ExecutionSession &ES,
57+
ObjectLinkingLayer &ObjLinkingLayer,
5658
JITDylib &JD, Error &Err)
57-
: ObjLinkingLayer(ObjLinkingLayer), JD(JD),
58-
AnonymousPtrCreator(jitlink::getAnonymousPointerCreator(
59-
ObjLinkingLayer.getExecutionSession().getTargetTriple())),
60-
PtrJumpStubCreator(jitlink::getPointerJumpStubCreator(
61-
ObjLinkingLayer.getExecutionSession().getTargetTriple())) {
59+
: ES(ES), ObjLinkingLayer(ObjLinkingLayer), JD(JD),
60+
AnonymousPtrCreator(
61+
jitlink::getAnonymousPointerCreator(ES.getTargetTriple())),
62+
PtrJumpStubCreator(
63+
jitlink::getPointerJumpStubCreator(ES.getTargetTriple())) {
6264
if (!AnonymousPtrCreator || !PtrJumpStubCreator)
6365
Err = make_error<StringError>("Architecture not supported",
6466
inconvertibleErrorCode());
6567
if (Err)
6668
return;
67-
ObjLinkingLayer.getExecutionSession().registerResourceManager(*this);
69+
ES.registerResourceManager(*this);
6870
}
6971

70-
~JITLinkRedirectableSymbolManager() {
71-
ObjLinkingLayer.getExecutionSession().deregisterResourceManager(*this);
72-
}
72+
~JITLinkRedirectableSymbolManager() { ES.deregisterResourceManager(*this); }
7373

7474
StringRef JumpStubSymbolName(unsigned I) {
75-
return *ObjLinkingLayer.getExecutionSession().intern(
76-
(JumpStubPrefix + Twine(I)).str());
75+
return *ES.intern((JumpStubPrefix + Twine(I)).str());
7776
}
7877

7978
StringRef StubPtrSymbolName(unsigned I) {
80-
return *ObjLinkingLayer.getExecutionSession().intern(
81-
(StubPtrPrefix + Twine(I)).str());
79+
return *ES.intern((StubPtrPrefix + Twine(I)).str());
8280
}
8381

8482
unsigned GetNumAvailableStubs() const { return AvailableStubs.size(); }
8583

8684
Error redirectInner(JITDylib &TargetJD, const SymbolAddrMap &NewDests);
8785
Error grow(unsigned Need);
8886

87+
ExecutionSession &ES;
8988
ObjectLinkingLayer &ObjLinkingLayer;
9089
JITDylib &JD;
9190
jitlink::AnonymousPointerCreator AnonymousPtrCreator;

llvm/include/llvm/ExecutionEngine/Orc/ReOptimizeLayer.h

Lines changed: 0 additions & 181 deletions
This file was deleted.

llvm/include/llvm/ExecutionEngine/Orc/RedirectionManager.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,6 @@ class RedirectableSymbolManager : public RedirectionManager {
6363
const SymbolMap &InitialDests) = 0;
6464
};
6565

66-
/// RedirectableMaterializationUnit materializes redirectable symbol
67-
/// by invoking RedirectableSymbolManager::emitRedirectableSymbols
6866
class RedirectableMaterializationUnit : public MaterializationUnit {
6967
public:
7068
RedirectableMaterializationUnit(RedirectableSymbolManager &RM,

llvm/lib/ExecutionEngine/Orc/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ add_llvm_component_library(LLVMOrcJIT
5353
ThreadSafeModule.cpp
5454
RedirectionManager.cpp
5555
JITLinkRedirectableSymbolManager.cpp
56-
ReOptimizeLayer.cpp
5756
ADDITIONAL_HEADER_DIRS
5857
${LLVM_MAIN_INCLUDE_DIR}/llvm/ExecutionEngine/Orc
5958

llvm/lib/ExecutionEngine/Orc/JITLinkRedirectableSymbolManager.cpp

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ using namespace llvm::orc;
1717
void JITLinkRedirectableSymbolManager::emitRedirectableSymbols(
1818
std::unique_ptr<MaterializationResponsibility> R,
1919
const SymbolAddrMap &InitialDests) {
20-
auto &ES = ObjLinkingLayer.getExecutionSession();
2120
std::unique_lock<std::mutex> Lock(Mutex);
2221
if (GetNumAvailableStubs() < InitialDests.size())
2322
if (auto Err = grow(InitialDests.size() - GetNumAvailableStubs())) {
@@ -38,21 +37,21 @@ void JITLinkRedirectableSymbolManager::emitRedirectableSymbols(
3837
R->failMaterialization();
3938
return;
4039
}
40+
dbgs() << *K << "\n";
4141
SymbolToStubs[&TargetJD][K] = StubID;
4242
NewSymbolDefs[K] = JumpStubs[StubID];
4343
NewSymbolDefs[K].setFlags(V.getFlags());
4444
Symbols.push_back(K);
4545
AvailableStubs.pop_back();
4646
}
4747

48-
// FIXME: when this fails we can return stubs to the pool
49-
if (auto Err = redirectInner(TargetJD, InitialDests)) {
48+
if (auto Err = R->replace(absoluteSymbols(NewSymbolDefs))) {
5049
ES.reportError(std::move(Err));
5150
R->failMaterialization();
5251
return;
5352
}
5453

55-
if (auto Err = R->replace(absoluteSymbols(NewSymbolDefs))) {
54+
if (auto Err = redirectInner(TargetJD, InitialDests)) {
5655
ES.reportError(std::move(Err));
5756
R->failMaterialization();
5857
return;
@@ -86,10 +85,10 @@ Error JITLinkRedirectableSymbolManager::redirectInner(
8685
StubHandle StubID = SymbolToStubs[&TargetJD].at(K);
8786
PtrWrites.push_back({StubPointers[StubID].getAddress(), V.getAddress()});
8887
}
89-
return ObjLinkingLayer.getExecutionSession()
90-
.getExecutorProcessControl()
91-
.getMemoryAccess()
92-
.writePointers(PtrWrites);
88+
if (auto Err = ES.getExecutorProcessControl().getMemoryAccess().writePointers(
89+
PtrWrites))
90+
return Err;
91+
return Error::success();
9392
}
9493

9594
Error JITLinkRedirectableSymbolManager::grow(unsigned Need) {
@@ -104,18 +103,16 @@ Error JITLinkRedirectableSymbolManager::grow(unsigned Need) {
104103
SymbolLookupSet LookupSymbols;
105104
DenseMap<SymbolStringPtr, ExecutorSymbolDef *> NewDefsMap;
106105

107-
auto &ES = ObjLinkingLayer.getExecutionSession();
108106
Triple TT = ES.getTargetTriple();
109107
auto G = std::make_unique<jitlink::LinkGraph>(
110108
"<INDIRECT STUBS>", TT, TT.isArch64Bit() ? 8 : 4,
111-
TT.isLittleEndian() ? endianness::little : endianness::big,
109+
TT.isLittleEndian() ? support::little : support::big,
112110
jitlink::getGenericEdgeKindName);
113111
auto &PointerSection =
114112
G->createSection(StubPtrTableName, MemProt::Write | MemProt::Read);
115113
auto &StubsSection =
116114
G->createSection(JumpStubTableName, MemProt::Exec | MemProt::Read);
117115

118-
// FIXME: We can batch the stubs into one block and use address to access them
119116
for (size_t I = OldSize; I < NewSize; I++) {
120117
auto Pointer = AnonymousPtrCreator(*G, PointerSection, nullptr, 0);
121118
if (auto Err = Pointer.takeError())

0 commit comments

Comments
 (0)