Compiler-Ausgabesprache - LLVM IR vs C

8

Welche Vorteile und Nachteile hat die Verwendung von LLVM IR vs C für eine Zielsprache beim Schreiben eines Compilers? Ich weiß, dass beide verwendet werden, und ich stelle mir vor, dass der endgültige Maschinencode ähnlich wäre, wenn ich clang verwenden würde, um das C zu kompilieren. Was also sind andere Dinge zu beachten?

    
Dan 22.04.2012, 02:08
quelle

4 Antworten

7

Ich habe LLVM IR für einige Compiler-Backends verwendet und habe mit Compilern gearbeitet, die C als Backend verwenden. Eine Sache, die ich gefunden habe, die dem LLVM IR einen Vorteil gab, ist, dass es getippt wird. Es ist schwierig, vollständig schlecht geformte Ausgaben zu erzeugen, ohne Fehler von den LLVM-Bibliotheken zu bekommen.

Es ist meiner Meinung nach auch einfacher, eine enge Korrelation zwischen dem Quellcode und dem IR für das Debugging zu halten.

Außerdem erhalten Sie alle coolen LLVM-Befehlszeilenwerkzeuge zur Analyse und Verarbeitung der IR, die Ihr Front-End aussendet.

    
Richard Pennington 22.04.2012, 12:24
quelle
2

LLVM Vorteile:

  1. JIT - Sie können Ihren Code dynamisch kompilieren und ausführen. Sicher ist das gleiche mit C möglich (z. B. mit einem eingebetteten tcc ), aber es ist eine viel weniger robuste und portable Option.
  2. Sie können Ihre eigenen Optimierungs-Pässe über das generierte IR ausführen.
  3. Reflection kostenlos - Überprüfung des generierten Codes ist mit LLVM viel einfacher.
  4. Die LLVM-Bibliothek ist nicht so groß wie die meisten C-Compiler (natürlich nicht mit tcc ).

LLVM Nachteile:

  1. Code ist nicht tragbar, Sie müssen ihn je nach Ziel leicht ändern. Es gibt eine einigermaßen tragbare Untergruppe von LLVM, aber es ist immer noch eine zwielichtige Praxis.
  2. Die Laufzeitabhängigkeit von den C ++ - Bibliotheken ist möglicherweise ein Problem.
SK-logic 23.04.2012 11:43
quelle
1

Ich bezweifle, dass Sie beim Targeting von C die richtige Debugging-Unterstützung für Ihre Sprache implementieren können.

    
arrowd 22.04.2012 13:19
quelle
0

Architekturen und Betriebssysteme, für die es offensichtlich keine CLANG gibt oder für die es sich in einem experimentellen Zustand befindet.

C wird mehr akzeptiert, aber LLVM IR ermöglicht Ihnen, die LLVM-Engine mit einem Löffel zu versorgen. Nicht alle Pfade zu IR sind gleich.

    
Marco van de Voort 22.04.2012 09:51
quelle