[llvm-dev] Confused on how to do a machinefunction pass

John Criswell via llvm-dev
Tue, 03 Nov 2015 20:52:12 -0000

Dear Fami,

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.

Regarding documentation, have you looked at the following?

http://llvm.org/docs/WritingAnLLVMBackend.html
http://llvm.org/docs/CodeGenerator.html
http://llvm.org/docs/MIRLangRef.html

Regards,

John Criswell

On 11/3/15 3:47 PM, fateme Hoseini via llvm-dev wrote:
> Hi everyone,
> 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.
>
> I have created a folder in: lib/Transform and put my pass in it.
> I am writing a simple pass like this:
>
> using namespace llvm;
>
> namespace {
>     struct analyzer : public MachineFunctionPass {
> static char ID;
> analyzer() : MachineFunctionPass(ID) {}
> virtual bool runOnMachineFunction(MachineFunction &MF) {
> errs() << "hello " ;
> return false;
> }
>   };
> }
> char analyzer::ID = 0;
> static RegisterPass<analyzer> X("analyzer", "WAW
analyzer");
>
> I make it successfully. But when I load it for my test code I get this
> error:
>
> Pass 'WAW analyzer' is not initialized.
> Verify if there is a pass dependency cycle.
> Required Passes:
> 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.
> .....
>
> 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?
>
> Regards,
> Fami
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev


--
John Criswell
Assistant Professor
Department of Computer Science, University of Rochester
http://www.cs.rochester.edu/u/criswell

-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20151103/c7a93071/attachment.html>