Skip to content

Conversation

@lhames
Copy link
Contributor

@lhames lhames commented Oct 12, 2025

WaitingOnGraph tracks waiting-on relationships between nodes (intended to represent symbols in an ORC program) in order to identify nodes that are Ready (i.e. are not waiting on any other nodes) or have Failed (are waiting on some node that cannot be produced).

WaitingOnGraph replaces ORC's baked-in data structures that were tracking the same information (EmissionDepUnit, EmissionDepUnitInfo, ...). Isolating this information in a separate data structure simplifies the code, allows us to unit test it, and simplifies performance testing.

The WaitingOnGraph uses several techniques to improve performance relative to the old data structures, including symbol coalescing ("SuperNodes") and symbol keys that don't perform unnecessary reference counting (NonOwningSymbolStringPtr).

This commit includes unit tests for common dependence-tracking issues that have led to ORC bugs in the past.

@lhames lhames force-pushed the orc-waitingongraph branch from f267a39 to d9143c3 Compare October 15, 2025 05:50
lhames added a commit to lhames/llvm-project that referenced this pull request Oct 16, 2025
The CI for llvm#163027 is reliably
reproducing the bug from llvm#158270.
This patch temporarily adds debugging output to the PR for the former to try
to gain insight into the latter.
@github-actions
Copy link

github-actions bot commented Oct 16, 2025

✅ With the latest revision this PR passed the C/C++ code formatter.

@lhames lhames force-pushed the orc-waitingongraph branch from a6ea715 to 82bd2cd Compare October 17, 2025 07:43
lhames added a commit to lhames/llvm-project that referenced this pull request Oct 17, 2025
The CI for llvm#163027 is reliably
reproducing the bug from llvm#158270.
This patch temporarily adds debugging output to the PR for the former to try
to gain insight into the latter.
@lhames lhames force-pushed the orc-waitingongraph branch 2 times, most recently from ecfd111 to 58b345d Compare October 17, 2025 10:45
WaitingOnGraph tracks waiting-on relationships between nodes (intended to
represent symbols in an ORC program) in order to identify nodes that are
*Ready* (i.e. are not waiting on any other nodes) or have *Failed* (are
waiting on some node that cannot be produced).

WaitingOnGraph replaces ORC's baked-in data structures that were tracking the
same information (EmissionDepUnit, EmissionDepUnitInfo, ...). Isolating this
information in a separate data structure simplifies the code, allows us to
unit test it, and simplifies performance testing.

The WaitingOnGraph uses several techniques to improve performance relative to
the old data structures, including symbol coalescing ("SuperNodes") and symbol
keys that don't perform unnecessary reference counting
(NonOwningSymbolStringPtr).

This commit includes unit tests for common dependence-tracking issues that have
led to ORC bugs in the past.
@lhames lhames force-pushed the orc-waitingongraph branch from 58b345d to 3705ff3 Compare October 20, 2025 21:53
@lhames lhames merged commit c8c86ef into llvm:main Oct 20, 2025
10 checks passed
@lhames lhames deleted the orc-waitingongraph branch October 20, 2025 23:00
@llvm-ci
Copy link
Collaborator

llvm-ci commented Oct 20, 2025

LLVM Buildbot has detected a new failure on builder llvm-clang-x86_64-expensive-checks-ubuntu running on as-builder-4 while building llvm at step 6 "build-default".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/187/builds/12743

