[LLVMdev] About LLVM switch instruction

Hongbin Zheng etherzhhb at gmail.com
Wed Jul 17 23:11:40 PDT 2013

Hi Milind,

Maybe you could annotate the default case value as metadata to the swith


On Thu, Jul 18, 2013 at 1:09 PM, Milind Chabbi <Milind.Chabbi at rice.edu>wrote:

> Hi Mark,
> This will workaround the problem of "default" branch restriction on
> the switch instruction. The trouble with this technique is that it
> will trump later optimization phases such as constant propagation.
> When a block was part of a case, because of the knowledge of the case
> value, the block was a candidate for better optimization. However,
> when we move the body of the case into the default, the knowledge of
> the case value is lost and the body is less optimizable.
> -Milind
> On Wed, Jul 17, 2013 at 9:29 PM, Mark Lacey <mark.lacey at apple.com> wrote:
> > On Jul 17, 2013, at 9:01 PM, Milind Chabbi <Milind.Chabbi at rice.edu>
> wrote:
> >> I am performing a transformation that requires changing the targets of
> >> a basic block ending with a switch instruction.
> >> In particular, I need to delete the edge that goes to the "default"
> >> basic block.
> >> But, LLVM switch instruction always wants a default target basic block
> >> for a switch instruction.
> >> It is not clear how to accomplish this, since I don't have a
> >> replacement default target block.
> >> I could potentially fake that edge to be one of the other case label
> >> targets, but that is an ugly hack and I don't want to do that.
> >> I would appreciate if you can suggest better alternatives.
> >
> > Hi Milind,
> >
> > 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?
> >
> > Mark
> >
> >
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130718/1db419b8/attachment.html>

More information about the llvm-dev mailing list