<div dir="ltr"><div dir="ltr"><div class="gmail-markdown-here-wrapper"><p style="margin:0px 0px 1.2em">Hi all,</p><p style="margin:0px 0px 1.2em"><br>I tried to have a LoopInfo object in a function pass, and add addRequired<span> in getAnalysisUsage, and then use getAnalysis<span> in runOnFunction(). It worked OK.<br>Now I want to have a module pass to traverse the functions, and similarly, I want to have to loop information of the functions.<br>When I did the above in runOnModule, and build the module pass, the following error popped out, and the compile did not succeed:</span></span></p>
<pre style="font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;background-color:rgb(248,248,248);white-space:pre;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em 0.7em;display:block">[ 50%] Building CXX object src/CMakeFiles/SkeletonPass.dir/Skeleton.cpp.o
/home/**/Desktop/skeleton/src/Skeleton.cpp: In member function ‘virtual bool llvm::SkeletonPass::runOnModule(llvm::Module&)’:
/home/**/Desktop/skeleton/src/Skeleton.cpp:47:43: error: no matching function for call to ‘llvm::SkeletonPass::getAnalysis(llvm::Function*&)’
     LoopInfo &LI = getAnalysis<LoopInfo>(F);

...
home/**/Work/llvm-6.0.1.src/include/llvm/PassAnalysisSupport.h: In instantiation of ‘llvm::AnalysisUsage& llvm::AnalysisUsage::addRequired() [with PassClass = llvm::LoopInfo]’:
/home/**/Desktop/skeleton/src/Skeleton.cpp:24:38:   required from here
/home/**/Work/llvm-6.0.1.src/include/llvm/PassAnalysisSupport.h:67:39: error: ‘ID’ is not a member of ‘llvm::LoopInfo’
     return addRequiredID(PassClass::ID);
                                       ^
</code></pre><p style="margin:0px 0px 1.2em">Here is my source code:<span style="font-size:0.85em;background-color:rgb(248,248,248);color:rgb(51,51,51);font-family:Consolas,Inconsolata,Courier,monospace;white-space:pre">      </span></p><pre style="font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px"><code class="gmail-hljs gmail-language-cpp" style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;white-space:pre;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em;color:rgb(51,51,51);background:rgb(248,248,248);display:block">#include "llvm/Pass.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/Module.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/IR/Dominators.h"
#include "llvm/Analysis/LoopInfo.h"

namespace llvm
{
    class SkeletonPass : public ModulePass
    {
    public:
        static char ID;
        SkeletonPass() : ModulePass(ID) {}
        bool runOnModule(Module &M) override;
        virtual StringRef getPassName() const override
        {
            return "Skeleton";
        }
        virtual void getAnalysisUsage(AnalysisUsage &AU) const override {
            errs() << "get analysis usage method.\n";
            AU.addRequired<LoopInfo>();
        }
    };

    Pass *createSkeletonPass()
    {
        return new SkeletonPass();
    }

    char SkeletonPass::ID = 0;
    Pass *createSkeletonPass();
    void initializeSkeletonPass(PassRegistry &Registry);


} // namespace llvm

using namespace llvm;
using namespace std;


bool SkeletonPass::runOnModule(llvm::Module &M){
    errs() << "=============start=============\n";
    auto F = M.getFunction("main");
    LoopInfo &LI = getAnalysis<LoopInfo>(F);

    LI.print(errs());
    errs() << "==========================\n";
}

