Take a look at mlir. It's a very novel and powerful abstraction that can be used and applied in very creative ways to solve problems that require translation from source syntax to some target(s) (machine, api, a mix).
tensorflow is the biggest user of mlir so far. The project recently moved to llvm repo to be used by other llvm sub projects and because it's the natural place for it to live.
for example, c/c++ -> mlir -> llvm ir can allow many optimizations that cannot be possibly done at llvm ir level given that it would have lost a lot of context from its original source(the language syntax).
you don't need to limit yourself to c/c++. It can be used for various other reasons.
As for c/c++ specifically, you can optimize much better and safer if you have 1 or more intermediate dialects prior to llvm's IR. You don't need to believe it. This is compiler 101.
Take a look at mlir. It's a very novel and powerful abstraction that can be used and applied in very creative ways to solve problems that require translation from source syntax to some target(s) (machine, api, a mix).
tensorflow is the biggest user of mlir so far. The project recently moved to llvm repo to be used by other llvm sub projects and because it's the natural place for it to live.
for example, c/c++ -> mlir -> llvm ir can allow many optimizations that cannot be possibly done at llvm ir level given that it would have lost a lot of context from its original source(the language syntax).