Here is the relevant piece of the build log for the reference
Step 6 (build-default) failure: cmake (failure)
...
16.064 [2059/66/1954] Building CXX object lib/ExecutionEngine/JITLink/CMakeFiles/LLVMJITLink.dir/DWARFRecordSectionSplitter.cpp.o
16.102 [2058/66/1955] Building CXX object lib/ExecutionEngine/JITLink/CMakeFiles/LLVMJITLink.dir/ELF.cpp.o
16.573 [2057/66/1956] Building CXX object lib/ExecutionEngine/JITLink/CMakeFiles/LLVMJITLink.dir/XCOFF_ppc64.cpp.o
16.753 [2056/66/1957] Building CXX object lib/ExecutionEngine/JITLink/CMakeFiles/LLVMJITLink.dir/aarch64.cpp.o
16.756 [2055/66/1958] Building CXX object lib/ExecutionEngine/JITLink/CMakeFiles/LLVMJITLink.dir/XCOFFLinkGraphBuilder.cpp.o
16.786 [2054/66/1959] Building CXX object lib/ExecutionEngine/Orc/CMakeFiles/LLVMOrcJIT.dir/LoadLinkableFile.cpp.o
16.803 [2053/66/1960] Building CXX object lib/ExecutionEngine/Orc/CMakeFiles/LLVMOrcJIT.dir/DebugUtils.cpp.o
16.947 [2052/66/1961] Building CXX object lib/ExecutionEngine/JITLink/CMakeFiles/LLVMJITLink.dir/JITLinkGeneric.cpp.o
17.017 [2051/66/1962] Building CXX object lib/ExecutionEngine/Orc/CMakeFiles/LLVMOrcJIT.dir/EPCDynamicLibrarySearchGenerator.cpp.o
17.089 [2050/66/1963] Building CXX object lib/ExecutionEngine/Orc/CMakeFiles/LLVMOrcJIT.dir/Core.cpp.o
FAILED: lib/ExecutionEngine/Orc/CMakeFiles/LLVMOrcJIT.dir/Core.cpp.o 
CCACHE_CPP2=yes CCACHE_HASHDIR=yes CCACHE_SLOPPINESS=pch_defines,time_macros /usr/bin/ccache /usr/bin/clang++-21 -DEXPENSIVE_CHECKS -DGTEST_HAS_RTTI=0 -D_DEBUG -D_GLIBCXX_ASSERTIONS -D_GLIBCXX_DEBUG -D_GLIBCXX_USE_CXX11_ABI=1 -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/home/buildbot/worker/as-builder-4/ramdisk/expensive-checks/build/lib/ExecutionEngine/Orc -I/home/buildbot/worker/as-builder-4/ramdisk/expensive-checks/llvm-project/llvm/lib/ExecutionEngine/Orc -I/home/buildbot/worker/as-builder-4/ramdisk/expensive-checks/build/include -I/home/buildbot/worker/as-builder-4/ramdisk/expensive-checks/llvm-project/llvm/include -U_GLIBCXX_DEBUG -Wno-misleading-indentation -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wc++98-compat-extra-semi -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -Wno-pass-failed -Wmisleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -O3 -DNDEBUG -std=c++17  -fno-exceptions -funwind-tables -fno-rtti -UNDEBUG -MD -MT lib/ExecutionEngine/Orc/CMakeFiles/LLVMOrcJIT.dir/Core.cpp.o -MF lib/ExecutionEngine/Orc/CMakeFiles/LLVMOrcJIT.dir/Core.cpp.o.d -o lib/ExecutionEngine/Orc/CMakeFiles/LLVMOrcJIT.dir/Core.cpp.o -c /home/buildbot/worker/as-builder-4/ramdisk/expensive-checks/llvm-project/llvm/lib/ExecutionEngine/Orc/Core.cpp
/home/buildbot/worker/as-builder-4/ramdisk/expensive-checks/llvm-project/llvm/lib/ExecutionEngine/Orc/Core.cpp:1939:24: error: no member named 'EmissionDepUnit' in 'llvm::orc::JITDylib'
 1939 |     DenseSet<JITDylib::EmissionDepUnit *> EDUsToCheck;
      |                        ^~~~~~~~~~~~~~~
/home/buildbot/worker/as-builder-4/ramdisk/expensive-checks/llvm-project/llvm/lib/ExecutionEngine/Orc/Core.cpp:1939:41: error: expected expression
 1939 |     DenseSet<JITDylib::EmissionDepUnit *> EDUsToCheck;
      |                                         ^
