<div dir="ltr">Hi Marwa,<div><br></div><div>Check out <a href="http://llvm.org/docs/doxygen/html/classllvm_1_1FunctionPassManager.html" target="_blank">FunctionPassManager</a>. You can add passes to an FPM and then run it over a function, which will cause the function to be transformed (you can use <a href="http://llvm.org/docs/doxygen/html/namespacellvm.html#aabb040f50a7e75ad8d58bfc5d95636a4">CloneFunction()</a> if you don't want to modify the original function). I just had to do this to perform loop unrolling on a function, and the resulting code looked something like:</div>

<div><br></div><div><div><font face="courier new, monospace">ValueToValueMapTy vmap;</font></div><div><font face="courier new, monospace">Function* fn_copy = llvm::CloneFunction(fn, vmap, false);</font></div><div><font face="courier new, monospace">FunctionPassManager fn_pass_manager(module);</font></div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">fn_pass_manager.add(createScalarReplAggregatesPass(-1, false));</font></div><div><font face="courier new, monospace">fn_pass_manager.add(createLoopRotatePass());</font></div>

<div><font face="courier new, monospace">fn_pass_manager.add(createLoopUnrollPass());</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">fn_pass_manager.doInitialization();</font></div>

<div><font face="courier new, monospace">bool change = fn_pass_manager.run(fn_copy);</font></div><div><font face="courier new, monospace">fn_pass_manager.doFinalization();</font></div></div><div><font face="courier new, monospace"><br>

</font></div><div><font face="arial, helvetica, sans-serif">You can also write your own passes to be run with the pass manager, see </font><a href="http://llvm.org/docs/WritingAnLLVMPass.html">Writing an LLVM Pass</a>.</div>

<div><br></div><div>Hope that helps,</div><div>Skye</div><div><br></div><div><br></div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Jan 17, 2014 at 10:18 AM, <a href="mailto:marwayusuf@feng.bu.edu.eg">marwayusuf@feng.bu.edu.eg</a> <span dir="ltr"><<a href="mailto:marwayusuf@feng.bu.edu.eg" target="_blank">marwayusuf@feng.bu.edu.eg</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">




<div dir="ltr">
<div name="divtagdefaultwrapper" style="font-size:12pt;margin:0;font-family:Calibri,Arial,Helvetica,sans-serif">
<p>Dear All</p>
<p>Is there a way to call opt tool from within interpreter to transform some function's IR code?</p>
<p>Note: not necessarily opt tool. What I need is to apply some arbitrary transformation on IR and get back the transformed IR for some function.</p>
<p>Thanks in advance.</p>
<div>
<p><br>
</p>
<div><font><span style="font-size:10pt">
<div>Regards,<br>
Marwa Yusuf<br>
Teaching Assistant - Computer Engineering Department<br>
Faculty of Engineering - Benha University<br>
E-JUST MSc Student<br>
Computer Science & Engineering Dept.</div>
</span></font></div>
</div>
</div>
</div>

<br>_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
<br></blockquote></div><br></div>