[LLVMdev] Inserting a custom switch instruction implementation in backend

Marcello Maggioni marcello at codeplay.com
Sat Sep 21 12:30:22 PDT 2013


I see, the only problem is that I would really enjoy the model of having 
one basic-block with multiple successors in my lowering and to my 
understanding the only terminators that support multiple successors are 
switch and indirectbr. What I would need is really having a single basic 
block with multiple successors that then I can handle in the backend 
(that handles the switch in a very special and custom way for this 
target). Switch of course is the source of my problem and using 
indirectbr to avoid the switch lowering is still a kind of a hack 
(because it is not actually an indirectbr, because I have no address 
involved ...).

The only other way I see is removing the switch and lowering manually to 
a tree of nodes that then I would recognize and remove in the backend, 
but it is not actually very different from what I'm doing just now.

I don't know if there is a cleaner way of handling the switch 
instruction customly in LLVM at the moment ...

Marcello

Il 21/09/2013 17:59, Anton Korobeynikov ha scritto:
> Hello
>
> Probably the easiest way for you is to lower switch instructions via
> IR-to-IR pass in the way you want.
>
> On Sat, Sep 21, 2013 at 3:43 PM, Marcello Maggioni
> <marcello at codeplay.com> wrote:
>> Hi,
>>
>> in implementing a backend for a target we work on, I ended up needing to
>> lower the switch instruction in a very specific way that is quite different
>> from the standard llvm way with the decision trees.
>>
>> The custom implementation wants to get rid of the decision blocks that llvm
>> generates between the actual cases basic blocks and the switch root block.
>> What I do currently is basically deleting these blocks manually and moving
>> all the successors (updating the PHIs) to the switch root block and splicing
>> the instructions in the decision blocks into the switch root block manually
>> and then proceed to the removal of these blocks.
>>
>> This seems to work fine, but is a solution that I not like very much. I
>> would prefer being able to lower the switch instructions in my own way
>> directly instead of having to let llvm do it its own way and "morph" the
>> result into my own.
>>
>> There is a clean way to custom lower the switch instruction in the backend
>> without substituting the entire SelectionDAGBuilder?
>>
>> Cheers,
>> Marcello
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>




More information about the llvm-dev mailing list