/home/buildbot/worker/as-builder-4/ramdisk/expensive-checks/llvm-project/llvm/lib/ExecutionEngine/Orc/Core.cpp:2039:19: error: no member named 'DefiningEDU' in 'llvm::orc::JITDylib::MaterializingInfo'
 2039 |           if (MII.DefiningEDU) {
      |               ~~~ ^
/home/buildbot/worker/as-builder-4/ramdisk/expensive-checks/llvm-project/llvm/lib/ExecutionEngine/Orc/Core.cpp:2041:36: error: no member named 'DefiningEDU' in 'llvm::orc::JITDylib::MaterializingInfo'
 2041 |             EDUsToCheck.insert(MII.DefiningEDU.get());
      |                                ~~~ ^
/home/buildbot/worker/as-builder-4/ramdisk/expensive-checks/llvm-project/llvm/lib/ExecutionEngine/Orc/Core.cpp:2043:21: error: no member named 'DefiningEDU' in 'llvm::orc::JITDylib::MaterializingInfo'
 2043 |             if (MII.DefiningEDU->JD != JD.get()) {
      |                 ~~~ ^
/home/buildbot/worker/as-builder-4/ramdisk/expensive-checks/llvm-project/llvm/lib/ExecutionEngine/Orc/Core.cpp:2046:60: error: no member named 'DefiningEDU' in 'llvm::orc::JITDylib::MaterializingInfo'
 2046 |                            << (llvm::is_contained(JDs, MII.DefiningEDU->JD)
      |                                                        ~~~ ^
/home/buildbot/worker/as-builder-4/ramdisk/expensive-checks/llvm-project/llvm/lib/ExecutionEngine/Orc/Core.cpp:2061:35: error: no member named 'DependantEDUs' in 'llvm::orc::JITDylib::MaterializingInfo'
 2061 |           for (auto &DepEDU : MII.DependantEDUs) {
      |                               ~~~ ^
7 errors generated.
17.211 [2050/65/1964] Building CXX object lib/ExecutionEngine/JITLink/CMakeFiles/LLVMJITLink.dir/EHFrameSupport.cpp.o
17.833 [2050/64/1965] Building CXX object lib/ExecutionEngine/Orc/CMakeFiles/LLVMOrcJIT.dir/CompileOnDemandLayer.cpp.o
17.834 [2050/63/1966] Building CXX object lib/ExecutionEngine/Orc/CMakeFiles/LLVMOrcJIT.dir/EPCDebugObjectRegistrar.cpp.o
17.988 [2050/62/1967] Building CXX object lib/ExecutionEngine/JITLink/CMakeFiles/LLVMJITLink.dir/aarch32.cpp.o
18.130 [2050/61/1968] Building CXX object lib/ExecutionEngine/Orc/CMakeFiles/LLVMOrcJIT.dir/CompileUtils.cpp.o
18.343 [2050/60/1969] Building CXX object lib/ExecutionEngine/Orc/CMakeFiles/LLVMOrcJIT.dir/EHFrameRegistrationPlugin.cpp.o
18.738 [2050/59/1970] Building CXX object lib/ExecutionEngine/JITLink/CMakeFiles/LLVMJITLink.dir/COFF_x86_64.cpp.o
18.857 [2050/58/1971] Building CXX object lib/ExecutionEngine/JITLink/CMakeFiles/LLVMJITLink.dir/JITLink.cpp.o
18.912 [2050/57/1972] Building CXX object lib/ExecutionEngine/JITLink/CMakeFiles/LLVMJITLink.dir/JITLinkMemoryManager.cpp.o
19.353 [2050/56/1973] Building CXX object lib/ExecutionEngine/JITLink/CMakeFiles/LLVMJITLink.dir/COFFLinkGraphBuilder.cpp.o
19.386 [2050/55/1974] Building CXX object lib/ExecutionEngine/Orc/CMakeFiles/LLVMOrcJIT.dir/COFFVCRuntimeSupport.cpp.o
19.667 [2050/54/1975] Building CXX object lib/ExecutionEngine/JITLink/CMakeFiles/LLVMJITLink.dir/MachO_x86_64.cpp.o
19.685 [2050/53/1976] Building CXX object lib/MC/MCParser/CMakeFiles/LLVMMCParser.dir/AsmParser.cpp.o
19.849 [2050/52/1977] Building CXX object lib/ExecutionEngine/JITLink/CMakeFiles/LLVMJITLink.dir/MachOLinkGraphBuilder.cpp.o
20.574 [2050/51/1978] Building AArch64GenSubtargetInfo.inc...

lhames added a commit that referenced this pull request Oct 20, 2025
slachowsky pushed a commit to slachowsky/llvm-project that referenced this pull request Oct 20, 2025
…llvm#163027)

WaitingOnGraph tracks waiting-on relationships between nodes (intended
to represent symbols in an ORC program) in order to identify nodes that
are *Ready* (i.e. are not waiting on any other nodes) or have *Failed*
(are waiting on some node that cannot be produced).

WaitingOnGraph replaces ORC's baked-in data structures that were
tracking the same information (EmissionDepUnit, EmissionDepUnitInfo,
...). Isolating this information in a separate data structure simplifies
the code, allows us to unit test it, and simplifies performance testing.

The WaitingOnGraph uses several techniques to improve performance
relative to the old data structures, including symbol coalescing
("SuperNodes") and symbol keys that don't perform unnecessary reference
counting (NonOwningSymbolStringPtr).

This commit includes unit tests for common dependence-tracking issues
that have led to ORC bugs in the past.
slachowsky pushed a commit to slachowsky/llvm-project that referenced this pull request Oct 20, 2025
@llvm-ci
Copy link
Collaborator

llvm-ci commented Oct 20, 2025

LLVM Buildbot has detected a new failure on builder clang-m68k-linux-cross running on suse-gary-m68k-cross while building llvm at step 5 "ninja check 1".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/27/builds/17800

Here is the relevant piece of the build log for the reference
Step 5 (ninja check 1) failure: stage 1 checked (failure)
...
[259/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/ASTTypeTraitsTest.cpp.o
[260/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/AttrTest.cpp.o
[261/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/ASTImporterObjCTest.cpp.o
[262/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/UnresolvedSetTest.cpp.o
[263/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/ExternalASTSourceTest.cpp.o
[264/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/SizelessTypesTest.cpp.o
[265/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/RawCommentForDeclTest.cpp.o
[266/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/EvaluateAsRValueTest.cpp.o
[267/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/Analysis/FlowSensitive/TypeErasedDataflowAnalysisTest.cpp.o
[268/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/ASTImporterTest.cpp.o
FAILED: tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/ASTImporterTest.cpp.o 
/usr/bin/c++ -DGTEST_HAS_RTTI=0 -DLLVM_BUILD_STATIC -D_DEBUG -D_GLIBCXX_ASSERTIONS -D_GLIBCXX_USE_CXX11_ABI=1 -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/var/lib/buildbot/workers/suse-gary-m68k-cross/clang-m68k-linux-cross/stage1/tools/clang/unittests -I/var/lib/buildbot/workers/suse-gary-m68k-cross/clang-m68k-linux-cross/llvm/clang/unittests -I/var/lib/buildbot/workers/suse-gary-m68k-cross/clang-m68k-linux-cross/llvm/clang/include -I/var/lib/buildbot/workers/suse-gary-m68k-cross/clang-m68k-linux-cross/stage1/tools/clang/include -I/var/lib/buildbot/workers/suse-gary-m68k-cross/clang-m68k-linux-cross/stage1/include -I/var/lib/buildbot/workers/suse-gary-m68k-cross/clang-m68k-linux-cross/llvm/llvm/include -I/var/lib/buildbot/workers/suse-gary-m68k-cross/clang-m68k-linux-cross/llvm/clang/unittests/Tooling -I/var/lib/buildbot/workers/suse-gary-m68k-cross/clang-m68k-linux-cross/llvm/third-party/unittest/googletest/include -I/var/lib/buildbot/workers/suse-gary-m68k-cross/clang-m68k-linux-cross/llvm/third-party/unittest/googlemock/include -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wno-uninitialized -Wno-nonnull -Wno-class-memaccess -Wno-dangling-reference -Wno-redundant-move -Wno-pessimizing-move -Wno-array-bounds -Wno-stringop-overread -Wno-noexcept-type -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -Wno-misleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -fno-common -Woverloaded-virtual -O3 -DNDEBUG -std=c++17  -Wno-variadic-macros -fno-exceptions -funwind-tables -fno-rtti -UNDEBUG -Wno-suggest-override -MD -MT tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/ASTImporterTest.cpp.o -MF tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/ASTImporterTest.cpp.o.d -o tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/ASTImporterTest.cpp.o -c /var/lib/buildbot/workers/suse-gary-m68k-cross/clang-m68k-linux-cross/llvm/clang/unittests/AST/ASTImporterTest.cpp
c++: fatal error: Killed signal terminated program cc1plus
compilation terminated.
[269/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/CrossTU/CrossTranslationUnitTest.cpp.o
[270/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/Tooling/HeaderIncludesTest.cpp.o
[271/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/ConceptPrinterTest.cpp.o
[272/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/DeclBaseTest.cpp.o
[273/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/NamedDeclPrinterTest.cpp.o
[274/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/ProfilingTest.cpp.o
[275/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/QualTypeNamesTest.cpp.o
[276/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/ASTTraverserTest.cpp.o
[277/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/ASTImporterVisibilityTest.cpp.o
[278/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/Tooling/CastExprTest.cpp.o
[279/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/RandstructTest.cpp.o
[280/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/Tooling/CommentHandlerTest.cpp.o
[281/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/TemplateNameTest.cpp.o
[282/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/DeclTest.cpp.o
[283/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/Tooling/ASTSelectionTest.cpp.o
[284/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/Tooling/HeaderAnalysisTest.cpp.o
[285/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/DataCollectionTest.cpp.o
[286/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/ASTImporterODRStrategiesTest.cpp.o
[287/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/TypePrinterTest.cpp.o
[288/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/StmtPrinterTest.cpp.o
[289/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/Tooling/DiagnosticsYamlTest.cpp.o
[290/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/DeclPrinterTest.cpp.o
[291/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/RecursiveASTVisitorTest.cpp.o
[292/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/ASTImporterGenericRedeclTest.cpp.o
[293/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/Tooling/ExecutionTest.cpp.o
[294/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/Tooling/CompilationDatabaseTest.cpp.o
[295/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/SourceLocationTest.cpp.o
[296/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/Tooling/FixItTest.cpp.o
[297/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/ASTMatchers/ASTMatchersNodeTest.cpp.o
[298/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/AST/StructuralEquivalenceTest.cpp.o
[299/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/Analysis/FlowSensitive/TransferTest.cpp.o
[300/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/ASTMatchers/ASTMatchersNarrowingTest.cpp.o
[301/1207] Building CXX object tools/clang/unittests/CMakeFiles/AllClangUnitTests.dir/ASTMatchers/ASTMatchersTraversalTest.cpp.o
ninja: build stopped: subcommand failed.

lhames added a commit that referenced this pull request Oct 21, 2025
#164340)

…fixes.

This reapplies c8c86ef, which was reverted in 13ca872 due to bot
failures. Those failures were compilation errors exposed when LLVM is
built with LLVM_ENABLE_EXPENSIVE_CHECKS=On. They have been fixed in this
commit.
Lukacma pushed a commit to Lukacma/llvm-project that referenced this pull request Oct 29, 2025
…llvm#163027)

WaitingOnGraph tracks waiting-on relationships between nodes (intended
to represent symbols in an ORC program) in order to identify nodes that
are *Ready* (i.e. are not waiting on any other nodes) or have *Failed*
(are waiting on some node that cannot be produced).

WaitingOnGraph replaces ORC's baked-in data structures that were
tracking the same information (EmissionDepUnit, EmissionDepUnitInfo,
...). Isolating this information in a separate data structure simplifies
the code, allows us to unit test it, and simplifies performance testing.

The WaitingOnGraph uses several techniques to improve performance
relative to the old data structures, including symbol coalescing
("SuperNodes") and symbol keys that don't perform unnecessary reference
counting (NonOwningSymbolStringPtr).

This commit includes unit tests for common dependence-tracking issues
that have led to ORC bugs in the past.
Lukacma pushed a commit to Lukacma/llvm-project that referenced this pull request Oct 29, 2025
Lukacma pushed a commit to Lukacma/llvm-project that referenced this pull request Oct 29, 2025
…ith … (llvm#164340)

…fixes.

This reapplies c8c86ef, which was reverted in 13ca872 due to bot
failures. Those failures were compilation errors exposed when LLVM is
built with LLVM_ENABLE_EXPENSIVE_CHECKS=On. They have been fixed in this
commit.
aokblast pushed a commit to aokblast/llvm-project that referenced this pull request Oct 30, 2025
…llvm#163027)

WaitingOnGraph tracks waiting-on relationships between nodes (intended
to represent symbols in an ORC program) in order to identify nodes that
are *Ready* (i.e. are not waiting on any other nodes) or have *Failed*
(are waiting on some node that cannot be produced).

WaitingOnGraph replaces ORC's baked-in data structures that were
tracking the same information (EmissionDepUnit, EmissionDepUnitInfo,
...). Isolating this information in a separate data structure simplifies
the code, allows us to unit test it, and simplifies performance testing.

The WaitingOnGraph uses several techniques to improve performance
relative to the old data structures, including symbol coalescing
("SuperNodes") and symbol keys that don't perform unnecessary reference
counting (NonOwningSymbolStringPtr).

This commit includes unit tests for common dependence-tracking issues
that have led to ORC bugs in the past.
aokblast pushed a commit to aokblast/llvm-project that referenced this pull request Oct 30, 2025
aokblast pushed a commit to aokblast/llvm-project that referenced this pull request Oct 30, 2025
…ith … (llvm#164340)

…fixes.

This reapplies c8c86ef, which was reverted in 13ca872 due to bot
failures. Those failures were compilation errors exposed when LLVM is
built with LLVM_ENABLE_EXPENSIVE_CHECKS=On. They have been fixed in this
commit.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants