  A typical compiler flow relies on a uni-directional sequence of
translation/optimization steps that lower the program abstract representation,
making it hard to preserve higher-level program information across each
transformation step. On the other hand, modern ISA extensions and hardware
accelerators can benefit from the compiler's ability to detect and raise
program idioms to acceleration instructions or optimized library calls.
Although recent works based on Multi-Level IR (MLIR) have been proposed for
code raising, they rely on specialized languages, compiler recompilation, or
in-depth dialect knowledge. This paper presents Source Matching and Rewriting
(SMR), a user-oriented source-code-based approach for MLIR idiom matching and
rewriting that does not require a compiler expert's intervention. SMR uses a
two-phase automaton-based DAG-matching algorithm inspired by early work on
tree-pattern matching. First, the idiom Control-Dependency Graph (CDG) is
matched against the program's CDG to rule out code fragments that do not have a
control-flow structure similar to the desired idiom. Second, candidate code
fragments from the previous phase have their Data-Dependency Graphs (DDGs)
constructed and matched against the idiom DDG. Experimental results show that
SMR can effectively match idioms from Fortran (FIR) and C (CIL) programs while
raising them as BLAS calls to improve performance.
