Issue 152673
Summary [llvm 20.1.4]DominatorTreeAnalysis failed to be used
Labels
Assignees
Reporter kdr521
    Recently, while I was working on the llvm project development, I wanted to obtain the dominating tree analysis results on the function, but was told the following error:

`Exception Code: 0xC0000005
 #0 0x00007ffb9eca0709 llvm::AnalysisManager<llvm::Function>::getResultImpl(llvm::AnalysisKey*, llvm::Function&) (D:\project\source_code_obfuscation\Obfuscation_v1.0_bak\build\SplitFunction.dll+0x330709)
 #1 0x00007ffb9eca0579 llvm::AnalysisManager<llvm::Function>::getResultImpl(llvm::AnalysisKey*, llvm::Function&) (D:\project\source_code_obfuscation\Obfuscation_v1.0_bak\build\SplitFunction.dll+0x330579)
 #2 0x00007ffb9eca1386 llvm::DominatorTreeAnalysis::Result& llvm::AnalysisManager<llvm::Function>::getResult<llvm::DominatorTreeAnalysis>(llvm::Function&) (D:\project\source_code_obfuscation\Obfuscation_v1.0_bak\build\SplitFunction.dll+0x331386)
 #3 0x00007ffb9e97849e TestPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (D:\project\source_code_obfuscation\Obfuscation_v1.0_bak\build\SplitFunction.dll+0x849e)
 #4 0x00007ffb9ef0182a llvm::detail::PassModel<llvm::Function, TestPass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (D:\project\source_code_obfuscation\Obfuscation_v1.0_bak\build\SplitFunction.dll+0x59182a)
 #5 0x00007ff6a0e48889 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (D:\project\source_code_obfuscation\llvm-20.1.4\build\bin\opt.exe+0x15e8889)
 #6 0x00007ff6a233c0d1 llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (D:\project\source_code_obfuscation\llvm-20.1.4\build\bin\opt.exe+0x2adc0d1)
 #7 0x00007ff6a1ff05ab llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (D:\project\source_code_obfuscation\llvm-20.1.4\build\bin\opt.exe+0x27905ab)
 #8 0x00007ff6a2338ab1 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (D:\project\source_code_obfuscation\llvm-20.1.4\build\bin\opt.exe+0x2ad8ab1)
 #9 0x00007ff6a0e42d29 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (D:\project\source_code_obfuscation\llvm-20.1.4\build\bin\opt.exe+0x15e2d29)
#10 0x00007ff6a15d6ba3 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::ArrayRef<std::function<void (llvm::PassBuilder&)>>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool, bool) (D:\project\source_code_obfuscation\llvm-20.1.4\build\bin\opt.exe+0x1d76ba3)
#11 0x00007ff6a39181b6 optMain (D:\project\source_code_obfuscation\llvm-20.1.4\build\bin\opt.exe+0x40b81b6)
#12 0x00007ff6a391e5b1 main (D:\project\source_code_obfuscation\llvm-20.1.4\build\bin\opt.exe+0x40be5b1)
#13 0x00007ff69f8610c9 __tmainCRTStartup D:/W/B/src/mingw-w64/mingw-w64-crt/crt/crtexe.c:237:8
#14 0x00007ff69f861416 .l_start D:/W/B/src/mingw-w64/mingw-w64-crt/crt/crtexe.c:124:3
#15 0x00007ffc16a87374 (C:\windows\System32\KERNEL32.DLL+0x17374)
#16 0x00007ffc1889cc91 (C:\windows\SYSTEM32\ntdll.dll+0x4cc91)
`


This is my code:

.h
`struct TestPass : public llvm::PassInfoMixin<TestPass> {
 llvm::PreservedAnalyses run(llvm::Function &F, llvm::FunctionAnalysisManager &FAM);
};
`

.c

`PreservedAnalyses TestPass::run(llvm::Function &F, llvm::FunctionAnalysisManager &FAM) {
    auto &DT = FAM.getResult<llvm::DominatorTreeAnalysis>(F);
    auto &LI = FAM.getResult<llvm::LoopAnalysis>(F);

    return llvm::PreservedAnalyses::all();
}


extern "C" LLVM_ATTRIBUTE_WEAK ::llvm::PassPluginLibraryInfo llvmGetPassPluginInfo()
{
    return {
 LLVM_PLUGIN_API_VERSION,
        "SplitFunction",
        "v1.0",
 [](PassBuilder &PB)
        {
 PB.registerAnalysisRegistrationCallback([](FunctionAnalysisManager &FAM)
 {
                llvm::errs() << "Registering DominatorTreeAnalysis and LoopAnalysis\n";
 FAM.registerPass([] { return DominatorTreeAnalysis(); });
 FAM.registerPass([] { return LoopAnalysis(); });
            });

 PB.registerPipelineParsingCallback([](StringRef Name, FunctionPassManager &FPM, ArrayRef<PassBuilder::PipelineElement> InnerPipeline)
            {
 if (Name != "test")    return false;
 FPM.addPass(TestPass());
                return true;
            });
 }
    };
}`



What was the reason for not registering?
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to