実際の問題の1つは、LLVMがはるかに動くターゲットであるということです。
GHCは、LLVMの複数のバージョンをサポートしようとして問題が発生しました。これについては、ghc-devメーリングリストで活発な議論が行われています。
ところで、現在ghcのllvmバックエンドは、Haskellがcmm言語に変換された後です(これはほとんどCであると信じています-STG言語の特定のレジスタで拡張されています)。コンパイルを遅くする冗長な最適化が行われています。
また、歴史的に、そして現在AFAIKでは、LLVMプロジェクトはポータブルプラットフォームの提供を優先しておらず、一部の開発者は、それがコンパイラIRであり、ポータブルアセンブリ言語の形式ではないことを明確に述べています。
ある意図されたターゲットに対して作成したLLVMIRは、別の意図されたターゲットに対してはまったく役に立たない場合があります。比較のために、C--Webサイトは実際にはそれをポータブルアセンブリと呼んでいます。「1つのポータブルアセンブリ言語があればもっと幸せになるでしょう...」は彼らのウェブサイトからの引用です。そのWebサイトには、ガベージコレクションと例外処理の移植可能な実装を容易にするランタイムインターフェイスについても言及されています。
したがって、C--は、CILおよびJavaバイトコードともう少し共通点があるすべてのフロントエンドのポータブル共通グラウンドと考えることができ、LLVM IRは、ローの統合を容易にするすべてのバックエンドの表現力豊かな共通グラウンドと考えることができます。複数のターゲットに共通のレベルの最適化。LLVM IRは、LLVMプロジェクトがこれらの低レベルの最適化の多くを実装するという追加のボーナスも提供します。そうは言っても、いくつかの点で、LLVM IRは実際にはCよりも高いレベルと見なすことができます。たとえば、LLVM IRにはさまざまなタイプがあり、Cの場合と同様にすべてがビットベクトルです。