From 9bff1daffc8283d4366902185902aefb3db0bdad Mon Sep 17 00:00:00 2001 From: steven-studio Date: Wed, 10 Sep 2025 17:34:31 +0800 Subject: [PATCH] [RegAlloc] Add scaffold for -regalloc=segmenttree (NFC) Adds a minimal factory + regalloc registration for . Currently delegates to Greedy allocator. No functional change. --- .../llvm/CodeGen/RegAllocSegmentTree.h | 17 +++++++++++++++ llvm/lib/CodeGen/CodeGen.cpp | 1 + llvm/lib/CodeGen/RegAllocSegmentTree.cpp | 21 +++++++++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 llvm/include/llvm/CodeGen/RegAllocSegmentTree.h create mode 100644 llvm/lib/CodeGen/RegAllocSegmentTree.cpp diff --git a/llvm/include/llvm/CodeGen/RegAllocSegmentTree.h b/llvm/include/llvm/CodeGen/RegAllocSegmentTree.h new file mode 100644 index 0000000000000..858b7d0ee565b --- /dev/null +++ b/llvm/include/llvm/CodeGen/RegAllocSegmentTree.h @@ -0,0 +1,17 @@ +//===- RegAllocSegmentTree.h - RA segtree scaffold --------------*- C++ -*-===// +// +// This file declares createRegAllocSegmentTree() factory (scaffold only). +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CODEGEN_REGALLOCSEGMENTTREE_H +#define LLVM_CODEGEN_REGALLOCSEGMENTTREE_H + +namespace llvm { +class FunctionPass; + +// Factory (for -regalloc=segtre). For now it delegates to Greedy (NFC). +FunctionPass *createRegAllocSegmentTree(); +} // end namespace llvm + +#endif \ No newline at end of file diff --git a/llvm/lib/CodeGen/CodeGen.cpp b/llvm/lib/CodeGen/CodeGen.cpp index 989cf4c4796ae..28181e89e4f54 100644 --- a/llvm/lib/CodeGen/CodeGen.cpp +++ b/llvm/lib/CodeGen/CodeGen.cpp @@ -113,6 +113,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) { initializeRABasicPass(Registry); initializeRAGreedyLegacyPass(Registry); initializeRegAllocFastPass(Registry); + // initializeRegAllocSegmentTreePass(Registry); // Add this line initializeRegUsageInfoCollectorLegacyPass(Registry); initializeRegUsageInfoPropagationLegacyPass(Registry); initializeRegisterCoalescerLegacyPass(Registry); diff --git a/llvm/lib/CodeGen/RegAllocSegmentTree.cpp b/llvm/lib/CodeGen/RegAllocSegmentTree.cpp new file mode 100644 index 0000000000000..65b8b60ee28f6 --- /dev/null +++ b/llvm/lib/CodeGen/RegAllocSegmentTree.cpp @@ -0,0 +1,21 @@ +//===- RegAllocSegmentTree.cpp - RA segtree scaffold ----------------------===// +// +// Scaffold only: register -regalloc=segmenttree that delegates to Greedy (NFC). +// +//===----------------------------------------------------------------------===// + +#include "llvm/CodeGen/RegAllocSegmentTree.h" +#include "llvm/CodeGen/RegAllocRegistry.h" + +using namespace llvm; + +// 工廠:目前直接委派回 Greedy(零行為變更) +FunctionPass *llvm::createRegAllocSegmentTree() { + extern FunctionPass *createGreedyRegisterAllocator(); + return createGreedyRegisterAllocator(); +} + +// 把選項掛進 -regalloc= 名單(名稱、描述、工廠) +static RegisterRegAlloc + RAReg("segmenttree", "Segment Tree Register Allocator (scaffold)", + createRegAllocSegmentTree); \ No newline at end of file