是否存在用于转换编译器 IR 指令序列的声明性模式匹配 DSL?
Are there existing declarative pattern matching DSLs for transforming sequences of compiler IR instructions?
最近,我一直在研究 compiler class that has a number of lessons on different optimization passes (dead-code elimination, common-subexpression elimination, etc). The professor (big thank you for making the class videos public) has some highly readable python code 演示各种传递,就像 LLVM 优化传递一样,采用指令序列和 return 另一个优化的指令序列。
问题:不是编写命令式代码来查找和替换特定的指令模式,是否可以使用 common/popular 声明式模式匹配 DSL/function?如果不是,是否有技术原因避免了这种情况?我做了一些挖掘,LLVM 有一些 functions 用于模式匹配,但它似乎更侧重于模式匹配单个指令而不是它们的序列,尽管这可能是我的误读。
我认识的大多数人更愿意使用正则表达式引擎对字符序列进行查找和替换操作,而不是尝试自己编写代码。这既是因为他们编写的代码更少,而且 bug 更难潜入匹配器的实现中。也就是说,我意识到在指令中匹配模式比正则表达式更难class。正则表达式可以分解为确定性有限自动机 (DFA)。因为编译器 IR 感兴趣的模式将取决于特定的目标和参数,所以该语言可能是上下文敏感的语法。
最近,我一直在研究 compiler class that has a number of lessons on different optimization passes (dead-code elimination, common-subexpression elimination, etc). The professor (big thank you for making the class videos public) has some highly readable python code 演示各种传递,就像 LLVM 优化传递一样,采用指令序列和 return 另一个优化的指令序列。
问题:不是编写命令式代码来查找和替换特定的指令模式,是否可以使用 common/popular 声明式模式匹配 DSL/function?如果不是,是否有技术原因避免了这种情况?我做了一些挖掘,LLVM 有一些 functions 用于模式匹配,但它似乎更侧重于模式匹配单个指令而不是它们的序列,尽管这可能是我的误读。
我认识的大多数人更愿意使用正则表达式引擎对字符序列进行查找和替换操作,而不是尝试自己编写代码。这既是因为他们编写的代码更少,而且 bug 更难潜入匹配器的实现中。也就是说,我意识到在指令中匹配模式比正则表达式更难class。正则表达式可以分解为确定性有限自动机 (DFA)。因为编译器 IR 感兴趣的模式将取决于特定的目标和参数,所以该语言可能是上下文敏感的语法。