<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">On 7/10/17 9:57 AM, Gerion Entrup via
      llvm-dev wrote:<br>
    </div>
    <blockquote cite="mid:88222082.tShrEBSz0s@gump" type="cite">
      <pre wrap="">Hello,

I have created a ModulePass, that now needs LoopInfo information.
The ModulePass registration is taken from [1]. I use clang to directly invoke
it (This is also a hard requirement, because I need the fancy output of clang
warnings/remarks).</pre>
    </blockquote>
    <br>
    It's not clear to me what the problem is, but perhaps your pass
    dependencies are creating circular dependencies that the PassManager
    cannot resolve.  This could happen if LoopInfoWrappersPass, or a
    pass upon which LoopInfoWrappersPass depends, is not a pure analysis
    pass (i.e., it does not preserve the results of all other passes).<br>
    <br>
    To that end, you could try making your pass preserve all other
    passes (using addPreserveAll() in your getAnalysisUsage() method) or
    check that LoopInfoWrappersPass and all passes it uses do not
    invalidate any passes.<br>
    <br>
    If that doesn't help, then you'll need to dig deeper (using the
    debugger) to figure out why the PassManager is hitting the
    assertion.  Using -debug-pass=structure may help.  Tracing back
    through the control flow using the debugger may also provide some
    insight.<br>
    <br>
    Sorry I can't be more helpful.<br>
    <br>
    Regards,<br>
    <br>
    John Criswell<br>
    <br>
    <br>
    <blockquote cite="mid:88222082.tShrEBSz0s@gump" type="cite">
      <pre wrap="">
The problem is, that the dependency to the LoopInfoWrapperPass does not seem
to work. The error is:
--- snip ---
clang-4.0: /var/tmp/portage/sys-devel/llvm-4.0.1/work/llvm-4.0.1.src/include/llvm/PassAnalysisSupport.h:236:
AnalysisType& llvm::Pass::getAnalysisID(llvm::AnalysisID) const [with AnalysisType = llvm::LoopInfoWrapperPass; llvm::AnalysisID = const void*]:
Assertion `ResultPass && "getAnalysis*() called on an analysis that was not " "'required' by pass!"' failed.
--- /snip ---

The minimal code, that triggers the error is:
--------- snip ---------
#include "llvm/Support/raw_ostream.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/LegacyPassManager.h"
#include "llvm/IR/Module.h"
#include "llvm/Support/Debug.h"
#include "llvm/Transforms/IPO/PassManagerBuilder.h"
#include "llvm/Analysis/LoopInfo.h"

using namespace llvm;

namespace {
        struct SkeletonPass : public ModulePass {
                static char ID;
                SkeletonPass() : ModulePass(ID) { }

                virtual bool runOnModule(Module &M) override {
                        errs() << "In module called: " << M.getName() << "!\n";
                        LoopInfo& li = getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
                        return false;
                }

                virtual void getAnalysisUsage(AnalysisUsage& au) const override {
                        au.setPreservesCFG();
                        au.addRequired<LoopInfoWrapperPass>();
                }
    };
}

char SkeletonPass::ID = 0;

//Automatically enable the pass.
//<a class="moz-txt-link-freetext" href="http://adriansampson.net/blog/clangpass.html">http://adriansampson.net/blog/clangpass.html</a>
static void registerSkeletonPass(const PassManagerBuilder &,
                     legacy::PassManagerBase &PM) {
        PM.add(new SkeletonPass());
}

static RegisterStandardPasses
        RegisterMyPass(PassManagerBuilder::EP_ModuleOptimizerEarly, registerSkeletonPass);

static RegisterStandardPasses
        RegisterMyPass0(PassManagerBuilder::EP_EnabledOnOptLevel0, registerSkeletonPass);
-------- /snip------
Invocation per:
clang -Xclang -load -Xclang /path/to/llvm-pass-skeleton/build/skeleton/libSkeletonPass.so -g test.c
I use clang 4.0.1.

Can someone give me an advice, how to fix this and use the LoopInfo?

Gerion

[1] <a class="moz-txt-link-freetext" href="https://github.com/sampsyo/llvm-pass-skeleton/issues/7">https://github.com/sampsyo/llvm-pass-skeleton/issues/7</a>
_______________________________________________
LLVM Developers mailing list
<a class="moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>
<a class="moz-txt-link-freetext" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a>
</pre>
    </blockquote>
    <br>
    <p><br>
    </p>
    <pre class="moz-signature" cols="72">-- 
John Criswell
Assistant Professor
Department of Computer Science, University of Rochester
<a class="moz-txt-link-freetext" href="http://www.cs.rochester.edu/u/criswell">http://www.cs.rochester.edu/u/criswell</a></pre>
  </body>
</html>