[llvm] [CycleInfo] Support forward declarations (PR #187029)

via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 17 07:21:54 PDT 2026


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-llvm-ir

Author: Nikita Popov (nikic)

<details>
<summary>Changes</summary>

Use a class instead of an alias, so that CycleInfo can be forward-declared.

We can't do the same for Cycle without further changes (a LoopInfo like CRTP scheme).

---
Full diff: https://github.com/llvm/llvm-project/pull/187029.diff


4 Files Affected:

- (modified) llvm/include/llvm/IR/CycleInfo.h (+3-1) 
- (modified) llvm/include/llvm/Transforms/Utils/BasicBlockUtils.h (+1-1) 
- (modified) llvm/include/llvm/Transforms/Utils/ControlFlowUtils.h (-1) 
- (modified) llvm/lib/Transforms/Utils/BasicBlockUtils.cpp (+1) 


``````````diff
diff --git a/llvm/include/llvm/IR/CycleInfo.h b/llvm/include/llvm/IR/CycleInfo.h
index 79867fe3a043d..bf719fdfe9693 100644
--- a/llvm/include/llvm/IR/CycleInfo.h
+++ b/llvm/include/llvm/IR/CycleInfo.h
@@ -20,7 +20,9 @@
 
 namespace llvm {
 
-using CycleInfo = GenericCycleInfo<SSAContext>;
+// Use class instead of using to allow forward declarations.
+class CycleInfo : public GenericCycleInfo<SSAContext> {};
+
 using Cycle = CycleInfo::CycleT;
 
 } // namespace llvm
diff --git a/llvm/include/llvm/Transforms/Utils/BasicBlockUtils.h b/llvm/include/llvm/Transforms/Utils/BasicBlockUtils.h
index 460dcdd8a2c00..06307961cb95d 100644
--- a/llvm/include/llvm/Transforms/Utils/BasicBlockUtils.h
+++ b/llvm/include/llvm/Transforms/Utils/BasicBlockUtils.h
@@ -19,7 +19,6 @@
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/SetVector.h"
 #include "llvm/IR/BasicBlock.h"
-#include "llvm/IR/CycleInfo.h"
 #include "llvm/IR/Dominators.h"
 #include "llvm/Support/Compiler.h"
 #include "llvm/Support/Printable.h"
@@ -27,6 +26,7 @@
 
 namespace llvm {
 class CondBrInst;
+class CycleInfo;
 class LandingPadInst;
 class Loop;
 class PHINode;
diff --git a/llvm/include/llvm/Transforms/Utils/ControlFlowUtils.h b/llvm/include/llvm/Transforms/Utils/ControlFlowUtils.h
index 17cde82b084d8..d8c97b3b41ae9 100644
--- a/llvm/include/llvm/Transforms/Utils/ControlFlowUtils.h
+++ b/llvm/include/llvm/Transforms/Utils/ControlFlowUtils.h
@@ -15,7 +15,6 @@
 
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/StringRef.h"
-#include "llvm/IR/CycleInfo.h"
 
 namespace llvm {
 
diff --git a/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp b/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp
index 17aa7cc185b66..cdb3896e81778 100644
--- a/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp
+++ b/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp
@@ -24,6 +24,7 @@
 #include "llvm/IR/BasicBlock.h"
 #include "llvm/IR/CFG.h"
 #include "llvm/IR/Constants.h"
+#include "llvm/IR/CycleInfo.h"
 #include "llvm/IR/DebugInfo.h"
 #include "llvm/IR/DebugInfoMetadata.h"
 #include "llvm/IR/Dominators.h"

``````````

</details>


https://github.com/llvm/llvm-project/pull/187029


More information about the llvm-commits mailing list