[LLVMdev] Register Machine Pass

17 views
Skip to first unread message

Ryan Taylor

unread,
Jul 14, 2014, 11:39:48 AM7/14/14
to llv...@cs.uiuc.edu
Where is the documentation about registering a machine pass? I'm unable to find it.

I have built a machine function pass similar to the one found in HexagonHardwareLoops.cpp. So I have generated a machine pass.cpp file, modified 'Target'.h and 'Target'TargetMachine.cpp (to add pass via addPass() in the addPreRegAlloc()). All this builds/compiles fine.

When running llc the pass does not get executed.

I seem to be missing some steps? Potentially registration of the machine pass?

Thanks.

Justin Holewinski

unread,
Jul 14, 2014, 12:26:35 PM7/14/14
to ryta...@gmail.com, llv...@cs.uiuc.edu
That should be all you need to do. Are you running in a debugger and
making sure your added addPass() call is actually being executed?
>
>
> Thanks.

-----------------------------------------------------------------------------------
This email message is for the sole use of the intended recipient(s) and may contain
confidential information. Any unauthorized review, use, disclosure or distribution
is prohibited. If you are not the intended recipient, please contact the sender by
reply email and destroy all copies of the original message.
-----------------------------------------------------------------------------------

_______________________________________________
LLVM Developers mailing list
LLV...@cs.uiuc.edu http://llvm.cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

Ryan Taylor

unread,
Jul 14, 2014, 1:04:09 PM7/14/14
to Justin Holewinski, llv...@cs.uiuc.edu
It's not being executed. I'm both trying to print via outs() and add info via STATISTIC, neither is occurring.

Justin Holewinski

unread,
Jul 14, 2014, 1:10:09 PM7/14/14
to ryta...@gmail.com, llv...@cs.uiuc.edu
On Mon, 2014-07-14 at 10:00 -0700, Ryan Taylor wrote:
> It's not being executed. I'm both trying to print via outs() and add
> info via STATISTIC, neither is occurring.

Did you try running in a debugger to make sure addPass() is called? Or
if a debugger is unavailable, putting an outs() statement with the
addPass() call? That would at least rule out addPass() not being
called.

Ryan Taylor

unread,
Jul 14, 2014, 1:31:41 PM7/14/14
to Justin Holewinski, llv...@cs.uiuc.edu
Justin,

 Yes, I had/have this:

bool MyTargetPassConfig::addPreRegAlloc() {
    outs()<<"PreRegAllocPass\n";
    addPass(createMyPass());
    return true;
}

I do not see this being printed.

Rafael Auler

unread,
Jul 14, 2014, 1:34:40 PM7/14/14
to Justin Holewinski, ryta...@gmail.com, llv...@cs.uiuc.edu
Use llc -debug-pass=Structure to check if your pass is included in the back-end pipeline. You should register your pass using the same idiom to register a regular IR pass. Like this:
static RegisterPass<MyMachinePass> X("mypass", "My Machine Pass");

Check http://llvm.org/doxygen/classllvm_1_1TargetPassConfig.html to get an overview of the possible back-end stages where you can insert your pass via the addPrexxx() interface.

Good luck,
Rafael

Ryan Taylor

unread,
Jul 14, 2014, 1:37:02 PM7/14/14
to Rafael Auler, llv...@cs.uiuc.edu
Rafael,

 Ok. Looks like addPreRegAlloc is a valid back-end stage so that should be fine. Also, I'm curious because none of the documentation/code samples I've seen register machine passes this way. For example, HexagonHardwareLoops.

Thanks.
Reply all
Reply to author
Forward
0 new messages