static RegisterPass<SkeletonPass> X("run", "Hello world pass", false, false);</code></pre><p style="margin:0px 0px 1.2em">The version of LLVM is 6.0.1, can anyone tell me the correct way to handle this in a module pass? Thanks a lot!</p>
<p style="margin:0px 0px 1.2em">Best,<br>Liu</p>
<div title="MDH:PGRpdiBkaXI9Imx0ciI+PGRpdiBkaXI9Imx0ciI+PGRpdiBkaXI9Imx0ciI+PGRpdiBkaXI9Imx0
ciI+PGRpdiBkaXI9Imx0ciI+SGkgYWxsLDxkaXY+PGJyPjwvZGl2PjxkaXY+PGRpdj5JIHRyaWVk
IHRvIGhhdmUgYSBMb29wSW5mbyBvYmplY3QgaW4gYSBmdW5jdGlvbiBwYXNzLCBhbmQgYWRkIGFk
ZFJlcXVpcmVkJmx0O0xvb3BJbmZvJmd0OyBpbiBnZXRBbmFseXNpc1VzYWdlLCBhbmQgdGhlbiB1
c2UgZ2V0QW5hbHlzaXMmbHQ7TG9vcEluZm8mZ3Q7IGluIHJ1bk9uRnVuY3Rpb24oKS4gSXQgd29y
a2VkIE9LLjwvZGl2PjxkaXY+Tm93IEkgd2FudCB0byBoYXZlIGEgbW9kdWxlIHBhc3MgdG8gdHJh
dmVyc2UgdGhlIGZ1bmN0aW9ucywgYW5kIHNpbWlsYXJseSwgSSB3YW50IHRvIGhhdmUgdG8gbG9v
cCBpbmZvcm1hdGlvbiBvZiB0aGUgZnVuY3Rpb25zLiZuYnNwOzwvZGl2PjxkaXY+V2hlbiBJIGRp
ZCB0aGUgYWJvdmUgaW4gcnVuT25Nb2R1bGUsIGFuZCBidWlsZCB0aGUgbW9kdWxlIHBhc3MsIHRo
ZSBmb2xsb3dpbmcgZXJyb3IgcG9wcGVkIG91dCwgYW5kIHRoZSBjb21waWxlIGRpZCBub3Qgc3Vj
Y2VlZDo8L2Rpdj48L2Rpdj48ZGl2PmBgYDwvZGl2PjxkaXY+PGRpdj5bIDUwJV0gQnVpbGRpbmcg
Q1hYIG9iamVjdCBzcmMvQ01ha2VGaWxlcy9Ta2VsZXRvblBhc3MuPHdicj5kaXIvU2tlbGV0b24u
Y3BwLm88L2Rpdj48ZGl2Pi9ob21lLyoqL0Rlc2t0b3Avc2tlbGV0b24vc3JjLzx3YnI+U2tlbGV0
b24uY3BwOiBJbiBtZW1iZXIgZnVuY3Rpb24g4oCYdmlydHVhbCBib29sIGxsdm06OlNrZWxldG9u
UGFzczo6PHdicj5ydW5Pbk1vZHVsZShsbHZtOjpNb2R1bGUmYW1wOynigJk6PC9kaXY+PGRpdj4v
aG9tZS8qKi9EZXNrdG9wL3NrZWxldG9uL3NyYy88d2JyPlNrZWxldG9uLmNwcDo0Nzo0MzogZXJy
b3I6IG5vIG1hdGNoaW5nIGZ1bmN0aW9uIGZvciBjYWxsIHRvIOKAmGxsdm06OlNrZWxldG9uUGFz
czo6PHdicj5nZXRBbmFseXNpcyhsbHZtOjpGdW5jdGlvbiomYW1wOynigJk8L2Rpdj48ZGl2PiZu
YnNwOyAmbmJzcDsgJm5ic3A7TG9vcEluZm8gJmFtcDtMSSA9IGdldEFuYWx5c2lzJmx0O0xvb3BJ
bmZvJmd0OyhGKTs8L2Rpdj48L2Rpdj48ZGl2Pi4uLjwvZGl2PjxkaXY+PGRpdj5ob21lLyoqL1dv
cmsvbGx2bS02LjAuMS5zcmMvPHdicj5pbmNsdWRlL2xsdm0vPHdicj5QYXNzQW5hbHlzaXNTdXBw
b3J0Lmg6IEluIGluc3RhbnRpYXRpb24gb2Yg4oCYbGx2bTo6QW5hbHlzaXNVc2FnZSZhbXA7IGxs
dm06OkFuYWx5c2lzVXNhZ2U6Ojx3YnI+YWRkUmVxdWlyZWQoKSBbd2l0aCBQYXNzQ2xhc3MgPSBs
bHZtOjpMb29wSW5mb13igJk6PC9kaXY+PGRpdj4vaG9tZS8qKi9EZXNrdG9wL3NrZWxldG9uL3Ny
Yy88d2JyPlNrZWxldG9uLmNwcDoyNDozODombmJzcDsgJm5ic3A7cmVxdWlyZWQgZnJvbSBoZXJl
PC9kaXY+PGRpdj4vaG9tZS8qKi9Xb3JrL2xsdm0tNi4wLjEuc3JjLzx3YnI+aW5jbHVkZS9sbHZt
Lzx3YnI+UGFzc0FuYWx5c2lzU3VwcG9ydC5oOjY3OjM5OiBlcnJvcjog4oCYSUTigJkgaXMgbm90
IGEgbWVtYmVyIG9mIOKAmGxsdm06Okxvb3BJbmZv4oCZPC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7
ICZuYnNwO3JldHVybiBhZGRSZXF1aXJlZElEKFBhc3NDbGFzczo6SUQpOzwvZGl2PjxkaXY+Jm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwO148L2Rpdj48L2Rpdj48ZGl2PmBgYDwvZGl2PjxkaXY+PGJy
PjwvZGl2PjxkaXY+SGVyZSBpcyBteSBzb3VyY2UgY29kZTo8L2Rpdj48ZGl2PjxzcGFuIHN0eWxl
PSJjb2xvcjogcmdiKDAsIDAsIDApOyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7Ij48YnI+PC9zcGFu
PjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IHdoaXRlLXNwYWNl
OiBwcmUtd3JhcDsiPmBgYGNwcDwvc3Bhbj48L2Rpdj48ZGl2Pjxmb250IGNvbG9yPSIjMDAwMDAw
Ij48c3BhbiBzdHlsZT0id2hpdGUtc3BhY2U6IHByZS13cmFwOyI+I2luY2x1ZGUgImxsdm0vUGFz
cy5oIgojaW5jbHVkZSAibGx2bS9JUi9GdW5jdGlvbi5oIgojaW5jbHVkZSAibGx2bS9JUi9Nb2R1
bGUuaCIKI2luY2x1ZGUgImxsdm0vU3VwcG9ydC9yYXdfb3N0cmVhbS5oIgojaW5jbHVkZSAibGx2
bS9JUi9Eb21pbmF0b3JzLmgiCiNpbmNsdWRlICJsbHZtL1RyYW5zZm9ybXMvSVBPL1Bhc3NNYW5h
Z2VyQnVpbGRlci5oIgojaW5jbHVkZSAibGx2bS9BbmFseXNpcy9Mb29wSW5mby5oIgoKbmFtZXNw
YWNlIGxsdm0KewogICAgY2xhc3MgU2tlbGV0b25QYXNzIDogcHVibGljIE1vZHVsZVBhc3MKICAg
IHsKICAgIHB1YmxpYzoKICAgICAgICBzdGF0aWMgY2hhciBJRDsKICAgICAgICBTa2VsZXRvblBh
c3MoKSA6IE1vZHVsZVBhc3MoSUQpIHt9CiAgICAgICAgYm9vbCBydW5Pbk1vZHVsZShNb2R1bGUg
JmFtcDtNKSBvdmVycmlkZTsKICAgICAgICB2aXJ0dWFsIFN0cmluZ1JlZiBnZXRQYXNzTmFtZSgp
IGNvbnN0IG92ZXJyaWRlCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gIlNrZWxldG9uIjsK
ICAgICAgICB9CiAgICAgICAgdmlydHVhbCB2b2lkIGdldEFuYWx5c2lzVXNhZ2UoQW5hbHlzaXNV
c2FnZSAmYW1wO0FVKSBjb25zdCBvdmVycmlkZSB7CiAgICAgICAgICAgIGVycnMoKSAmbHQ7Jmx0
OyAiZ2V0IGFuYWx5c2lzIHVzYWdlIG1ldGhvZC5cbiI7CiAgICAgICAgICAgIEFVLmFkZFJlcXVp
cmVkJmx0O0xvb3BJbmZvJmd0OygpOwogICAgICAgIH0KICAgIH07CiAgICBQYXNzICpjcmVhdGVT
a2VsZXRvblBhc3MoKQogICAgewogICAgICAgIHJldHVybiBuZXcgU2tlbGV0b25QYXNzKCk7CiAg
ICB9CiAgICBjaGFyIFNrZWxldG9uUGFzczo6SUQgPSAwOwogICAgUGFzcyAqY3JlYXRlU2tlbGV0
b25QYXNzKCk7CiAgICB2b2lkIGluaXRpYWxpemVTa2VsZXRvblBhc3MoUGFzc1JlZ2lzdHJ5ICZh
bXA7UmVnaXN0cnkpOwp9IC8vIG5hbWVzcGFjZSBsbHZtCgp1c2luZyBuYW1lc3BhY2UgbGx2bTs8
YnI+PC9zcGFuPjwvZm9udD48L2Rpdj48ZGl2Pjxmb250IGNvbG9yPSIjMDAwMDAwIj48c3BhbiBz
dHlsZT0id2hpdGUtc3BhY2U6IHByZS13cmFwOyI+Ym9vbCBTa2VsZXRvblBhc3M6OnJ1bk9uTW9k
dWxlKGxsdm06Ok1vZHVsZSAmYW1wO00pewogICAgZXJycygpICZsdDsmbHQ7ICI9PT09PT09PT09
PT09c3RhcnQ9PT09PT09PT09PT09XG4iOwogICAgYXV0byBGID0gTS5nZXRGdW5jdGlvbigibWFp
biIpOwogICAgTG9vcEluZm8gJmFtcDtMSSA9IGdldEFuYWx5c2lzJmx0O0xvb3BJbmZvJmd0OyhG
KTsKCiAgICBMSS5wcmludChlcnJzKCkpOwogICAgZXJycygpICZsdDsmbHQ7ICI9PT09PT09PT09
PT09PT09PT09PT09PT09PVxuIjsKfQpzdGF0aWMgUmVnaXN0ZXJQYXNzJmx0O1NrZWxldG9uUGFz
cyZndDsgWCgicnVuIiwgIkhlbGxvIHdvcmxkIHBhc3MiLCBmYWxzZSwgZmFsc2UpOzwvc3Bhbj48
L2ZvbnQ+PGJyPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IHdo
aXRlLXNwYWNlOiBwcmUtd3JhcDsiPmBgYDwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJj
b2xvcjogcmdiKDAsIDAsIDApOyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7Ij48YnI+PC9zcGFuPjwv
ZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IHdoaXRlLXNwYWNlOiBw
cmUtd3JhcDsiPlRoZSB2ZXJzaW9uIG9mIExMVk0gaXMgNi4wLjEsIGNhbiBhbnlvbmUgdGVsbCBt
ZSB0aGUgY29ycmVjdCB3YXkgdG8gaGFuZGxlIHRoaXMgaW4gYSBtb2R1bGUgcGFzcz8gVGhhbmtz
IGEgbG90ITwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgd2hpdGUtc3Bh
Y2U6IHByZS13cmFwOyI+PGJyPjwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjog
cmdiKDAsIDAsIDApOyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7Ij48YnI+PC9zcGFuPjwvZGl2Pjxk
aXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IHdoaXRlLXNwYWNlOiBwcmUtd3Jh
cDsiPkJlc3QsPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwg
MCk7IHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsiPkxpdTwvc3Bhbj48L2Rpdj48L2Rpdj48L2Rpdj48
L2Rpdj48L2Rpdj48L2Rpdj4=" style="height:0px;width:0px;max-height:0px;max-width:0px;overflow:hidden;font-size:0em;padding:0px;margin:0px"></div></div></div></div>