<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hi Zhoulai<div class=""><br class=""></div><div class="">If you just don’t want any switch statements, then take a look at LowerSwitch.cpp.  I think it will do what you want.</div><div class=""><br class=""></div><div class="">You can also invoke it with ‘opt -lowerswitch ...’.</div><div class=""><br class=""></div><div class="">Thanks,</div><div class="">Pete<br class=""><div><blockquote type="cite" class=""><div class="">On Jul 24, 2015, at 10:46 AM, Zhoulai <<a href="mailto:zell08v@gmail.com" class="">zell08v@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class=""><div class=""><div class="">Hi, <br class=""><br class=""></div>Are there some built-in LLVM transformation pass, or written library code that transforms LLVM::SwitchInst into if-condition statements (LLVM:: BranchInst)?<br class=""><br class="">The purpose of the transformation is that we have a legacy program analyzer that includes an LLVM pass manipulating if-condition statements. Statements of LLVM::SwithchInst should have 
been handled in the same manner but was not done. Thus to transform these SwitchInst to if-condition looks a viable alternative for us.  <br class=""><br class="">To illustrate, I give a simple C snippet with 'switch' and the expected transformation.<br class="">---------------------------------------- <br class=""></div>Original program: <br class=""><br class=""><i class=""> char grade;<br class=""> ...<br class="">  switch(grade)<br class="">    {<br class="">    case 'A' :<br class="">      printf("Excellent!\n" );<br class="">      break;<br class="">    case 'B' :<br class="">      printf("Well done\n" );<br class="">      break;<br class="">  <br class="">    default :<br class="">      printf("Invalid grade\n" );<br class="">    }</i><br class=""><br class=""></div><div class="">may be transformed to something like<br class=""><br class=""></div><div class=""><i class="">if (grad=='A') <br class="">          printf("Excellent!\n" );<br class=""></i></div><div class=""><i class="">else if (grad=='B')<br class="">      printf("Well done\n" );<br class=""></i></div><div class=""><i class="">else <br class="">       printf("Invalid grade\n" );</i></div><div class="">-------------------------------------------------<br class=""></div><div class=""> <br class="">Are you aware of such a transformation pass ? Thanks.<br clear="all" class=""></div><div class=""><div class=""><div class=""><div class=""><div class=""><div class=""><div class=""><div class="gmail_signature">Zhoulai</div></div>
</div>
</div></div></div></div></div></div>
_______________________________________________<br class="">LLVM Developers mailing list<br class=""><a href="mailto:LLVMdev@cs.uiuc.edu" class="">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" class="">http://llvm.cs.uiuc.edu</a><br class=""><a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" class="">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br class=""></div></blockquote></div><br class=""></div></body></html>