<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">Dear Fami,<br>
<br>
A MachineFunctionPass is run by the code generator, so you can
only use it in tools like llc, clang, and libLTO. The opt program
only manipulates LLVM IR and therefore does not run
MachineFunctionPass'es.<br>
<br>
Regarding documentation, have you looked at the following?<br>
<br>
<a class="moz-txt-link-freetext" href="http://llvm.org/docs/WritingAnLLVMBackend.html">http://llvm.org/docs/WritingAnLLVMBackend.html</a><br>
<a class="moz-txt-link-freetext" href="http://llvm.org/docs/CodeGenerator.html">http://llvm.org/docs/CodeGenerator.html</a><br>
<a class="moz-txt-link-freetext" href="http://llvm.org/docs/MIRLangRef.html">http://llvm.org/docs/MIRLangRef.html</a><br>
<br>
Regards,<br>
<br>
John Criswell<br>
<br>
On 11/3/15 3:47 PM, fateme Hoseini via llvm-dev wrote:<br>
</div>
<blockquote
cite="mid:CAOQsd8Y-rfTJTg5NV0JLo_9x5UbSr6e-oa6hmxHztHz9AF3=GA@mail.gmail.com"
type="cite">
<meta http-equiv="Context-Type" content="text/html; charset=UTF-8">
<div dir="ltr">
<div>Hi everyone,</div>
<div>I am a LLVM newbie. I need to write a machinefunction pass
for my project. This should be an analyzer of the machine code
to do some profiling. I have written a couple of function
passes for front end, but it seems they are completely
different. I searched through forum and llvm documents, but
couldn't find anything useful or questions were unanswered.
Can anyone reference me to any material on how to do that or
help me with my roblem.</div>
<div><br>
</div>
<div>I have created a folder in: lib/Transform and put my pass
in it.</div>
<div>I am writing a simple pass like this:</div>
<div><br>
</div>
<div>using namespace llvm;</div>
<div><br>
</div>
<div>namespace {</div>
<div><span class=""> </span></div>
<div> struct analyzer : public MachineFunctionPass {</div>
<div><span class=""> </span>static char ID; </div>
<div><span class=""> </span>analyzer() :
MachineFunctionPass(ID) {}<span class=""> </span> <span
class=""> </span></div>
<div><span class=""> </span></div>
<div><span class=""> </span>virtual bool
runOnMachineFunction(MachineFunction &MF) {<span class="">
</span></div>
<div><span class=""> </span>errs() << "hello " ;</div>
<div><span class=""> </span></div>
<div><span class=""> </span>return false;<span class=""> </span></div>
<div><span class=""> </span>}</div>
<div> };</div>
<div>}</div>
<div>char analyzer::ID = 0;</div>
<div>static RegisterPass<analyzer> X("analyzer", "WAW
analyzer");</div>
<div><br>
</div>
<div>I make it successfully. But when I load it for my test code
I get this error:</div>
<div><br>
</div>
<div>
<div>Pass 'WAW analyzer' is not initialized.</div>
<div>Verify if there is a pass dependency cycle.</div>
<div>Required Passes:</div>
<div>opt: /llvm/llvm-3.7/lib/IR/LegacyPassManager.cpp:635:
void llvm::PMTopLevelManager::schedulePass(llvm::Pass*):
Assertion `PI && "Expected required passes to be
initialized"' failed.</div>
<div>.....</div>
</div>
<div><br>
</div>
<div>I don't know how to solve it? Do we have to run
machinefunction passes with OPT command? Is this correct to
put machinefunction pass in an external folder or do we have
to change some llvm built-in files? </div>
<div><br>
</div>
<div>Regards,<br>
</div>
<div>Fami</div>
<div><br>
</div>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
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>
<br>
<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>