[LLVMdev] if's to switch transformation?
sabre at nondot.org
Fri Dec 23 10:18:18 CST 2005
On Fri, 23 Dec 2005, Eric van Riet Paap wrote:
> I few days ago I had some code (for the PyPy project) that llc -march=c
> converted to a switch statement and gcc compiled that nicely to a jumptable
> in the .s file. Now I try to reproduce when directly going from a .ll to a .s
> file. But I now see a long list of compare and jumps instead of the
> jumptable. Is there a transformation that does this if->switch(ing) or is
> that in the part of llc that generates the c file?
There is one of two things that are happening depending on what you mean.
1. Make sure you're running gccas/gccld to optimize the program. These
optimizations are what form the switch stmt.
2. If you're using the native backends, even if #1 is right, you won't get
switch tables. The current code generators lower the switches to
branches. This is on the near term (within a couple months) TODO list
to improve, but remains suboptimal for now.
To get the optimization, the best approach is to use gccas/gccld combined
with the C backend.
More information about the LLVMdev