https://github.com/Zararest created 
https://github.com/llvm/llvm-project/pull/166645

There is an issue with using PBQP register allocator in clang that doesn't have 
AArch64 target:
https://groups.google.com/g/llvm-dev/c/ZIvatINBENo

This change links PBQP regalloc to all LLVM targets.

>From aea70e2df65119377e9d3f732b1850c2ec554618 Mon Sep 17 00:00:00 2001
From: Ivan Shumakov <[email protected]>
Date: Thu, 6 Nov 2025 00:19:55 +0300
Subject: [PATCH] [clang] Add regalloc PBQP for all targets in clang

---
 clang/test/CodeGen/PBQP-regalloc-all-targets.c | 8 ++++++++
 llvm/include/llvm/InitializePasses.h           | 1 +
 llvm/lib/CodeGen/CodeGen.cpp                   | 1 +
 llvm/lib/CodeGen/RegAllocPBQP.cpp              | 3 +++
 4 files changed, 13 insertions(+)
 create mode 100644 clang/test/CodeGen/PBQP-regalloc-all-targets.c

diff --git a/clang/test/CodeGen/PBQP-regalloc-all-targets.c 
b/clang/test/CodeGen/PBQP-regalloc-all-targets.c
new file mode 100644
index 0000000000000..c316423f4886c
--- /dev/null
+++ b/clang/test/CodeGen/PBQP-regalloc-all-targets.c
@@ -0,0 +1,8 @@
+// RUN: %clang_cc1 %s -triple x86_64 -O2 \
+// RUN:  -mllvm -regalloc=pbqp \
+// RUN:  -mllvm --print-changed -S |& FileCheck %s
+// CHECK: IR Dump After PBQP Register Allocator (regallocpbqp) on foo
+
+extern int foo(int a, int b) {
+  return a + b;
+}
\ No newline at end of file
diff --git a/llvm/include/llvm/InitializePasses.h 
b/llvm/include/llvm/InitializePasses.h
index 88272f053c114..858fd256f8c6e 100644
--- a/llvm/include/llvm/InitializePasses.h
+++ b/llvm/include/llvm/InitializePasses.h
@@ -269,6 +269,7 @@ LLVM_ABI void 
initializeReassociateLegacyPassPass(PassRegistry &);
 LLVM_ABI void
 initializeRegAllocEvictionAdvisorAnalysisLegacyPass(PassRegistry &);
 LLVM_ABI void initializeRegAllocFastPass(PassRegistry &);
+LLVM_ABI void initializeRegAllocPBQPPass(PassRegistry &);
 LLVM_ABI void
 initializeRegAllocPriorityAdvisorAnalysisLegacyPass(PassRegistry &);
 LLVM_ABI void initializeRegAllocScoringPass(PassRegistry &);
diff --git a/llvm/lib/CodeGen/CodeGen.cpp b/llvm/lib/CodeGen/CodeGen.cpp
index 9e0cb3bf44906..df6a12324887b 100644
--- a/llvm/lib/CodeGen/CodeGen.cpp
+++ b/llvm/lib/CodeGen/CodeGen.cpp
@@ -114,6 +114,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) {
   initializeRAGreedyLegacyPass(Registry);
   initializeReachingDefInfoWrapperPassPass(Registry);
   initializeRegAllocFastPass(Registry);
+  initializeRegAllocPBQPPass(Registry);
   initializeRegUsageInfoCollectorLegacyPass(Registry);
   initializeRegUsageInfoPropagationLegacyPass(Registry);
   initializeRegisterCoalescerLegacyPass(Registry);
diff --git a/llvm/lib/CodeGen/RegAllocPBQP.cpp 
b/llvm/lib/CodeGen/RegAllocPBQP.cpp
index 048cd21db062d..a4d859650300c 100644
--- a/llvm/lib/CodeGen/RegAllocPBQP.cpp
+++ b/llvm/lib/CodeGen/RegAllocPBQP.cpp
@@ -946,6 +946,9 @@ void PBQP::RegAlloc::PBQPRAGraph::printDot(raw_ostream &OS) 
const {
   OS << "}\n";
 }
 
+INITIALIZE_PASS(RegAllocPBQP, "regallocpbqp", "PBQP Register Allocator", false,
+                false)
+
 FunctionPass *llvm::createPBQPRegisterAllocator(char *customPassID) {
   return new RegAllocPBQP(customPassID);
 }

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to