Much of MLIR requires compiling from source, from what I can tell, and I just could’ve figure out exactly what to build so that I had access to all of the tool chain from clang to MLIR.
>Much of MLIR requires compiling from source, from what I can tell
you can get apt packages from https://apt.llvm.org/ and build projects out of tree. you can also get packages from conda (https://github.com/conda-forge/mlir-feedstock). finally, if you look around on github you'll find tarred up releases too maintained by downstream users (e.g.https://github.com/ptillet/triton-llvm-releases).
you can also (as of very recently) build mlir-opt plugins just like for clang:
https://github.com/llvm/llvm-project/tree/main/mlir/examples...
Your own languages can target the higher-level IR dialects in MLIR, or directly target the LLVM IR dialect, or both: MLIR is unique in that multiple IR dialects are allowed to be "live" at any time in the compiler, there are no strict "phases" where one IR is lowered, one-shot, into a lower-lever IR, like most compilers require (and compiler books teach).
MLIR is a really, really neat bit of technology.
As such, LLVM IR isn't a proper subset of MLIR. Rather, there is a LLVM "dialect" in the MLIR system which can be translated 1:1 to LLVM IR.
MLIR in its structure and textual syntax is a bit different. A "dialect" is more like a namespace for your ops than a different language, in my view.