Cyclic module dependency [Re: [llvm] r357201 - Temporarily revert "SafepointIRVerifier port to new Pass Manager"]

Adrian Prantl via llvm-commits llvm-commits at lists.llvm.org
Fri Mar 29 13:29:33 PDT 2019


When you compile with -fmodules without local submodule visibility (which is a configuration we support in LLVM), including any header from one top-level module will implicitly also import all headers in that module, even ones that are not explicitly #included in the source file. So any cyclic header dependency between any two headers in two modules will be a problem, even if the two headers don't directly include each other.

-- adrian

> On Mar 29, 2019, at 6:12 AM, Fedor Sergeev <fedor.sergeev at azul.com> wrote:
> 
> Adrian, (or anybody else who could help)
> 
> this seemingly innocent port of SafepointIRVerifier caused a build failure in "modular" buildbot.
> I'm able to reproduce the failure but I have absolutely no clue on whats going on.
> 
> Why SafepointIRVerifier.h gets included into compilations of, say, IR/BasicBlock.cpp or IR/AsmWriter.cpp?
> 
> Also, SafepointIRVerifier.h was doing pretty much the same as Verifier.h does
> (i.e. includes PassManager.h to get PassInfoMixin template definition).
> 
> Why Verifier.h does not cause a similar build issue?
> 
> Could you, please, explain/help with this problem?
> 
> regards,
>   Fedor.
> 
> On 3/28/19 9:34 PM, Adrian Prantl via llvm-commits wrote:
>> Author: adrian
>> Date: Thu Mar 28 11:34:34 2019
>> New Revision: 357201
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=357201&view=rev
>> Log:
>> Temporarily revert "SafepointIRVerifier port to new Pass Manager"
>> to unbreak the modular bots and its follow-up commit.
>> 
>> This reverts commit https://reviews.llvm.org/D59825
>> because it introduced a
>> 
>> fatal error: cyclic dependency in module 'LLVM_intrinsic_gen': LLVM_intrinsic_gen -> LLVM_IR -> LLVM_intrinsic_gen
>> 
>> Modified:
>>     llvm/trunk/include/llvm/IR/SafepointIRVerifier.h
>>     llvm/trunk/lib/IR/SafepointIRVerifier.cpp
>>     llvm/trunk/lib/Passes/PassBuilder.cpp
>>     llvm/trunk/lib/Passes/PassRegistry.def
>> 
>> Modified: llvm/trunk/include/llvm/IR/SafepointIRVerifier.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/SafepointIRVerifier.h?rev=357201&r1=357200&r2=357201&view=diff
>> ==============================================================================
>> --- llvm/trunk/include/llvm/IR/SafepointIRVerifier.h (original)
>> +++ llvm/trunk/include/llvm/IR/SafepointIRVerifier.h Thu Mar 28 11:34:34 2019
>> @@ -18,8 +18,6 @@
>>  #ifndef LLVM_IR_SAFEPOINT_IR_VERIFIER
>>  #define LLVM_IR_SAFEPOINT_IR_VERIFIER
>>  -#include "llvm/IR/PassManager.h"
>> -
>>  namespace llvm {
>>    class Function;
>> @@ -31,16 +29,6 @@ void verifySafepointIR(Function &F);
>>  /// Create an instance of the safepoint verifier pass which can be added to
>>  /// a pass pipeline to check for relocation bugs.
>>  FunctionPass *createSafepointIRVerifierPass();
>> -
>> -/// Create an instance of the safepoint verifier pass which can be added to
>> -/// a pass pipeline to check for relocation bugs.
>> -class SafepointIRVerifierPass : public PassInfoMixin<SafepointIRVerifierPass> {
>> -
>> -public:
>> -  explicit SafepointIRVerifierPass() {}
>> -
>> -  PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
>> -};
>>  }
>>    #endif // LLVM_IR_SAFEPOINT_IR_VERIFIER
>> 
>> Modified: llvm/trunk/lib/IR/SafepointIRVerifier.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/SafepointIRVerifier.cpp?rev=357201&r1=357200&r2=357201&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/IR/SafepointIRVerifier.cpp (original)
>> +++ llvm/trunk/lib/IR/SafepointIRVerifier.cpp Thu Mar 28 11:34:34 2019
>> @@ -197,17 +197,6 @@ protected:
>>  static void Verify(const Function &F, const DominatorTree &DT,
>>                     const CFGDeadness &CD);
>>  -namespace llvm {
>> -PreservedAnalyses SafepointIRVerifierPass::run(Function &F,
>> -                                               FunctionAnalysisManager &AM) {
>> -  const auto &DT = AM.getResult<DominatorTreeAnalysis>(F);
>> -  CFGDeadness CD;
>> -  CD.processFunction(F, DT);
>> -  Verify(F, DT, CD);
>> -  return PreservedAnalyses::all();
>> -}
>> -}
>> -
>>  namespace {
>>    struct SafepointIRVerifier : public FunctionPass {
>> 
>> Modified: llvm/trunk/lib/Passes/PassBuilder.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Passes/PassBuilder.cpp?rev=357201&r1=357200&r2=357201&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/Passes/PassBuilder.cpp (original)
>> +++ llvm/trunk/lib/Passes/PassBuilder.cpp Thu Mar 28 11:34:34 2019
>> @@ -56,7 +56,6 @@
>>  #include "llvm/IR/Dominators.h"
>>  #include "llvm/IR/IRPrintingPasses.h"
>>  #include "llvm/IR/PassManager.h"
>> -#include "llvm/IR/SafepointIRVerifier.h"
>>  #include "llvm/IR/Verifier.h"
>>  #include "llvm/Support/Debug.h"
>>  #include "llvm/Support/FormatVariadic.h"
>> 
>> Modified: llvm/trunk/lib/Passes/PassRegistry.def
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Passes/PassRegistry.def?rev=357201&r1=357200&r2=357201&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/Passes/PassRegistry.def (original)
>> +++ llvm/trunk/lib/Passes/PassRegistry.def Thu Mar 28 11:34:34 2019
>> @@ -231,7 +231,6 @@ FUNCTION_PASS("verify<domtree>", Dominat
>>  FUNCTION_PASS("verify<loops>", LoopVerifierPass())
>>  FUNCTION_PASS("verify<memoryssa>", MemorySSAVerifierPass())
>>  FUNCTION_PASS("verify<regions>", RegionInfoVerifierPass())
>> -FUNCTION_PASS("verify<safepoint-ir>", SafepointIRVerifierPass())
>>  FUNCTION_PASS("view-cfg", CFGViewerPass())
>>  FUNCTION_PASS("view-cfg-only", CFGOnlyViewerPass())
>>  FUNCTION_PASS("transform-warning", WarnMissedTransformationsPass())
>> 
>> 
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
> 



More information about the llvm-commits mailing list