Author: hev Date: 2026-01-22T08:27:36Z New Revision: 3dafa81323f98ca427e32943a1f665a90a4b72fa
URL: https://github.com/llvm/llvm-project/commit/3dafa81323f98ca427e32943a1f665a90a4b72fa DIFF: https://github.com/llvm/llvm-project/commit/3dafa81323f98ca427e32943a1f665a90a4b72fa.diff LOG: [JITLink][LoongArch] Refactor jump stub to support LA32R (#175355) (cherry picked from commit 29419c48d518e6e9082ec9a3c5dbba309ec25ebe) Added: Modified: llvm/include/llvm/ExecutionEngine/JITLink/loongarch.h llvm/lib/ExecutionEngine/JITLink/loongarch.cpp llvm/unittests/ExecutionEngine/JITLink/StubsTests.cpp Removed: ################################################################################ diff --git a/llvm/include/llvm/ExecutionEngine/JITLink/loongarch.h b/llvm/include/llvm/ExecutionEngine/JITLink/loongarch.h index 2da2a4201ae16..50a0ded54c3e3 100644 --- a/llvm/include/llvm/ExecutionEngine/JITLink/loongarch.h +++ b/llvm/include/llvm/ExecutionEngine/JITLink/loongarch.h @@ -447,9 +447,14 @@ inline Symbol &createAnonymousPointerJumpStub(LinkGraph &G, Symbol &PointerSymbol) { Block &StubContentBlock = G.createContentBlock( StubSection, getStubBlockContent(G), orc::ExecutorAddr(), 4, 0); - StubContentBlock.addEdge(Page20, 0, PointerSymbol, 0); - StubContentBlock.addEdge(PageOffset12, 4, PointerSymbol, 0); - return G.addAnonymousSymbol(StubContentBlock, 0, StubEntrySize, true, false); + Symbol &StubSymbol = + G.addAnonymousSymbol(StubContentBlock, 0, StubEntrySize, true, false); + StubContentBlock.addEdge(G.getPointerSize() == 8 ? Page20 : PCAddHi20, 0, + PointerSymbol, 0); + StubContentBlock.addEdge( + G.getPointerSize() == 8 ? PageOffset12 : PCAddLo12, 4, + G.getPointerSize() == 8 ? PointerSymbol : StubSymbol, 0); + return StubSymbol; } /// Global Offset Table Builder. diff --git a/llvm/lib/ExecutionEngine/JITLink/loongarch.cpp b/llvm/lib/ExecutionEngine/JITLink/loongarch.cpp index 69609c1b9c982..221dd45a7eff0 100644 --- a/llvm/lib/ExecutionEngine/JITLink/loongarch.cpp +++ b/llvm/lib/ExecutionEngine/JITLink/loongarch.cpp @@ -28,8 +28,8 @@ const uint8_t LA64StubContent[StubEntrySize] = { }; const uint8_t LA32StubContent[StubEntrySize] = { - 0x14, 0x00, 0x00, 0x1a, // pcalau12i $t8, %page20(imm) - 0x94, 0x02, 0x80, 0x28, // ld.w $t8, $t8, %pageoff12(imm) + 0x14, 0x00, 0x00, 0x1c, // pcaddu12i $t8, %pcadd20(imm) + 0x94, 0x02, 0x80, 0x28, // ld.w $t8, $t8, %pcadd12(.Lpcadd_hi) 0x80, 0x02, 0x00, 0x4c // jr $t8 }; diff --git a/llvm/unittests/ExecutionEngine/JITLink/StubsTests.cpp b/llvm/unittests/ExecutionEngine/JITLink/StubsTests.cpp index 643ea6754f2d1..8473c71ef0ce3 100644 --- a/llvm/unittests/ExecutionEngine/JITLink/StubsTests.cpp +++ b/llvm/unittests/ExecutionEngine/JITLink/StubsTests.cpp @@ -119,11 +119,11 @@ TEST(StubsTest, StubsGeneration_loongarch32) { 0x14, 0x00, 0x00, - 0x1a, // pcalau12i $t8, %page20(imm) + 0x1c, // pcaddu12i $t8, %pcadd20(imm) static_cast<char>(0x94), 0x02, static_cast<char>(0x80), - 0x28, // ld.d $t8, $t8, %pageoff12(imm) + 0x28, // ld.w $t8, $t8, %pcadd12(.Lpcadd_hi) static_cast<char>(0x80), 0x02, 0x00, @@ -137,12 +137,12 @@ TEST(StubsTest, StubsGeneration_loongarch32) { EXPECT_EQ(std::distance(StubSym.getBlock().edges().begin(), StubSym.getBlock().edges().end()), 2U); - auto &PageHighEdge = *StubSym.getBlock().edges().begin(); - auto &PageLowEdge = *++StubSym.getBlock().edges().begin(); - EXPECT_EQ(PageHighEdge.getKind(), loongarch::Page20); - EXPECT_EQ(&PageHighEdge.getTarget(), &PointerSym); - EXPECT_EQ(PageLowEdge.getKind(), loongarch::PageOffset12); - EXPECT_EQ(&PageLowEdge.getTarget(), &PointerSym); + auto &HighEdge = *StubSym.getBlock().edges().begin(); + auto &LowEdge = *++StubSym.getBlock().edges().begin(); + EXPECT_EQ(HighEdge.getKind(), loongarch::PCAddHi20); + EXPECT_EQ(&HighEdge.getTarget(), &PointerSym); + EXPECT_EQ(LowEdge.getKind(), loongarch::PCAddLo12); + EXPECT_EQ(&LowEdge.getTarget(), &StubSym); EXPECT_EQ(StubSym.getBlock().getContent(), ArrayRef<char>(PointerJumpStubContent)); } _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
