Hi Ray,
Software languages that support a GOTO function generally rely on the fact that their execution uses an instruction pointer to identify which instruction is operating at each point in time. On the other hand, XLS aims to compile down to hardware - and there's no way to directly "jump" to a different branch of execution in hardware, since that would involve dynamically changing how the wires connect. You can emulate this - which is what a CPU does! - but a GOTO function isn't really a natural fit for hardware itself, it's more of a fit for languages that execute on general-purpose hardware.
Hardware does have a more natural concept of branching logic that can be used, though! In XLS, we implement branching logic via selects, which use one value (the selector) to choose from between multiple possible output values (the cases). Any frontend that aims to convert LLVM IR (a control-flow-oriented language) into XLS (a data-flow-oriented language) would probably need to convert between these paradigms, translating the logic of how the data is transformed by the LLVM IR, rather than directly converting the LLVM IR itself. This sort of thing might be possible, but is likely to be quite tricky!
Since you mention you're using LLVM2C, I assume you've been experimenting with XLS[cc]! This is a contributed (which is why it lives in the "contrib" folder) semi-experimental frontend that converts a subset of C++ (sometimes called synthesizable C++) to XLS IR. It does exactly what I mentioned in the previous paragraph, converting the control flow of synthesizable C++ into the data flow of XLS IR; however, it isn't capable of doing everything. In fact, GOTOs can be used in so many different ways, expressing so many different kinds of data flow, that it would likely be pretty difficult to support them in this model.
Sorry I can't offer an easy solution, but I hope this information helps!
Best,
- Eric