parece que la pregunta fue respondida parcialmente, por lo que me gustaría darle un tiro:
lo que se necesitaría para crear un backend VHDL para LLVM?
¿Qué se necesita para traducir LLVM IR a un lenguaje de nivel superior (presumiblemente con la intención de convertir entre las langs de alto nivel)?
te daré algunos antecedentes de 2. Y ampliar en una fecha posterior en 1.
Si desea convertir LLVM IR a un lenguaje de alto nivel como C o Java:
Debería tomar las instrucciones LLVM y abstraerlas en su código C equivalente. Luego necesita tomar las características restantes para las que LLVM no tiene un equivalente (como clases y abstracciones para C++) y escribir una rutina que encontraría esos patrones en el LLVM (como bloques reutilizados) y escribir C. Para las cosas básicas, es bastante sencillo. Pero, simplemente siga la línea de pensamiento y rápidamente se da cuenta de la verdadera dificultad del problema, después de todo, no todos escriben C. Para complicar aún más la dificultad, ¡puede que no obtenga el mismo LLVM IR al compilar la C generada!(Tenga en cuenta el ciclo de retroalimentación resultante)
En cuanto a Java, se enfrentará a una batalla aún más difícil directamente desde LLVM IR, y en ambos casos todavía tendrá el problema de que probablemente no obtenga el mismo código compilando LLVM IR , si uno puede hacer eso. Más bien, traducirías LLVM IR a JVM Bytecode. Entonces podrías usar un compilador inverso para obtener tu Java.
Aparentemente, un grupo de estudiantes chinos pudo hacer esto, pero se preguntaron por qué tan poco interés en su investigación. Diría que es porque no entienden completamente lo que han hecho los chicos de LLVM, y cómo es mejor que la JVM. (De hecho, LLVM podría decir que la JVM es obsoleta;)
Aunque esto parece útil porque se puede usar LLVM como intermediario entre C y Java para convertir bidireccionalmente, esta solución es de hecho de poca utilidad porque le estamos pidiendo al pregunta equivocada. Vea, la razón completa por la que desea que sea práctico es tener una base de código común y aumentar el rendimiento.
Pero el problema real es que necesitamos un lenguaje que haya abstraído las características comunes de los lenguajes modernos, y eso le brinda un lenguaje central desde el cual puede construir. http://julialang.org/ ha respondido la pregunta
¡Ay! Sé de SystemC. ¡Generar código "Silicio" a partir de un código imperativo es muy desafiante! Buena suerte, estoy atentos para ver qué tipo de sugerencias vienen :-) – jdehaan
Sí, VHDL podría ser complicado. Tal vez debería decir que quiero averiguar cómo obtener la generación de código de back-end de LLVM para generar un lenguaje de alto nivel en lugar de un código de ensamblaje para un procesador. Por ejemplo, ¿qué pasaría si quisiera usar LLVM para traducir C a Java o quizás a Fortran? ¿Cómo podría uno hacer eso? – aneccodeal