LLVM: Difference between revisions
(updated to year 2020) |
(fixed nested list) |
||
Line 17: | Line 17: | ||
* {{HackagePackage|id=knead}} provides array processing similar to {{HackagePackage|id=accelerate}} | * {{HackagePackage|id=knead}} provides array processing similar to {{HackagePackage|id=accelerate}} | ||
* Example applications: | * Example applications: | ||
** {{HackagePackage|id=synthesizer-llvm}} provides efficient signal processing using vector instructions, including a live [[Synthesizer|software synthesizer]] | |||
** {{HackagePackage|id=patch-image}} constructs a big image from overlapping parts | |||
An untyped interface mainly intended to write compilers and analyse LLVM bitcode: | An untyped interface mainly intended to write compilers and analyse LLVM bitcode: |
Latest revision as of 11:22, 2 October 2020
LLVM is an abbreviation of "Low Level Virtual Machine"; LLVM is:
- A compilation strategy
- A virtual instruction set
- A compiler infrastructure
It is developed by the University of Illinois. It is implemented on many platforms, amongst others the iPhone.
You can use this from a Haskell program using essentially two bindings:
A strongly typed interface that is mainly intended to accelerate your Haskell programs with low-level code:
- llvm-tf, llvm-ffi
- a darcs repository,
- a blog article with examples,
- the article "A performance update" that describes, how LLVM can improve performance
- llvm-extra provides high-level control structures (
ifThenElse
,whileLoop
,Maybe
), vector instructions, automatic adaption to target specific extensions - knead provides array processing similar to accelerate
- Example applications:
- synthesizer-llvm provides efficient signal processing using vector instructions, including a live software synthesizer
- patch-image constructs a big image from overlapping parts
An untyped interface mainly intended to write compilers and analyse LLVM bitcode: