VLIW support

Is there a VLIW support in LLVM? I found this, https://groups.google.com/forum/#!searchin/llvm-dev/VLIW, but it looks like it is not completely implemented. Specifically I’m interested in how instructions are bundled together. I can’t seem to find it anywhere in the source code.

Any help in resolving he issue is appreciated.

Hi Rail,
For the VLIW support, Qualcomm’s Hexagon target is a good reference.

Kun,

Thanks for the reply. I looked at it, but wasn’t able to find where actual instruction bundling takes place, i.e. where exactly in the code they pack instruction into a single bundle. Do you know where it is done? I would really appreciate any pointers.

Thanks.

Is this what you want?

http://llvm.org/docs/doxygen/html/HexagonVLIWPacketizer_8cpp_source.html

Hi Rail,
    For the VLIW support, Qualcomm's Hexagon target is a good reference.
    
     http://llvm.org/devmtg/2013-11/slides/Guerra-VLIW.pdf

The R600 subtarget of the AMDGPU target is also VLIW.

-Tom

Kun,

Thanks for the reply. This is exactly what I have been looking for.

The main apparatus that does that is in DFAPacketizer.cpp. It keeps track of the available resources for the currently built bundle. The HexagonVLIWPacketizer.cpp does a lot, but it's mostly concerned with what instructions can or cannot go together. In essence, it tries to add the next instruction to the bundle currently under construction. If that succeeds, it goes for the next instruction, if it fails, it finalizes the bundle and puts the instruction in a fresh bundle. It repeats this process for each basic block in the function.

-Krzysztof

The main apparatus that does that is in DFAPacketizer.cpp. It keeps track
of the available resources for the currently built bundle. The
HexagonVLIWPacketizer.cpp does a lot, but it's mostly concerned with what
instructions can or cannot go together. In essence, it tries to add the
next instruction to the bundle currently under construction. If that
succeeds, it goes for the next instruction, if it fails, it finalizes the
bundle and puts the instruction in a fresh bundle. It repeats this process
for each basic block in the function.

-Krzysztof

--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted
by The Linux Foundation

_______________________________________________
LLVM Developers mailing list
llvm-dev@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

Krzysztof,

Thanks for the info. I figured as much by looking through the code. Kun
provided a good starting point for me.