[HN Gopher] Building a Compiler with Multi-Level Intermediate Re...
       ___________________________________________________________________
        
       Building a Compiler with Multi-Level Intermediate Representation
       (MLIR) (2020) [pdf]
        
       Author : informalo
       Score  : 102 points
       Date   : 2023-05-02 17:32 UTC (5 hours ago)
        
 (HTM) web link (llvm.org)
 (TXT) w3m dump (llvm.org)
        
       | Q6T46nT668w6i3m wrote:
       | I love MLIR. The modularity and friendly abstractions make it
       | incredibly flexible. I've now used it to write _multiple_ domain-
       | specific optimizations and transformations for some of my recent
       | research! It truly bridges the gap between different devices
       | (CPUs, GPUs, TPUs, etc.). I pray more people adopt it so it
       | doesn't end up abandoned!
        
         | yukIttEft wrote:
         | Sounds very interesting. Could you explain a bit more what you
         | did and why it was easier with MLIR?
        
         | comfypotato wrote:
         | It's so hard to get a complete environment up and running. I
         | had a 700-level project that was ripe for MLIR, and I just
         | couldn't figure out all the tools. I ended up managing with
         | just clang.
         | 
         | 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.
        
           | mathisfun123 wrote:
           | this is quickly getting better
           | 
           | >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...
        
       | bruce343434 wrote:
       | Can this handle undelimited continuations?
        
         | remexre wrote:
         | I thought you could implement those in terms of delimited
         | continuations easily by making your top level the delimiter.
        
           | pmatos wrote:
           | That's something I have thinking about lately. It would be
           | interesting to know if there's any prior work of implementing
           | delimited continuations on MLIR.
        
       | hgrergt wrote:
       | [flagged]
        
       | amir734jj wrote:
       | What is the difference between MLIR and LLVM IR code that we used
       | to?
        
         | erichocean wrote:
         | LLVM IR is just one IR _dialect_ in the MLIR ecosystem, and
         | there are a bunch of (included) higher-level IR dialects that
         | can be transformed (usually, automatically) into the LLVM IR
         | dialect, and from there, the normal LLVM compiler can take over
         | and produce runnable machine code.
         | 
         | 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.
        
           | Findecanor wrote:
           | As I understand it, MLIR is the new subsystem that the LLVM
           | project is transitioning to in the long term, and LLVM IR is
           | the old.
           | 
           | 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.
        
             | mathisfun123 wrote:
             | >As I understand it, MLIR is the new subsystem that the
             | LLVM project is transitioning to in the long term, and LLVM
             | IR is the old.
             | 
             | this is very much not a forgone conclusion and many people
             | in LLVM would boo vociferously at the idea (see last year's
             | LLVM US meeting where Johannes Doerfert actually argued the
             | exact opposite - extending LLVM IR to do some/many of the
             | things that MLIR does).
        
             | comfypotato wrote:
             | In the transition, traditional LLVM IR isn't being left
             | behind. It's simply a later step in the compilation
             | process. All MLIR is (eventually) translated through LLLVM
             | IR before machine code.
        
       | KingLancelot wrote:
       | [dead]
        
       | einpoklum wrote:
       | I say programs are digraphs and any compiler/compiler-ish library
       | which represents them as serialized textual statements (other
       | than as the final backend output) is just doing it all wrong.
        
       ___________________________________________________________________
       (page generated 2023-05-02 23:00 UTC)