<div dir="ltr">Hi <span style="font-family:arial,sans-serif;font-size:13px">Milind,</span><div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">Maybe you could annotate the default case value as metadata to the swith instruction.</span></div>
<div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><font face="arial, sans-serif">Thanks</font></div><div><font face="arial, sans-serif">Hongbin</font></div></div><div class="gmail_extra">
<br><br><div class="gmail_quote">On Thu, Jul 18, 2013 at 1:09 PM, Milind Chabbi <span dir="ltr"><<a href="mailto:Milind.Chabbi@rice.edu" target="_blank">Milind.Chabbi@rice.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Mark,<br>
<br>
This will workaround the problem of "default" branch restriction on<br>
the switch instruction. The trouble with this technique is that it<br>
will trump later optimization phases such as constant propagation.<br>
When a block was part of a case, because of the knowledge of the case<br>
value, the block was a candidate for better optimization. However,<br>
when we move the body of the case into the default, the knowledge of<br>
the case value is lost and the body is less optimizable.<br>
<span class="HOEnZb"><font color="#888888"><br>
-Milind<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
On Wed, Jul 17, 2013 at 9:29 PM, Mark Lacey <<a href="mailto:mark.lacey@apple.com">mark.lacey@apple.com</a>> wrote:<br>
> On Jul 17, 2013, at 9:01 PM, Milind Chabbi <<a href="mailto:Milind.Chabbi@rice.edu">Milind.Chabbi@rice.edu</a>> wrote:<br>
>> I am performing a transformation that requires changing the targets of<br>
>> a basic block ending with a switch instruction.<br>
>> In particular, I need to delete the edge that goes to the "default"<br>
>> basic block.<br>
>> But, LLVM switch instruction always wants a default target basic block<br>
>> for a switch instruction.<br>
>> It is not clear how to accomplish this, since I don't have a<br>
>> replacement default target block.<br>
>> I could potentially fake that edge to be one of the other case label<br>
>> targets, but that is an ugly hack and I don't want to do that.<br>
>> I would appreciate if you can suggest better alternatives.<br>
><br>
> Hi Milind,<br>
><br>
> If you make the "default" branch to a block that has an UnreachableInst as a terminator, the SimplifyCFG pass will remove one of the switch cases and replace the block that the default branches to with the block that this removed case branches to. This sounds a lot like the "ugly hack" that you would like to avoid. Would it be a reasonable solution for what you are trying to accomplish?<br>

><br>
> Mark<br>
><br>
><br>
<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>
</div></div></blockquote></div><br></div>